你的Agent在排练时表现完美,到了现场演示却走了另一条路,同一个任务直接失败。台上尴尬只是一瞬间的事,放到生产环境里,这就是可靠性问题:一个工作流这次跑通了,下次用户提同样的请求,它未必还能成。

打开网易新闻 查看精彩图片

对账一笔金融交易、核查一份合同里的义务条款,这类任务容不下这种波动。问题在于,大多数基准测试用一个平均值把这种变异性藏了起来。

在AppWorld上,一个由GPT-4.1驱动的ReAct Agent,五次重复运行的平均成功率是77.4%。但五次全部成功的任务只占53.0%——两者之间是24.4个百分点的一致性差距。在困难任务上,这个差距能到30个点。

大多数基准只报第一个数字。有人做了一套方法来测量第二个数字,并试图把它改好。

平均值回答不了的问题

标准评测报的是Mean@k:跑k次取平均通过率,k常常是3,有时只有1。排行榜上那个“77%准确率”,说的就是这个。

它回答的是“这个Agent平均有多强”,回答不了真实用户关心的那句:我把同一个问题再问一遍,它还行不行?要回答这个,得看Pass^k——k次运行全部成功的任务占比。

Pass^k不是Pass@k。后者是乐观版本,问的是k次里至少有一次成功,适合你能验证、能重试的场景。Pass^k是它的悲观镜像:每一次都必须成功。三者的关系恒定为Pass^k ≤ Mean@k ≤ Pass@k。

Mean@k减去Pass^k,就是所谓的一致性差距。这不是换个更大的模型就能修好的能力问题,它是一条正交的轴——一个Agent完全可以既有能力,又不稳定。

Agent为什么会“翻车”

Agent每做一次决定——调哪个API、传什么参数、要不要重试——都是从下一个token的概率分布里采样出来的。关键在于这个分布的形状。

尖锐的分布把大部分概率压在单个token上,后面的候选远远落后,于是每次跑出来都是同一个选择。平坦的分布则把相近的概率摊在几个几乎打平的token上,谁赢接近抛硬币。

形状决定了多大的噪声能改变结果。尖锐分布扛得住扰动:GPU浮点运算的非结合性、请求批处理这些平台侧的效应会轻微推动数值,但远不足以让明确的赢家换人。平坦分布恰恰怕这种推动,接近平局的地方可能被重新排序。而一条轨迹串起几十个决策,每一步微小的翻转概率会复合成整次运行走偏的较大可能——24个点的差距就是这么来的。

这也解释了为什么调解码参数没用。贪心解码和固定种子管的是“分布怎么变成一个token”,管不了分布本身。在托管端点上,概率每次运行都会轻微变化,所以同一个提示词、同一个模型、温度设为零,今天可能把一次接近平局判向这边,明天判向那边。实验里的ReAct Agent就跑在温度0.0上,上面说的方差没有一分来自普通采样。

先诊断,再修

问题于是变成一次搜索:一条给定轨迹里,哪些步骤是平坦的?知道之后又该怎么办?

一致性指南出自一条两段式流水线,接在ALTK-Evolve已有的机制上,只是换了一个新的信号源来决定写什么。

第一步是检测,靠一个叫Consistency Analyzer的工具。给定一条记录下来的轨迹,它把每个决策步骤做受控重采样,测量模型在该点的输出实际波动有多大。具体做法是每个决策步骤多一次模型调用,离线做一次,采样参数设为一次抽取k个补全(默认k=5),对着已经记录好的上下文重放——不发起新的工具调用,不与环境产生新交互,也不把任务端到端再跑一遍。这样得到每个决策步骤的一致性分数,写进记分卡,精确指出哪些决策在下次运行时可能翻转。检测全程黑盒:不需要logits,不需要模型内部信息,除了你手上已有的轨迹之外不需要任何埋点。

第二步是生成,产出有针对性的指南。每个被标记的步骤都变成一条候选一致性指南,格式沿用ALTK-Evolve标准,直接插进现有的存储与检索流水线。下面这条是GPT-4.1从AppWorld任务“按我的SimpleNote笔记,我的愿望清单里有多少项活动”的轨迹里生成的:

  • 统计笔记内容里的复选框式标记时,用按行锚定的正则匹配,而不是普通子串计数——笔记标题经常在图例行里重复出现标记符号。
  • 对笔记类查询的搜索结果,始终检查是否存在多个匹配,确认是正确的笔记后再继续。

这些都不是某个任务专属的琐碎知识。字符串计数bug、未经验证的搜索结果,是许多AppWorld任务里都会出现的高不确定性决策点。这正是重点:分析器瞄准的是不稳定,不是失败——所以它能抓到那些这次侥幸做对、下次很可能做错的步骤。

差距砍半,平均值不掉

评测在AppWorld的test_normal(168个任务)上进行,ReAct Agent配GPT-4.1,每个任务从一条基线轨迹生成一致性指南,然后在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从很低的基线10.1%升到16.1%,涨了+6.0个百分点;有意思的是,相似任务的泛化数字(+8.7个百分点)反而超过了同任务增益,说明这些指南抓到的是真正可复用的失败模式,而不是记住了某条轨迹的细节。

如果你要把Agent发上线

  • 在Mean@k旁边一起报Pass^k。平均值分不清一个Agent是可靠还是走运,哪怕k=3也能暴露一个你不知道的差距。
  • 预期差距会随难度变大。你最难的档位,正是单个平均值最有误导性的地方。
  • 别一上来就换更大的模型。一致性与能力正交,更强的模型抬高Mean@k,未必缩小一致性差距。
  • 诊断不需要评分器,也不需要在线重放。每个决策步骤多一次LLM调用(默认采样k=5个补全)就够了——不需要标准答案,不需要对着环境重跑任务。这让它能用在生产流量上,那种场景里你往往连一次端到端重放都做不到。

ALTK-Evolve的开源仓库已经包含这次实验用到的Consistency Analyzer和一致性指南生成,完整方法论与评测在arXiv的技术报告里。