假设电话里的用户说“我想查一下……”,停顿片刻才补充订单号。机器人已经开始回答,两边就说到一起了。这时除了查模型推理速度,还得看看系统为什么认为用户已经说完。
有没有人在说话、用户有没有说完、机器人该不该被打断,是三个不同的问题。本篇只讨论机制和试点方法。
停顿不代表一句话结束
VAD,也就是语音活动检测,判断音频里是否有语音。Silero VAD 的官方示例输出语音片段的起止时间,仓库列出支持 8 kHz 和 16 kHz 采样率。这些时间能帮助定位讲话区间,但不能直接说明用户的意思是否表达完整。
报号码、想日期、组织措辞,都可能中途停一下。LiveKit 的 turn detector 在 VAD 之外增加轮次判断信号。选型时需要分别查看输入、语言支持和部署要求,不能把一个检测模式的能力套到所有模式上。
系统确认用户轮次结束前的等待,通常叫 endpointing。LiveKit 调优文档说明,VAD 模式会取静音时长与最小等待配置中的较大者;STT,也就是语音识别模式,则把等待叠加在识别服务的结束信号之后。只看一个参数,推不出用户实际听到回复要多久。
等待缩短,可能更快接话,也可能截断句中停顿;等得久,通话里又容易出现空白。动态等待能根据会话停顿统计调整,但仍需要用业务录音验证。
机器人说话时,用户还能插话吗
用户说完之后机器人开始回答,与机器人讲话时用户说“等一下”,方向不同。后者需要打断处理。
LiveKit 区分基于语音活动的打断和自适应打断。自适应方式用音频模型区分真正插话与简短应和。一次“嗯”不一定是在要求机器人停止;对方明确说“等一下”,旧回答继续播也不合适。
预生成又是另一项策略:轮次最终确认前先启动模型生成,必要时提前合成语音,有机会减少等待,但取消会浪费部分计算。评估时也要记录被丢弃的工作量。
放进中文电话项目,怎么检查
可以在一个非生产项目上试点,检查三点:报数字时的停顿会不会被切断;简短应和会不会误停播;明确插话后,旧回答是否及时停止。
测试材料应包含普通话、业务中实际出现的口音和背景噪声。先固定识别、模型和合成配置,每次只调整一类轮次参数,记录误抢话、误打断,以及用户说完到听见回复的时间。若接入 FreeSWITCH,测量要覆盖实际媒体链路,不能照搬另一套系统的延迟结果。
采样率也要核对输入音频与检测组件的要求;组件支持某个采样率,不能说明整条链路已经配置正确。检测组件是在本地运行,还是依赖云服务,目标网络能否访问,都需要单独确认。
找到是哪一步提前判断结束,再决定调等待、换检测方式,还是优化后面的生成速度。上面的检查项是试点建议,不代表已经验证过你的部署。