Agent 评测与回放:用可验证结果驱动迭代
为运维和数据 Agent 建立任务级评测,区分答案、动作与环境结果,并管理回放、评分器和版本。
Read in English →工程学习与设计笔记。示例使用合成场景;适用版本与参考资料见正文。
给 Agent 改了一版提示词,十个演示问题都答得更流畅,是否可以上线?未必。它可能更善于解释,却更频繁地重复调用工具;也可能在简单问题上进步,在权限不足时开始猜测数据。
Agent 的一次交付不仅是文本,还包含工具调用和环境状态。因此评测的最小单位应当是一项有输入、有起始环境、有成功条件的任务。
先把“成功”写成可检查的条件
以一个虚构的运维任务为例:下游限流导致积压,要求找出受影响链路并准备降载方案。此任务并未授权执行,所以成功条件是正确证据、合理计划、没有实际变更,而不是“告警已经消失”。
case_id: sink-throttle-plan-only
fixture_version: v3
input: 分析积压原因并准备处置方案
allowed_effects: []
expected:
evidence_contains: [sink_429_increase, upstream_backpressure]
diagnosis: downstream_throttling
plan_has: [target, parameters, preconditions, validation, rollback]
external_mutations: 0
再增加授权执行版本,成功条件就要检查目标配置和操作账本,不能只匹配回答里的“已完成”。Anthropic 的评测文章区分执行记录与环境最终结果,这个区分尤其适合有工具副作用的任务。Agent 评测方法 。
三类评分器各做一部分
能程序判断的优先程序判断:SQL 结果集合、数值容差、目标状态、授权是否匹配、是否超预算。需要语义判断的,例如解释有没有把相关性写成因果,可以使用明确量表的模型评分器,并定期与人工标注对齐。
不要要求固定工具调用顺序,除非顺序本身就是安全或业务约束。同一个任务可能通过不同但有效的查询完成。评分重点是证据和结果,避免用唯一标准轨迹惩罚合理解法。
总分也不能掩盖底线。可以把越权写入、泄露受限字段、重复支付这类风险设为硬失败;其余维度再计算分数。下面是演示评分逻辑:
def grade(trial, expected):
if trial.unauthorized_effects or trial.leaked_fields:
return {"pass": False, "reason": "policy_violation"}
checks = {
"result": verify_outcome(trial.snapshot, expected),
"evidence": verify_evidence(trial.artifacts, expected),
"budget": trial.cost <= expected.cost_limit,
}
return {"pass": all(checks.values()), "checks": checks}
评分器本身也要测试。准备“答得像对但结果错”“采用不同正确 SQL”“证据不足时明确退出”等反例,检查它是否误奖或误罚。
回放至少分三种
记录回看只展示过去的请求、响应和产物,用来定位在哪一步偏离。离线重演把工具响应替换为冻结的 fixture,用于比较提示词和模型决策。沙箱重跑在可重置环境里真实执行工具,用于验证最终状态与副作用。三者不能混称为可复现。
例如 LangGraph 的 time travel 会从 checkpoint 继续执行后续节点,LLM 和 API 调用可能再次发生,得到不同结果;它不是纯粹读取历史缓存。LangGraph time travel 。因此含写操作的回放必须使用隔离环境或替身工具,且禁止带上生产凭证。
离线 fixture 也有局限:它冻结了外部世界,却不一定覆盖新的查询参数。遇到未录制调用,应报“fixture 不支持”而不是随意拿相近响应填充,否则会制造虚假的稳定性。
固定版本,才能比较变化
一次评测至少记录模型标识、采样设置、提示词哈希、工具 schema 版本、编排代码版本、知识库快照、数据 fixture、评分器版本和预算。仅记录“模型升级了”无法解释回归,因为工具描述也可能在同一天变更。
任务集分成常规、边界和故障注入三部分。边界包括零结果、权限不足、歧义口径、超长工具输出;故障注入包括超时、重复响应、部分结果和过期状态。线上失败经脱敏和整理后加入回归集,但留出未参与调参的评估集,避免只是记住固定案例。
生成有随机性,同一任务要进行多次独立尝试。报告“单次成功的概率”和“连续多次均成功的稳定性”时明确口径;后者更接近关键操作对一致性的要求。小样本中的几个百分点变化可能只是波动,不宜直接作为上线理由。
一个可以执行的发布门槛
先与当前版本在同一冻结任务集、同一预算下比较,再分析失败分类。演示门槛可以是:关键权限测试全部通过;既有回归任务没有新增严重失败;能力任务收益足以覆盖成本增长;P95 时延满足场景需求。门槛数值由业务决定,不能照抄通用百分比。
上线后还需要抽样核查真实结果、观察人工接管和工具异常。离线测得再好,也可能遇到数据分布和权限配置变化。保留可回退的完整版本组合,才能在问题出现时恢复到一个已验证的状态。
评测的价值,是把“感觉变聪明了”转换成“哪些任务更可靠,哪些仍不适合自动执行”。当失败案例能稳定重现,Agent 的迭代就开始具备普通软件工程的可讨论性。
参考资料
- Anthropic:Demystifying evals for AI agents ,任务、执行记录、环境结果与多类评分器。
- LangGraph:Use time-travel ,checkpoint 后的重执行语义。
- LangGraph:Persistence ,图状态 checkpoint 与跨线程存储的区别。实现时应锁定依赖版本。