跳到主要内容

语音智能体轮次切换:重塑架构的 250 毫秒门槛

· 阅读需 13 分钟
Tian Pan
Software Engineer

研究跨语言话次转换(turn-taking)的语言学家们得出的结论惊人地一致:日常对话中说话者之间的间隙大约为 200 到 300 毫秒。任何更长的停顿都会被解读为犹豫、疏远或顺从;任何更短的停顿则会被视为打断。这个窗口是如此狭窄,以至于人类显然在对方说完之前就开始构思回复了 —— 倾听和计划是并行发生的,而非顺序进行。

错过这个窗口的语音智能体并不仅仅是让人觉得有点慢,而是让人觉得“不对劲”。在聊天产品中没人会注意到的 700 毫秒延迟,在语音交互中会让智能体显得迟钝、心不在焉,或者导致用户因失去耐心而打断它。1.5 秒的间隙足以让用户开始重复他们说过的话。满足这一时间预算并非简单的打磨工作 —— 它迫使开发者做出文本智能体从未面临过的架构选择,而这些选择重塑了整个技术栈的构建方式。

问题不在于“让模型更快”。模型只是关键路径上四个串行系统之一,当你真正分解实际耗时(wall-clock)时,模型很少是最大的耗时项。达到亚秒级目标的语音技术栈最终看起来不像聊天 API,而更像实时电话系统,以及它所暗示的所有技术规则:全链路流式传输、预测性推理、各阶段的硬性截止日期,以及一个可以在情况变化时立即取消任务的控制面。

分解时间预算

自然的人机语音交互的一个实用目标是 800 毫秒的端到端感知延迟,而对于最敏捷的交互,极限目标是 500 毫秒以下。自然的话次转换窗口是 200–300 毫秒,但在实践中,对于以任务为导向的对话,低于 800 毫秒的延迟对大多数用户来说都是可以接受的。只有当用户在与智能体进行密集的交替对话时,200–300 毫秒的目标才变得至关重要。

在 800 毫秒的预算内,四个阶段在竞争时间:

  • 轮换结束检测 (End-of-turn detection):判断用户是否已说完。使用 500 毫秒静默触发的初级 VAD 在任何推理开始前就会消耗掉 500 毫秒。现代语义端点检测(semantic endpointing)可以将此降低到 150–250 毫秒。
  • STT 定稿 (STT finalization):将部分转写文本锁定为 LLM 可以处理的稳定形式。像 AssemblyAI 的 Universal-3 Pro 这样的流式 ASR 系统报告称,从语音结束到最终转写的 p50 延迟约为 150 毫秒。
  • LLM 首字延迟 (TTFT):模型输出第一个生成的 token。这是关键指标;响应的其余部分可以与 TTS 播放并行流式传输。在有提示词缓存的情况下,目标是 200–300 毫秒,没有则更长。
  • TTS 首音延迟 (Time-to-first-audio):合成第一个音素,使扬声器开始发声。流式 TTS 系统可达到 75–200 毫秒;非流式系统则需等待整个句子完成,会增加 500–1500 毫秒。

再加上两端的网络传输 —— 在典型的移动连接上为 30–50 毫秒,蜂窝网络则更高 —— 你就能明白预算是如何挥发殆尽的。初级的顺序执行会将这些累加:500 + 150 + 300 + 150 + 80 = 1180 毫秒,用户才能听到第一个音节。那不是语音智能体,那是步话机。

流式传输将等式从求和转变为求最大值

逃离这 1180 毫秒的架构方案是停止顺序执行阶段,转而通过流式管道并行运行。STT 在用户说话时发出部分转写。LLM 在用户说完之前就开始生成。TTS 在 LLM 完成之前就开始合成。每个阶段都运行在前一阶段输出的滑动窗口上,而不是等待其完成。

延迟计算从 VAD + STT + LLM + TTS 转向更接近 max(VAD, STT, LLM, TTS) —— 受限于耗时最长的那个阶段,而不是它们的总和。在一个设计良好的管道中,当检测到轮换结束的一瞬间,LLM 已经根据高置信度的部分转写生成了一半,而 TTS 的首字节延迟只有几百毫秒,而不是几秒。

