同一个任务,要求 Agent 搜索某个 API 的最新用法并写成摘要,可能跑出三条轨迹:
search -> summarize
search -> read -> summarize
webfetch -> summarize
哪一条才算对?
答案可能是,三条都对。只要 Agent 读取了权威来源,先拿到证据再写摘要,最终引用了官方文档,就没有必要规定它必须调用同一个工具、走同一条路径。
如果评测只认一条预先写死的 golden path,两次本来合理的执行会被误判失败。可如果完全不看过程,只验收摘要,又可能放过没有读取来源、直接凭记忆生成的答案。
这个小例子把 Agent 评测里最关键的对象暴露了出来。
评测的最小单元不是 prompt,而是一次完整的 task run。
一次 prompt 只描述模型收到的一段输入。一次 task run 则要装下用户目标、输入、成功标准、运行环境、可用工具与权限、执行 trace、最终结果和评分。后面讨论 Context、Plan、Tool、State、Memory、安全和回归时,都要回到这个完整单元,看模块怎样影响任务成功,以及证据能不能证明它没有破坏任务。
可以把 task run 想成一个证据盒。盒子里不是只有答案,而是一组彼此有关联的对象:
CLAUDE.md、memory record 和 memory diff。这些对象的边界很重要。Context 是这一步能看到什么,State 是这次任务进行到哪里,Memory 是哪些信息会跨任务留下来。混在一起记录,问题出现时就很难判断是信息选错、进度丢失,还是旧记忆污染。
证据盒装的是对象,指标回答的是怎样评价这些对象。一个总分很容易掩盖问题,所以总指标模型可以拆成八层:
同一条运行完全可能出现「任务级通过,安全级失败」。也可能结果正确、工具调用略多,因此只扣成本分而不判任务失败。分层的价值正在这里,团队看到的不是一个模糊的高低分,而是问题落在哪个对象、哪个层级。
反过来看,很多所谓 Agent 失败,其实是评测定义先出了问题。Task 没写清什么算成功,case 和 rubric 就无从判断;最终答案看着正确却没有引用工具结果或业务状态,这是 grounding 证据缺失;只统计工具调用数量,会把必要探索误判成低效;人工判断没有 rubric,评分也无法复现。
最常见的两个极端,一个是只看最终答案,危险调用和越权读取全部隐身;另一个是把黄金路径写得过死,多条合理轨迹反而被判错。
Agent 评测要约束关键节点,不要规定每一步脚印。
为了让不同模块的证据能对齐,可以先约定一个简单的统一模型:
trace = one task run
span = one meaningful operation
一次完整任务对应一个 trace,一次有意义的操作对应一个 span。常用 span 类型包括:
context.loadplan.createtool.calltool.observestate.updatememory.readmemory.writepermission.decisioncheckpoint.createfailure.recoverscore.computereview.human每个 span 至少记录 span_id、parent_span_id、type、start_time、end_time、status、input_ref、output_ref、error、cost 和 evidence_ref。
有了父子关系和证据引用,测试人员才能回答一组真正有用的问题。摘要之前读了什么?工具报错后是谁触发了重试?某次 state update 依据哪条 observation?最终结论又引用了哪份 artifact?
Trace 的作用不是逼所有 Agent 走同一条路,而是让每一条被接受的路都能说清依据。
一套实用的评分通常由三部分组成:
对 Agent 任务,不建议把「最终答案相似度」当作主指标。更稳的方式,是把任务拆成关键检查点:
检查点可以约束先后关系,也可以设置必须出现和禁止出现的证据,却不用指定唯一序列。这样既容纳 Agent 的路径多样性,也没有放弃可验证性。
只有正常成功样本,很难验证这套指标能不能归因。第一批数据可以按风险铺开:
这些样本跑完后,失败应当能归因到模型、工具、数据、权限、状态或流程,而不是只留下一句「Agent 没做好」。
回到开头。这里不该固定唯一 golden path,更合理的是定义四类约束:
accepted trace pattern,必须出现权威来源读取。partial order,摘要必须发生在读取证据之后。must-have evidence,最终答案必须引用官方文档。cost-risk scoring,多余搜索可以扣成本分,但不直接判失败。这样评测的就不再是 Agent 有没有模仿某条标准动作,而是它有没有在明确约束下完成任务,并留下足以证明结果的证据。
落地前再核对一次,task run 是否真的是评测单元,成功标准是否写进 rubric,八层指标是否分开,tool call 与 observation 是否都保留,多条合理轨迹是否被允许,人工复核与裁判校准是否有入口。
这些定义站稳以后,后面的上下文、规划、工具、状态、记忆、安全和回归,才不会停留在概念解释,而能继续落到样本、span 字段、评分规则和发布准出。