使用 LLM 评审的语音代理评估:工作原理
抱歉,我需要您提供要翻译的具体文本内容。请粘贴您想要翻译成简体中文的文章或段落,我会为您完成翻译。
核心挑战
- 非确定性行为 – 相同的代理在相同提示下,每次运行可能产生不同的对话。
- 传统基于断言的测试失效 – 没有唯一的“正确”输出可供匹配。
- 你需要的 – 一个理解意图而非精确字符串匹配的评估器。
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"
}
对话循环
- Voicetest 从代理的 入口节点 开始。
- 模拟器 根据角色生成用户消息。
- 代理 根据当前节点的状态提示作出响应。
- 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 或品牌指南等标准。
端到端测试运行
- 导入 您的代理配置到 Voicetest 的图表示中。
- 对每个测试用例:使用模拟器和代理模型运行多轮对话仿真。
- 评判 根据转录内容评估每个指标以及全局指标。
- 将结果存储 到 DuckDB(完整转录、分数、推理、访问的节点、调用的工具)。
- 通过/失败:只有当 所有指标 和 所有全局指标 均达到阈值时,测试才算通过。
网页 UI(voicetest serve)可视化结果:带节点注释的转录、带评判推理的指标分数,以及通过/失败状态。CLI 将相同的数据输出到 stdout,以便 CI 集成。
入门
uv tool install voicetest
voicetest demo --serve
演示加载一个带有测试用例的示例代理,并打开网页 UI,供您探索工作流。