实时语音 Agent 设计:WebRTC、打断与工具调用边界
从实时语音交互的工程约束出发,整理延迟、打断、状态和工具调用的设计要点。
实时语音 Agent 和普通聊天机器人不是同一种产品。聊天可以慢一点、长一点、再编辑;语音对延迟、打断、噪声和状态恢复都更敏感。OpenAI Realtime API 文档把低延迟多模态交互、音频输入输出和实时连接作为核心能力来说明。[voice-001]
先定义语音交互的失败方式
语音 Agent 常见失败不是“回答不够聪明”,而是交互节奏坏掉:
- 用户说完后等待太久。
- 用户打断时系统还在继续说。
- 工具调用耗时,语音端没有反馈。
- ASR 识别错误后,系统直接执行高风险动作。
- 多轮对话里状态没有被确认。
实时语音的关键指标不是单次回答完整度,而是轮次节奏、可打断性和错误恢复。
可以把一次语音回合拆成:
音频输入 -> 语音活动检测 -> 文本/语义理解 -> 工具选择 -> 响应生成 -> 音频输出WebRTC 适合前端实时连接
Realtime 文档提供了面向实时交互的连接方式。对于浏览器端语音产品,WebRTC 通常比普通 HTTP 请求更接近实时媒体流的需求。[voice-001]
工程设计上建议把状态分成三类:
- 会话状态:用户身份、当前任务、权限范围。
- 语音状态:是否正在说话、是否被打断、当前音频片段。
- 工具状态:工具是否执行中、是否需要确认、是否失败。
概念事件可以这样记录:
{
"event": "tool_call_pending",
"tool": "book_meeting",
"requires_confirmation": true,
"spoken_feedback": "我找到了一个可用时间,是否帮你创建日程?"
}工具调用必须保守
语音场景更容易误触发动作,所以工具调用要比文本聊天更谨慎。OpenAI tools 文档说明模型可以使用工具执行外部能力,但工具边界仍由开发者定义。[voice-002]
建议规则:
- 读操作可以自动执行。
- 写操作必须复述关键信息并请求确认。
- 高风险操作需要二次确认或转人工。
- 工具失败时用自然语音解释,而不是沉默等待。
综合这些资料可以推断:语音 Agent 的架构重点不是“把聊天搬到麦克风”,而是围绕实时连接、打断恢复和工具确认重新设计交互协议。
参考资料
- [voice-001] OpenAI Developers, “Realtime API”, https://developers.openai.com/api/docs/guides/realtime
- [voice-002] OpenAI Developers, “Tools”, https://developers.openai.com/api/docs/guides/tools