失败的智能体,第一轮就已经露出影子
失败的智能体,第一轮就已经露出影子
一个代码智能体跑偏时,最浪费的往往不是最后报错的那一秒,而是它早就误解任务之后仍然继续执行的十几分钟。它安装依赖、反复试错、写入错误文件、解释错误日志,直到超时或交出一个错误答案。对服务方来说,这些 token 已经花掉;对用户来说,这段等待也已经发生。
这篇论文抓住的就是这个不舒服的事实:很多 LLM agent episode 在外部行为真正露馅之前,内部表示里已经出现了“这条轨迹大概率完了”的信号。研究者在 TextCraft 这个多步文本合成环境里测试两个 agent——Llama-3.2-3B 和 Qwen-2.5-7B。结果很直接:只看可观测行为的 scorer,在第一轮几乎只比随机好一点;而读隐藏状态的轻量探针,第一轮就能达到甚至超过行为 scorer 两三轮之后的峰值,并在第二轮达到自己的峰值。
更重要的是,他们没有把这个信号停留在“可预测失败”的离线发现上,而是做成一个可以部署的停止规则:如果要提前杀掉注定失败的 episode,就必须先保证那些本来会成功的 episode 不会被系统悄悄误杀太多。在 90% 全局成功召回目标下,这个 recall-controlled abort cascade 在 Qwen-2.5-7B 上节省 47.1%±10.3% 推理计算,在 Llama-3.2-3B 上节省 37.2%±8.8%,是最佳单点门控策略的 1.6–1.7 倍。
先把几个概念放到桌面上
这里的 episode,可以理解成一个智能体从接到任务到结束的整段行动轨迹:每一轮先观察环境,再生成动作,环境再反馈新状态。doomed episode 不是“已经失败”的 episode,而是“后来会失败、但现在还在继续花钱”的 episode。隐藏状态探针 像是在汽车仪表盘背后接一根细线,不看司机说了什么,只读模型在生成动作最后一个 token 时 residual stream 里的向量,再用一个 logistic regression 预测最终会不会失败。召回 在这里保护的不是失败样本,而是成功 episode:一个 95% 全局成功召回承诺,意思是本来会成功的轨迹至少有 95% 要活过所有停止门。级联 则是在前六轮各放一个门;episode 只有一路通过,才继续跑完。

为什么“第一轮就看出来”不是一句玄学
直觉上,早停 agent 似乎应该看行为:有没有重复、有没有 invalid action、环境反馈里有没有 error 或 fail。这也是论文里的 surface scorer 做的事。它只能使用服务 API 通常能看到的特征:当前轮 action token 的平均 log-probability、前面几轮的平均 log-probability、生成 token 数、prefix 长度,以及历史环境反馈中错误关键词的数量。
问题在于,第一轮的时候这些证据太少。一个 agent 刚开始行动,即使方向错了,也未必已经触发 invalid action;即使未来会陷入循环,也还没有循环可看。论文的 Figure 3 显示,行为 scorer 第一轮几乎接近 chance,要到第 3–4 轮才变得有信息量。可到那时,论文的环境里已经有超过三分之一 episode 在前两轮内结束,很多可节省的剩余计算已经消失。
隐藏状态探针看的是另一层东西。研究者在每个 gate round 提取 agent 生成动作最后一个 token 的 residual-stream hidden state:Llama-3.2-3B 用 28 层中的第 14 层,Qwen-2.5-7B 用 28 层中的第 20 层;这两个层数来自独立 pilot rollout 上的 per-layer probe-AUC sweep。每一轮训练一个标准化特征上的 L2 logistic regression,预测最终失败 1-y。
结果的关键不是 AUC 多高,而是时间顺序反过来了:probe 第一轮已经达到或超过 surface scorer 最终峰值,第二轮达到自己的峰值;在最值钱的前几轮,probe 相对 surface scorer 有 0.12–0.21 AUC 的绝对优势。到第 6 轮两者才逐渐收敛,但那时多数 episode 已经结束,剩下的是更难区分的长尾 case。
这就是标题里 “Doomed from the Start” 的含义:不是说模型第一步就显式犯错,而是说它内部的任务理解、计划状态或不确定性,已经以线性可读的方式预示了结局。
真正难的不是早停,而是不误杀好轨迹
如果只追求省钱,策略很简单:第一轮分数一高就杀。问题是,被杀掉的 episode 里可能有本来会成功的。对 agent 系统来说,这不是普通误报,而是直接摧毁任务奖励。论文因此把风险定义成 global success recall:在所有最终本来会成功的 episode 中,有多少比例能通过所有 gate 并运行到完成。
这一步很关键。因为多轮监控的风险会累积。即使每个 gate 单独看都“很少误杀成功轨迹”,一条成功轨迹也必须通过第 1、2、3……所有门。单点 recall 不能自动变成 episode-level recall;把每轮 98% 生存率相乘,也不是一个足够实用的部署保证,因为不同轮看到的成功样本数量不同,误杀事件也不是独立同分布。

