目 录CONTENT

文章目录

Amazon Bedrock AgentCore运行时现已支持双向流式传输,实现实时智能体交互

Administrator
2025-12-19 / 0 评论 / 0 点赞 / 0 阅读 / 0 字

📢 转载信息

原文链接:https://aws.amazon.com/blogs/machine-learning/bi-directional-streaming-for-real-time-agent-interactions-now-available-in-amazon-bedrock-agentcore-runtime/

原文作者:Lana Zhang, Evandro Franco, and Phelipe Fabres


构建与人工智能代理的自然语音对话需要工程团队投入复杂的架构和大量的代码。基于文本的代理交互遵循一种“轮次”模式:用户发送一个完整的请求,等待代理处理完毕,然后接收一个完整的响应才能继续。而双向流式传输(Bi-directional streaming)通过建立一个同时在两个方向上传输数据的持久连接,打破了这种限制。

Amazon Bedrock AgentCore 运行时支持双向流式传输,实现了用户与AI代理之间的实时双向通信。借助此功能,代理可以同时侦听用户输入并生成响应,从而创造出更自然的对话流程。这对于多模态交互(如语音和视觉代理对话)尤其适用。代理可以在仍在接收用户输入时开始响应,处理对话中途的打断,并根据实时反馈调整其响应。

一个双向语音聊天代理可以像人类对话一样流畅地进行口头交流,用户可以自然地打断、澄清或更改话题。这些代理在处理流式音频输入和输出的同时,能够保持对话状态。构建这种基础架构需要管理持久的低延迟连接、处理并发音频流、跨交换保持上下文,以及扩展多个对话。从零开始实现这些功能通常需要数月的工程工作和专业的实时系统专业知识。Amazon Bedrock AgentCore 运行时通过提供一个安全、无服务器、专用的托管环境来部署和运行AI代理,从而解决了这些挑战,开发者无需自行构建和维护复杂的流式传输基础设施。

在本文中,您将了解到AgentCore 运行时上的双向流式传输,以及创建WebSocket实现的先决条件。您还将学习如何使用Strands Agents来实现语音代理的双向流式传输解决方案。

AgentCore 运行时双向流式传输

双向流式传输使用WebSocket协议。WebSocket通过单个TCP连接提供全双工通信,建立一个持续不断地在两个方向上流动数据的持久通道。该协议在浏览器、移动应用和服务器环境中具有广泛的客户端支持,使其适用于各种实施场景。

建立连接后,代理可以接收用户输入的流,同时将响应块发送回用户。AgentCore 运行时负责管理底层基础架构,处理连接、消息排序以及在双向交换中维护对话状态。这减轻了开发人员构建自定义流式传输基础设施或管理并发数据流复杂性的需求。语音对话在对自然流程的期望上与文本交互不同。与语音代理交谈时,用户期望获得与与人类交流相同的对话动态:能够在需要自我纠正时打断、在响应中间进行澄清,或在没有尴尬停顿时重定向对话。借助双向流式传输,语音代理可以在处理传入音频的同时生成响应、检测打断并在实时调整行为。代理在整个交互过程中维护对话上下文,即使对话方向发生变化也能保持对话线索。此功能还有助于语音代理从基于“轮次”的系统中转变为响应迅速的对话伙伴

除了语音对话,双向流式传输还支持多种交互模式。交互式调试会话允许开发人员实时指导代理解决问题,在代理探索解决方案时提供反馈。协作代理可以与用户一起处理共享任务,在工作进行过程中接收持续输入,而不是等待完整的指令。多模态代理可以同时处理流式视频或传感器数据,并提供分析和建议。异步长运行的代理操作可以在数分钟或数小时内处理任务,同时将增量结果流式传输给客户端。

WebSocket 实现

要在AgentCore 运行时中创建WebSocket实现,您应该遵循几个模式。首先,您的容器必须在8080端口上的/ws路径实现WebSocket端点,这符合标准的WebSocket服务器做法。此WebSocket端点将允许单个代理容器同时服务于传统的 InvokeAgentRuntime API 和新的 InvokeAgentRuntimeWithWebsocketStream API。此外,客户必须提供一个/ping端点用于健康检查。

AgentCore 运行时上的双向流式传输使用WebSocket,支持使用WebSocket语言库的应用程序。客户端必须使用WebSocket协议连接连接到服务终端点:

wss://bedrock-agentcore.<region>.amazonaws.com/runtimes/<agentRuntimeArn>/ws

您还需要使用支持的身份验证方法之一(SigV4 标头、SigV4 预签名 URL 或 OAuth 2.0),并确保代理应用程序实现了HTTP 协议合约中指定的 WebSocket 服务合约。

Strands 双向代理:简化的语音代理开发

Amazon Nova Sonic 将语音理解和生成统一到一个模型中,以低延迟、高准确率和强大的价格性能交付类似人类的对话式 AI。其集成架构在一个模型中提供了富有表现力的语音生成和实时转录,并根据输入语音的韵律、语速和音色动态调整响应。

随着双向流式传输现已在 AgentCore 运行时中可用,您有多种方法可以展示如何托管语音代理:一种是直接实现,您需要管理WebSocket连接、解析协议事件、处理音频块和编排异步任务;另一种是Strands 双向代理实现,它抽象化了这种复杂性并自行实现了这些步骤。

