如何正确使用BedrockAgentRuntimeClient同步调用并获取Bedrock Agent响应?
同步BedrockAgentRuntimeClient调用InvokeAgent的响应处理方案
同步调用BedrockAgentRuntimeClient.invokeAgent()后,直接接收返回的InvokeAgentResponse对象即可获取响应,由于Bedrock Agent的响应是流式返回的,需要处理响应中的流数据来获取完整内容。以下是修正后的完整代码示例:
import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.bedrockagentruntime.BedrockAgentRuntimeClient; import software.amazon.awssdk.services.bedrockagentruntime.model.InvokeAgentRequest; import software.amazon.awssdk.services.bedrockagentruntime.model.InvokeAgentResponse; import software.amazon.awssdk.services.bedrockagentruntime.model.InvokeAgentResponseChunk; import software.amazon.awssdk.core.pagination.sync.SdkPublisher; import java.util.UUID; public class BedrockAgentSyncExample { public static void main(String[] args) { BedrockAgentRuntimeClient client = BedrockAgentRuntimeClient.builder() .region(Region.EU_NORTH_1) .build(); String agentId = "2"; String agentAliasId = "2"; String sessionId = UUID.randomUUID().toString(); String inputText = "give me some jokes"; InvokeAgentRequest request = InvokeAgentRequest.builder() .agentId(agentId) .agentAliasId(agentAliasId) .sessionId(sessionId) .inputText(inputText) .build(); // 同步调用获取响应对象 InvokeAgentResponse response = client.invokeAgent(request); // 处理流式响应片段 StringBuilder fullResponse = new StringBuilder(); try (SdkPublisher<InvokeAgentResponseChunk> chunkPublisher = response.completionStream()) { // 将流式发布者转为可迭代对象,遍历每个响应片段 for (InvokeAgentResponseChunk chunk : chunkPublisher.toIterable()) { if (chunk.hasCompletion()) { String chunkContent = chunk.completion(); fullResponse.append(chunkContent); // 实时输出片段内容(可选) System.out.print(chunkContent); } } } catch (Exception e) { e.printStackTrace(); } // 使用完整响应进行后续操作 System.out.println("\n\n完整响应内容:"); System.out.println(fullResponse.toString()); // 关闭客户端(可选,若客户端是单例可复用则无需立即关闭) client.close(); } }
核心要点说明
- 同步调用的返回值:
invokeAgent(request)直接返回InvokeAgentResponse,而非异步场景下的CompletableFuture - 流式响应处理:响应的
completionStream()返回一个SdkPublisher<InvokeAgentResponseChunk>,这是同步流式数据的发布者,通过toIterable()转为可迭代对象后,可遍历每个响应片段 - 片段内容提取:每个
InvokeAgentResponseChunk中的completion()方法返回当前片段的文本内容,可实时输出或拼接为完整响应 - 资源管理:使用try-with-resources包裹
SdkPublisher,确保流式资源被正确释放
注意事项
- 确保AWS SDK v2依赖版本包含Bedrock Agent Runtime模块(需引入
software.amazon.awssdk:bedrockagentruntime依赖) - 已配置有效的AWS凭证(如环境变量、~/.aws/credentials文件等),且凭证拥有调用Bedrock Agent的权限
sessionId可复用,用于多轮对话维持上下文状态
内容的提问来源于stack exchange,提问作者IsaacK
相关产品推荐
相关产品推荐