论文的做法是给每一轮一个阈值,但阈值不是拍脑袋选。对某一轮 gate,研究者只看校准集中“最终成功、且活到这一轮”的 episode。阈值必须让这些成功 episode 的通过率,在 Clopper–Pearson exact binomial lower confidence bound 下达到这一轮的 recall budget。换句话说,它宁可保守一点,也要在有限样本下说明:这个门不会轻易杀掉成功轨迹。
然后问题变成:六个 gate 的 per-round recall budget 应该怎么分?论文把预算向量放在 {0.85, 0.90, 0.95, 0.98, 0.99, 1.0} 的网格上搜索。六轮就是 46,656 个候选。每个候选先在 calibration split 上定各轮阈值,再在 validation split 上模拟整个 cascade,记录全局召回和 compute savings。默认策略要求 validation recall 至少达到目标再加 0.02 safety margin,然后选择节省最多的预算。
这里的 0.02 不是形式上的小修小补。论文后面专门验证了它:八个主配置里,搜索预算的 validation recall 比 test recall 高 0.008–0.030,正好是多候选搜索带来的 selection optimism;去掉 margin 后,在 0.95 目标下 test recall 会掉到 Qwen 的 0.943±0.032 和 Llama 的 0.942±0.024,低于目标,但节省计算会升到 41.0% / 26.3%。这就是论文最诚实的权衡:多省的那些钱,买的是更高的误杀风险。
级联的价值:把预算花在最值钱的轮次
论文实验设置并不复杂。TextCraft 来自 AgentGym,是一个文本 crafting 环境,agent 要通过多步配方合成目标物品,最终只有成功或失败标签。研究者对 Llama-3.2-3B 和 Qwen-2.5-7B 各收集 800 个 episode、100 个任务,每个任务 8 条轨迹;Llama 成功率 63.0%,Qwen 成功率 74.8%;采样温度 1.0;episode 最多 20 轮,但 gate 只放在第 1–6 轮。任务按组切分:20% 任务做 calibration,20% 做 validation,60% 做 test,避免同一个任务同时出现在训练和评估两侧。整套流程重复 20 个随机种子,报告 test split 的均值和标准差。
为什么级联比单点门控强?因为每轮的“代价”和“收益”不同。早期 gate 看到的成功 episode 多,误杀一个好轨迹的机会也多,所以 recall 很贵;但早期一旦杀掉失败轨迹,能省下最多剩余计算。晚期 gate 对 recall 比较便宜,因为能活到那里的 episode 少;可它也守不住多少剩余计算。最优策略不是每轮一样严格,而是把预算放到真正值钱的位置。

Table 1 的数字说明了这一点。在 0.90 召回目标下,Llama 的 cascade 节省 37.2%±8.8%,single-gate 只有 23.6%±5.3%,uniform 只有 3.1%±2.5%。Qwen 的 cascade 节省 47.1%±10.3%,single-gate 27.6%±5.6%,uniform 6.9%±5.7%。目标更严格时节省会下降,但结构优势仍在:0.95 目标下,Llama cascade 仍有 19.9%±9.2%,Qwen 仍有 32.0%±12.2%;0.97 目标下分别是 9.3%±7.7% 和 18.2%±12.5%。
论文还给了一个很有解释力的预算例子:Llama 在 0.90 目标下的 modal allocation 是 (0.95, 0.85, 0.85, 1.0, 1.0, 1.0)。也就是说,它在第 1–3 轮积极使用预算,在第 4–6 轮直接禁用 gate。uniform allocation 之所以几乎崩掉,是因为它被迫在早期贵门和晚期低收益门上花同样的 budget,最后两头都不讨好。
另一个反直觉结果是,Qwen 成功率更高,按理说失败 episode 更少可杀,但它节省反而更大。论文给出的解释有两个:Qwen 的失败信号在每个 gate 都更强;而且 Qwen 的 episode 结束更早,失败样本在中段 gate 上变得更可分。这里的 Big Picture 是:早停收益不只由失败率决定,还由“失败能否早被分开”和“剩余计算还剩多少”共同决定。
只看行为行不行?差不多省一半
论文最有部署味道的问题是:如果服务栈拿不到内部 activation,只看外部行为能不能用同一套级联?答案是能用,但弱很多。
在 0.95 全局召回目标下,Qwen 的 probe cascade 节省 32.0%,surface cascade 只有 17.0%,大约少一半;Llama 上差距也存在但较窄。把 surface features 拼到 probe features 后,收益没有进一步提高,落在 probe alone 的噪声范围内。这说明行为证据包含的信息,隐藏状态基本已经捕获;但隐藏状态里有的信息,行为还没来得及显露。
不过 cascade 对弱信号也有帮助。论文指出,从 single gate 到 cascade,surface savings 大约乘以 3.6,而 probe 约乘以 1.9。原因很自然:surface signal 只在第 3–4 轮成熟,单个早期 gate 用不上它;cascade 可以把部分预算延后,等行为证据出现。但这不是说 cascade 可以替代早期信号。论文特别强调,即使在 surface single gate 的最佳放置轮次,它也比 probe single gate 第 1 轮更弱。
可证明承诺的边界:0.99 不是想喊就能喊
论文还有一个值得单独拎出来的贡献:它不只告诉你能省多少,也告诉你哪些召回承诺现在的数据根本支撑不了。
默认 margin 策略是经验保护,不是定理。作者还给了一个更严格的 certificate variant:在 validation split 上对全局召回本身做 Clopper–Pearson lower bound,要求这个 lower bound 超过目标。这样可以得到 distribution-free 的全局保证,但代价是保守,尤其在样本不大时。

