Amazon Bedrock 允许开发者根据所使用的 API 方法和模型,选择增量流式传输响应或一次性接收完整输出。当您调用 Bedrock 的 InvokeModel
API 时,它会在处理完整个输入后在单个响应中返回完整的生成文本。然而,如果您使用 InvokeModelWithResponseStream
API,模型会按生成的令牌或块进行流式输出。这种流式传输方法受到 Bedrock 中特定基础模型的支持,例如 Anthropic 的 Claude,并且需要在 API 请求中进行显式配置。例如,在请求体中指定 "stream": true
(适用于兼容模型)或使用专用的流式传输 API 方法会触发此行为。
流式传输模式和非流式传输模式之间的区别会影响您处理响应的方式。在流式传输模式下,API 在生成文本时通过 HTTP 连接发送事件,从而允许应用程序立即处理部分结果。例如,在使用 AWS SDK 的 Python 脚本中,您可以迭代 response_stream
对象并实时将令牌附加到缓冲区。这对于聊天机器人等交互式应用程序非常有用,其中增量显示文本可以改善用户体验。相比之下,非流式传输模式需要在整个生成过程完成后才能接收输出。这实现起来更简单——例如,通过一次调用使用 response.get('body').read()
——但对于较长的响应会引入延迟。
您的选择取决于用例。流式传输非常适合需要较低感知延迟的场景,例如实时聊天界面或实时翻译工具。例如,构建客户支持机器人的开发者可能会流式传输响应以模拟自然对话。然而,流式传输增加了复杂性,因为您必须管理部分输出、处理连接中断和重组令牌。非流式传输更适合批量处理,例如为数千份文档生成摘要,在这种情况下即时反馈并不重要。请务必查阅您所选模型的 Bedrock 文档以确认是否支持流式传输,因为并非所有模型都提供这两种模式。例如,截至 2023 年,Amazon Titan Text 支持流式传输,但 Bedrock 中的某些第三方模型可能不支持。在这两种模式下,使用 AWS SDK 的重试逻辑和错误处理来确保可靠性。