语音代理正在改变企业与客户互动的方式,通过自然语音对话处理预约、订单查询、账户管理等任务。但随着代理功能越来越强大,一个根本性挑战浮现:如何测试它们?
与文本聊天机器人不同,语音代理以双向流式方式运行,响应具有非确定性,需要维护多轮对话上下文,并实时使用工具。目前大多数团队的测试方式是人工与系统对话并听取回复,这种方式缓慢、不一致且无法扩展。
这种测试缺口导致两个关键问题。首先,迭代系统提示和工具配置非常缓慢,每次调整都需要手动重新测试数十个场景,使得提示工程变成猜测。其次,缺乏可靠的评估框架,无法在部署前运行回归测试,无法衡量代理在数百个场景中的表现,也无法捕捉细微的回归。
为了解决这些问题,我们构建了 Nova Sonic Test Harness,这是一个开源框架,既可作为快速迭代工具,也可作为大规模评估框架。它自动运行与 Amazon Nova Sonic 的完整多轮对话,使用 LLM 作为评判员进行评估,并能检测音频与文本输出不一致的情况。无需麦克风。
语音到语音测试之所以不同,是因为几个根本性差异。语音模型使用持久的全双工连接,标准 HTTP 工具无法交互。响应是非确定性的,相同的输入会产生不同的输出,因此不能使用精确字符串断言。单轮对话信息有限,有趣的行为发生在多轮之间。此外,音频和文本可能不同步,产生“音频幻觉”。连接还有约 8 分钟的超时限制。
测试工具的工作流程分为四个阶段:配置测试场景、运行对话、评估结果和生成报告。每个测试始于一个 JSON 配置文件,描述场景:Nova Sonic 扮演的角色、调用者的角色、可用工具以及成功标准。关键洞察是定义目标和评估标准,而不是预期输出。因为 Nova Sonic 每次响应不同,我们基于评分标准进行评估,而不是检查精确字符串。
在对话运行阶段,用户模拟器生成消息,该消息由 LLM(如 Claude Haiku)根据对话历史决定。消息可以以文本或合成音频形式发送给 Nova Sonic。Nova Sonic 流式返回响应,工具调用在流中处理。测试工具通过检测所有推测性文本块何时最终化来判断回合结束,这比等待静音或超时更可靠。所有内容都被记录。
对于长对话,SessionContinuationManager 会透明地处理连接超时:监控连接时长,在超时前创建新会话,并重放历史记录。
对话结束后,完整的转录文本被传递给一个独立的 LLM 评判员(如 Claude Opus)。评判员不知道测试设置,只看到对话和评估标准,以防止偏见。评判员评估六个内置指标,分为三个层级:关键指标(目标达成、响应准确性)、重要指标(工具使用、对话流畅性、系统提示遵守)和建议指标(语音格式化)。层级系统决定通过/失败逻辑:两个关键指标都必须通过才能整体通过。每个指标通过多个评分问题评估,每个问题得到严格的 YES/NO 答案。指标只有在所有问题都通过时才通过。这意味当失败时,你能确切知道哪个问题失败并阅读评判员的推理。
结果以多种格式呈现:交互式仪表板(Streamlit 应用)、结构化 JSON/CSV 文件以及适合 CI/CD 的二进制通过/失败输出和数值通过率。
音频幻觉检测是一个重要功能。语音到语音模型同时产生文本和音频输出,大多数时候它们匹配,但偶尔 Nova Sonic 可能写一套说另一套。例如,音频说“下周一”而文本流说“下周二”。如果只检查文本日志,永远不会发现。测试工具将每轮音频上传到 S3,使用 Amazon Transcribe 转录,然后与文本输出比较,分类差异:填充词、措辞变体或事实错误。每轮得到结论:一致、微小差异或幻觉。
为了大规模测试,批量运行器可以并行运行多个场景。例如,运行 12 个医疗场景,并行度 4;或重复运行同一场景 10 次以测量方差;或运行 100 条评估数据集。测试工具附带现成的场景包:12 个医疗场景、8 个银行场景和 5 个客户服务变体。批量运行后,仪表板显示所有场景的通过率、每个指标的细分、共同失败相关性以及运行之间的并排比较。