Agent Basic / 11
Agent 评估:怎么知道你的 Agent 好不好
很多人做 Agent 的流程是:搭起来 → 试几个样例 → 看着能跑 → 上线。
但”能跑”和”好用”之间的距离,远比想象中大。
如果你没有评估体系,就只能靠直觉判断系统质量。而直觉在以下场景里会失效:
- 改了 Prompt,不知道效果变好还是变差
- 换了模型,不知道要不要迁移
- 加了新工具,不知道是否引入了退化
- 系统跑了一个月,不知道质量有没有下降
这一篇解决的核心问题是:用什么标准、什么方法来判断 Agent 的表现?
为什么 Agent 评估比传统软件更难
传统软件测试的基本假设是:相同输入产生相同输出。
Agent 系统打破了这个假设:
- 模型输出有随机性
- 工具调用路径可能不同
- 同一个任务有多种”正确”完成方式
- 中间过程和最终结果都需要评估
所以 Agent 评估不能只套用单元测试的思路,需要一套更贴合实际的方法。
评估的四个维度
1. 任务完成率(Task Success Rate)
最基本的指标:Agent 是否真正完成了任务?
这里的”完成”不是指模型说”我完成了”,而是可以被外部验证的结果。例如:
- 代码生成:测试是否通过
- 信息检索:答案是否包含关键事实
- 数据处理:输出格式是否符合规范
- 工单处理:是否正确分类并执行了操作
设计这个指标的关键是:定义明确的验收条件,而不是人工看一眼觉得”差不多”。
2. 效率(Efficiency)
同样完成任务,用了多少资源?
| 指标 | 衡量什么 |
|---|---|
| 迭代次数 | 模型调用了几轮才完成 |
| Token 消耗 | 总输入+输出 token |
| 工具调用次数 | 是否有无效或重复调用 |
| 端到端延迟 | 用户等了多久 |
| 费用 | 一次任务花了多少钱 |
完成率相同的情况下,用 3 轮完成和用 12 轮完成,系统质量差距很大。
3. 安全与合规(Safety)
Agent 有没有做不该做的事?
- 是否调用了超出权限的工具
- 是否泄露了不该暴露的信息
- 是否生成了不合规的内容
- 是否在信息不足时编造了事实
这个维度在 Demo 阶段几乎不会被测试,但在生产环境中可能是最重要的。
4. 鲁棒性(Robustness)
面对异常输入和环境变化时,系统是否仍然可控?
- 模糊或恶意的用户输入
- 工具返回错误或超时
- 上下文极长或极短
- 中途网络中断后恢复
鲁棒性不是”永远不出错”,而是”出错时行为可预测且可恢复”。
评测方法
方法 1:固定测试集 + 自动验证
最基础的方法:准备一组有明确预期结果的测试用例,自动运行并比对。
测试用例:
输入: "帮我查询上海今天的天气"
预期行为: 调用 get_weather 工具,参数包含 city="上海"
预期结果: 输出包含温度数值和天气描述
执行 → 检查行为 → 检查结果 → 记录通过/失败
优点:可重复、可自动化、可以做回归测试。
局限:只能覆盖有限场景,不能发现”未预见”的问题。
方法 2:LLM-as-Judge
用另一个模型来评估 Agent 的输出质量。
Prompt 给评判模型:
"以下是一个 Agent 对用户问题的回答。
请从准确性、完整性、相关性三个维度打分(1-5)。
用户问题:...
Agent 回答:..."
优点:可以评估开放式任务、扩展性好。
局限:评判模型本身可能有偏差、评分标准需要校准。
使用 LLM-as-Judge 时的关键原则:
- 给评判模型明确的评分标准和示例
- 多次运行取平均,减少随机性
- 定期用人工评估校准评判模型的准确性
- 不要用同一个模型既当运动员又当裁判
方法 3:A/B 对比
同一批任务,用两个版本的系统分别处理,比较各维度指标。
适合回答这类问题:
- 新 Prompt 比旧 Prompt 好多少?
- 换模型后质量有没有下降?
- 加了 Reflection 步骤是否值得额外成本?
方法 4:对抗性测试(Red Teaming)
专门设计试图让系统出错的输入:
- Prompt 注入攻击
- 边界条件和极端输入
- 误导性或矛盾的指令
- 试图让 Agent 越权的请求
这类测试不追求”正常情况下成功率多少”,而是”最差情况下系统会不会失控”。
评测设计的实用建议
先从小测试集开始
不需要一开始就搭建完整的评测平台。一个包含 20-50 个代表性用例的测试集,加上自动化运行脚本,已经比”人工试几个例子”好很多。
区分”能力评测”和”集成评测”
| 类型 | 测什么 | 怎么测 |
|---|---|---|
| 能力评测 | 模型+Prompt 在理想条件下的表现 | 固定上下文、Mock 工具、控制变量 |
| 集成评测 | 完整系统在真实条件下的表现 | 真实工具、真实延迟、端到端运行 |
先用能力评测验证基本逻辑,再用集成评测验证生产可行性。
注意统计显著性
模型输出有随机性,跑一次不能说明问题。
- 同一用例至少跑 3-5 次
- 比较两个版本时,样本量要足够
- 不要因为一次成功就说”问题解决了”
持续监控 > 一次性评测
上线后的持续监控比上线前的一次性评测更重要。
应该持续追踪的指标:
- 任务成功率趋势
- 平均迭代次数变化
- token 消耗是否异常增长
- 用户反馈和投诉模式
- 工具调用失败率
如果这些指标突然变化,往往意味着外部依赖(模型更新、API 变更)或数据分布发生了漂移。
常见的评测陷阱
只测 happy path
如果测试集全是”完美输入”,你永远不知道系统面对异常时会怎样。至少 30% 的测试应该覆盖异常和边界场景。
把”模型说完成了”当成真的完成了
模型非常擅长生成”看起来正确”的输出。评估必须基于可验证的外部标准,而不是模型的自我声明。
忽略成本维度
一个花 10 轮完成任务的系统,和一个花 3 轮完成的系统,即使成功率相同,运营成本可能差 3 倍。评测时必须把效率纳入考量。
过度依赖 Benchmark
公开 Benchmark 能帮助你了解模型的通用能力,但它不能代替你自己的业务评测。因为:
- 你的任务分布和 Benchmark 不同
- 你的工具环境和 Benchmark 不同
- 你的成功标准和 Benchmark 不同
Benchmark 用来选模型和定基线,业务评测用来验证系统。
和 Loop Engineering 的关系
评估体系和 Loop 设计是相互支撑的:
- Loop 的退出条件需要评估结果来触发(Verification Loop 的验证器本质就是一个实时评估器)
- 评估体系的指标可以驱动 Loop 策略的调优(平均迭代次数太高 → 调整 Reflection 条件)
- 持续监控发现退化时 → 触发评测分析根因
小结
Agent 评估不是”上线前跑一遍测试”就结束的事,而是贯穿系统全生命周期的工程实践。
先记住最核心的四件事:
- 定义可验证的成功标准,不要靠人工主观判断
- 从小测试集开始,自动化执行
- 评估不只看成功率,还要看效率、安全和鲁棒性
- 上线后持续监控比上线前一次性评测更重要
如果你的 Agent 没有评估体系,它就只是一个”看起来能跑”的系统。有了评估体系,它才是一个”可以持续改进”的系统。
下一篇建议继续看:
参考资料
- 李博杰《深入理解 AI Agent:设计原理与工程实践》,第六章:Agent 评估,固定提交
e3883f8c。本文按本仓库基础教程定位使用独立结构和表述重新实现。