Agent 失败,很多时候真不是模型太笨

小岛AI 2026 / 08 / 01

把一条报错从「Nothing happens」改成人话,Qwen2.5-7B 的任务成功率就从 13.4% 涨到了 31.3%。

没换模型,没追加一页 prompt,也没给 Agent 塞一套更花哨的推理框架。

只改了环境返回的那句话。

好家伙,模型圈天天比参数、比榜单、比上下文窗口,最后被一条含糊报错截胡了。

这组实验来自清华 NLP 团队的 ALIGN 论文。论文在 2025 年 5 月就上传了 arXiv,昨天被 OpenBMB 的官方账号重新推到台前。它不是今天刚冒出来的新研究,却很像一张晚到的体检单。Agent 开始接管浏览器、终端和企业工具后,我们终于能看懂这张单子上写的病名。

研究者把它叫作 Agent 与环境错配。

我更愿意把它叫作,接口没把人话说完整,模型替它把空白脑补错了。

先别急着骂模型

ALFWorld 是一个文字交互的家庭任务环境。Agent 要在模拟房间里找东西、移动物体、打开容器,动作看着都不复杂。

实验里,Agent 想检查 1 号架子,于是发出 examine shelf 1。环境内部有一条规则,检查架子前必须先走到架子旁边。Agent 不知道这条前置条件,环境也没解释,只回了一句 Nothing happens

Agent 接收到的信息是,什么都没发生。

它推出来的结论是,架子上什么都没有。

环境真正想表达的却是,你还没走过去,这个动作根本没有执行。

同一条 observation,Agent 和环境读出了两件完全不同的事。一个以为动作成功但结果为空,另一个知道动作从未开始。后面的推理再漂亮,也只会沿着错误状态一路狂奔。

程序员对这种荒诞应该不陌生。接口返回 HTTP 200,body 里只有一个空数组。你以为查询成功且没有数据,服务端其实因为权限不足偷偷跳过了请求。监控全绿,用户什么也看不到,大家围着数据库查半天。

Agent 也一样。它只能根据你给的 action schema、observation 和状态快照理解世界。真实原因留在服务端日志里,对模型来说就等于不存在。

研究者把反馈改成「检查容器前,必须先走到那里」,同一款 Qwen2.5-7B-Instruct,成功率从 13.4% 升到 31.3%。这个数字不能外推成「改报错能让所有 Agent 翻倍」,但它足以拆掉一个很常见的误判。

Agent 失败,不一定是 reasoning 不行。也可能是它从头到尾都没拿到能正确 reasoning 的信息。

两层接口,比一页规则更有用

ALIGN 的做法不复杂。它不动 Agent,也不改环境代码,而是在中间生成一层轻量的 Python wrapper。官方已经把 代码与实验结果公开了。

这层 wrapper 干两件事。

一件是在任务开始前,把环境里的静态规则和隐含约束翻出来。动作要按什么顺序,参数接受什么格式,某一步依赖什么状态,尽量别等模型撞墙后才揭晓。

另一件更关键,它拦住每一步 action,把原始 observation 补完整。动作到底执行了没有,缺哪个前置条件,当前状态是什么,下一次重试要改什么,全部塞回模型能读懂的反馈里。

论文里的两个模块分别叫 INFERRULESWRAPSTEP。前者负责静态规则,后者负责逐步反馈。

消融实验挺有意思。拿掉静态规则模块,ALFWorld 的平均成绩下降 6.72 个百分点。拿掉逐步反馈模块,平均下降 31.79 个百分点。

厉害了,真正救命的不是开场再发一页说明书,而是在动作失败的那一刻,把失败原因讲清楚。

这和人写代码一模一样。你可以在仓库根目录放一份两万字文档,开发者还是会忘。可一旦 CLI 在错误现场直接返回 PRECONDITION_MISSING,再告诉他缺少 go_to:shelf_1,修复路径立刻变短。

坏接口大概长这样。

{
  "ok": false,
  "message": "Nothing happens"
}

更适合 Agent 的接口可以是这样。

{
  "ok": false,
  "code": "PRECONDITION_MISSING",
  "missing": ["go_to:shelf_1"],
  "state_changed": false,
  "retryable": true
}

这不是为了给模型喂更多字。恰好相反,是用更少的歧义,减少它在错误分支里白烧 token。

最刺眼的数字不是 45.67

论文把 ALIGN 放进四个基准环境,除了 ALFWorld,还有做科学实验的 ScienceWorld、模拟商品检索和购买的 WebShop,以及多轮工具调用的 M3 ToolEval

五种 Agent 方法接入 ALIGN 前后的四项基准结果

图源,ALIGN 论文表 1。不同基准的指标口径不同,不能横向比较绝对值

五种 Agent 方法都获得了提升。ALFWorld 上,Vanilla Agent 从 13.43% 升到 60.45%,ReAct 从 19.40% 升到 63.43%,Self-Consistency 从 11.94% 升到 69.40%。五种方法的平均提升是 45.67 个百分点。

这个数字很炸,但我看完 完整论文 PDF后,更在意另一张表。

