Learning When to Plan
Agent 规划 · arXiv 2025

Learning When to Plan:每步都规划反而更差,让智能体自己学会「何时该想」

ReAct 把「动手前先想」写死在每一轮循环里。论文在 Crafter / POGS 上的实验显示:零样本下每步都规划既不省钱也更差,存在一个中间的最优规划频率。 做法是把「何时规划」写成一次收益减成本的决策,再用「SFT 启动 + PPO 微调」把这项元认知能力教给 8B 模型。 代价是必须依赖教师的示范数据,且只在两个回合制环境里验证过。

Paglieri, Cupiał, Cook, Piterbarg, Tuyls, Grefenstette, Foerster, Parker-Holder, Rocktäschel · UCL / Oxford / NYU / Princeton 等 原文 arXiv 2509.03581 ↗
TL;DR · 30 秒抓住核心

常见的 agent 框架要么每步都想(ReAct 式「总是规划」),要么从来不想(只输出动作)。论文指出两者都次优:过度重规划会让智能体在子目标之间来回摇摆,论文用 Cnoise(不稳定性成本)描述它。

零样本实验里,性能随规划频率先升后降,形成一个「金发姑娘区」。在 Crafter 上 70B 模型规划「每 4 步一次」拿到 0.379,比「从不规划」0.343 和「总是规划」0.349 都高。

方法只有两步:先用教师模型生成 1,024 条带 <plan> 的轨迹做 SFT,再用 PPO 在环境里微调。关键是 SFT 不能省——直接对基座做 RL 并鼓励它规划,得分会掉到 0.210,比不规划的 0.274 还低。

0.387
8B SFT+RL 动态规划在 Crafter 的得分
超过 70B 零样本峰值 0.379
−85%
输出 token 相对 70B 最佳配置
1,714 vs 11,510
0.210
跳过 SFT、直接 RL 学会员(Base+RL 动态)得分
比不规划还低
01

「总是规划」和「从不规划」都不对:存在一个中间的最优频率

读完这节应知道:为什么把规划频率钉死会同时付出「钱」和「性能」两笔账。

推理模型的经验是「多想一点、答得更好」。但把一个单轮问答换成长程序贯决策,这条单调规律就不成立了。智能体每一步都在环境里行动,环境也在变;一个五步前写下的计划,跑到第三步可能已经过期。

于是有人把规划塞进每一轮循环——这正是 ReAct 的做法:每一步都先写一段自然语言思考,再挑一个动作。论文认为这带来两类代价:

在 POGS 环境里,论文用「访问了前两步所在节点」的回溯次数来量化这种不稳定(Figure 6):「总是规划」的智能体回溯最多(柱高约 7),成功率也低于每 3–4 步规划一次的智能体;而「从不规划」的回溯同样偏高(约 5.6),只是原因不同——它根本没有方向。

核心前提

两个极端都差,中间最好

问题由此变成一个时间维度上的算力分配问题:不是「怎么规划」,而是「在一条长轨迹的第几步、因为什么才值得花 token 去规划」。论文称之为 dynamic planning。

02

两条现成路线:固定频率的提示词学不会,外部触发又绕开了模型本身

这一节给出对照:为什么「提示模型学会何时规划」行不通,以及论文和已有工作在哪一刀切分。

路线 A

固定频率规划

不改权重,只改系统提示词:让模型每 k 步(k = 1, 2, 4, 8 …)写一次计划,其余步只输出动作;或干脆从不规划。

发现问题:论文试过直接提示「只在必要时规划」。模型很少能稳定理解这种抽象指令,总是退化成「总是规划」或「从不规划」。零样本里因此根本无法给出一个真正的动态规划基线。

路线 B

外部中介 / 行为克隆

另一类工作用一个独立的「中介策略」决定何时调用外部规划工具,或者用 SFT 去模仿已有的动态规划数据。

论文的切分:这些方案把「何时」交给出模型之外的东西。论文坚持用一个单体 LLM,不加任何门控模块,让模型自己在输出里决定要不要写 <plan>。

这也是为什么论文要先花一节论证「金发姑娘区」:如果提示词能教会模型择时,剩下的就只是调一个提示词;正因为教不会,才必须用「先示范、再强化」来学习这个元认知能力。

03

把「何时规划」写成一次投资决策:预期收益 > 成本时才出手

全文最核心的一行是下面的不等式;其余的工程要么在估计左边,要么在惩罚右边。

规划优势 vs 规划成本

论文把环境建模为 POMDP ⟨S, A, T, R, O, γ⟩。在时刻 t,智能体手里有一份旧计划 pt−1;规划优势定义为:换成一份新计划 pt 后,预期未来回报的提升。