这给架构带来了文本系统无需考虑的压力。每个阶段都需要流式协议。每个阶段都需要处理修正(revision),因为刚刚收到的部分数据可能会改变。每个阶段都需要显式的取消原语,因为当用户打断或上游阶段发出不同的输出时,它开始的一半工作都将被丢弃。

端点检测是核心决策

提升话次转换质量的最大杠杆是系统如何判断用户已停止说话。目前有三种主流方法,它们在延迟与质量之间有着明显的权衡。

纯粹的 基于静默的 VAD (VAD-on-silence) 测量音频能量,并在固定的静默时长(通常为 500–800 毫秒)后触发轮换结束。这是最简单的实现,也是最差的体验:每当用户呼吸时,智能体都会等待一个完整的停顿;当用户在思考中途犹豫时,它会误以为说话已结束;这产生的节奏感就像是在打卫星电话。

端点检测模型 (Endpointing models) 在对话语音上进行训练,通过结合声学和词汇线索(如音调轮廓、语速变化、词汇完整性)来比固定静默阈值更快地预测轮换结束。这些模型通常处于 200–400 毫秒范围内,且可针对特定领域进行微调。

语义轮换检测 (Semantic turn detection) 是目前最前沿的技术,它在部分转写文本上运行一个小型分类器,以判断该话语在语法和语义上是否完整。这是唯一能正确处理拼写案例的方法:当用户说“我的号码是 2-5-5”并停顿时,基于 VAD 的系统会在 500 毫秒后触发结束;而语义模型会识对话尚未完成并继续等待。像 Pipecat 的 smart-turn 等开源项目和 LiveKit 的自适应端点检测等托管服务报告称,在现实条件下,其次秒级延迟的准确率超过 86%。

在架构上的含义是,轮换检测不再是你插在 STT 前面的单一信号分类器。它是一个融合问题,结合了声学 VAD(快但有噪声)、词汇端点检测(慢但精确)和语义完成度分类(慢但非常精确)—— 而这些信号的编排正是技术栈中极具意义的一部分。

推测性生成:在用户说完之前就开始

一旦你接受了端点检测(endpointing)具有不可缩减的延迟——即使是优秀的语义检测器也会增加 150–300ms——下一步就是在那个窗口期内做些有用的工作。推测性 LLM 生成(Speculative LLM generation)会在 STT 置信度超过某个阈值(通常为 80–90%)时,对部分转录文本启动推理,并根据最终转录的实际内容来提交或舍弃结果。

当推测正确时,用户会感知到即时响应:LLM 已经领先了 300ms,因此当轮次结束信号触发时,模型已经在生成 token 了。当推测错误时——即用户说的话与部分转录所暗示的不同——工作会被舍弃,系统会付出 300–500ms 的重新提示成本。行业数据表明,当推测准确率达到 80% 以上时,这种方式的净收益是正向的,这在表述可预测的领域(如客户服务、预约、订购)中是可以实现的,而在开放式对话中则较难。

架构层面的成本在于,LLM 调用层必须是可取消的、幂等的,并且要针对命中率进行检测。如果没有这些特性,推测性生成就像是一场 50/50 的赌博,有一半的时间在浪费预算。有了这些特性,它是除了使用更小模型之外,能获得的最大的单一性能提升。

插话处理(Barge-in):销毁已经在运行的任务

自然对话中充满了重叠。用户在智能体说话结束前就开始发言。用户在智能体说话时发出“嗯嗯”声,这是一种注意力反馈信号(backchannel signal),而不是打断。有时用户在中途开始澄清,确实需要智能体停下来。如果对所有这些情况一视同仁,语音智能体要么会直接无视用户,要么会在任何人清嗓子时都中途停下。

插话处理(Barge-in handling)是技术栈中区分这些情况并在 200ms 内对真实打断做出反应的部分。具体来说:

  • 回声消除(Echo cancellation):确保智能体自身的音频播放不会在输入流中被识别为用户语音。当智能体的声音通过带有延迟和编解码损伤的电话线路传输时,这并非易事。
  • 反馈信号检测(Backchannel detection):确保简短、低能量的发言(如 "yeah", "uh-huh", "okay")这种典型的对话支持行为不会触发打断。这通常结合了时长阈值和一个小型分类器。
  • 立即停止 TTS:一旦确认发生真实打断,立即停止,包括丢弃合成阶段下游缓冲的所有音频。
  • 取消运行中的 LLM 调用:让模型停止生成用户永远听不到的 token,这对计费和下一轮对话的连贯性都很重要。
  • “已听内容”重构(Heard-so-far reconstruction):在下一轮对话中准确告诉 LLM,之前的回答中究竟有多少内容真正播放给了用户。如果没有这一点,智能体会假设用户听到了完整的回答,并引用用户从未接收到的内容。

