首页 › AI Agent › Agent100道面试题 › 规划与推理-planning-and-reasoning › LLM 作为规划器的局限性与缓解方案

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 做交叉验证(效果有限但成本低)。​