LLM 作为规划器的局限性与缓解方案
难度:中级 分类:Planning & Reasoning
简短回答
LLM 作为规划器面临根本性挑战:Kambhampati (ASU, 2024) 的核心论点是 "LLM 不能真正规划,但可以在规划中发挥建设性作用"。主要局限包括:(1) 约束满足能力弱——LLM 难以同时满足多个相互制约的条件;(2) 长程规划退化——随着步骤增多,累积错误导致计划质量急剧下降;(3) 环境模型缺失——LLM 没有真正的世界模型,无法准确预测动作的后果;(4) 幻觉导致无效计划——生成看似合理但实际不可执行的步骤。缓解方案的核心思路是 LLM-Modulo 框架:LLM 生成候选计划,外部验证器检查正确性,不合格则反馈修正。在 Blocksworld 基准上,纯 LLM 规划仅 30-40% 可行率,而 LLM-Modulo 框架可将可行率提升到 80%+。
详细解析
LLM 规划的核心局限
代码块
JSON
planning_limitations = {
"约束满足": {
"问题": "LLM 难以同时满足多个约束条件",
"示例": "安排5人会议,每人有不同的空闲时间段 → LLM 经常忽略部分约束",
"原因": "自回归生成逐 token 产生,无法全局优化",
},
"长程规划退化": {
"问题": "步骤越多,计划质量越差",
"示例": "10 步计划的可行率远低于 3 步计划",
"原因": "每步的小错误会累积放大",
},
"世界模型缺失": {
"问题": "LLM 无法准确模拟动作的后果",
"示例": "移动积木 A 到 B 上 → LLM 可能忘记 A 原来下面的积木会暴露出来",
"原因": "LLM 是语言模型,不是物理/逻辑模拟器",
},
"幻觉与虚构": {
"问题": "生成看似合理但不可执行的步骤",
"示例": "计划中引用不存在的 API、使用不可用的工具",
"原因": "LLM 优化的是语言流畅度,不是计划可行性",
},
"回溯能力缺失(经典 LLM)": {
"问题": "标准自回归 LLM 无法回头修改已生成的步骤",
"示例": "发现第 3 步需要第 1 步的不同输出时,无法物理改写第 1 步",
"原因": "单向生成架构的根本限制——已写出的 token 进入 KV-cache 即不可修改",
"重要例外": (
"Reasoning Models(o1/o3、DeepSeek-R1、Claude extended thinking 等)"
"通过 RL 训练涌现出**功能性回溯**——在思考链内部说"
"'wait, let me reconsider...' 并重新走一条推理路径。"
"本质仍是顺序生成,但语义层面已能模拟回溯效果。"
"参见 055-reasoning-models.md 的 Aha moment 部分。"
),
},
}
实证数据:LLM 规划的真实表现
Blocksworld 规划任务(2024 基准测试):
#BgJHAnlBKRPd text { white-space: pre; }#BgJHAnlBKRPd .fb0 { stroke: var(--N900-FG, 0.15); }#BgJHAnlBKRPd .fb0 {stroke: rgba(31,35,41, 0.15)}#BgJHAnlBKRPd .fx0 { stroke-miterlimit: 10; }#BgJHAnlBKRPd .fx0 {stroke-miterlimit: 10}#BgJHAnlBKRPd .fa1 { fill: rgb(187, 191, 196); }#BgJHAnlBKRPd .fa1 {fill: rgb(187, 191, 196)}#BgJHAnlBKRPd .fx1 { font: 400 12px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#BgJHAnlBKRPd .fx1 {font-style: normal}#BgJHAnlBKRPd .fx2 { text-anchor: middle; }#BgJHAnlBKRPd .fx2 {text-anchor: middle}#BgJHAnlBKRPd .fx3 { dominant-baseline: central; }#BgJHAnlBKRPd .fx3 {dominant-baseline: central}#BgJHAnlBKRPd .fx4 { stroke: none; }#BgJHAnlBKRPd .fx4 {stroke: none}#BgJHAnlBKRPd .fc0 { fill: var(--text-caption); }#BgJHAnlBKRPd .fc0 {fill: #646a73}#BgJHAnlBKRPd .fa2 { fill: var(--text-link-disabled); }#BgJHAnlBKRPd .fa2 {fill: rgb(187, 191, 196)}#BgJHAnlBKRPd .fx5 { font: 400 13px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#BgJHAnlBKRPd .fx5 {font-style: normal}#BgJHAnlBKRPd .fx6 { text-anchor: start; }#BgJHAnlBKRPd .fx6 {text-anchor: start}#BgJHAnlBKRPd .fx7 { dominant-baseline: alphabetic; }#BgJHAnlBKRPd .fx7 {dominant-baseline: alphabetic}#BgJHAnlBKRPd .fc1 { fill: rgb(0, 0, 0); }#BgJHAnlBKRPd .fc1 {fill: rgb(0, 0, 0)}#BgJHAnlBKRPd .fb1 { fill: var(--N900-FG, 0.15); }#BgJHAnlBKRPd .fb1 {fill: rgba(31,35,41, 0.15)}#BgJHAnlBKRPd .fb2 { fill: rgb(209, 217, 224); }#BgJHAnlBKRPd .fb2 {fill: rgb(209, 217, 224)}#BgJHAnlBKRPd .fa3 { fill: var(--bg-body); }#BgJHAnlBKRPd .fa3 {fill: #fff}ABC123456方法GPT-4 直接规划GPT-4 + CoTGPT-4 + Self-VerifyLLM-Modulo (外部验证)传统规划器 (PDDL)可行率~35%~42%~55%82%100%最优率15%~20%~30%~65%100%
结论:LLM 单独做规划远不如传统规划器可靠,但 LLM + 外部验证可以显著提升
缓解方案 1:LLM-Modulo 框架
代码块
Python
class LLMModuloPlanner:
"""LLM 生成 + 外部验证器检查"""
async def plan(self, task, max_attempts=5):
for attempt in range(max_attempts):
LLM 不能规划但能帮忙:候选由 LLM 生成,正确性由外部验证器把关,不过关带反馈重生成。
缓解方案 2:混合规划架构
代码块
Python
缓解方案 3:Plan-Verify-Correct 循环
代码块
Python
class PlanVerifyCorrect:
"""生成 → 验证 → 纠正 的迭代循环"""
async def solve(self, task):
plan = await self.generate_initial_plan(task)
for iteration in range(self.max_iterations):
# 验证
issues = await self.llm.verify_plan(
plan=plan,
prompt="""
审查以下计划,检查:
1. 是否有遗漏的步骤?
2. 步骤顺序是否正确?
3. 是否有不可执行的步骤?
4. 是否满足所有约束?
列出发现的问题。
"""
缓解方案 4:分层规划降低复杂度
代码块
Plain Text
完整任务(LLM 难以一次性规划)
│
├── 抽象层(LLM 擅长):高层目标和策略
关键研究发现
代码块
JSON
key_findings = {
"Kambhampati 2024": (
"LLMs cannot plan but can help planning. "
"LLM-Modulo 框架让 LLM 作为候选生成器,"
"外部验证器保证正确性"
),
常见误区 / 面试追问
误区:"用更大的模型就能解决规划问题" — 规划能力的局限是自回归架构的根本问题,不是模型大小的问题。更大的模型可以改善但无法根本解决约束满足和状态追踪的弱点。正确做法是用外部工具补偿 LLM 的结构性弱点。
误区:"LLM 不能规划 = LLM 在规划中没用" — 恰恰相反。LLM 在规划中的角色是:理解自然语言需求、生成候选方案、提供常识知识。它不擅长的是精确约束满足和状态追踪——这些交给传统算法或验证器。
追问:"如何判断一个规划任务是否适合 LLM?" — 两个维度:(1) 约束的数量和复杂度——少约束适合 LLM,多约束需要验证器;(2) 步骤数——3-5 步 LLM 可以直接处理,10+ 步需要分层规划或外部辅助。
追问:"LLM-Modulo 框架的验证器从哪来?" — 取决于领域:代码规划用单元测试和类型检查;数学规划用符号计算验证;现实世界规划用模拟器;通用场景用另一个 LLM 做交叉验证(效果有限但成本低)。