最后一点是团队最容易低估的。音频取消是机械性的;对话状态恢复才是让智能体显得智能或显得“坏了”的关键。如果智能体在用户说出价格前就被打断,却在下一轮说“正如我提到的,总计 40 美元”,那么无论音频切断得有多快,它都已经失去了对话脉络。

语音栈是实时系统,而非聊天 API

最深刻的架构转变是心理模型。聊天 API 是带有软延迟目标的请求-响应模式——慢虽烦人,但很少无法使用。语音栈是具有硬性截止时间的实时系统:一旦错过预算,交互在质感上就破碎了,而不仅仅是量化上的变慢。

这种转变引入了电信和流媒体领域的学科知识,而 LLM 生态系统在过去两年里一直乐于忽略这些知识:

  • 尾部延迟比中位数更重要。 p50 为 600ms 但 p99 为 4 秒的系统,能做出可用的 demo,但做不出可用的产品。语音用户对异常值极其敏感,因为每一个异常值感觉起来都像是智能体卡死了。监控需要针对每个阶段设定 p99 SLO,而不仅仅是平均值。
  • 抖动(Jitter)本身就是一个指标。 即使中位数很快,高方差也会让智能体显得不稳定。每个阶段低于 100ms 的标准差是一个合理的目标。大幅方差通常源于冷缓存、GC 停顿或上游供应商的波动——这些都不会在中位数仪表盘中体现。
  • 取消(Cancellation)是一等公民。 每个阶段都需要能在毫秒级被中断。如果构建在不支持流式传输或无法干净取消的模型 API 之上,无论模型质量如何,都会限制用户体验。
  • 地理位置同地化(Geographic colocation)至关重要。 音频路径上 200ms 的跨大西洋往返时间会吃掉大部分的对话轮次预算。向全球发行的语音产品要么部署区域性推理,要么接受比文本产品更显著的区域性质量差异。

来自聊天 LLM 背景的团队往往会低估所有这些因素,只针对单一理想场景优化中位数延迟,然后发现在蜂窝网络、背景噪音以及第三方供应商尾部方差等现实世界条件下,产品体验支离破碎。

这对产品策略意味着什么

在工程细节中蕴含着一个领导层级别的认知:早在推理能力发挥作用之前,语音产品的感知智能就被其轮询(turn-taking)反应速度所限制。一个响应时间低于 500 毫秒的普通模型,其感觉上会比一个伴有 1.5 秒停顿的前沿模型更聪明,因为低延迟系统维持了对话流,而高延迟系统在每次交替时都会打破它。

这反转了优先追求模型质量的常规产品策略。对于语音而言,正确的做法是先锁定实时流水线——包括端点检测(endpointing)、流式处理(streaming)、取消(cancellation)和插话(barge-in)——并基于一个能满足延迟目标的较小模型进行开发,然后再探索更大模型是否能适应相同的性能预算。那些试图从第一天起就使用最新前沿模型的团队,往往会交付一个缓慢的语音 Agent,并花上一整个季度试图让它变快;而更好的路径是在中档模型上交付一个快速的语音 Agent,并在供应商的 TTFT 提升后再升级到前沿模型。

250 毫秒的轮询阈值并不是你在最后一个冲刺阶段才去达成的细节优化目标。它是一个约束条件,决定了你可以使用哪个模型、可以集成哪些供应商、需要什么样的部署拓扑,以及你的团队必须学习哪些工程学科。那些将语音视为“聊天加上音频输入输出”的团队会缓慢而痛苦地意识到这一点。而那些从第一天起就将语音视为实时系统的团队会发现,250 毫秒的目标——以及随之而来的架构选择——才是真正区分产品与 Demo 的关键。

References:Let's stay in touch and Follow me for more thoughts and updates