AWS Bedrock实现JSON值翻译:适配模型与提示词优化咨询
AWS Bedrock实现JSON值跨语言翻译的优化方案
一、更换适配的基础模型
Amazon Titan Text Lite对结构化JSON的处理能力有限,推荐切换到Bedrock上支持结构化输出更稳定的模型:
- Anthropic Claude 3系列(Sonnet/Haiku):对复杂JSON Schema的兼容性好,擅长遵循严格的格式要求
- OpenAI GPT-4 Turbo:和ChatGPT Playground效果一致,能精准处理JSON翻译需求
切换到Claude 3 Haiku的代码示例
import { BedrockRuntimeClient, InvokeModelCommand } from "@aws-sdk/client-bedrock-runtime"; const client = new BedrockRuntimeClient({ region: "us-west-2" }); const jsonInput = { hello: "world", count: 3, isEnabled: true }; const langFrom = "english"; const langTo = "italian"; // 优化后的提示词 const prompt = ` 你需要完成JSON对象的跨语言翻译任务,规则如下: 1. 严格保留所有JSON键名和原有结构,包括嵌套层级、数组、数字/布尔值类型 2. 仅翻译字符串类型的值,从${langFrom}翻译到${langTo},数字、布尔值保持原样 3. 输出仅包含最终的JSON对象,不要添加任何解释、说明或额外字符 示例: 输入:{"greeting": "Hello", "count": 5, "isActive": true} 翻译为意大利语输出:{"greeting": "Ciao", "count": 5, "isActive": true} 现在处理输入:${JSON.stringify(jsonInput)} `; const input = { modelId: "anthropic.claude-3-haiku-20240307-v1:0", contentType: "application/json", accept: "application/json", body: JSON.stringify({ anthropic_version: "bedrock-2023-05-31", max_tokens: 1024, messages: [ { role: "user", content: [{ type: "text", text: prompt }] } ] }) }; (async () => { const command = new InvokeModelCommand(input); const resp = await client.send(command); const decodedResponseBody = JSON.parse(new TextDecoder().decode(resp.body)); const resultText = decodedResponseBody.content[0].text; console.log(resultText); })();
二、优化提示词(适配原有模型或新模型)
如果暂时不想切换模型,可通过更精准的提示词提升稳定性:
- 明确区分值的类型:强调仅翻译字符串值,数字、布尔、null等类型保持不变
- 加入具体示例,强化模型对规则的理解
- 强制要求输出纯JSON,禁止任何额外内容
优化后的提示词模板
请处理以下JSON对象的翻译任务: 1. 完全保留JSON的键名、结构、非字符串类型的值(数字、布尔值、null、数组、嵌套对象) 2. 仅将所有字符串类型的值从${langFrom}翻译为${langTo} 3. 输出只能是符合格式的JSON,不允许添加任何解释、注释或其他文字 输入JSON:${JSON.stringify(jsonInput)} 输出:
关键注意事项
- 使用支持结构化输出的模型时,可在请求中添加
response_format: { type: "json_object" }(如GPT-4 Turbo),进一步强制JSON格式输出 - 避免在提示词中使用模糊表述,所有规则必须清晰、可执行
内容的提问来源于stack exchange,提问作者koalaok
相关产品推荐
相关产品推荐

