Skip to content
Guides1 min read

如何为智能体轨迹拿到可靠的标签

标注智能体的多步轨迹比标一条推文难。一份关于设计分类体系、测量逐步一致性、化解分歧的指南,附一份 Potato 配置。

Potato Team

标一条推文是一个决定。标一条智能体轨迹是几十个:运行中的每一步都是一次小判断,而这些判断彼此相关。这正是轨迹标注自成一类问题的原因。两个认真的人通常会在「这次运行是否成功」上达成一致,然后在它十二步里到底哪一步出了错上产生分歧。如果你不为这道缝隙做设计,你「已标注」的轨迹数据就在悄悄地不可靠,而你在其上构建的奖励模型或调试分析,也会继承这份噪声。

一条轨迹是智能体一次运行的完整踪迹:它的目标,然后是每一步的思考、工具调用和观察。标注一条轨迹意味着对整段运行做总体判断,并标出个别步骤在哪里出了错。整段运行的标签容易达成一致;逐步的标签则不然,而有用的信号恰恰在那里。可靠的轨迹数据来自一套紧凑的错误分类体系、刻意测量的逐步一致性,以及一套化解分歧的办法。 这篇文章讲的就是把这三件事做对。

是什么让轨迹难以标注

难点不在步骤的数量,而在步骤并不独立。

  • 错误归因。 当一次运行失败时,可见的失败往往在真正的错误下游好几步之外。智能体在第 3 步做了个糟糕的规划,却在第 11 步以一个错误答案浮现出来。看同一次运行的两名标注员,可以都正确地认为「这一步错了」,却对该归咎哪一步产生分歧。
  • 级联效应。 一旦某一步出错,其后的一切都被污染。后面的某一步是就其本身而言「错」,还是仅仅因为继承了糟糕的状态才错?标注员需要一条针对这种情况的规则,否则他们会分裂。
  • 隐藏状态。 智能体的推理并不总在踪迹里,它的工具还有你看不见的副作用。τ-bench(Yao 等人,2024)的处理办法,是把一次运行结束时的数据库状态与一个标注好的目标状态相比对,因为你常常无法仅凭对话记录判断正确性。
  • 主观的「必要性」。 某一步是「不必要」而非「错误」,是一个判断题,也是实践中最不可靠的标签之一。一次冗余的搜索不是错误,但它也不干净。

先设计分类体系,再标注

分类体系是决定你数据质量的那一部分,值得刻意去构建。最有力的证据,就是那些好的智能体失败数据集正是这么建起来的。MAST,多智能体系统失败分类体系(Cemri 等人,2025)出自专家标注员对 150 条踪迹的研读:他们反复打磨类别,直到达到 0.88 的 Cohen's kappa,然后才扩展到一千六百多条踪迹、它的 14 种失败模式。可靠性来自分类体系的工作,而不是来自更多的标注员。

智能体轨迹剖析:一个目标,随后是一系列步骤,每步含思考、工具调用和观察,最终到达结果,每一步之上叠加逐步判断、错误类别和严重度。一条轨迹是一个目标、一串思考-行动-观察的步骤和一个结果,每一步都带着自己的标签

一套行之有效的分类体系是精简、接近穷尽且互斥的。三个顶层类别覆盖了大多数智能体失败:

  • 推理错误:错误的结论、忽视的证据、糟糕的规划。
  • 执行错误:用错工具、格式错误的调用、被误用的结果。
  • 安全错误:不安全的操作、越权行为、数据暴露。

给标注员一个自由文本的「其他」,让新型失败有个去处,而不是被硬塞进最接近的类别,然后盯着「其他」里的记录,把反复出现的提升为命名类别。AgentRewardBench(Lù 等人,2025)是一个很好的示范,说明在运行层面该捕捉什么:它的专家评审对 1302 条轨迹逐一从成功、副作用和重复性三个维度打分——这三个维度是单一的成功标记会压平掉的。

一棵智能体错误分类树:推理、执行、安全三类,每类再分出命名的子类型,另有一个开放的「其他」分支。一套精简、互斥、并为新型失败留有出口的分类体系

测量多步标签上的一致性

整体成功是容易的标签。两个人看一次运行,大体上会一致它成没成。如果那是你唯一报告的数字,你的数据看起来就比实际更可靠。

在真正困难的地方测量一致性。对步骤正确性和错误类别分别计算标注者间一致性,因为它们表现不同:人们在某一步是否出错上远比在为什么出错上更容易一致。把各标注员对「第一处出错的步骤」的判断对齐,因为那单独一步对训练过程奖励模型最要紧,正是 PRM800K /「Let's Verify Step by Step」(Lightman 等人,2023)所说的意义。并且对自动评估保持怀疑:AgentRewardBench 发现常见基准所依赖的基于规则的检查往往低报智能体的成功率,所以一个廉价的自动标签不能替代人工标签,只能作为第一遍。

化解分歧与培训标注员

轨迹上的分歧不是要被平均掉的噪声。它通常是分类体系有软肋的信号,也是信息。当两名标注员在该归咎哪一步上分裂时,那一对标签就告诉你级联规则没写清楚,而修正会回到指南里。

有两条做法承担了大部分分量。第一,仲裁分歧,而不是投票,因为在一条轨迹上,「你为什么挑那一步」的对话正是真正规则被写下来的地方;见仲裁与化解分歧。第二,在长踪迹上慢慢培训标注员。轨迹让人疲劳,一个在第 40 步的疲惫标注员,和一个在第 2 步的清醒标注员,不是同一台仪器。为长运行设上限或分页,并在标注员独立工作之前,用一组共享的踪迹校准所有人。

在 Potato 里怎么做

Potato 的 trajectory_eval 类型把每一步渲染成一张卡片,并为每步附上一套带严重度权重的错误分类体系,于是上面那些标签成了配置,而不是一份电子表格约定。

yaml
annotation_schemes:
  - annotation_type: trajectory_eval
    name: step_evaluation
    description: "Evaluate each step for correctness and mark any errors."
    steps_key: steps
    error_types:
      - {name: reasoning,  subtypes: [logical_error, factual_error, planning_error]}
      - {name: execution,  subtypes: [wrong_tool, wrong_args, api_error]}
      - {name: safety,     subtypes: [harmful_action, data_leak, scope_violation]}
    severities:
      - {name: minor,    weight: -1}
      - {name: major,    weight: -5}
      - {name: critical, weight: -10}
    show_score: true

严重度权重会汇总成一个轨迹分数,于是你可以给运行排序,并跨模型版本追踪回归。当目标专门是给奖励模型训练找出第一处出错的步骤时,process_reward 类型有一个为此打造的首错模式。Potato 把 13 种格式的踪迹导入一个统一的步骤视图,于是无论一次运行由哪个框架产生,你都能标注它;见智能体标注

继续阅读

由真实智能体基准构建的展示页把这些方案放到了语境中:WebArenaτ-benchAgentRewardBench