引言
评估普通 LLM 时,我们通常关心回答是否正确、是否相关、是否遵循格式。但评估 Agent 时,问题会复杂很多。
Agent 不只是生成一段文本,它会规划任务、读取上下文、调用工具、观察结果、修正计划,最后再交付输出。任何一个环节出错,最终结果都可能失败:
|
|
所以 Agent 的评估不能只看最后一句话。一个 Agent 可能最终答对了,但中间调用了错误工具、泄露了敏感信息、浪费了大量 token;也可能最终答错了,但检索、工具调用和推理过程都是合理的,只是某个外部依赖失败了。
这就是 Agent 评估的核心难点:它评估的不是一次模型输出,而是一段智能体执行轨迹。
为什么 Agent 更难评估
输出不再是单点答案
传统问答任务通常有一个相对明确的目标:
|
|
但 Agent 任务往往是开放式的:
|
|
它需要搜索代码、阅读日志、定位依赖、形成假设、验证假设、输出结论。最终答案只是结果,真正的质量藏在过程里。
中间状态会影响最终结果
Agent 依赖上下文窗口、记忆系统、工具返回、检索结果。中间任何状态污染都会传递到后续步骤:
- 检索召回错误文档,模型会基于错误信息推理
- 工具返回结构不清晰,模型会误解执行结果
- 历史上下文压缩丢失关键约束,后续动作会跑偏
- 计划阶段过度分解,导致成本和延迟失控
因此评估 Agent 必须追踪中间过程,而不是只记录最终输出。
成功标准常常是业务定义的
同一个 Agent,在不同场景下成功标准完全不同:
| 场景 | 成功标准 |
|---|---|
| 客服 Agent | 正确解决问题,语气合适,不越权承诺 |
| 编程 Agent | 测试通过,diff 合理,不破坏无关代码 |
| 数据分析 Agent | SQL 正确,口径一致,图表解释可信 |
| 运维 Agent | 定位根因,操作安全,有回滚路径 |
| RAG Agent | 引用可靠,不编造知识,答案可追溯 |
所以 Agent 评估没有一个通用的“准确率”可以包打天下,必须围绕具体任务定义指标。
评估对象:结果、过程、工具、安全、成本
一个完整的 Agent 评估体系至少包含五类对象。
|
|
结果评估
结果评估关注最终交付是否满足用户目标。
最核心的指标是 Task Success Rate(任务成功率):
|
|
但“成功”需要提前定义。例如编程 Agent 可以定义为:
- 代码能编译
- 相关测试通过
- 修改范围符合需求
- 没有引入明显安全问题
- 用户验收通过
如果只看“模型回答看起来不错”,这个指标就会虚高。
过程评估
过程评估关注 Agent 是怎么完成任务的,也叫 Trajectory Evaluation(轨迹评估)。
一条典型轨迹包含:
|
|
过程评估可以检查:
- 是否先收集必要上下文
- 是否跳过了关键验证步骤
- 是否重复执行无意义动作
- 是否在信息不足时过早下结论
- 是否能根据观察结果调整计划
这类指标对定位问题特别有用。最终失败时,我们能知道失败发生在“理解任务”“检索上下文”“工具执行”还是“最终表达”。
工具评估
工具调用是 Agent 区别于普通 Chatbot 的核心能力。
工具评估关注四个问题:
| 维度 | 说明 |
|---|---|
| 工具选择 | 是否选择了正确工具 |
| 参数构造 | 参数是否完整、类型是否正确 |
| 调用时机 | 是否在需要时调用,是否过度调用 |
| 结果利用 | 是否正确理解并使用工具返回 |
例如用户问“这个 PR 有没有测试失败”,Agent 应该调用 CI 或 GitHub 工具,而不是凭上下文猜测。如果工具返回失败日志,Agent 还要能提取真正的错误原因,而不是把整段日志贴回给用户。
安全评估
Agent 能行动,就必须评估安全边界。
常见安全指标包括:
- 是否泄露系统提示、密钥、私有数据
- 是否执行越权工具调用
- 是否绕过审批流程
- 是否对高风险操作给出回滚或确认步骤
- 是否能识别 prompt injection
- 是否把不可信工具输出当成系统指令执行
安全评估不能只靠上线后的事故复盘。需要在离线评估集中专门构造对抗样本,比如:
|
|
或者在检索文档中注入:
|
|
Agent 如果没有区分“用户指令”“系统指令”“工具返回内容”的优先级,就很容易被这类输入诱导。
成本评估
Agent 的效果不是越强越好,还要看成本是否可接受。
常见成本指标:
| 指标 | 含义 |
|---|---|
| Latency | 端到端耗时 |
| Token Cost | 输入/输出 token 成本 |
| Tool Calls | 工具调用次数 |
| Iterations | 推理循环轮数 |
| Retry Rate | 重试比例 |
| Human Escalation Rate | 转人工比例 |
一个 Agent 如果能把成功率从 88% 提升到 90%,但成本翻了 5 倍,生产环境未必值得。
三层评估模型
Agent 评估可以分成三层:单点能力、执行轨迹、端到端任务。
|
|
第一层:单点能力评估
单点能力评估适合测试可拆解的小能力:
- 意图分类是否正确
- JSON 输出是否符合 schema
- 工具参数是否能通过校验
- 摘要是否保留关键信息
- 检索 query 改写是否合理
- 是否能识别需要人工介入的场景
这一层最好自动化,适合用单元测试、规则校验、字符串匹配、代码执行来评估。
例如工具参数评估:
|
|
评估器只需要检查工具名和参数是否匹配即可。
第二层:轨迹评估
轨迹评估关注 Agent 的中间决策。
可以把一次执行记录成结构化 Trace:
|
|
然后评估:
- 是否覆盖必要步骤
- 是否存在危险动作
- 是否有无效循环
- 是否正确使用观察结果
- 是否在失败后尝试合理恢复
轨迹评估通常需要 LLM-as-Judge 或人工抽检,因为“过程是否合理”很难完全用规则表达。
第三层:端到端任务评估
端到端评估最接近真实业务。
例如编程 Agent 的端到端任务可以是:
|
|
这类评估的结果通常不是简单的“回答对不对”,而是多项验收标准的组合:
|
|
端到端任务评估成本最高,但它最能反映 Agent 是否真的可用。
评估数据集怎么构建
没有评估集,就没有可重复的改进。
一个好的 Agent 评估集应该覆盖真实任务分布,而不是只挑模型容易答对的问题。
样本结构
建议每条样本至少包含:
|
|
这里不要只写标准答案,还要写:
- 任务场景
- 可用上下文
- 必须完成的动作
- 禁止执行的动作
- 评分方式
这能让评估从“看答案”升级为“看任务完成情况”。
样本分层
评估集建议分四类:
| 类型 | 作用 |
|---|---|
| Golden Set | 最核心的高质量样本,人工精标 |
| Regression Set | 历史失败样本,防止问题复发 |
| Edge Case Set | 边界条件、异常输入、稀有场景 |
| Adversarial Set | prompt injection、越权、恶意输入 |
其中 Regression Set 很重要。Agent 每次失败都应该沉淀为一条回归样本,否则同类问题会反复出现。
数据来源
真实评估集可以来自:
- 用户真实问题脱敏
- 工单系统历史记录
- 线上失败案例
- 人工设计的高价值场景
- LLM 生成后人工筛选
- 竞品或旧版本 Agent 的 bad case
不要过度依赖合成数据。合成数据可以扩充覆盖面,但核心样本必须来自真实业务。
评分器:规则、代码、LLM 与人工
评估器决定“怎么判分”。
常见评分方式有四种。
规则评分
规则评分最快、最稳定,适合格式明确的任务:
|
|
优点是便宜、可复现;缺点是只能覆盖表层质量。
代码评分
代码评分适合有可执行验收标准的任务。
例如编程 Agent:
|
|
SQL Agent:
|
|
代码评分是工程场景里最可靠的评估方式,因为它不依赖主观判断。
LLM-as-Judge
LLM-as-Judge 适合评估开放式输出,比如:
- 回答是否完整
- 是否基于证据
- 语气是否合适
- 推理过程是否合理
- 是否满足业务规则
评分 prompt 应该尽量结构化:
|
|
使用 LLM-as-Judge 时要注意三点:
- 评估模型最好强于被评估模型
- rubric 要明确,减少自由发挥
- 关键样本要有人类标注校准
否则评估器本身会变成新的不确定性来源。
人工评分
人工评分最贵,但不可替代。
适合人工评估的场景:
- 高风险任务
- 新评估集初次标注
- LLM-as-Judge 争议样本
- 上线前验收
- 用户体验和语气评估
实践中常见做法是:
|
|
可观测性:没有 Trace 就没有诊断
Agent 评估离不开 Trace。
Trace 记录一次 Agent 运行的完整链路,通常由多个 Span 组成:
|
|
OpenAI Agents SDK 的 Tracing 就采用了类似思路:一次 Agent run 会记录 LLM generation、tool call、handoff、guardrail 等事件,方便调试和生产监控。生产级 Agent 也应该建立自己的 Trace 结构。
每个 Span 建议记录:
| 字段 | 说明 |
|---|---|
| span_id | 当前步骤 ID |
| parent_id | 父步骤 ID |
| type | llm/tool/retrieval/guardrail |
| input | 当前步骤输入 |
| output | 当前步骤输出 |
| latency_ms | 耗时 |
| token_usage | token 消耗 |
| error | 错误信息 |
| metadata | 模型、工具名、版本等 |
有了 Trace,评估就能从“这个 Agent 不好用”变成:
|
|
这才是可改进的诊断。
评估流水线
一个可落地的 Agent 评估流水线大致如下:
|
|
本地开发阶段
开发阶段重点是快速反馈:
- 小规模 Golden Set
- 单点能力测试
- 工具参数校验
- 关键任务端到端测试
- 每次改 prompt 或工具描述后跑一遍
目标不是覆盖所有场景,而是避免基础能力倒退。
上线前阶段
上线前重点是风险控制:
- 跑完整评估集
- 加入安全和对抗样本
- 人工抽检高风险任务
- 对比旧版本和新版本
- 统计成本、延迟、失败类型
上线前不要只看平均分,还要看最差样本。Agent 的风险经常藏在长尾里。
线上运行阶段
线上阶段重点是持续监控:
- 任务成功率
- 用户重试率
- 人工接管率
- 工具失败率
- 平均成本和 p95 延迟
- 低分 Trace 自动进入回归集
线上评估的核心不是每天看报表,而是形成闭环:失败样本沉淀为评估集,评估集驱动下一轮改进。
常见评估指标
任务指标
| 指标 | 含义 |
|---|---|
| Task Success Rate | 任务成功率 |
| Partial Success Rate | 部分成功率 |
| First-pass Success | 首次完成率 |
| Human Acceptance Rate | 人工验收通过率 |
| User Retry Rate | 用户重试率 |
工具指标
| 指标 | 含义 |
|---|---|
| Tool Selection Accuracy | 工具选择准确率 |
| Tool Argument Accuracy | 工具参数准确率 |
| Tool Failure Rate | 工具失败率 |
| Tool Overuse Rate | 工具过度调用率 |
| Recovery Success Rate | 工具失败后的恢复成功率 |
RAG 与上下文指标
| 指标 | 含义 |
|---|---|
| Context Recall | 需要的信息是否被放进上下文 |
| Context Precision | 上下文中无关噪声占比 |
| Citation Accuracy | 引用是否准确 |
| Faithfulness | 回答是否忠于上下文 |
| Hallucination Rate | 幻觉率 |
成本指标
| 指标 | 含义 |
|---|---|
| Avg Latency | 平均延迟 |
| P95 Latency | 95 分位延迟 |
| Avg Token Cost | 平均 token 成本 |
| Avg Iterations | 平均循环轮数 |
| Cost per Success | 每次成功任务成本 |
Bad Case 分析
评估的价值不在分数本身,而在 bad case。
每个失败样本都应该归因到具体层级:
|
|
不同失败类型对应不同修复方式:
| 失败类型 | 修复方向 |
|---|---|
| 意图理解错误 | 增加分类样本,优化系统提示 |
| 检索失败 | 调整 chunk、embedding、rerank |
| 工具选择错误 | 改工具描述,减少工具重叠 |
| 参数错误 | 加 schema 校验和示例 |
| 无效循环 | 增加最大轮次和停止条件 |
| 安全越权 | 加权限检查和 guardrail |
| 成本过高 | 压缩上下文,减少重复调用 |
一个成熟的 Agent 团队,应该能回答:
|
|
如果回答不了,说明评估体系还没有真正建立。
实践:一套最小可用评估方案
如果从零开始,不需要一上来做复杂平台。可以先搭一套最小闭环:
第一步:定义 20 条核心任务
从真实场景里选 20 条最常见、最重要的任务。每条任务写清楚:
- 用户输入
- 可用上下文
- 预期结果
- 禁止行为
- 评分标准
第二步:记录完整 Trace
每次运行记录:
- 输入
- 最终输出
- 中间工具调用
- 工具返回
- token 成本
- 耗时
- 错误信息
没有 Trace,就不要谈优化。
第三步:先用人工打分
早期样本少,人工评分最靠谱。先把标准打磨清楚,再逐步自动化。
第四步:沉淀自动评分器
把明确的规则抽出来:
- JSON schema 校验
- 必须调用的工具
- 禁止调用的工具
- 测试命令是否通过
- 引用是否存在
自动评分器越多,回归测试成本越低。
第五步:每次失败都入库
线上或测试中出现的失败样本,脱敏后加入 Regression Set。以后每次改 Agent 都跑一遍。
这套方案不华丽,但能让 Agent 从“感觉变好了”变成“有证据地变好了”。
常见反模式
只看最终回答
最终回答正确不代表过程安全。Agent 可能用了错误工具、读取了不该读的文件,只是最后碰巧答对。
只看平均分
平均分会掩盖长尾风险。对于高风险 Agent,最差 5% 样本比平均分更重要。
用模糊 rubric 评估
“回答质量好不好”这种 rubric 太空泛。应该拆成可判断的维度,比如事实准确性、完整性、引用可靠性、工具使用是否正确。
评估集不更新
Agent 的使用场景会变化,旧评估集会逐渐失真。线上失败样本必须持续进入回归集。
忽略成本
Agent 能完成任务只是第一步。生产环境还要考虑成本、延迟、稳定性和人工接管率。
参考资料
- OpenAI Agents SDK Tracing
- OpenAI Graders
- Anthropic: Create strong empirical evaluations
- Anthropic: Using the Evaluation Tool
小结
Agent 评估的核心不是给模型打一个漂亮分数,而是建立一套可持续改进的工程闭环。
一个完整的 Agent 评估体系应该回答五个问题:
|
|
真正可靠的 Agent,不是“演示时看起来聪明”,而是在大量真实任务、边界场景和失败回归中依然稳定。
评估体系就是 Agent 的仪表盘。没有它,优化只能靠感觉;有了它,Agent 才能从实验品走向可维护的工程系统。