Aplan(ct) = 𝔼pt ~ ψθ(·|ct, dt=1) [ Vπθ(ct, pt) − Vπθ(ct, pt−1) ]
左侧只在 dt=1(决定规划)时计算:新计划到底让价值提升了多少

右边的成本被拆成三项:

Cplan = Ctokens + Clatency + Cnoise   ,   Ctokens = ktokens · |pt|
tokens 成本 = 单价 × 计划长度;延迟成本在回合制环境里约等于 0;不稳定性成本 = knoise · fp · (1 − Q̄p),即频率 × (1 − 平均计划质量)

三项里只有 Ctokens 会在训练里被显式扣掉。Cnoise 从不显式计算,论文的论证是:糟糕的频繁规划会自然拉低任务奖励,于是被 RL 目标隐式惩罚。这个取舍后面会变成一条重要的边界(见 07)。

三条策略只是「一个模型的三种读法」

论文把行为拆成决策策略 φθ(要不要规划)、规划策略 ψθ(写什么)、执行策略 πθ(做什么动作)。三者不是三个网络,而是同一个 LLM 输出的不同片段:

pt = dt · ψθ(pt | ct, pt−1) + (1 − dt) · pt−1
dt=1 就换新计划,dt=0 就沿用旧计划;dt 在实现中就是「这次输出开头是不是 <plan>」

自己动手:在两条成本上找一个甜点区

下面是一个最小时的代价模型,用来单独感受「token 成本」和「不稳定成本」各自如何影响最优频率。横轴是规划频率 f(每 1/f 步规划一次)。模型假设:收益随覆盖度 1 − (1−f)h 饱和增长(h 为单份计划的有效视野),token 开销随 f 线性增加,不稳定成本用 f(1−f) 的单峰形近似。拖动滑块改变 α / κ,观察最优频率如何移动。

α = 每步多花的 token / 每步的游戏进度上限
κ 放大「频繁 × 计划过期」造成的摇摆损失
当前设定
默认 α=0.40、κ=0.30 时,拐点出现在每 2 到每 4 步之间;把 α 调大,过度规划会被迅速压下去。
Score(f) = Bmax · (1 − (1−f)h) − α · f · Bmax − κ · Bmax · 4f(1−f)
三色分别对应收益、token 开销、不稳定成本(用 f(1−f) 的单峰形近似,峰值在 f=0.5)

取 Bmax=1、h=3,默认 α=0.4、κ=0.3,逐项手算:

频率 f收益− token 开销− 不稳定成本得分
0(从不)0.0000.0000.0000.000
1/160.1760.0250.0700.081
1/80.3300.0500.1310.149
1/40.5780.1000.2250.253
1/20.8750.2000.3000.375
1(每步)1.0000.4000.0000.600

注意最后一行:在这个最简式里 κ 项在 f=1 处恰好归零,「每步」反而不是最差。这是模型的简化,不代表论文结论——论文里「每步」受的是 Cnoise。拉高 α 会惩罚过度规划,可以把「每步」压下去。

04

SFT 负责「会写计划」,PPO 负责「学会挑时机」,缺了前者 PPO 会跑偏

这一节回答工程问题:为什么要先 SFT,以及 RL 的奖励长什么样。

第一步:用教师数据做启动

第二步:PPO 微调

优化目标把任务奖励和规划 token 成本放在同一条回报里:

θ* = arg maxθ 𝔼τ~θ [ Σt=0H γt ( Rtask(st, at) − dt · Ctokens,t ) ]
只有真的规划(dt=1)才扣 token 成本;延迟与不稳定性不上奖,靠「规划不好 → 奖励低」被隐式惩罚

工程上:actor 8B + critic 1B(Llama-3.3),RSLoRA 分别挂在 actor 与 critic 上;用 vLLM 托管权重、BALROG 接环境、Ray 做数据收集,每个 epoch 后把权重广播回 vLLM。实验在 8×H100 上跑,其中 6 张训、2 张采样,一个实验通常 24–48 小时。超参:KL 系数 0.05、rollout 长度 16、历史截断到 16 条观测、max output 200 tokens。

一个反直觉的工程选择:论文放弃了显式奖励塑形(比如惩罚无效动作、过长回复、过密规划)。他们发现这些 shaping 往往把智能体逼成「完全不规划」。最终只保留 token 成本一项,让「金发姑娘」频率自己浮现。

05

运行时只有一个模型:看它输出开头有没有 <plan> 就知道它决定要不要想

这一节把「决策—规划—执行」三个策略落到一次生成里(对应论文 Figure 2)。

