如何在AWS Bedrock中通过代码向Claude发送txt附件?
问题描述
我已在AWS Bedrock聊天界面测试并确认Prompt效果符合预期,现尝试将其转为代码实现,但不清楚如何在请求中附加txt文档。我在聊天界面可通过回形针图标将文件添加到文本框,但使用@aws-sdk/client-bedrock-runtime包时,尝试将文件内容作为消息发送,输出结果与界面完全不同。我已查阅文档、咨询多个LLM均未解决,恳请帮助。
现有代码
const client = new BedrockRuntimeClient({ region: "us-east-1", }); const data = await client.send( new InvokeModelCommand({ modelId: "anthropic.claude-3-5-sonnet-20240620-v1:0", contentType: "application/json", accept: "application/json", body: JSON.stringify({ anthropic_version: "bedrock-2023-05-31", max_tokens: 10000, temperature: 1.0, messages: [ { role: "user", content: "My prompt", }, ], }), }) );
解决方案
- 针对Claude 3.5 Sonnet模型,需使用多模态消息结构传递文件内容,不能直接将文件内容拼接为纯文本。修正后的实现步骤:
- 读取本地txt文件的文本内容
- 在
messages[0].content中用数组结构拆分提示文本与文件内容块
const fs = require('fs').promises; const { BedrockRuntimeClient, InvokeModelCommand } = require("@aws-sdk/client-bedrock-runtime"); const client = new BedrockRuntimeClient({ region: "us-east-1" }); async function invokeModelWithFile() { // 读取目标txt文件内容 const fileContent = await fs.readFile('./your-target-file.txt', 'utf8'); const data = await client.send( new InvokeModelCommand({ modelId: "anthropic.claude-3-5-sonnet-20240620-v1:0", contentType: "application/json", accept: "application/json", body: JSON.stringify({ anthropic_version: "bedrock-2023-05-31", max_tokens: 10000, temperature: 1.0, messages: [ { role: "user", content: [ { type: "text", text: "请处理以下txt文件内容:" // 替换为你的实际提示词 }, { type: "text", text: fileContent } ] } ] }), }) ); // 解析并打印模型输出 const response = JSON.parse(new TextDecoder().decode(data.body)); console.log(response.content[0].text); } invokeModelWithFile();
- 核心注意点:
- Claude 3系列模型支持多内容块的消息格式,需将提示语和文件内容拆分为独立的
text类型块放入content数组 - 读取文件时需指定正确编码(如utf8),避免乱码导致模型输出异常
- 若处理非文本格式文件(如图片、PDF),需切换对应
type并传入base64编码内容,txt文件直接用text类型即可
- Claude 3系列模型支持多内容块的消息格式,需将提示语和文件内容拆分为独立的
内容的提问来源于stack exchange,提问作者lpetrucci
相关产品推荐
相关产品推荐

