语音 AI 栈
Zonos / Moshi / OpenAI Realtime / LiveKit Agents — 真正能上生产的实时语音 agent 与 TTS。
这个 pack 装了什么
语音 AI 是「笔记本上 demo」与「真上线给用户用」差距最大的领域。延迟、轮次切换、打断、barge-in 必须全部工作 —— 默认情况下都不工作。这个 pack 收齐 六个资产,是 2026 年真在出语音产品的团队在跑的。
| # | 资产 | 层 | 为什么收 |
|---|---|---|---|
| 1 | OpenAI Realtime API | speech-to-speech | 托管,亚 300ms 轮次延迟,免拼 STT/TTS |
| 2 | Moshi | speech-to-speech | 开源全双工;数据留本地 |
| 3 | Zonos | TTS | 高质量开源 TTS,带克隆 |
| 4 | LiveKit Agents | 基建 | WebRTC + agent 编排,生产基底 |
| 5 | 语音 agent 模式 | 设计 | 轮次 / barge-in / 句尾检测 |
| 6 | 延迟预算工作表 | 运维 | 端到端 <800ms 的组件清单 |
为什么要装
1.5 秒响应在语音里感觉是坏了。600ms 响应感觉是人。差距是架构性的,不只是算力 —— 看你怎么组合 STT / LLM / TTS 与网络层。
三个架构选择决定你的语音 agent 是否活:
- speech-to-speech vs 级联。传统级联(audio → STT → LLM → TTS → audio)有 4 个串行瓶颈,每轮通常 1.2-2.0 秒。speech-to-speech 模型(OpenAI Realtime / Moshi)跳过文本中间层,砍到 200-400ms。对话场景选 speech-to-speech;只有需要精细控制 LLM 步骤(比如音频模型还搞不定的工具调用)才选级联。
- 流式 vs 非流式 TTS。非流式 TTS 等完整文本再生成音频。流式在文本前 ~100ms 就开始出音频。5 秒回答这就是 4-5 秒感知延迟差。Zonos 和多数生产 TTS 都支持流式;用它。
- WebRTC vs WebSocket。WebRTC 处理丢包 / jitter / 自适应码率。WebSocket 不。真在蜂窝网下,能用的电话和卡顿的电话差在传输层选啥。LiveKit Agents 把 agent 循环包进合规 WebRTC;移动端这是必选项。
一条命令装齐
# 装整个 pack
tokrepo install pack/voice-ai-stack
# 或者先挑一层
tokrepo install livekit-agents
tokrepo install moshi
tokrepo install zonos
TokRepo CLI 把 agent 脚手架、room 配置、SDK init 代码丢进项目。一个干净 checkout 在 10 分钟内就能让 LiveKit room 接到 OpenAI Realtime 跑起来。
常见坑
- 对话场景用级联架构。用户在聊天(不是命令式听写),用 speech-to-speech。级联架构 2023 年合理;2026 年是延迟惩罚,对聊天没补偿性好处。
- 跳过语音活动检测(VAD)。没 VAD 要么 agent 抢话(没句尾检测)要么干等固定超时。LiveKit Agents 内置 VAD,开它。
- 没处理 barge-in。用户在 agent 说话时开口,agent 必须 ~150ms 内检测并停。硬编码「等讲完」感觉机器人。四个引擎都支持 barge-in,但有些配置默认关。
- TTS prompt 不匹配语音。「$1,234.56」念出来很糟。送 TTS 前预处理数字 / 日期 / 缩写。TokRepo 的 voice-agent-patterns 资产带规范化器。
- 没给首轮延迟留余量。会话第一回答永远比稳态慢 200-400ms,因为模型在加载缓存。用「就绪」音或连接动画把空隙盖住。
常见误解
「speech-to-speech 不能做工具调用。」过时了 —— OpenAI Realtime 原生支持函数调用,Moshi 可以包在工具路由 agent 里。2024 年的限制不再成立。
「每个并发通话要一张 GPU。」中等质量纯 TTS 现代开源在 CPU 上能实时。speech-to-speech 自建 Moshi 才需 GPU,或者把延迟外包给 OpenAI Realtime。LiveKit Agents 处理连接多路复用,所以一台机器能中转多并发会话即便模型在别处。
「语音克隆太危险不能上线。」Zonos 这类引擎自带需要授权的水印标记。在明确用户授权下负责任使用(比如用户给自己的声音做无障碍克隆)是安全且高价值的功能。风险在未授权克隆,引擎本身就劝阻。
6 个资产打包就绪
常见问题
OpenAI Realtime 免费吗?
不 —— 按音频分钟计费(输入和输出),定价是纯文本 API 的几倍,因为音频 token 更密。原型阶段成本可忽略;上线产品每天上千分钟就要先算账。自建 Moshi 每分钟零成本但要 GPU。多数团队先用 Realtime 上生产,量大到能 cover GPU 账单时再迁 Moshi。
Moshi 跟 OpenAI Realtime 比怎么样?
Moshi 是 Kyutai 的开源、可自建、全双工 speech-to-speech。OpenAI Realtime 是托管、闭源,英语质量稍高。决策树:数据主权或零分钟成本 → Moshi;延迟最低 + 零基建 → OpenAI Realtime。架构模式相同,所以你代码里包一层后两者长得很像。
用 Cursor 或 Codex CLI 也能用吗?
语音 agent 是服务端服务,不是编辑器插件。用 LiveKit Agents + Realtime/Moshi 构建独立应用。Cursor / Codex CLI 用来写这些 agent 的代码(TokRepo 装会丢可跑脚手架),但运行时本身是独立服务。Codex CLI 工具页有针对 Realtime API 的 agent 构建示例。
跟 LLM 可观测性 pack 啥区别?
可观测性给你 trace —— 每轮延迟 / 模型错误 / token 成本。语音 AI 栈 pack 是构建运行时。两个都要:装语音栈来上线语音 agent,装可观测性来调第 47 轮为什么有 2 秒延迟。LiveKit Agents 发标准 OpenTelemetry trace,Langfuse / Phoenix 直接吃。
能用我现有的 TTS 吗?
能。pack 文档化了 LiveKit Agents 期待的契约(音频帧 / 句尾信号 / barge-in 事件),ElevenLabs / Cartesia / Azure TTS 或任何支持流式的引擎都能接。Zonos 作为强开源默认收录。voice-agent-patterns 资产有不重写 agent 循环就换 TTS 的指南。