语音代理需要在多轮对话中处理打断、状态保持和错误恢复,单prompt单响应的测试方式无法覆盖这些场景。真正的测试需要模拟真实用户行为并评估完整通话轨迹。
我发布的每一个语音 Agent 演示效果都很好。然后一个真实用户跟它对话,在过程中改变了两次主意,问了一个脚本外的问题,Agent 却自信满满地预约错了时间。这些在测试中都没有出现,因为测试只用了少量干净的单轮提示词。语音 Agent 的问题出在对话环节,而这恰恰是大多数测试设置根本不会触及的地方。
无论你用什么来测试语音 Agent——买来的还是自己搭建的——它的职责是在真实用户之前,驱动 Agent 经历真实、混乱、多轮对话。否则就是在凭感觉发布。本文基于 Future AGI 博客的一篇更长文章;以下是我实际使用的检查清单,以及每项存在的理由。
语音 Agent 在多轮之间保持状态、处理中断、从自己的错误中恢复,而且在整通电话中都要保持人设。只发一条提示词、检查一条回复的测试方式,什么都测不到。所以我要的不是回放黄金脚本的录音机,而是一个模拟器——生成真实用户、按真实来电者的方式施压 Agent,并对整个轨迹打分。下面的检查清单其实就是一个理念拆成小块:测试的是对话,而不是脚本。
它模拟的是真实用户,还是只是回放脚本? 真实来电者不是确定性的。脚本运行器只能证明 Agent 能处理那个脚本。我要的是具有驱动整通电话行为的特质合成人设,而不是把固定列表的录制提示词包装成测试。
它测试的是多轮对话,还是单轮? 语音 Agent 失败在第四轮,而不是第一轮。状态、记忆和恢复只在多轮中出现,所以测试的基本单位必须是整个对话,并且每轮都有目标和期望。
它覆盖对抗性和边界情况用户吗? 快乐路径总是能通过的。生产环境崩溃在那些打断你、反驳你、说出脚本外内容的来电者身上。如果测试用户都是配合的,那这个设置就是在欺骗我。
它能自动大规模生成多样化场景吗? 手工写两百个场景永远不会真正发生,所以覆盖率很薄,永远只测同样的三个案例。我想要的是从种子描述生成多样化、真实场景的能力,而不是逐一手写每一个。
它能在我构建 Agent 所用的框架上工作吗? 只支持一种框架的测试工具要么逼你重写,要么被废弃。我寻找跨主流 Agent 框架的适配器,这样我就能用已有的 Agent。
它给出的是通过/失败判定和每段对话的转录文本吗?"Agent 看起来还行"不是测试结果。我需要一个可以拦截发布的判定,以及完整的转录文本用于调试失败,而不是一个没有每段对话详情的聚合感觉。
它是否逐轮断言预期行为? 对话可能在过程中做错了某些事(比如泄露数据或违反政策)但仍然达成目标。我想要每轮断言来标记具体哪一轮出了问题,而不只是检查最终结果。
它评分的是对话质量,而不只是任务完成吗? Agent 可能粗鲁地、偏离品牌地、或带着一个幻觉细节完成了任务。完成不等于质量,所以我在任务成功之上,还想要整通电话的一致性、人设一致性和 groundedness 分数。
它直接评分语调,并且有音频路径吗? 语音 Agent 可能达成了目标但听起来简短、生硬,或者对已经生气的来电者语调不对。我想要语调作为独立信号被评分,可以逐轮断言,而不是被平均成一个混合质量分数;另外,一旦真实语音介入,我还想有方式评分音频质量,比如自然度、节奏和延迟。
它能扩展到多种人设和场景组合吗? 真实覆盖率 = 人设 × 场景。一次只跑一个的设置不是发布拦截器。我想要一个运行器执行每种组合并把结果聚合成一个数字。
它与评估和追踪集成吗? 一段失败的对话是起点,不是答案。我需要从判定跳转到分数再跳转到追踪记录来找到原因——如果工具的结果和我的可观测性相去甚远,这根本不会发生。
它能把失败的对话转换成归组的、根因明确的问题吗? 八十份失败转录就是噪音。我真正需要的是背后的三个根本原因,按优先级排序,这样我修的是 bug 而不是症状。一个只停在"这里是失败"工具把最难的部分留给了我。
它在需要时有通往真实语音测试的路径吗? 大多数失败是我可以在模拟中捕获的对话逻辑问题,但真实语音会带来文本无法暴露的延迟和音频质量失败模式。我想要一个对这个语音路径成熟度的诚实评估,而不是把纯文本工具当作语音测试来卖。
它在生产前、在 CI 中运行,而不只是事后吗? 一个在事故后才手动运行的工具是事后分析,不是测试。目的是拦截糟糕的发布,所以我要一个可以接入 CI 的编程路径,让通过率像单元测试一样拦截部署。
不是每个项目每项都同等重要。如果 Agent 处理的是与真实用户的开放式对话,第一、二、三项决定了结果。如果我需要真正的覆盖率而不是三个手写案例,四和十最重要。如果"它完成了任务"对品牌或合规团队不是一个足够高的门槛,八、九和十一承担重量。如果我需要快速闭环失败而不是仅仅发现它们,十二是关键。如果延迟和音频质量是真实的发布标准,十三会升到首位,而且我要尽早验证那个语音路径——因为它往往是任何方案中最新的和最未经证实的部分。
那些发布了可靠语音 Agent 的团队,不再测试干净的单轮提示词,而是开始模拟混乱的多轮来电者。整个检查清单归根结底就这一件事。测试的是对话,而不是脚本,用出来的那个数字拦截发布。