对应 Maps to:CS486 课程描述的 “enhance LLM planning”——规划部分(第 8–11 讲)的第一讲:什么是规划,LLM 在规划上做得怎么样,以及怎样把 LLM 和可靠的规划工具结合起来。 依据说明:CS486 没有公开的日程或讲义。本讲依据经典规划(STRIPS / PDDL、状态空间搜索、启发式搜索)的教科书内容,以及 LLM 规划的主要文献:PlanBench 与相关评测(Valmeekam et al. 2023、2024)、自我批评与外部验证(Valmeekam, Marquez & Kambhampati 2023;Stechly et al. 2024)、LLM-Modulo 框架(Kambhampati et al. 2024)、LLM+P(Liu et al. 2023)等。§2、§4、§5 的实验是本讲义自己设计的,数字全部来自配套代码的实际输出。 配套代码 Code:
code/lecture08/(规划器和验证器只用标准库;学出来的”提议者”用 PyTorch;3 个脚本 + 1 个模块;第一次运行约 2 分钟——训练提议者约 1 分钟;之后每个脚本几秒到 1 分钟) 预计阅读时间:3.5 小时(含运行代码)
0. 本讲导航 · How to read this lecture
0.1 学习目标 Learning goals
学完这一讲,你应该能够:
- 说出一个经典规划问题的组成(状态、动作的前提与效果、初始状态、目标),用 STRIPS 写出一个简单领域,并解释 PDDL 和规划器的关系。
- 解释为什么规划问题的状态空间爆炸、启发式搜索(A*)为什么有效、什么是可采纳的启发函数;知道”验证一个计划”比”找到一个计划”便宜得多。
- 复述 PlanBench 的主要发现:LLM 生成可执行计划的能力有限;把名字换掉(神秘积木世界)几乎让它们归零;推理模型大幅提高了小题上的表现,但在大题、无解题上仍然失败,且不保证正确。
- 在实验里区分”会说计划”(输出格式正确、看起来合理)和”会规划”(计划合法并达到目标)。
- 解释 LLM-Modulo 框架:LLM 提议、可靠的批评者把关、反馈驱动修改;为什么保证来自批评者的可靠性,而不是 LLM;什么时候它有效、什么时候救不回来。
- 知道把 LLM 和规划器结合的其他方式(把自然语言翻译成 PDDL、让 LLM 写领域模型或通用规划程序),以及什么时候根本不该用 LLM 做规划。
0.2 先修与本讲范围 Prerequisites & scope
| 默认你已经会 Assumed | 本讲不展开 Not covered |
|---|---|
| 第 4 讲:生成–验证的不对称 | 规划理论的复杂性证明(只给结论) |
| 第 6 讲:表面形式改变 → 模型失败;无解的题 | 概率规划、部分可观测(POMDP) |
| 第 7 讲:自我纠错的四参数模型;内在 vs 外部反馈;定位反馈 | 搜索与 MCTS 的细节(第 9 讲) |
| 基本的图搜索(BFS) | 时序与资源约束(第 10 讲)、在环境里执行(第 11 讲) |
0.3 本讲地图 Map
§1 什么是规划:动作、状态、前提、目标;规划和推理有什么不同
§2 经典规划:STRIPS 与 PDDL;状态空间与搜索;启发函数;验证 ← 代码 01
§3 LLM 能规划吗?PlanBench;神秘积木世界;推理模型(o1)的结果
§4 实验:一个"会说计划"的模型——合法率、失败类型、换一种写法、自我评估 ← 代码 02
§5 LLM-Modulo:提议 → 验证 → 反馈;批评者的可靠性决定一切 ← 代码 03
§6 LLM 和规划器的其他结合方式:LLM+P、写领域模型、写通用规划程序
§7 "LLM 能规划吗"这个问题本身
§8 现状与开放问题
§9–13 小结、常见误区、练习、延伸阅读、下一讲预告
1. 什么是规划 · What is planning?
1.1 定义
规划(planning)是在采取行动之前,构造一个能从当前状态到达目标的行动序列。它有几个要素:
- 状态(state):世界此刻是什么样(哪块积木在哪、货车在哪个城市、日程上哪个时间段被占用);
- 动作(action):每个动作有前提(什么时候可以做)和效果(做完之后世界怎样变化);
- 初始状态和目标(goal):目标通常是对状态的部分要求(“a 在 b 上”,不管其他积木);
- 计划(plan):一个动作序列,从初始状态开始依次执行,每一步的前提都满足,最后到达满足目标的状态。
规划和第 3–7 讲的”推理”有相通之处(都是多步、串行),但多了两个约束:每一步都必须合法(前提满足),动作会改变世界(后面的步骤要基于改变后的状态)。一个推理链中间有一步说错了,有时还能”蒙对”答案;一个计划中间有一步不合法,整个计划就不能执行。
1.2 为什么这对 LLM 难
第 1 讲 §5 已经预告了这个问题:LLM 能谈论计划(列出旅行的步骤、写出做菜的流程),但在要求每一步都严格合法的规划问题上表现很差。原因直觉上很清楚:
- 状态追踪:执行到第 i 步时,世界是什么样?这需要从初始状态开始,把前 i 步的效果依次累积起来——第 1、3 讲的串行深度问题。
- 前提检查:每一步都要对照当前状态检查前提,一个疏忽就让整个计划失效。
- 组合搜索:可能的计划随长度指数增长,找到一个满足所有约束的计划通常需要搜索和回溯,而不是一路写下去。
2. 经典规划 · Classical planning
代码:01_classical_planning.py(只用标准库,约 2 秒)。
2.1 STRIPS 与 PDDL
STRIPS(Fikes & Nilsson 1971)用一组事实(逻辑命题)描述状态,每个动作由三部分组成:前提(必须为真的事实)、添加(执行后变为真的事实)、删除(执行后变为假的事实)。例如在积木世界的”移动”版本里(代码 01 演示 3):
move_to_table(c, a):
前提:on(c,a)、clear(c)
添加:ontable(c)、clear(a)
删除:on(c,a)
PDDL(Planning Domain Definition Language,1998 年起用于国际规划竞赛)是 STRIPS 的标准化扩展:一个领域文件定义谓词和动作模式(带变量),一个问题文件给出对象、初始状态和目标。同一个规划器可以求解任何用 PDDL 写成的领域——积木、物流、卫星调度……它不需要任何领域知识。
(PlanBench 的积木世界用 4 个动作:pick-up、put-down、stack、unstack,外加”手是否空着”;我们的代码用合成的”移动”动作,计划更短,本质相同。)
2.2 状态空间爆炸
n 块带名字的积木一共有多少种状态?等于把 n 个元素分成若干个有序的组(每一摞是一个从下到上的序列)的方法数,即 Lah 数之和(OEIS A000262)。代码 01 演示 1:
| n | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 10 | 15 |
|---|---|---|---|---|---|---|---|---|---|
| 状态数 | 3 | 13 | 73 | 501 | 4,051 | 37,633 | 394,353 | 58,941,091 | 6.6 × 10¹³ |
但随机题的最短计划并不长(n = 7 时平均 6.22 步,最长 10 步)。难点不在于计划长,而在于在巨大的空间里找到它,并且每一步都合法。
一般的 STRIPS 规划问题(判断是否存在计划)是 PSPACE 完全的;积木世界里,找到某个计划很容易(把所有积木搬到桌上,再按目标一块块搭起来),但找到最短计划是 NP 难的(Gupta & Nau 1992)。
2.3 搜索与启发函数
最朴素的方法是广度优先搜索(BFS):按计划长度一层层展开状态,第一次到达目标时就是最短计划。它的问题是展开的状态太多。A* 搜索按 的顺序展开, 是已经走的步数, 是对”还要走几步”的估计(启发函数)。如果 从不高估(可采纳),A* 找到的仍是最短计划。
我们用的启发函数是”不在最终位置上的积木数”:一块积木在最终位置上,当且仅当它和它下面的整摞都和目标一模一样。不在最终位置的积木至少要被搬一次,所以它可采纳。代码 01 演示 2(每个 n 30 道题):
| n | 3 | 4 | 5 | 6 | 7 | 8 |
|---|---|---|---|---|---|---|
| BFS 平均展开 | 3 | 12 | 99 | 486 | 4,125 | — |
| A* 平均展开 | 3.3 | 5.0 | 12.7 | 17.3 | 26.8 | 201.5 |
n = 7 时 A* 少展开约 154 倍,找到的计划一样短。真正的规划器(例如 Fast Downward)能从 PDDL 描述里自动推导出强得多的启发函数——最经典的思路是”松弛问题”:忽略所有删除效果,求解变得容易,它的解长度就是原问题的一个估计(、)。
2.4 验证:比找计划便宜得多
验证一个计划只需要沿着它模拟一遍:从初始状态开始,检查每一步的前提,应用它的效果,最后检查目标。这是 PlanBench 用的 VAL 工具做的事。代码 01 演示 4 里,验证器能精确地说出错在哪一步、为什么错:
计划(初始 ac;b,目标 abc) | 判决 |
|---|---|
c_bacb | 合法、到达目标(最短) |
bacb(忘了先把 c 搬开) | 第 0 步不合法:a 不在最上面 |
c_cbba(顺序反了) | 第 2 步不合法:b 不在最上面 |
c_ba(少了最后一步) | 每一步都合法,但没有到达目标 |
c_bacbc_cb(多余的来回) | 合法、到达目标(验证器不管是不是最短) |
c_bdcb(不存在的积木) | 第 1 步不合法:没有积木 d |
验证的代价和计划长度成正比;搜索的代价可能是指数的。这就是规划里的生成–验证不对称(第 4、7 讲),也是 §5 的 LLM-Modulo 框架的基础。
3. LLM 能规划吗? · PlanBench and beyond
3.1 PlanBench
Valmeekam et al.(2023,NeurIPS 数据集与基准赛道)建立了 PlanBench:从国际规划竞赛的领域(积木世界、物流)生成大量问题,用自然语言或 PDDL 描述给 LLM,让它生成计划,再用 VAL 验证。他们还设计了若干相关任务:成本最优规划、计划验证、预测执行结果、重新规划、计划的泛化等。
主要发现(同一研究组 2023–2024 年的几篇论文):
- 自主生成可执行计划的能力很有限:在 On the Planning Abilities of Large Language Models 中,最好的模型 GPT-4 跨几个领域平均只有约 12% 的计划可执行。
- 神秘积木世界(Mystery Blocksworld):把动作和谓词的名字全部换成无关的词(例如”攻击""征服”),领域的结构和逻辑完全不变——对规划器来说毫无区别。LLM 的准确率几乎归零:2024 年的零样本评测里,没有一个 LLM 在神秘积木世界上超过 5%(LLaMA 3.1 405B 在普通积木世界 62.6%,在神秘积木世界 0.8%)。他们的解释是,LLM 做的更像是”近似检索”——依赖在训练数据里见过的、和熟悉的名字绑定在一起的模式——而不是基于领域规则的推理。
- 思维链帮助有限:Chain of Thoughtlessness?(Stechly et al. 2024)发现,在积木世界上手工设计的思维链提示,只在和示例非常接近的问题分布上有效,问题一变大就失效。
3.2 推理模型
2024 年 9 月 o1 发布后,同一研究组做了初步评测(LLMs Still Can’t Plan; Can LRMs?,Valmeekam, Stechly & Kambhampati 2024)。零样本、600 道题:
| 模型 | 积木世界(3–5 块) | 神秘积木世界 |
|---|---|---|
| LLaMA 3.1 405B(之前最好的 LLM) | 62.6% | 0.8% |
| o1-mini | 56.6% | 19.1% |
| o1-preview | 97.8% | 52.8% |
推理模型是”质的飞跃”,但:
- 问题一变大就退化:6–20 块积木、最优计划 20–40 步的 110 道题上,o1-preview 只有 23.6%;
- 无解的题:只有 27% 被正确识别为无解,其余情况下模型给出了一个(不可能的)完整计划或空计划——和第 6 讲 §6.3 的现象一样;
- 没有保证:一个 97.8% 正确的规划器,仍然需要一个验证器来知道哪 2.2% 是错的;
- 成本:推理模型的每次调用远比经典规划器贵。
更新的推理模型在 PlanBench 的小题上已接近饱和,但”更大的题""换了名字的领域""无解的题”这三类测试仍然能拉开差距——这三类测试正是本讲实验的三个主题。
4. 实验:一个”会说计划”的模型 · A model that talks like a planner
代码:02_learned_planner.py(第一次约 1 分钟,训练提议者)。
4.1 设置
我们的”LLM”是一个 2 层的 TinyReasoner(第 1 讲),在 3–5 块积木的题上学”输出最短计划”:输入 <初始状态>?<目标状态>|,输出 <计划>$。它见过 192,000 个正确的最短计划(3000 步 × 64),但从来不搜索。这模仿了 LLM 学规划的方式:在大量”别人写好的正确计划”上做下一个 token 预测。
一个细节(第 6 讲的教训):每道题的积木名从 16 个字母里随机挑选。如果总用 a、b、c…,测试 6、7 块积木时就会出现训练中没见过的字母,“积木更多”的失败就会和”没见过的符号”混在一起。
4.2 会说计划 ≠ 会规划
演示 1(每个 n 200 道题,贪心解码):
| 积木数 n | 3 | 4 | 5 | 6 | 7 |
|---|---|---|---|---|---|
| 合法并到达目标 | 88.0% | 75.5% | 49.0% | 7.0% | 0.0% |
| 而且最短 | 88.0% | 69.5% | 38.5% | 5.0% | 0.0% |
| 前提不满足 | 23 | 20 | 66 | 117 | 166 |
| 没到目标 | 1 | 29 | 36 | 67 | 34 |
| 格式坏 | 0 | 0 | 0 | 2 | 0 |
它写出的计划格式几乎总是对的——看上去像计划,执行起来不合法。即使在训练分布内(5 块),也只有一半的计划能执行;超出训练分布(6、7 块)几乎全错。
演示 2 的例子:k;nmol → lk;nm;o,最短计划 l_klo_,提议者写 l_o_mnkl——第 2 步要把 m 搬到 n 上,可 n 上面还压着 m 自己……验证器:第 2 步,n 不在最上面。前提错误多出现在计划的中段(n = 6 时集中在第 2 步):提议者能写出”先把挡路的积木搬到桌上”这种开头,之后就跟丢了状态。它没有在内部维护”现在每块积木在哪”,只是在模仿计划的样子。
4.3 换一种写法
演示 3:同样的题,只是把每一摞从上往下写(ac;b 写成 ca;b)。
| n | 提议者:原写法 | 提议者:新写法 | A*(换一个解析函数) |
|---|---|---|---|
| 3 | 88.0% | 0.0% | 100.0% |
| 4 | 75.5% | 0.0% | 100.0% |
| 5 | 49.0% | 0.0% | 100.0% |
这是神秘积木世界的一个缩小版:结构不变,表面形式变了,依赖表面模式的模型完全失去能力,而搜索不受影响。区别在于:LLM 在提示里能读到新的领域描述,却用不上;我们的小模型根本读不懂描述,它只认识训练时的那一种写法。两者的共同点是:能力被绑定在训练数据的表面形式上。
4.4 它知道自己的计划对不对吗?
演示 4:用提议者给自己计划的对数概率区分”合法 / 不合法”,AUC 在 n = 4、5 时是 0.859 / 0.852,n = 6 时降到 0.701。这一次它不是长度带来的假象(“计划越短越可能对”的 AUC 低于 0.5:太短的计划常常没到目标),和第 7 讲 §5.2 的情形不同——评估置信度时,每次都要重新检查表面特征。§5 会看到,即使有这样的区分度,拿它代替可靠的验证器仍然不够。
5. LLM-Modulo:让模型提议、让验证器把关 · The LLM-Modulo framework
5.1 框架
Kambhampati et al.(2024,ICML 立场论文,LLMs Can’t Plan, But Can Help Planning in LLM-Modulo Frameworks)的主张可以概括为两句话:
- LLM 自己既不能可靠地规划,也不能可靠地验证自己的计划(§3、第 7 讲);
- 但 LLM 是一个很好的候选生成器和知识来源,应该把它放进一个由可靠的外部批评者把关的”生成–测试–批评”循环里。
框架的组件:
| 组件 | 作用 | 例子 |
|---|---|---|
| 生成器(LLM) | 提出候选计划;根据批评修改 | GPT-4、推理模型 |
| 硬批评者(hard critics) | 可靠地检查正确性约束 | VAL、约束求解器、模拟器、单元测试 |
| 软批评者(soft critics) | 检查风格、偏好、常识(可以是 LLM) | “这个行程太赶了吗” |
| 元控制器 | 汇总批评,决定给生成器什么反馈、何时停止 | — |
| 格式转换器 | 在自然语言、PDDL、计划之间翻译(也可以由 LLM 承担) | — |
保证来自硬批评者:通过所有硬批评者的计划一定满足那些约束,不管生成器多不可靠。这就是名字里”Modulo”的意思——在外部验证的意义下(modulo the verifiers),系统是正确的。
证据:Valmeekam, Marquez & Kambhampati(2023,Can Large Language Models Really Improve by Self-critiquing Their Own Plans?)在 100 道积木世界题上,GPT-4 单独做对 40 道;让 GPT-4 自己当批评者、回溯提示,55 道;换成 VAL 当批评者,88 道。
5.2 实验:同一个提议者,加上验证器的反馈
代码:03_llm_modulo.py(约 1 分钟)。我们把验证器的反馈翻译成提议者能用的形式(plan_lab.modulo_solve):
- “第 i 步的 x 不在最上面” → 保留前 i 步,第 i 步把 x 从提议者的候选里去掉,换成它的下一个偏好,再接着写;
- “每步都合法但没到目标” → 从当前状态出发,让提议者把剩下的计划接着写完。
这和 PlanBench 里的”回溯提示”(backprompting)传递的信息相同:错在哪一步、为什么错。对照组是生成–测试:每道题最多采样 N 个计划(温度 1.0),取第一个通过验证的(不给任何反馈,只是”不对就再来”)。
演示 1(每个 n 100 道题):
| n | 反馈 0 轮 | 1 轮 | 3 轮 | 10 轮 | 采样 1 次 | 4 次 | 10 次 | 30 次 |
|---|---|---|---|---|---|---|---|---|
| 4 | 77% | 81% | 88% | 90% | 50% | 80% | 88% | 96% |
| 5 | 44% | 58% | 65% | 74% | 22% | 54% | 70% | 85% |
| 6 | 5% | 8% | 10% | 16% | 1% | 3% | 9% | 13% |
| 7 | 0% | 1% | 2% | 4% | 0% | 1% | 1% | 2% |
三个结论:
- 可靠的验证器 + 反馈让同一个提议者明显变好:n = 5 时从 44% 到 74%;而且通过验证的计划保证是对的。
- 定位反馈比盲目重采样更省调用:n = 5 时 10 轮反馈平均只调用提议者 4.5 次;只采样不反馈,最多 10 次(平均 5.2 次)成功 70%,最多 30 次(平均 9.2 次)才到 85%。定位反馈把搜索引向正确的方向(第 7 讲 §4),但采样的多样性在预算大时有更高的上限。注意单次采样(温度 1.0)比贪心差得多(22% vs 44%)。
- 提议者离得太远时,验证器也救不回来:n = 7 时 10 轮反馈只到 4%。第一轮反馈的修复率只有 0.08(演示 3)。验证器保证了正确性,不保证能找到解——LLM-Modulo 的效果取决于提议者能不能提出”在几步修改之内可达”的候选。
5.3 批评者必须可靠
演示 2(n = 5):“声称成功” = 批评者接受了,“真正成功” = 可靠的验证器判定合法。
| 批评者 | 做法 | 声称成功 | 真正成功 |
|---|---|---|---|
| 可靠的验证器 | 反馈 10 轮 | 74.0% | 74.0% |
| 漏判 30% 的批评者 | 反馈 10 轮 | 95.0% | 58.0% |
| 漏判 60% 的批评者 | 反馈 10 轮 | 100.0% | 53.0% |
| 可靠的验证器 | 采样 10 次 | 72.0% | 72.0% |
| 提议者的自我批评 | 采样 10 次 | 39.0% | 39.0% |
不可靠的批评者让系统声称的成功率远高于真实值(95% vs 58%)——这比”不知道自己错了”更危险,因为它给出了虚假的保证。用提议者自己的把握当批评者(阈值在另一组题上选),真正成功率 39%,比直接贪心(44%)还低。在 Valmeekam et al. 的 GPT-4 实验里,LLM 当批评者带来了一些提高(40 → 55),但远不如 VAL(88);方向一致,程度不同。“Modulo”指的是外部的、可靠的验证器,换成模型自己就失去了全部保证。
5.4 用第 7 讲的模型看
第一轮反馈的四个参数(演示 3,n = 4–7 合在一起):TPR 1.00、FPR 0.00、修复率 0.08、改坏率 0.00。可靠的验证器从不把合法的计划判为不合法(FPR = 0),所以改坏的情况不会发生,一轮反馈的收益 ——只会帮忙,不会帮倒忙。第 7 讲里 PRM-full 的误报把对的改错,在这里不会出现。反过来,不可靠的批评者有 FPR(把对的判错,导致不必要的修改)和漏报(把错的放过),两种都会损害结果。
5.5 别忘了基线
演示 4:A* 在所有题上 100% 成功、找到最短计划,平均只展开 5.1(n = 4)到 44.6(n = 7)个状态——比调用一次提议者便宜得多。在规则完全已知、能写成 PDDL 的问题上,正确的做法是用规划器。 LLM 的价值在别处:规则不完全已知、需要常识或自然语言理解、验证器只能部分检查的地方。
6. LLM 和规划器的其他结合方式 · Other combinations
LLM-Modulo 让 LLM 直接生成计划。另一些工作让 LLM 做它更擅长的事——翻译和提供知识——把搜索留给规划器:
- LLM+P(Liu et al. 2023):LLM 把自然语言描述的问题翻译成 PDDL 问题文件(领域文件由人提供),交给经典规划器求解,再把计划翻译回自然语言。在他们的基准上,这比让 LLM 直接规划好得多——前提是翻译正确。
- 让 LLM 写领域模型(Guan et al. 2023):从自然语言描述生成 PDDL 领域文件(动作的前提和效果),再用人的反馈和规划器的反馈修正。这里 LLM 提供的是”关于动作的常识”,规划器提供正确性。
- 让 LLM 写通用规划程序(Silver et al. 2024):给 LLM 几个 PDDL 问题,让它写一个 Python 程序,能解决这个领域的所有问题;用验证器检查程序在训练问题上的输出,有错就把错误反馈给 LLM。一旦写对,程序可以解决比训练问题大得多的问题,而且非常快。
- 机器人(SayCan,Ahn et al. 2022 等):LLM 提出高层的步骤,由机器人的”可行性”模型(能不能做到)打分筛选——一种软批评者。
这些方法的共同思路,和第 7 讲的结论一致:把需要可靠性的部分交给可以验证的组件。LLM 负责提出、翻译、补充常识,搜索和验证负责正确性。
下一讲会看到第三条路线:把 LLM 本身放进搜索里——思维树、蒙特卡洛树搜索,LLM 同时扮演策略、价值函数甚至世界模型。
7. “LLM 能规划吗”这个问题本身 · Is the question well-posed?
这个问题在 2023–2025 年引起了很多争论,部分原因是”规划”可以指不同的东西:
| “规划”的含义 | LLM 的表现 | 例子 |
|---|---|---|
| 生成满足所有硬约束的计划(可靠、完备) | 不能保证;推理模型在小题上很强,大题、换名字、无解时失效 | PlanBench |
| 生成”大致合理”的计划草稿 | 很擅长 | 旅行建议、项目分解 |
| 提供关于动作和世界的常识 | 很擅长 | “要先打开冰箱才能拿出牛奶” |
| 在可靠的验证器帮助下找到计划 | 有效,效果取决于候选的质量 | LLM-Modulo |
所以更有用的问题是:“在什么样的系统里,LLM 承担什么角色,能让整个系统可靠地规划?“——这正是 LLM-Modulo 的出发点。研究上的教训也和前几讲一致:用可验证的任务评测、报告大问题和换了表面形式的变体、检查无解的情况、和经典规划器比较成本。
8. 现状与开放问题 · State of the field
- 推理模型大幅提高了 LLM 在标准规划基准上的表现,但在大规模、陌生表面形式、无解的问题上仍然不可靠,而且没有正确性保证。
- LLM + 外部工具(规划器、验证器、模拟器)是实际系统里最可靠的方式;挑战在于翻译的正确性(自然语言 → PDDL)和验证器的覆盖范围(很多真实约束写不成 PDDL)。
- 评测:PlanBench 之后出现了更多面向真实场景的规划基准(旅行规划、日程安排,第 10 讲;智能体在环境中的长程任务,第 11 讲),那里约束更多、验证更难。
研究问题:
- 怎样让 LLM 生成的候选”离正确更近”——例如用规划器的反馈训练它(第 5 讲的 RLVR 在规划上的版本)?
- 当验证器只能检查一部分约束时,怎样估计系统的真实可靠性?
- LLM 写出的 PDDL 领域模型怎样验证?错误的领域模型会让规划器”正确地”解出错误的问题。
- 推理模型在规划上的进步,是学会了搜索(在思维链里回溯),还是记住了更多的模式?怎样设计实验区分?
9. 小结 · Summary
- 规划 = 从初始状态出发、每一步前提都满足、最后到达目标的动作序列;它比推理多了”每步合法”和”动作改变世界”两个约束。
- 经典规划用 STRIPS / PDDL 描述领域,用搜索求解;状态空间超指数增长(8 块积木 394,353 个状态),可采纳的启发函数让 A* 少展开上百倍;验证一个计划只需要模拟一遍。
- PlanBench:LLM 自主生成可执行计划的能力有限,换名字(神秘积木世界)几乎归零;o1-preview 在小题上 97.8%,但大题 23.6%、无解题大多认不出来。
- 我们的提议者”会说计划”——格式几乎总是对的——却只有一半的计划在训练分布内能执行,6 块以上几乎全错;换一种写法就从 88% 掉到 0%,而 A* 不受影响。
- LLM-Modulo:可靠的验证器 + 定位反馈让同一个提议者从 44% 到 74%(5 块),通过验证的计划保证正确;但提议者离得太远时救不回来(7 块:0% → 4%)。
- 批评者必须可靠:漏判的批评者给出虚假的保证(声称 95%、实际 58%);用模型自己当批评者更糟。
- 在规则完全已知的问题上,经典规划器又准又便宜;LLM 的价值在翻译、常识和规则不完全已知的地方。
10. 常见误区 · Common pitfalls
- “LLM 写出的计划看起来很合理,所以它会规划。” 格式正确、看起来合理,不等于每一步都合法。
- “模型在积木世界上 98%,规划问题解决了。” 看大题、换了名字的变体、无解的题;看有没有正确性保证。
- “让 LLM 检查自己的计划就能提高可靠性。” 内在批评不可靠,可能比不检查还差;可靠性来自外部的硬批评者。
- “有验证器就万事大吉。” 验证器保证正确性,不保证找得到解;提议者离得太远时循环救不回来。
- “一个大部分时候对的批评者也可以用。” 漏判会给出虚假的保证——声称的成功率远高于真实值。
- “用 LLM 解 PDDL 问题。” 在规则完全已知的问题上,经典规划器更准、更快、更便宜。
- “LLM 在神秘积木世界上失败,说明它不理解积木。” 它说明 LLM 的能力被绑定在训练数据的表面形式上——这是关于泛化的结论,而不是关于”理解积木”的结论。
11. 练习 · Exercises
练习 1(状态数)。用 Lah 数公式 手算 n = 4 时的状态数,并用”每一摞是一个有序序列”的直觉解释 n = 3 时为什么是 13。
参考答案:n = 4:k = 1:;k = 2:;k = 3:;k = 4:;合计 73。n = 3:一摞(3 块的排列)6 种;两摞(选哪两块在一摞并定顺序:3 × 2 = 6)6 种;三摞(都在桌上)1 种;合计 13。
练习 2(启发函数)。(a) 为什么”不在最终位置上的积木数”是可采纳的?(b) 另一个启发函数:“下面那块(或桌子)和目标里不同的积木数”——只看紧挨着的下一块。它可采纳吗?它和 (a) 哪个更”强”(估计值更大)?
参考答案:(a) 不在最终位置的积木至少要被搬一次(它现在下面的东西不对,或者下面的某块不对、迟早要把它搬开),每步只搬一块,所以真实代价 ≥ 这个数。(b) 也可采纳:下面那块不对的积木至少要被搬一次。但它更弱:一块积木下面那块”对”,可是再下面不对时,(b) 不计它而 (a) 计它(它迟早要被搬开);所以 (a) ≥ (b),A* 用 (a) 展开得更少。
练习 3(温度)。§5.2 的表里,n = 5 时贪心 44%,单次采样(温度 1.0)只有 22%。为什么采样的单次质量差这么多?在 LLM-Modulo 里,你会用贪心还是采样生成第一个候选?后续的修改呢?
参考答案要点:温度 1.0 下,每一步都有一定概率选到不是最可能的字符;一个 10 步、20 个字符的计划,任何一个字符出错就可能不合法,错误累积。第一个候选用贪心(质量最高);当定位反馈”走进死胡同”(同一位置的候选都被否定)时,采样提供多样性——两者结合。这和第 4 讲”覆盖率 vs 单个样本质量”的权衡是同一件事。
练习 4(反馈的信息量)。§5.2 比较了”定位反馈”和”只采样不反馈”。设计一个中间条件:“二值反馈”——验证器只说”不对”,不说哪一步。它和”只采样不反馈”有区别吗?如果有,在什么情况下?
参考答案要点:如果”不对”之后的动作是”重新采样”,二值反馈和”采样直到通过验证”完全等价——验证器就是那个”测试”。区别只在生成器能利用”不对”这个信息改变策略时出现:例如把被否定的计划放进提示(“不要再写这个”),或者降低重复的概率。第 7 讲 §4 的结果说明,对系统性的错误,二值反馈 + 重新采样几乎无效;在规划里,采样有一定多样性,所以”采样 30 次”仍有提高。
练习 5(LLM+P 的翻译风险)。设想用一个 LLM 把”把红色积木放到蓝色积木上,绿色积木留在桌上”翻译成 PDDL 目标,交给规划器。列出三种翻译错误,并说明规划器会怎样”正确地”解出一个错误的问题。你会怎样检查翻译?
参考答案要点:(1) 漏掉一个约束(没写 ontable(green))——规划器可能把绿色积木搬到别处;(2) 方向搞反(on(blue, red))——规划器把蓝色放到红色上;(3) 把部分目标写成完整状态(指定了所有积木的位置)——规划器做了不必要的移动,或者在不可达时报告无解。规划器忠实地求解给它的 PDDL,所以计划对于错误的问题是”正确”的。检查:把 PDDL 目标翻译回自然语言让人确认(回译);在模拟器里执行计划后,用独立的方法(另一个 LLM、规则)检查自然语言目标是否满足;对同一描述做多次翻译,看是否一致。
练习 6(神秘积木世界的补救)。§4.3 的提议者在”从上往下”的写法上 0%。(a) 如果训练数据里两种写法各占一半(加一个标记字符说明是哪种写法),你预期会怎样?(b) 这能说明 LLM 在神秘积木世界上的失败可以用”更多样的训练数据”解决吗?
参考答案要点:(a) 预期提议者在两种写法上都能达到接近原来的水平——它只是学会了两种表面形式(第 6 讲 §4:训练分布覆盖了,泛化就来了)。(b) 只说明了一半:对已知的表面变化,加数据有效;神秘积木世界测试的是对任意新命名的鲁棒性——每次换一套新的无意义名字,你不可能都放进训练数据。LLM 在提示里能读到领域描述,理想的规划器应该根据描述推理,而不是依赖名字。推理模型在神秘积木世界上的提高(0.8% → 52.8%)部分体现了这种能力,但还远没有达到经典规划器的”与名字无关”。
12. 延伸阅读 · Further reading
经典规划
- R. Fikes, N. Nilsson. STRIPS: A New Approach to the Application of Theorem Proving to Problem Solving. Artificial Intelligence, 1971.
- M. Ghallab, D. Nau, P. Traverso. Automated Planning: Theory and Practice. Morgan Kaufmann, 2004.
- S. Russell, P. Norvig. Artificial Intelligence: A Modern Approach(第 11 章,经典规划).
- M. Helmert. The Fast Downward Planning System. JAIR 2006.
LLM 与规划的评测
- K. Valmeekam et al. PlanBench: An Extensible Benchmark for Evaluating Large Language Models on Planning and Reasoning about Change. NeurIPS 2023(数据集与基准).
- K. Valmeekam et al. On the Planning Abilities of Large Language Models — A Critical Investigation. NeurIPS 2023.
- K. Stechly, K. Valmeekam, S. Kambhampati. Chain of Thoughtlessness? An Analysis of CoT in Planning. NeurIPS 2024.
- K. Valmeekam, K. Stechly, S. Kambhampati. LLMs Still Can’t Plan; Can LRMs? A Preliminary Evaluation of OpenAI’s o1 on PlanBench. 2024.
LLM-Modulo 与结合方式
- S. Kambhampati et al. LLMs Can’t Plan, But Can Help Planning in LLM-Modulo Frameworks. ICML 2024.
- K. Valmeekam, M. Marquez, S. Kambhampati. Can Large Language Models Really Improve by Self-critiquing Their Own Plans? 2023.
- B. Liu et al. LLM+P: Empowering Large Language Models with Optimal Planning Proficiency. 2023.
- L. Guan et al. Leveraging Pre-trained Large Language Models to Construct and Utilize World Models for Model-based Task Planning. NeurIPS 2023.
- T. Silver et al. Generalized Planning in PDDL Domains with Pretrained Large Language Models. AAAI 2024.
- M. Ahn et al. Do As I Can, Not As I Say: Grounding Language in Robotic Affordances(SayCan). 2022.
13. 下一讲预告 · Next lecture
第 9 讲:规划即搜索——思维树、世界模型与蒙特卡洛树搜索。 本讲把搜索交给经典规划器,把 LLM 放在搜索之外。下一讲把 LLM 放进搜索里:思维树(Tree of Thoughts)让 LLM 在每一步提出几个候选、评估它们、回溯;RAP 让 LLM 同时当”世界模型”(预测动作的后果)和策略,用蒙特卡洛树搜索规划;LATS 把这种搜索用在智能体任务上。我们会在一个可以穷举的谜题上,比较贪心、束搜索和 MCTS,并看看一个学出来的价值函数能带来多少——以及当世界模型本身不可靠时,搜索会把错误放大还是纠正。