回合被截断:Dialog-RSN-1 回合切换失败
问题现象
两种表现:
表现 A(延迟响应):用户说完了,等了 2-3 秒智能体才开口——"沉默时间"过长。
表现 B(过早打断):用户还在说话(可能在想下一句、停顿了一下),智能体就插嘴说了——打断体验很差。
原因分析
Dialog-RSN-1 的回合切换判断(turn-taking accuracy 89.8%)依赖几个信号:
- 音频能量变化(声音大→变小=可能说完了)
- 语调变化(降调=陈述句结束,升调=问句)
- 停顿时长
- 对话上下文(上一句的语义完整性)
89.8% 的准确率意味着每 10 次有 1 次可能判断错。典型错误场景:
| 场景 | 为什么会判断错 | 表现 |
|---|---|---|
| 用户在想下一句、停顿了 1-2 秒 | 短停顿被当成说完 | 过早打断 |
| 用户说长句子、中间有换气停顿 | 换气被当成说完 | 过早打断 |
| 句子没说完但语调已经降下来 | 语调信号误导 | 过早打断 |
| 背景噪音(公路、地铁) | 能量变化信号被干扰 | 延迟响应或过早响应 |
排查路径
第一步:确认是不是回合切换的问题
在 Conversations 里看回合时间戳——用户说完到智能体开口之间的 gap 有多长:
| Gap 时长 | 含义 |
|---|---|
| < 300ms | 正常(亚 300ms 延迟) |
| 300-700ms | 微感知,可接受 |
| 700-1500ms | 明显"走神" |
| > 1500ms | 严重问题 |
如果 gap 正常但用户感觉被打断,看智能体开口时用户那边是不是还在说话(在 Conversations 的"speaker"标记里应该能看到)。
第二步:配置回合切换参数
在 Agent Settings → Speech → Turn Taking 区域可以微调:
| 参数 | 调高 | 调低 |
|---|---|---|
| End-of-speech 检测阈值 | 更长的停顿才触发智能体响应 → 减少过早打断 | 更快响应 → 减少延迟 |
| Min silence before response | 强制等 X ms 再响应 | 减少等待 |
推荐从默认值开始,在 Sandbox 里用浏览器内通话测试真实体验——让团队成员在不同场景下说(快语速、慢语速、长句、短句、停顿),收集主观感受后微调。
第三步:无法解决的极端情况
如果调参数都不管用:
- 检查音频质量:PolyAI 通话端(用户那边)的麦克风 / 信号质量是否影响了 ASR?在 Staging 环境用真实号码测试
- 语言和方言:某些方言(特别慢或特别快)的回合信号可能和标准音差异大
- 接受事实:89.8% 的准确率在生产环境已经是行业领先水平,剩余 10% 的极端情况用户偶尔会遇到。关键是智能体被打断后能不能优雅地恢复——不要因为一次打断就整个 Flow 崩了
和套壳方案的对比
套壳方案(Whisper ASR + GPT + ElevenLabs TTS)在回合切换上完全是规则引擎:通常是"等用户停顿 X 毫秒就触发 LLM"。这个 X 值是一刀切的——调大调小都覆盖不了所有场景。Dialog-RSN-1 的模型原生判断比规则引擎灵活得多,虽然仍有 10% 的边界情况,但已经是目前最好的方案之一。