Agent Evals 学习教程

06. Agent 专项评测

读完本章,你应该能:

本章回答:会调用工具、改变环境、跨多轮交互的 Agent,应该怎样评估。

学习目标

读完本章,你应该能:

  • 区分 output eval、trajectory eval 和 outcome/state eval。
  • 为 agent 设计 task、trial、environment、trace 和 scorer。
  • 解释 pass^k 为什么比 pass@k 更贴近 agent 上线可靠性。
  • 识别 runtime shift、工具设计和环境状态对 eval 的影响。

本章导读

Agent 的难点在于,它不只是生成一段文本,而是在环境里做事。它可能查询数据库、打开网页、编辑文件、调用支付接口、等待 CI、读取用户历史,再决定下一步。这样的系统一旦失败,失败也不会只停留在语言层面,而会留下状态、成本、权限和副作用。

这就是为什么 agent eval 不能只问“最后回答是否正确”。一个 agent 可以礼貌地告诉用户“我已经帮你改好了”,但数据库里没有任何改签记录;也可以真的改签成功,却顺手取消了另一张不该动的票。前者是 output 与 outcome 不一致,后者是 outcome 局部正确但副作用失败。只看最终文本,两者都可能被漏掉。

本章要建立的核心意识是:评估 agent,就是评估一个会行动的系统。你要看它说了什么,也要看它怎么做,更要看世界最后变成了什么样。只有把这三层分开,agent 的可靠性才有可能被认真讨论。

Agent eval 的本质

Agent 不是“回答问题的模型”,而是“在环境中循环使用工具的系统”。因此 agent eval 不能只看最后一句回答,而要看:

  • 是否理解任务。
  • 是否选择了正确工具。
  • 是否传入正确参数。
  • 是否处理工具错误。
  • 是否遵守政策和权限。
  • 是否真的改变了环境状态。
  • 是否没有造成副作用。
  • 是否多次运行都稳定。

Wolfe 的 agent eval anatomy 是一个很好的起点:tasks → trials → transcripts → outcomes → gradersWolfeAgentEvals2026。也就是说,你先定义任务,再多次运行,每次保存完整 transcript/trace,再用 output、trajectory 或 outcome scorer 打分。

Agent eval 的最小结构

task:
  id: airline_change_flight_001
  user_goal: "将航班改签到明天下午,并确认价格差额"
  initial_state:
    bookings:
      - id: "B001"
        user: "U123"
        flight: "MU5101"
        date: "2026-07-01"
        status: "confirmed"
    policy_docs:
      - id: "change-fee-policy"
        text: "24 小时内改签需确认差价和手续费。"
  tools:
    - search_flights
    - change_booking
    - calculate_fee
    - respond
trial:
  model: "your-agent-v3"
  seed: 42
  isolated_environment: true
logged_trace:
  messages:
    - role: "user"
      content: "我想改到明天下午"
  tool_calls:
    - name: "search_flights"
      args:
        date: "2026-07-02"
        time_window: "afternoon"
  observations:
    - "找到 2 个可改签航班"
  final_state:
    booking_id: "B001"
    status: "changed"
scorers:
  - required_state_change
  - no_extra_booking
  - required_confirmation_text
metrics:
  - pass@1
  - pass^3
  - cost_per_success

三类评分:output、trajectory、outcome

Output eval:看最终回答

适合:

  • 格式、语言、引用。
  • 是否提供必要确认号。
  • 是否清楚说明下一步。
  • 是否符合渠道限制。

缺点:无法证明实际操作发生。

Trajectory eval:看过程

适合:

  • 工具是否按合理顺序调用。
  • 关键参数是否正确。
  • 是否出现无进展循环。
  • 是否读取了必要文档。
  • 是否在高风险操作前检查权限。

工具:trajectory match、LLM trajectory judge、人工 trace 审计。

缺点:多条路径可能都合理;严格顺序匹配会误杀。

Outcome/state eval:看最终状态

