🧪 Agent 评估与测试

🎯 Agent 测试的独特挑战

Agent 的测试比传统软件测试复杂得多——Agent 的行为具有非确定性、输出形式多样(文本/工具调用/代码)、执行路径高度动态。传统的"输入→预期输出"单元测试模式在面对 Agent 时几乎完全失效。

⚠️ Agent测试的独特性
  • 非确定性输出:同一个输入可能产生不同但都正确的回答,传统精确匹配断言失效
  • 多模态输出:Agent 可能输出文本、函数调用、代码,需要多维度的验证策略
  • 状态依赖性:测试结果受 Agent 历史对话和内部状态影响,难以创建独立、可重复的测试用例
  • 工具调用副作用:Agent 的测试可能触发真实的 API 调用、数据库写入,需要隔离和 Mock 策略
  • 评估主观性:答案的"好坏"往往是主观判断,需要结合自动评估和人工评审
  • 时间变化性:同一个工具调用在不同时间返回不同结果(如搜索 API),测试需要适应这种变化

🧪 测试金字塔:Agent 版

传统软件测试的金字塔模型(单元→集成→端到端)需要针对 Agent 进行适配:

⚙️ 单元测试 (大量 · 快速)

测试 Agent 的最小可测单元——工具定义、Prompt 模板、输出解析器。

  • 工具 Schema 验证:确保工具定义符合规范
  • Prompt 模板测试:验证模板变量是否正确填充
  • 输出解析器:测试 JSON/XML 解析逻辑
  • Mock LLM 调用:用固定响应替代真实 LLM
  • 运行频率:每次提交

🔗 集成测试 (中等 · 关键)

验证 Agent 与单个工具/服务的集成是否正常。

  • 工具 Mock 环境:模拟外部 API 的响应
  • 单步决策验证:给定上下文 + 工具列表,验证 Agent 选择正确的工具
  • 错误处理:注入工具调用失败,验证 Agent 的容错行为
  • 运行频率:每次 PR

🎯 端到端测试 (少量 · 关键)

使用真实 LLM 运行完整的 Agent 任务,评估端到端行为。

  • 真实场景测试集:覆盖典型用户任务的测试用例
  • LLM 评估 LLM:用更强的模型评估 Agent 的输出质量
  • 完整工具链:使用真实或高保真 Mock 工具
  • 运行频率:每日/每次发布前

📏 评估维度

Agent 的评估需要从多个维度综合考量,单一指标无法全面反映 Agent 的质量:

🎯 准确性 (Accuracy)

Agent 是否给出正确的答案或执行了正确的操作?

指标:任务完成率、答案准确率、工具选择正确率

⚡ 效率 (Efficiency)

Agent 完成任务是否高效?是否存在冗余步骤?

指标:平均步骤数、Token 消耗、端到端延迟

🛡️ 安全性 (Safety)

Agent 是否会执行危险操作?是否泄露敏感信息?

指标:越狱成功率、PII 泄露率、危险操作拦截率

🪨 鲁棒性 (Robustness)

Agent 对异常输入、工具调用失败、边界条件的处理能力?

指标:异常恢复率、降级成功率、对抗样本抵抗率

🎭 一致性 (Consistency)

相同/相似输入是否产生一致的输出?

指标:输出方差、语义一致性分数

😊 用户体验 (UX)

Agent 的交互是否流畅、友好?回复是否可理解?

指标:用户满意度、回复可读性、首次解决率

📊 评估指标列表

指标名称评估维度计算方式数据来源目标值
任务成功率 准确性 成功任务 / 总任务 × 100% E2E 测试 + 线上追踪 > 90%
工具选择准确率 准确性 正确工具调用 / 总工具调用 集成测试 + 标注 > 95%
平均步骤数 效率 所有任务的步骤数均值 Trace 数据 越低越好(对比基线)
平均 Token 消耗 效率 所有任务的 Token 消耗均值 API 响应 metadata 对比基线下降 20%+
P99 延迟 效率 99% 任务的端到端耗时 Trace 数据 < 30 秒(视场景)
越狱成功率 (Jailbreak) 安全性 越狱成功 / 越狱尝试 红队测试 < 1%
PII 泄露率 安全性 泄露 PII 的响应 / 总响应 自动化扫描 0%
错误恢复率 鲁棒性 从错误中恢复 / 遭遇错误总次数 异常注入测试 > 80%
语义一致性分数 一致性 多次运行语义相似度均值 重复测试 > 0.85

🔄 自动化评估流水线

将评估集成到 CI/CD 流程中,实现每次变更都自动评估

📥 代码变更
⚙️ 单元测试
🔗 集成测试
🧪 E2E 评估
(真实 LLM)
📊 评估报告
(对比基线)
✅ 发布 / 🚫 阻断

流水线关键设计

  • 评估数据集管理:维护分层测试集(核心回归集 + 探索测试集),定期更新
  • 基线对比:每次运行与上一版本基线对比,自动检测性能退化
  • LLM-as-Judge:使用 GPT-4 等强模型作为"评委",对 Agent 的输出进行评分
  • 成本控制:E2E 测试消耗真实 Token,需设置每日/每周预算上限
  • 结果可视化:自动生成评估报告,突出退化项和改进项

📈 回归测试策略

Agent 的行为会随着模型版本更新、Prompt 调整、工具变更而发生变化。回归测试确保变更不会导致已有的能力退化:

策略触发时机测试规模成本
快速回归 每次 PR 50~100 核心用例 低(使用便宜模型)
完整回归 每次发布前 500~2000 用例
模型切换回归 更换底层模型时 全量测试集 高(使用真实模型对比)
线上采样验证 持续运行 线上流量抽样 低(复用生产流量)
💡 测试最佳实践
  • 从核心场景开始:优先覆盖高频、高风险的业务场景,不要试图一次性覆盖所有情况
  • 分层评估:结合自动化指标(任务成功率)+ LLM-as-Judge(质量评分)+ 人工评审(主观判断)
  • 建立基线:每次变更前运行完整评估,生成基线报告作为对比基准
  • 退化即阻断:关键指标(任务成功率、安全指标)的退化应自动阻断发布
  • 测试即文档:每个评估用例都应包含清晰的场景描述、预期行为和评估标准,测试集本身就是 Agent 的行为规范