IBM Research 提出一致性指南,将 Agent 一致性差距从 24.4pp 降至 12.0pp
Your Agent Aced the Task. Will It Do It Again?
IBM Research 在 Hugging Face 博客介绍 ALTK-Evolve 新增的一致性指南,用于解决 Agent 重复执行同一任务时结果不稳定的问题。
你的 agent 在排练时表现正常,但在现场演示时,它走了另一条路径,同一个任务却失败了。
在台上这很尴尬。在生产环境中,这是一个可靠性问题:一个曾经成功过的工作流,下次用户提出同样的请求时可能会失败。对于关键任务,比如核对一笔金融交易或检查合同中的某项义务,这可能会成为致命问题。
大多数基准测试用平均值掩盖了这种波动性。在 AppWorld 上,使用 GPT-4.1 的 ReAct agent 在五次重复运行中,77.4% 的运行成功。但它只在 53.0% 的任务上五次运行全部成功——这是一个 24.4 个百分点的一致性差距。
大多数基准测试报告的是第一个数字。我们构建了一种方法来衡量第二个数字——并改进它。
在之前的一篇文章中,我们介绍了 ALTK-Evolve——一个将 agent 自身过去的轨迹转化为可复用指南的系统,这些指南被自动蒸馏出来,并在推理时注入回去。它可衡量地提升了任务成功率,但这些结果也只回答了平均情况的问题。本文介绍 一致性指南,这是 altk-evolve 中的一种新指南类型,构建在我们称为 Consistency Analyzer 的诊断工具之上,直接针对这一差距。
TL;DR
- 准确率掩盖了一个不可靠性问题。 一个 ReAct agent(在 AppWorld
test_normal上使用 GPT-4.1)平均 77.4% 的时间能成功,但只在 53.0% 的任务上全部 5 次重复运行都成功——这是一个 24.4 个百分点的一致性差距。在困难任务上,这一差距达到 30 个百分点。 - 我们正是为此构建了一个诊断工具。 Consistency Analyzer 对 agent 自身记录的轨迹进行重采样,以找出容易翻转的决策点——即模型只差一个 token 采样就会做出不同选择的步骤。它只需要一条轨迹,不需要 ground truth——它对该轨迹中的每个决策点进行重采样,通过一次请求 k 个补全的调用(默认 k=5),而不是端到端地重新运行任务。
- 将这种诊断转化为指南,把差距减半——从 24.4pp 降至 12.0pp(同任务 Pass⁵ +16.0pp,相似任务 +13.0pp),且不损失任何平均准确率。
- 完整方法和评估见 arXiv 上的技术报告。
几乎没人报告的那个指标
标准的 agent 评估报告的是 Mean@k:运行基准测试 k 次,对通过率取平均。通常 k=3,有时只有 1。这是每个排行榜上的数字,也是实践中“77% 准确”的含义。
Mean@k 回答的是“这个 agent 平均有多好?”它没有回答真实用户关心的问题:如果我再问一次这个完全相同的问题,它还会表现良好吗? 为此你需要 Pass^k:agent 在全部 k 次运行中都成功的任务比例。
⚠️ Pass^k 不是 Pass@k。 大家熟悉的 Pass@k 是乐观的——它问的是 k 次尝试中是否至少有一次成功,这是当你能够验证并重试时该问的问题。Pass^k 则是它悲观的镜像:每一次尝试都必须成功。相同的字母,相反的问题。始终有 Pass^k ≤ Mean@k ≤ Pass@k。
一个由 GPT-4.1 驱动的 ReAct 智能体取得了 77.4% 的 Mean@5——确实很强。但 Pass^5 仅为 53.0%。基准测试中近四分之一的任务,是智能体有时能解决、有时却解决不了的,而任务本身在多次运行之间没有任何变化。我们把这一差距——Mean@k 减去 Pass^k——称为一致性差距。
这不是靠更大的模型就能解决的性能问题。它是一个正交的维度:一个智能体可以既有能力又不一致。
智能体为何摇摆:尖锐决策与平坦决策
每当 LLM 智能体做出决定——调用哪个 API、传什么参数、是否重试——这个决定都来自一个关于下一个 token 的概率分布。关键在于该分布的形状。一个尖锐的分布把大部分概率质量集中在单个 token 上:紧随其后的候选远远落后,于是同样的选择在一次次运行中稳定复现。一个平坦的分布则把相近的概率质量分散在几个几乎并列的 token 上,最终哪个胜出近乎抛硬币。
分布的形状决定了需要多大的噪声才能改变结果。尖锐分布具有韧性——GPU 浮点运算的非结合性、请求批处理以及其他平台侧效应会轻微扰动数值,但远不足以让一个明显的胜者被重新排序。平坦分布恰恰容易受这种扰动影响:在微小扰动下,几乎并列的候选可能重新排序。而由于一条轨迹串联了数十个决策,每一步微小的翻转概率会累积成某次运行结果不同的较大概率。24 个百分点的差距正源于此。
这也解释了为什么该问题在你的解码设置下依然存在。贪心解码和固定随机种子都只控制分布如何被转化为 token——它们对分布本身只字未提。在托管端点上,概率会随运行略有变化,因此同一个提示词、同一个模型、温度为零,今天可能把一次几乎并列的抉择判向一边,明天却判向另一边。
我们的设置:该 ReAct 智能体运行在温度 0.0 下,因此上述所有方差都不是普通的采样造成的。
先诊断,再修复
这就把问题变成了一次搜索:给定轨迹中哪些步骤是平坦的——而一旦知道了,又该如何处理它们?
一致性指南出自一条两阶段流水线,它接入 ALTK-Evolve 现有的机制——由一个全新的来源信号驱动所生成的内容。
1. 检测——一致性分析器。 给定一条已记录的轨迹,分析器通过受控重采样回放每个决策步骤,测量模型在该点的输出实际变化有多大。具体来说,即每个决策步骤额外调用一次模型,离线执行一次——调用时设置采样参数以一次性抽取 k 个补全(默认 k=5)——针对已记录的上下文进行回放,不发起新的工具调用,不进行新的环境交互,也不对任务做第二次端到端运行。这样便得到每个决策步骤的一致性分数,并写入记分卡,以精确定位哪些决策在下一次运行中有翻转风险。检测完全黑盒——不需要 logits,不需要模型内部信息,除了你已有的轨迹之外不需要任何额外插桩。
2. 生成——针对性指南。 每个被标记的步骤都会成为标准 ALTK-Evolve 格式的候选一致性指南,从而无缝接入现有的存储与检索流程。以下是一个真实示例,由 GPT-4.1 根据 AppWorld 任务“How many activities are done in my bucket list as per my SimpleNote note?”的一条轨迹生成:
[指南 1] 在统计笔记内容中的复选框式标记时,应使用按行锚定的正则匹配,而不是简单的子串计数——笔记标题常常在图例行中重复该标记符号。
[指南 2] 对于笔记查询,务必通过检查是否存在多个匹配项并确认正确的笔记来验证搜索结果,然后再继续操作。
这里没有任何任务特定的琐碎细节。字符串计数错误和未经验证的搜索结果,是在许多 AppWorld 任务中都会以高不确定性出现的决策点。这正是关键所在:分析器针对的是不稳定性,而非失败——因此它能捕捉到智能体这次恰好做对、但下次很容易做错的步骤。
观看 2 分钟演示——智能体的五次并行运行在该任务上因智能体对计数策略的不确定性而分成 3-2 两派,然后在上下文中加入这些指南后再次运行:五次全部一致。
结果:在不损失准确率的前提下缩小差距
我们在 AppWorld test_normal(168 个任务)上使用 GPT-4.1 的 ReAct 智能体进行评估,为每个任务从单条基线轨迹生成一致性指南,并在 5 次全新运行中测试这些指南。
Mean@5(%),汇总——与上文的 Pass^5 同一尺度。
一致性差距大约缩小了一半。 汇总 Pass^5 从 53.0% 升至 69.0%,同时 Mean@5 从 77.4% 升至 81.0%,将“看起来有能力”与“可以信赖”之间的差距从 24.4 个百分点缩小到 12.0 个百分点。近三分之一此前不一致的任务,变成了智能体每一次运行都能通过的任务。
中等和困难层级获益最多。 中等 +22.9 个百分点(相对提升 +44%),困难 +14.3 个百分点(相对提升 +45%)——相对提升基本持平,中等层级绝对提升更大。简单层级提升 +12.2 个百分点,因其提升空间最小。这正是一致性指南在发挥其设计作用:找出并稳定那些智能体自身不确定性正在影响结果的特定决策点。
Mean@5 从未下降。 保持平均准确率是一项硬性要求,而非锦上添花:一个以牺牲 Mean@5 来提升 Pass^5 的系统,只是在转移不可靠性,而不是修复它。平均准确率在每个难度层级都保持或有所提升。
这些指南具有泛化能力——它们不是在修补某一条轨迹
将其应用于同一 AppWorld 场景中另一个不同但相关的任务——即指南所挖掘场景的另一个变体——一致性指南仍将 Pass^5 提升了 +13.0 个百分点,仅比同任务数字低 3 个百分点。从一次运行中得出的指南,不仅仅是在修补那次运行;它捕捉到了可迁移的东西。
更清晰的证据来自一个较弱的模型 gpt-oss-120b。同任务 Pass^5 从低得多的基线提升了 +6.0 个百分点(10.1% → 16.1%)——而且有趣的是,相似任务泛化数字(+8.7 个百分点)实际上超过了同任务提升,这表明这些指南捕捉到的是真正可复用的失败模式,而不是记住某条轨迹的具体细节。
如果你要发布一个 Agent
- 在 Mean@k 旁边报告 Pass^k。 平均值无法区分一个可靠的 agent 和一个走运的 agent;即使 k=3 也会暴露出你此前不知道存在的差距。
- 预期差距会随难度扩大。 在你最难的层级上,单个平均值最具误导性。
- 不要一上来就换更大的模型。 一致性与能力是正交的。更强的模型会提高 Mean@k;它不一定能缩小一致性差距。
- 诊断不需要评分器,也不需要实时回放。每个决策步骤多一次 LLM 调用(默认采样 k=5 个补全)就足够了——不需要 ground truth,也不需要针对环境重新运行任务。这正是它能在生产流量上使用的原因,而在生产流量中,你往往连一次端到端回放任务都做不到。
试一试
试试 ALTK-Evolve —— 这个开源仓库现在包含了这些实验中使用的一致性分析器和一致性准则生成功能 —— 或者阅读 arXiv 上的技术报告 了解完整方法论。
如果你对无法在自己的任务上复现的准确率数字感到熟悉,我们很想听听——你自己的 agent 中容易翻转行为的具体例子,正是能影响我们下一步构建方向的反馈。提交 issue 或发起 discussion。
附录:理解这些指标
- Mean@k。 运行一个任务 k 次,报告平均通过率——大多数基准测试称之为“准确率”。
- Pass^k。 agent 在 全部 k 次独立运行中都成功的任务比例。始终 ≤ Mean@k。这是用户运行同一查询两次时所体验到的情况。
- Pass@k k 次运行中至少 一次 成功——乐观的对应指标,常见于代码生成论文中。
- 一致性差距。 Mean@k − Pass^k,以百分点计。
相关产物 / 参考资料
- ALTK-Evolve 开源仓库 —— github.com/AgentToolkit/altk-evolve
- 技术报告 —— arXiv
- 一致性准则演示 ——2 分钟视频
来源:Hugging Face Blog · huggingface.co