实时多模态交互

知识库简介

实时语音 Agent 不是把 ASR、LLM 和 TTS 串起来就结束。它是一套持续接收媒体、解释轮次、允许用户打断、调用工具并在网络波动后恢复的事件系统。真正的工程边界是:

媒体帧与播放缓冲
  ↕
会话事件:turn / response / interruption / tool / timeout
  ↕
权威状态与副作用账本

本课程比较级联 ASR → LLM/runtime → TTS 与直接 speech-to-speech,随后建立供应商无关的媒体面、控制面和状态面合同。重点不在某个产品的参数,而在怎样证明“旧输出确实停止”“工具结果对应正确调用”“断线没有重复副作用”和“端到端任务真的完成”。

动态事实边界

W3C/IETF 规范、论文及产品文档复核日期为 2026-07-22。W3C WebRTC Recommendation 包含标记的候选修订;Media Capture and Streams 仍是 Candidate Recommendation Draft。当前 OpenAI 文档把 voice agent、实时翻译和实时转写分成不同会话用途;Google Live 的转写与 server content 又可独立到达、没有彼此的顺序保证。这些是产品接口观察,不是本课程的稳定事件语义:必须通过适配层映射到自己的事件合同、重新核对目标版本并做集成实测。AG-UI 若在生态中出现,只视为 Agent—前端事件协议观察项,不作为本课程稳定依赖。

在总路线中的位置

建议先完成:

本课程把这些能力组成可打断的实时会话。完成后可继续研究多语言实时翻译、视频/屏幕共同输入、电话网关、具身交互或全双工模型,但应先保住事件合同与应用状态。

学习目标

  • 比较级联与 speech-to-speech 架构,而不把“全双工”误当成某一种模型结构。
  • 分清媒体传输、会话控制和应用权威状态,按场景选择 WebRTC、WebSocket 或 SIP 边界。
  • 设计带 ID、序号、时间、关联和终态的严格事件合同。
  • 把 ASR 的 partial/final/revision、应用的 turn.commit 与实际扬声器播放确认分开建模。
  • 区分 VAD、endpointing、语义轮次与用户主动打断。
  • 在 barge-in 时停止旧生成、清空旧播放,并单独核对已经发起的工具副作用。
  • 分解首包与端到端延迟,为缓冲、jitter 和背压设置有界策略。
  • 用 checkpoint、resume token、幂等与 reconciliation 恢复长会话。
  • 联合评测轮次行为、任务结果、工具、恢复、安全、成本与延迟。

前置知识

  • 能读写 Python、JSON,理解 event ID、序号、timeout、deadline 与 hash。
  • 理解音频帧、采样率、VAD、partial/final transcript 和流式播放。
  • 理解工具调用的 schema、权限、审批、idempotency key 和 receipt。
  • 不要求先掌握 WebRTC 实现细节或任何实时模型 SDK。

三个必须分开的平面

平面典型对象失败时不能假设
媒体面audio/video frame、codec、jitter buffer、playout连接存在就代表播放最新内容
控制面transcript revision、turn、response、interrupt、playout、tool call、timeout收到取消或文本 final 就代表已停止播放/已获授权
状态面event log、checkpoint、approval、receipt、terminal outcome供应商 session 就是业务事实源

传输重连、会话恢复和业务副作用核对是三个不同动作。任何设计若把它们合成一个“reconnected=true”,都不足以证明正确恢复。

推荐学习顺序

顺序课程关键问题完成证据
1架构与端到端合同级联还是 speech-to-speech?架构 ADR 与最小合同
2会话、事件与传输边界WebRTC、WebSocket、SIP 各负责什么?三平面事件表
3VAD、轮次与用户打断怎样停止旧输出而不误回滚工具?barge-in 时序与竞态测试
4低延迟、背压与抖动快、稳、完整怎样取舍?分段延迟预算与网络切片
5工具调用与对话状态partial、turn、response、call 怎样关联?权威账本与副作用协议
6断线恢复、超时与终态重连后从哪一步继续?checkpoint/reconcile 状态机
7隐私、安全与信任边界连续麦克风和不可信语音如何受控?威胁模型与审批边界
8端到端评测与离线项目怎样用 trial 证明系统可用?33 个离线合同测试

动手实践入口

项目仅使用 Python 3 标准库,不采集/生成音频、不联网、不调用模型、不执行真实工具:

Set-Location ".\docs\实时多模态交互"
$env:PYTHONDONTWRITEBYTECODE = "1"
python -B .\examples\realtime_session.py .\examples\session_fixture.json --pretty
python -B -W error .\examples\test_realtime_session.py
python -B -O -W error .\examples\test_realtime_session.py

夹具覆盖音频帧与 turn、精确重复事件、打断旧输出、工具关联、断线 checkpoint/resume 和正常终态。测试另外覆盖错误序号、静音提交、未知/多余字段、错误关联、恢复 token、超时、输出队列上限、旧输出拒绝以及终态后的非法事件。

掌握标准

  • 能为一个真实场景解释级联与 speech-to-speech 的可观测性、延迟和可替换性取舍。
  • 能说明 SIP 是会话信令边界,不等于音频媒体本身。
  • 能让 event_id、turn_id、response_id、call_id 各自只有一个职责。
  • 能解释 VAD 检出声音为何不等于判断用户说完。
  • 能证明 barge-in 后旧播放缓冲被清空,旧 response 不会复活。
  • 能在中断时把“工具未执行、已执行、结果未知”分开处理。
  • 能报告 p50/p95/p99 分段延迟、打断质量和任务结果,而不是只有平均首包时间。
  • 能从 checkpoint 恢复应用状态,并核对传输、会话与副作用三层。
  • 能运行并解释 33 个标准库测试及模拟器没有证明的真实系统性质。

主要参考资料

主题一手来源与状态
浏览器实时媒体W3C WebRTC Recommendation(页面含标记的候选修订;核验于 2026-07-22)
媒体采集、track、权限与指示W3C Media Capture and Streams(Candidate Recommendation Draft,2025-10-09;核验于 2026-07-22)
WebSocketIETF RFC 6455
SIP 信令IETF RFC 3261
实时轮次评测Lin 等,Full-Duplex-Bench(ASRU 2025,arXiv v3)
工具与非流利语音评测Lin 等,Full-Duplex-Bench v3(2026 work in progress,前沿观察)
动态产品样例OpenAI Realtime and audio、Google Live API reference、session management 与 capabilities(均核验于 2026-07-22)

课程边界

本课程不教授声学模型训练、电话运营商配置、具体厂商 SDK 参数或地区法律结论。真实上线还需:

  • 在目标设备、网络、语言、口音和噪声下重跑评测;
  • 核对供应商当前数据使用、留存、地区、模型和连接限制;
  • 让法务/安全负责人判断录音通知、同意、未成年人、声纹与跨境数据要求;
  • 用真实媒体栈验证 echo cancellation、codec、jitter、NAT 与电话网关行为。