c_t
当前观测 o_t
历史(最多 16 条)
上一份计划 p_(t−1)
单体 LLM(8B)
一次生成,三种策略
φ 决策:开头写不写 <plan>
ψ 规划:写出计划内容
π 执行:给出 [Action]
d_t = 1:规划
<plan>…</plan> [Action]
扣 d_t·C_tokens
d_t = 0:沿用
[Action]
不扣 token,继续用 p_(t−1)
BALROG
解析输出
执行 [Action]
更新历史 / 计划
进入下一 timestep
图 1:动态规划智能体的单步流程(按论文 Figure 2 重绘)。
展开说明 ▸
  • 没有门控模块。论文明确说三个策略不是独立架构组件,只是对同一段输出的概念拆分;dt 的实现就是「生成是否以 <plan> 开头」。
  • 计划进入后续上下文。一旦输出新计划,它会被 BALROG 放进之后的上下文;没规划时沿用旧计划,直到被替换。
  • 历史有上限。为控制上下文,提供给智能体的历史最多保留 16 条观测。
  • 计划会过期。论文用 plan drift 描述:高层计划更稳但指令性弱,低层计划更锋利但很快失效;环境动荡时旧计划可能瞬间作废。这正是需要「重规划」的来源。
06

两阶段训练的 8B 模型,以小博大超过了 70B 零样本

所有数字取自附录 C.7 的 Table 3 与 C.8 的 Table 4(Crafter,100 个评估种子)。

同一环境里的对比:奖励与 token

方法规模策略奖励 ↑输出 token
零样本70B从不规划0.343559.6
零样本70B每 4 步0.37911,510.9
零样本70B总是规划0.34938,836.2
SFT8B从不规划0.286991.5
SFT8B动态0.3431,869.9
Base+RL8B从不规划0.274505.1
Base+RL8B动态0.21010,818.7
SFT+RL8B从不规划0.298878.0
SFT+RL8B动态0.3871,714.3

三个反直觉的读法

为什么「总是规划」的 70B 反而不如「每 4 步」?对照 Cnoise 与过思考的解释

论文给了两条互相补充的解释:一是 instability cost(Cnoise)——过密的计划互相冲突,智能体反复改主意;POGS 的回溯统计是最直接的证据,「总是规划」回溯最多。二是「过思考」(Sui et al., 2025)与长上下文稀释注意力:每一步都写一段计划,关键信息反而被淹没。

这个效应在 Gemini 2.5 Flash 上也复现了,但形态不同:在 POGS 这种对强模型而言太简单的环境里,多加计划甚至不如规划一次。论文由此推断,「金发姑娘区」的位置依赖模型能力与环境难度。

07

它教的是「何时写计划」,不是「如何推理」:范围窄、依赖教师、两项成本没有真正优化

读完这节应知道:哪些结论论文撑得住,哪些只是隐式假设。

边界一

只在两个回合制环境、两个模型规模上验证

POGS 是自定义的合成图搜索,Crafter 是 2D 网格生存游戏;训练用 8B,零样本评测用 70B 与 Gemini 2.5 Flash。论文自己在 limitations 里承认:最优分配策略如何随模型规模变化,以及能否推广到更开放的领域(网页、代码、机器人),都还没测。

边界二

SFT 启动是硬依赖,教师的质量就是上限

数据来自一个「固定频率规划」的 70B 教师,教师本身不是动态规划的最优解。没有它,Base+RL 动态掉到 0.210。这意味着方法的起点取决于能否拿到结构良好的 <plan> 示范,换新任务就要重新造数据。

边界三

Clatency 与 Cnoise 只是概念上的,没有显式优化

回合制环境里延迟成本近似为 0;不稳定性成本只通过「奖励变低」间接惩罚,没有任何一项奖励项直接对应它。附录 C.3 还显示,训练足够久后加大 token 惩罚会明显降低显式规划频率,而得分几乎不变——说明部分推理被「内化」进权重,此时显式计划对自主表现并非必需,但论据是「没有显式计划就无法被人引导」。

边界四

自主运行仍不能通关 Crafter

论文说:计算约束下,没有任何自主运行的智能体完整通关。挖钻石通关是人类给出高层计划之后实现的(论文记录约 20 次尝试)。这既是 steerability 的正面结果,也说明纯自治的上限仍有距离;附录 D 还给了失败案例:计划正确,但没有确认熔炉可达就动手制作。

一句话:这篇论文解决的是「在已会规划的前提下,何时才值得规划」,并把这件事收敛成一个可训练、可被引导的元认知策略;它没有声称解决「怎么规划得更好」,也没有在开放域上证明有效性。