使用 LLM 评审的语音代理评估:工作原理

发布: (2026年2月19日 GMT+8 08:58)
8 分钟阅读
原文: Dev.to

抱歉,我需要您提供要翻译的具体文本内容。请粘贴您想要翻译成简体中文的文章或段落,我会为您完成翻译。

核心挑战

  • 非确定性行为 – 相同的代理在相同提示下,每次运行可能产生不同的对话。
  • 传统基于断言的测试失效 – 没有唯一的“正确”输出可供匹配。
  • 你需要的 – 一个理解意图而非精确字符串匹配的评估器。

Voicetest 通过 LLM‑as‑judge 评估 解决此问题:它模拟与你的代理的多轮对话,然后将完整的记录传递给评审模型,根据你的成功标准对其进行评分。

Voicetest 的工作原理

Voicetest 在一次测试运行中使用 三种独立的 LLM 角色

角色责任
Simulator(模拟器)扮演用户。根据 persona 提示逐轮生成真实的用户消息。自主决定何时已达成对话目标并结束——不使用预设的对话树。
Agent(代理)扮演你的语音代理。Voicetest 将你的代理配置(Retell、VAPI、LiveKit 或其自有格式)导入为中间 图表示(带有状态提示的节点、带条件的转移、工具定义)。代理模型遵循该图,根据当前节点的指令作出响应并在状态之间转移。
Judge(评审)对完成的转录稿进行评估。阅读完整对话并根据你定义的每项指标进行打分(LLM‑as‑judge)。

你可以为每个角色分配 不同的模型,例如:

[models]
simulator = "groq/llama-3.1-8b-instant"
agent     = "groq/llama-3.3-70b-versatile"
judge     = "openai/gpt-4o"

使用快速、低成本的模型进行模拟(只需遵循 persona),而在评审时使用更强大的模型(准确性更重要)。

定义测试用例

每个测试用例定义一个 用户角色 以及你期望代理满足的指标:

{
  "name": "Appointment reschedule",
  "user_prompt": "You are Maria Lopez, DOB 03/15/1990. You need to reschedule your Thursday appointment to next week. You prefer mornings.",
  "metrics": [
    "Agent verified the patient's identity before making changes.",
    "Agent confirmed the new appointment date and time."
  ],
  "type": "llm"
}

对话循环

  1. Voicetest 从代理的 入口节点 开始。
  2. 模拟器 根据角色生成用户消息。
  3. 代理 根据当前节点的状态提示作出响应。
  4. Voicetest 评估转移条件以确定下一个节点。

循环最多持续 max_turns(默认 20) 直到模拟器判断目标已完成。

转录元数据

模拟结束后,Voicetest 记录:

  • 完整转录
  • 访问的节点
  • 调用的工具(如果有)
  • 回合数
  • 终止原因

判官评估

评审会独立评估每个指标。例如,对于如下指标:

“代理在进行更改之前验证了患者的身份。”

评审会返回一个结构化输出,包含四个字段:

字段描述
Analysis(分析)将指标拆分为各个要求,并引用对话记录中的证据(例如,第 3 轮的“要求身份验证”,第 5 轮的“在更改前完成验证”)。
Score(得分)基于满足要求的比例给出 0.0 – 1.0。如果身份验证在更改之后进行,得分可能为 0.5
Reasoning(推理)对通过与未通过的内容进行概括。
Confidence(置信度)评审对其评估结果的确定程度。

所有指标得分达到阈值时(默认 0.7,可针对每个代理或每个指标进行配置),测试通过

为什么要先进行分析?
这可以防止一种常见的失误:评审在推理中指出问题,却仍给出高分。通过强制模型先列举要求和证据,得分能够与分析保持一致。

基于规则(确定性)测试

并非所有检查都需要评审。Voicetest 还支持用于模式匹配的 规则测试

{
  "name": "No SSN in transcript",
  "user_prompt": "You are Jane, SSN 123-45-6789. Ask the agent to verify your identity.",
  "excludes": ["123-45-6789", "123456789"],
  "type": "rule"
}

规则测试可以指定:

  • includes – 必须包含的子字符串
  • excludes – 禁止出现的子字符串
  • patterns – 正则表达式

它们即时运行,零成本,并返回 二元通过/失败,置信度 100 %——非常适合合规检查、个人身份信息(PII)检测以及必需短语验证。

全局指标

单个测试指标评估特定场景。
全局指标每个测试记录根据组织范围的标准进行评估:

{
  "global_metrics": [
    {
      "name": "HIPAA Compliance",
      "criteria": "Agent verifies patient identity before disclosing any protected health information.",
      "threshold": 0.9
    },
    {
      "name": "Brand Voice",
      "criteria": "Agent maintains a professional, empathetic tone throughout the conversation.",
      "threshold": 0.7
    }
  ]
}
  • 全局指标在每次测试时自动运行。
  • 测试仅在其自身指标以及所有全局指标都达到阈值时才通过。
  • 这让您可以在整个套件中统一强制执行 HIPAA、PCI‑DSS 或品牌指南等标准。

端到端测试运行

  1. 导入 您的代理配置到 Voicetest 的图表示中。
  2. 对每个测试用例:使用模拟器和代理模型运行多轮对话仿真。
  3. 评判 根据转录内容评估每个指标以及全局指标。
  4. 将结果存储 到 DuckDB(完整转录、分数、推理、访问的节点、调用的工具)。
  5. 通过/失败:只有当 所有指标所有全局指标 均达到阈值时,测试才算通过。

网页 UIvoicetest serve)可视化结果:带节点注释的转录、带评判推理的指标分数,以及通过/失败状态。CLI 将相同的数据输出到 stdout,以便 CI 集成。

入门

uv tool install voicetest
voicetest demo --serve

演示加载一个带有测试用例的示例代理,并打开网页 UI,供您探索工作流。


Voicetest 是在 Apache 2.0 许可证下的开源项目。
GitHubDocs

0 浏览
Back to Blog

相关文章

阅读更多 »

Apex B. OpenClaw,局部嵌入

本地嵌入用于私有记忆搜索。默认情况下,OpenClaw 的 memory search 会将文本发送到外部的 embedding API,通常是 Anthropic 或 OpenAI……

Apex 1. OpenClaw, 供应商历史

从 ChatGPT、Anthropic 和 Google Gemini 导入聊天记录。使用 OpenClaw,你可以做的最强大的事情之一是 bootstrap 你的记忆……