适合:

  • 订单是否真的取消。
  • 退款是否真的写入。
  • PR 是否真的通过测试。
  • DB 是否只有期望变化。
  • 文件是否正确修改。

Anthropic、tau-bench、AppWorld 都把这种状态验证作为 agent eval 的核心AnthropicAgentEvals2026TauBench2024AppWorld2024。

State grading:评估“做成了什么”

状态评分的基本模式:

  1. 初始化一个干净环境。
  2. 运行 agent。
  3. 保存最终环境状态。
  4. 与 expected state 比较。
  5. 检查没有 collateral damage。

示例:

def grade_expense_draft(before, after, employee_id):
    draft = after.expense_reports.latest_for_employee(employee_id)

    expected = [
        draft.status == "draft",
        draft.project_code is not None,
        draft.amount == after.receipts.total_for_report(draft.id),
        draft.has_over_budget_explanation(),
        not draft.submitted_without_employee_confirmation,
        after.audit.no_unrelated_changes(before),
    ]
    return all(expected)

关键是同时检查正向和负向:

  • 正向:该发生的状态变化发生了。
  • 负向:不该发生的状态变化没有发生。

AppWorld 特别强调 collateral damage:agent 完成目标但改变了不相关状态,也应该失败或扣分AppWorld2024。

Trajectory eval:过程有诊断价值

如果 outcome 失败,trajectory 可以告诉你为什么失败:

  • 没查 policy。
  • 查了错文档。
  • 工具参数错。
  • 工具失败后没有 retry。
  • 在没有权限时执行操作。
  • 循环调用同一个工具。

PATTERNS.md 区分了两类 trajectory scorerAwesomeEvalsPatterns2026:

方法优点缺点适合
Deterministic trajectory match便宜、稳定、适合 CI只承认参考路径,容易误杀流程固定的工作流
LLM trajectory judge能承认替代路径容易 over-credit,需要校准开放路径、多工具任务

实践上,trajectory eval 应用于诊断和辅助,不要轻易替代最终 outcome。

多轮用户模拟

真实 agent 往往不是单轮任务。tau-bench 的重要贡献之一,是引入模拟用户与 agent 多轮互动,并用领域状态检查最终结果TauBench2024。多轮 eval 要特别注意:

  • 用户可能信息不完整。
  • 用户可能改变主意。
  • 用户可能给出矛盾信息。
  • agent 需要追问、确认和解释。
  • agent 需要在多轮中保持状态一致。

评价多轮 agent 时,不要只测“给一大段完整需求能不能完成”。现实里用户经常逐步透露信息。

连续任务与人类在环

多轮 eval 还不等于真实长期任务。Yao 对传统 eval 的 i.i.d. 假设提出批评:真实 agent 常常不是在互不相关的独立样本上工作,而是在同一个用户、同一个 repo、同一个企业流程或同一组业务对象上连续行动Yao2025。这会带来两类额外评估问题。

第一类是人类在环。agent 不能只假设用户一开始就给出完整需求。差旅报销 agent 要在缺项目编号时追问;coding agent 要在需求不清时请求确认;采购 agent 要在预算、供应商或审批链缺失时停下来。这里要评估的不是“模型有没有能力一次性完成任务”,而是“它是否知道什么时候应该继续、什么时候应该问人、什么时候应该升级”。

第二类是跨任务状态。一个 coding agent 连续修同一个仓库的 10 个 issue,理想情况下会逐渐熟悉目录结构、测试入口和领域术语;一个企业助手连续处理同一个员工的报销、差旅和采购,也会积累项目、成本中心和审批偏好。完全隔离的单次 trial 有利于可复现,但它测不到这种累积熟悉度。更完整的 agent eval 往往需要两套视角:一套隔离 trial 用来控制变量和做回归;另一套 session/repo/user 级连续任务,用来测长期状态、记忆污染、上下文累积和跨任务学习是否真的带来 utility。

pass^k:Agent 上线可靠性的底线