这里有一个“rule of three”式的样本账单。即使一个策略什么都不杀,validation lower bound 也只有 α_m^(1/n_pos);目标高过这个上限时,任何策略都无法被认证。论文的 split 里成功 validation episode 数是 Llama 113、Qwen 115,所以可认证目标大约封顶在 0.974。结果也确实如此:0.98 和 0.99 目标下,certified variant 连 no-op 都无法认证,只能 abstain,节省为 0。Figure 7 还标出,0.98 和 0.99 需要的成功 validation episode 大约是当前的 1.3× 和 2.6×。
这不是方法失败,而是它拒绝伪装。很多系统会说“我们有 99% 召回”,但如果验证数据规模不够,这句话只是愿望。论文的价值在于把愿望变成账单:800 个 episode 足以支持 0.95–0.97 的承诺,但不足以支持 0.99。
论文证明了什么,没有证明什么
这篇论文证明了几件很具体的事。
第一,在 TextCraft、Llama-3.2-3B 和 Qwen-2.5-7B 这两个 agent 上,最终失败确实能从早期 hidden activations 里线性读出,而且第一、二轮尤其有用。第二,一个按轮校准、按全局召回搜索预算的 abort cascade,可以在 90%–97% 目标下都让 achieved recall 匹配目标;八个 agent-target 配置里,mean test recall 离目标最多 0.027,并且都在一个标准差内。第三,在 90% 召回目标下,节省计算达到 37.2% 和 47.1%,明显超过最佳单点 gate;这说明多轮预算分配不是装饰,而是收益来源。第四,认证高召回目标需要足够多成功验证样本,这个成本可以被明确计算。
它没有证明的边界也同样重要。
首先,实验只覆盖一个环境 TextCraft、两个模型、每个模型 800 条 episode。网页导航、真实代码仓库、机器人控制里的失败形态是否同样早期线性可读,需要重新验证。其次,论文的 activation 是通过 offline teacher-forced re-run 提取的;作者说明部署时可以在生成时读取最终 token 的 activation,不需要额外 forward pass,但让高性能 serving stack 暴露中间 activation,仍然是实打实的工程任务。第三,论文报告的是 generated token savings,不等于真实 wall-clock 或美元成本等比例下降;批处理、prefill/decode 差异、空出来的 GPU capacity 是否能被复用,都会影响最终账单。第四,它只报告“省下的计算”,还没有闭环测试把这些计算重新分配给 retry 后,端到端任务成功率会怎么变。
所以这篇论文最值得带走的不是“以后所有 agent 都第一轮杀一半”。真正的启发是:agent 推理计算可以被当成一种有风险预算的资源来管理。过去我们常问“这个 agent 能不能做完任务”;这篇论文把问题改成:“当它开始走错时,系统能不能足够早地知道,并且诚实地说明提前停止会牺牲多少本来成功的轨迹?”
如果未来的 agent 系统要大规模服务长任务,这种诚实会变得越来越重要。省计算不是难事,难的是省下计算的同时,不把失败成本转嫁成不可见的成功率损失。Doomed from the Start 给出的答案是:读内部状态,早一点行动;用全局召回约束,慢一点承诺。两者放在一起,才像一个能部署的 agent 早停系统。