尝试使用
client-bedrock-agent-runtime
调用基岩代理。调用代理后没有返回有效响应。
const { BedrockAgentRuntimeClient, InvokeAgentCommand } = require("@aws-sdk/client-bedrock-agent-runtime");
const config = {
accessKeyId: process.env.AWS_BEDROCK_ACCESS_KEY_ID,
secretAccessKey: process.env.AWS_BEDROCK_SECRET_ACCESS_KEY,
};
const client = new BedrockAgentRuntimeClient(config);
const input = {
agentId: "agentId",
agentAliasId: "agentAliasId",
sessionId: "abc123",
inputText: "Hello",
};
async invokeAgent() {
return new Promise(async (resolve, reject) => {
const command = new InvokeAgentCommand(input);
const response = await client.send(command);
resolve(response);
});
}
端点响应:
{
"$metadata": {
"httpStatusCode": 200,
"requestId": "reqId",
"attempts": 1,
"totalRetryDelay": 0
},
"contentType": "application/json",
"sessionId": "abc123",
"completion": {
"options": {
"messageStream": {
"options": {
"inputStream": {},
"decoder": {
"headerMarshaller": {},
"messageBuffer": [],
"isEndOfStream": false
}
}
}
}
}
}
尝试使用有效的端点调用代理:
https://bedrock-agent-runtime.us-east-1.amazonaws.com/agents/agentId/agentAliases/aliasId/sessions/abb/text
似乎是新SDK的问题。
在给出的示例(使用 API 调用基岩代理)中,没有高级文档告知用户在这种情况下需要正确处理流数据的异步性质。
async invokeAgent() {
return new Promise(async (resolve, reject) => {
let completion = "";
const command = new InvokeAgentCommand(input);
const response = await client.send(command);
for await (const chunkEvent of response.completion) {
if (chunkEvent.chunk) {
const chunk = chunkEvent.chunk;
let decoded = new TextDecoder("utf-8").decode(chunk.bytes);
completion += decoded;
}
}
resolve(response);
});
}
for await
用于异步迭代响应中的 chunks
。该循环将等待每个块可用,然后再进行下一次迭代。