Agent 很容易在 demo 中显得可靠,因为人会挑成功样本。但上线时同类任务会重复发生。一个 customer-service agent 单次成功率 80%,连续 5 次都成功的概率只有 0.8^5 = 0.32768。

所以:

  • capability demo 可以看 pass@k。
  • deployment reliability 应看 pass^k、repeat success rate、failure rate by scenario。
  • 长任务还要看可靠性随任务时长如何衰减。

Khanal 等的长时程可靠性框架指出,能力排名和可靠性排名会在长任务上出现倒置KhanalReliability2026。这对 agent 产品非常关键:最会“尝试复杂策略”的模型,未必是最稳的模型。

Runtime shift:评测环境不等于生产环境

Lee 的 runtime shift 概念很重要:agent 会适应它运行时的工具延迟、shell 行为、文件系统布局、网络边界和错误模式;如果 eval 在训练 runtime 中运行,而生产换了 runtime,就可能出现 eval 没抓到的静默质量回退LeeRuntime2026。

典型差异:

训练/评测 runtime生产 runtime
干净、短生命周期环境长生命周期、用户会回来继续
网络录制或 mock开放互联网和真实 API
工具稳定、失败少工具超时、权限变化、限流
失败就重采样失败要降级、重试、人工接管
状态可随时重置状态要持久、可审计

Agent eval 应尽量贴近生产 runtime,或者显式把 runtime 作为变量测试。

Agent task 设计原则

1. 任务要真实

任务应该来自真实用户目标,而不是为了模型方便而写成考试题。Yao 批评传统 eval 的 i.i.d. 和 no-human-in-loop 假设,因为真实 agent 要连续工作、与人互动、积累上下文Yao2025。

2. 环境要隔离

每次 trial 都应从干净状态开始。否则前一次运行的状态会污染下一次结果。

3. 成功要可验证

至少对核心 outcome 写 verifier。主观部分再用 judge。

4. 要记录完整 trace

没有 trace,就没有诊断。至少记录 messages、tool calls、args、observations、latency、cost、errors 和 final state。

5. 要测试副作用

只检查目标完成,会鼓励 agent 用危险捷径。必须检查不相关状态没有被改变。

6. 要重复运行

单次成功不是可靠。至少对关键任务跑多次,报告 pass^k 或重复成功率。

常见 benchmark 的启发

Benchmark值得学习的点
tau-bench / tau2-bench多轮用户模拟、业务状态 diff、pass^k
AppWorld多应用模拟世界、状态单元测试、副作用检查
Terminal-BenchDocker 环境、oracle solution、测试套件、可复现任务
SWE-benchFAIL_TO_PASS/PASS_TO_PASS,修复与回归同时检查
WebArena / VisualWebArenaweb 环境、浏览器操作、多路径完成
OSWorld / AndroidWorld真实 GUI/OS 状态,任务初始化与执行验证

Yehudai 等的 survey 把 agent eval 按能力、应用、generalist agent、benchmark dimensions 和工具生态组织,是建立全局地图的好参考YehudaiSurvey2025。

常见误区

误区 1:只看最后回答。
Agent 可以说“完成了”,但没有做任何事。

误区 2:只看工具顺序。
合理替代路径很多,严格轨迹匹配可能低估成功。

误区 3:只检查正向成功。
没有副作用检查,agent 可能完成任务同时破坏其他状态。

误区 4:eval runtime 与生产 runtime 差异巨大。
这会导致上线后出现 eval 没覆盖的质量回退。

误区 5:只跑一次。
Agent 的关键问题常常是重复运行不稳定。

本章练习

设计一个 agent eval task,包含:

  1. 初始环境状态。
  2. 用户目标。
  3. 可用工具。
  4. 必须记录的 trace 字段。
  5. 至少 2 个 outcome/state checks。
  6. 至少 1 个 side-effect check。
  7. pass^3 的运行计划。
  8. 如果失败,如何用 trajectory 定位问题。

延伸阅读

On this page