摘要:语音Agent的“打断”不是一个按钮,而是一条从用户开口、VAD识别、取消生成到停止播放和清理上下文的链路。只测转写准确率,很容易漏掉重复播报、错误提交和仍在后台执行的工具调用。

OpenAI Realtime API文档公开了server VAD与semantic VAD等轮次检测方式:前者依据声音活动判断开始和结束,后者结合语义估计用户是否说完;interrupt_response决定检测到用户新语音时,是否自动取消正在输出的响应。文档也提示,semantic VAD更自然,但可能带来更高延迟。
基于这些公开机制,可以构造一个常见客服用例:Agent正在说“我将为你提交退款”,用户插话“等等,我只是想查进度”。测试若只听到声音停了就判通过,会漏掉后台工具调用已经发出、对话上下文仍保留“确认退款”或下一轮继续播报旧音频。
一次打断要拆成五个可观察点
- 用户语音开始事件是否被识别;
- 当前响应是否收到cancel;
- 客户端播放缓冲是否清空;
- 未完成工具调用是否取消或转人工确认;
- 新一轮上下文是否以用户修正意图为准。
| 故障 | 表面现象 | 真正风险 |
|---|---|---|
| VAD没触发 | Agent继续说 | 用户无法接管会话 |
| 只停播放 | 设备安静了 | 后台仍可能执行退款 |
| 取消过晚 | 听起来已打断 | 工具副作用已经发生 |
| 上下文没清理 | 下一轮能回答 | 仍按旧意图继续操作 |
| 误打断 | 环境噪声触发 | 回答频繁被截断、体验下降 |

用“声音—语义—副作用”三组断言
声音层测不同音量、背景噪声、口头停顿和连续说话;语义层测试“嗯……我想一下”不应过早结束轮次,“等等、取消、别操作”应快速打断;副作用层则断言取消后不得调用写操作。
def assert_barge_in(trace):
assert trace.time("speech_started") < trace.time("response_cancelled")
assert trace.time("response_cancelled") < trace.time("new_turn_started")
assert not trace.successful_tool_call_after(
"response_cancelled", risk="write"
)
还要做两个反常用例:在工具调用前1毫秒插话,确认系统的审批点能拦住;在Agent停止播报后恢复网络,确认旧音频和旧工具结果不会补发。延迟指标也要分段记录,不能只看端到端平均值。
语音Agent最难测的不是“它听懂了多少字”,而是用户能否在任何时刻重新取得控制权。测试团队下一步可以录制十组真实打断音频,保留事件时间戳、取消结果和最终副作用,建立一套可重复播放的语音行为回归集。
打断用例不能只用安静录音棚
真实电话里有键盘声、电视声、回声、儿童说话、方言和网络抖动。准备四类音频:清晰短指令;有犹豫词的长句;背景中有人声但用户未发言;用户在Agent关键动作前突然否定。每类改变音量、语速和延迟,观察VAD是否误触发或漏触发。
server VAD依赖声音阈值和静音时长,semantic VAD还会判断语义是否结束。两者没有绝对优劣:简单VAD可能更快但容易把停顿当结束;语义VAD更自然,却可能延后响应。测试报告应同时给出误打断率、漏打断率、用户开口到停止播放的延迟,以及用户开口到写工具真正停止的延迟。
轮次边界错了,会污染后面整段会话
用户说“我想退货……嗯,先查一下订单”,中间停顿可能让Agent提前提交前半句。下一轮即使识别准确,系统上下文已经多出一个错误退款意图。测试要检查被截断文本是否进入Conversation,取消后的响应是否仍作为后续输入,以及新一轮是否能覆盖旧意图。
设计成对用例:同一句话分别连续说、停顿500毫秒、停顿1秒、加入“嗯”。期望最终意图一致;若系统在不同停顿下走向不同工具,说明轮次检测影响了业务行为。
工具调用需要自己的取消协议
模型响应可以cancel,不代表外部API支持取消。查询类工具可以允许完成并丢弃结果,资金与订单写入则应在执行前设置确认点、幂等键和短时撤销。若工具已不可逆地执行,Agent必须如实告诉用户并进入补救流程,不能假装“已经取消”。
把工具分为只读、可撤销写入、不可撤销写入三类,为每类定义打断策略。测试故意在调用前、请求已发出、服务返回前和返回后四个时刻插话,验证状态与话术一致。
网络抖动下还要防旧音频“复活”
客户端收到cancel后如果网络缓存里仍有音频分片,连接恢复时可能继续播放旧回答。每个响应分配response_id,播放器只接受当前有效ID;取消后丢弃旧分片。自动化测试可注入乱序、重复和延迟事件,断言旧response_id永不重新进入播放队列。
最小发布门禁
高风险语音Agent上线前至少满足:明确取消词能在团队设定时间内停止播放;取消后没有成功写副作用;噪声不会频繁打断;长停顿不会擅自提交关键动作;会话上下文不保留已取消意图;网络恢复不补播旧音频。
这套门禁同样适用于会议助手、车载语音和智能硬件。产品不同,用户夺回控制权的要求相同:系统不仅要听见人说话,还要在动作层真正服从停止。
本文部分内容参考了霍格沃兹测试开发学社整理的相关技术资料,主要涉及软件测试、自动化测试、测试开发及 AI 测试等内容,侧重测试实践、工具应用与工程经验整理。