研究者统计了连续两步以上无效动作的比例。没有 ALIGN 时,ALFWorld 的均值是 80.46%。加入接口后,降到 28.51%,相对减少 65%。ScienceWorld 也从 54.70% 降到 27.28%,相对减少 49%。

ALIGN 接口显著减少连续无效动作

数据来自论文表 2。数值越低,Agent 越少在同一种错误上反复打转

生产环境里的 Agent 最烦人的,通常不是偶尔做错一步。是它拿着同一个错误结果反复试,改几个词又试,token 一路往上涨,状态却停在原地。你在 trace 里往下滚二十屏,看到的还是同一种失败。

连续无效动作少了,才说明 Agent 开始从反馈里学会恢复。这个指标比一次任务有没有碰巧成功,更接近真实系统的可用性。

论文还有一组实验,给我看得一时间无语凝噎。

ALIGN 本身也用模型来分析失败轨迹、生成接口代码。研究者专门拿掉执行验证,只让模型一次生成六个诊断和六个接口,再由模型自己选出最好的那个。

温度设为 0.2 时,ALFWorld 准确率从 13.43% 短暂涨到 22.39%,再跑两轮,直接掉到 0。温度设为 0.5 时,也从 23.88% 一路跌到 1.49% 和 0.75%。

不是哥们,让模型生成验收标准,再让同一个模型宣布自己通过,这个流程看着丝滑,结果差点把系统优化没了。

ALIGN 能 work,靠的不只是 Analyzer 会找问题、Optimizer 会写 wrapper。更关键的是每一轮都真进环境执行,验证错配是否存在,验证接口有没有修好。没过就继续改。

模型自评,不能替代执行验收。

这句话比 45.67 更值钱。

把这套思路搬回真实项目

坦率讲,大多数团队不需要照抄 ALIGN,更不需要为了改一个 tool schema,先搭一套论文里的自动生成系统。实验使用 GPT-4.1 和 Gemini 2.5 Pro 生成接口,模型部署还用了 8 张 A100 80GB。把它包装成低成本魔法,不太诚实。

可它指出的排查顺序,今天就能拿来用。

当 Agent 连续失败时,先把 trace 按「意图、动作、环境真实状态、返回给模型的 observation」四列摊开。重点找那种环境知道、模型不知道的差异。权限不足却返回空结果,参数格式错了却只回通用异常,动作没执行却没有 state_changed,页面跳转失败却仍把旧 DOM 当成新页面,这些都是接口在制造错配。

然后检查 action schema。模型需要知道的不只是字段类型,还包括前置条件、互斥关系、幂等性和副作用。delete_file(path) 看起来只有一个参数,真实系统还藏着路径范围、软删除策略、锁状态和恢复能力。schema 不说,模型不会凭空继承你脑子里的运维手册。

再看错误反馈。一个能让 Agent 恢复的错误,至少要回答四件事,动作是否执行,状态是否改变,失败属于哪一类,下一次能否安全重试。少任何一项,模型都可能把重试写成新的事故。

接着给 observation 加状态差分。不要每一步都扔一份巨大快照,让模型自己在人海里找变化。告诉它新增了什么、删除了什么、哪个字段没变、当前游标指向哪。上下文窗口再大,也不该拿来替接口偷懒。

还有一件很容易漏,给失败轨迹做回归测试。把线上出现过的错配收进一组小用例,换模型、改 prompt、升级工具后都跑一遍。只看最终成功率不够,再记两个指标,连续无效动作比例,以及失败后恢复到有效动作要几步。

我自己的判断是,Agent 工程接下来会越来越像编译器和操作系统之间那层 ABI。模型可以换,策略可以换,环境也可以换,中间那份契约如果稳定、明确、可验证,上下两头才不会每次升级都重新磨合。

接口也会骗人

当然,接口不是写得越啰嗦越好。

如果 wrapper 猜错了失败原因,却用非常确定的语气告诉模型下一步怎么做,它制造的不是对齐,而是一条更有说服力的错误线索。论文里拿掉实验验证后成绩坠到接近 0,已经把这个坑演示得够完整了。

接口还可能把 benchmark 变简单。把所有隐藏规则都提前告诉 Agent,成绩上涨,到底是模型更会解决任务,还是题目把答案露出来了?研究者也承认,现有工作只覆盖三类环境,接口质量主要靠成功率和连续无效动作衡量,还缺更细的诊断指标。

所以,先别把 45.67 个百分点复制到项目汇报里。受控基准里的收益,不能原封不动搬进生产系统。接口增强要守住一条边界,解释环境已经知道的事实,不替 Agent 编造环境不知道的结论。

怎么说呢,我们很容易迷信更聪明的模型,因为换模型像升级发动机,参数表漂亮,发布会也热闹。接口工程更像修仪表盘、换传感器、把故障灯接对,听起来没那么性感。

可航行时,发动机再强,罗盘一直指错方向也没用。

下一次 Agent 在同一个动作上打转,先别急着给模型升舱。看看它收到的那句 Nothing happens

也许该修的,是我们递给它的世界。