示例实现

在本文中,您应该参考 Amazon Bedrock AgentCore 双向流式传输代码,该代码实现了与 Amazon Bedrock AgentCore 的双向通信。该存储库包含两种实现:一种是使用原生 Amazon Nova Sonic Python实现并直接部署到 AgentCore 运行时,另一种是使用 Strands 双向代理的高级框架实现,用于简化的实时音频对话。

下图展示了直接连接到 AgentCore 的原生 Amazon Nova Sonic Python WebSocket 服务器。它提供了对 Nova Sonic 协议的完全控制,直接处理事件,从而完全可见会话管理、音频流传输和响应生成。

用于与 Amazon Nova Sonic 进行实时音频对话的 Strands 双向代理框架提供了一个高级抽象层,简化了双向流式传输、自动会话管理和工具集成。下面的代码片段是这种简化的示例。

from strands.experimental.bidi.agent import BidiAgent
from strands.experimental.bidi.models.nova_sonic import BidiNovaSonicModel
from strands_tools import calculator
@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket, model_name: str):
# Define a Nova Sonic BidiModel
model = BidiNovaSonicModel(
region="us-east-1",
model_id="amazon.nova-sonic-v1:0",
provider_config={
"audio": {
"input_sample_rate": 16000,
"output_sample_rate": 24000,
"voice": "matthew",
}
}
)
# Create a Strands Agent with tools and system prompt
agent = BidiAgent(
model=model,
tools=[calculator],
system_prompt="You are a helpful assistant with access to a calculator tool.",
)
# Start streaming conversation
await agent.run(inputs=[receive_and_convert], outputs=[websocket.send_json])

此实现展示了Strands的简便性:实例化一个模型,创建一个带有工具和系统提示的代理,并使用输入/输出流运行它。该框架在内部处理协议的复杂性。

下面是代码中的代理声明部分:

agent = BidiAgent(
 model=model,
 tools=[calculator, weather_api, database_query],
 system_prompt="You are a helpful assistant..."
)

工具直接传递给代理的构造函数,Strands 会自动处理函数调用编排。总而言之,实现相同功能的原生WebSocket实现大约需要150行代码,而Strands实现将代码量减少到大约20行,并且这些代码专注于业务逻辑。开发者可以专注于定义代理行为、集成工具和设计系统提示,而不是管理WebSocket连接、解析事件、处理音频块或编排异步任务。这使得没有专业实时系统专业知识的开发人员也能使用双向流式传输,同时保持对Nova Sonic音频对话功能的完全访问。Strands 双向代理功能目前仅支持 Python SDK。如果您希望在语音代理的实现中获得灵活性,原生 Amazon Nova Sonic 实现可以为您提供帮助。此外,对于您与模型之间存在多种不同通信模式的情况,这一点也很重要。使用 Amazon Nova Sonic 实现,您将能够完全控制流程的每一步。框架方法可以通过 SDK 来提供更好的依赖控制,并确保系统之间的一致性。相同的 Strands 双向代理代码结构可与 Nova Sonic、OpenAI 实时 API 和 Google Gemini Live 兼容,开发人员只需更换模型实现,而无需更改其余代码。

结论

Amazon Bedrock AgentCore 运行时的双向流式传输功能改变了开发人员构建对话式AI代理的方式。通过提供基于 WebSocket 的实时通信基础架构,AgentCore 节省了从头开始实施流式传输系统所需的数月工程工作量。该框架运行时使开发人员能够在同一个安全、无服务器的环境中部署多种类型的语音代理——从使用 Amazon Nova Sonic 的原生协议实现到像 Strands 双向代理这样的高级框架。


作者简介

Lana Zhang 是 AWS 全球专家组织中的生成式 AI 高级专家解决方案架构师。她专注于 AI/ML,尤其关注 AI 语音助手和多模态理解等用例。她与媒体和娱乐、游戏、体育、广告、金融服务和医疗保健等多个行业的客户紧密合作,帮助他们通过 AI 实现业务解决方案转型。

Phelipe Fabres 是 AWS 初创企业团队的生成式 AI 高级专家解决方案架构师。他专注于 AI/ML,特别是智能体系统和训练/推理的整个流程。他在软件开发方面拥有超过 10 年的经验,涵盖从单体到事件驱动的架构,拥有图论博士学位。

Evandro Franco 是亚马逊云计算公司的一名高级数据科学家。他所在的全球 GTM 团队负责帮助 AWS 客户克服与 AI/ML 相关的业务挑战,主要关注 Amazon Bedrock AgentCore 和 Strands Agents。他在技术领域拥有超过 18 年的经验,涵盖从软件开发、基础设施、无服务器到机器学习。在闲暇时间,Evandro 喜欢和儿子一起玩耍,特别是搭建一些有趣的乐高积木。




🚀 想要体验更好更全面的AI调用?

欢迎使用青云聚合API,约为官网价格的十分之一,支持300+全球最新模型,以及全球各种生图生视频模型,无需翻墙高速稳定,文档丰富,小白也可以简单操作。

0

评论区