Appearance
64. 规划模式(Planning Pattern)
难度 P1 高频 · 岗位 应用 · 频率 ★★★★☆ · 预计阅读 8 min 公司 OpenAI · Anthropic 相关题 Q63 ReAct 模式 · Q95 Plan-and-Execute · Q56 Manus 实现
本题阅读地图
- 面试场景还原 — 1 min
- TL;DR 速记 — 30 sec
- 图解 — 30 sec
- 详细解析 — 5 min
- 4.1 为什么需要规划模式?ReAct 的局限性
- 4.2 规划模式的核心机制:先规划后执行
- 4.3 任务分解的策略与方法
- 4.4 规划与执行的协作模式
- 4.5 动态重规划(Replanning)机制
- 常见踩坑与反例 — 1 min
- 面试官可能继续追问 — 1 min
面试场景还原
�面试官:用户要求「帮我研究一下电动汽车行业的竞争格局,整理一份报告」,Agent 应该怎么处理?
🙋♂️我:用 ReAct 模式一步步搜索信息,然后整理成报告。
👔面试官:ReAct 是走一步看一步,对于这种需要多维度信息的复杂研究任务,一开始就搜索可能会遗漏重要维度。你能想到更好的策略吗?
🙋♂️我:呃……可以先列个提纲?
👔面试官:对,这叫 规划模式。先想清楚要研究哪些方面(市场规模、主要玩家、技术路线、政策环境),制定完整计划,再按计划执行。这样能确保信息收集全面,不会遗漏关键维度。
🙋♂️我:那如果执行中发现某个方向信息不够,怎么办?
👔面试官:好问题。这时候需要 动态重规划,根据执行情况调整原计划,而不是硬按原计划走。规划模式的核心就是「先规划 → 再执行 → 必要时重规划」。
TL;DR 速记
- 是什么:先制定全局行动计划,再按步骤执行的策略模式
- 解决痛点:ReAct 走一步看一步容易遗漏全局视角,长任务容易跑偏
- 核心机制:规划阶段(拆任务)+ 执行阶段(逐个击破)+ 重规划(动态调整)
- 任务分解策略:按维度分解、按流程分解、按模块分解
- 典型应用:Deep Research、Manus、复杂数据分析、多步骤业务流程
图解
图 1:规划模式的两阶段架构
图 2:规划模式 vs ReAct 模式
详细解析
为什么需要规划模式?ReAct 的局限性
ReAct 模式(思考-行动-观察循环)非常适合处理需要动态决策的复杂任务,但它也有明显的局限:
局限 1:缺乏全局视角 ReAct 是「走一步看一步」,模型在每一步只能基于当前信息决策,容易陷入局部最优而忽略全局。比如做行业研究,可能一直在深挖某个细分领域,却忘了还要分析竞争对手。
局限 2:长任务容易跑偏 当任务步骤很多(10 步以上)时,ReAct 容易「忘记」最初的目标,被中间结果带偏方向。
局限 3:无法并行优化 ReAct 是串行的,一步做完才能做下一步。但有些子任务是独立的,完全可以并行执行来提高效率。
局限 4:难以保证覆盖全面 没有预先规划,很容易遗漏某些应该调查的维度或步骤。
规划模式就是来解决这些问题的:先站在全局视角制定完整计划,再按步骤执行,既保证了全面性,又能灵活调整。
规划模式的核心机制:先规划后执行
规划模式将任务处理分为两个明确的阶段:
第一阶段:规划(Planning) Agent 接收任务后,不急于执行,而是先进行全局分析:
- 理解任务目标和约束条件
- 分析需要哪些信息、执行哪些步骤
- 将任务分解为可执行的子任务列表
- 确定子任务的执行顺序和依赖关系
规划阶段的输出通常是一个结构化的计划:
json
{
"task": "研究电动汽车行业竞争格局",
"plan": [
{"step": 1, "action": "搜索全球电动汽车市场规模和增长趋势", "depends_on": []},
{"step": 2, "action": "整理主要厂商市场份额(特斯拉、比亚迪、蔚来等)", "depends_on": []},
{"step": 3, "action": "分析各厂商技术路线对比", "depends_on": [2]},
{"step": 4, "action": "搜索各国政策对行业的影响", "depends_on": []},
{"step": 5, "action": "综合以上信息生成报告", "depends_on": [1, 2, 3, 4]}
]
}第二阶段:执行(Execution) 按照规划阶段制定的计划,逐个执行子任务:
- 每个子任务可以用 ReAct 模式执行
- 独立子任务可以并行执行
- 有依赖的子任务按顺序执行
- 收集各子任务结果
第三阶段:整合(Synthesis) 将所有子任务的结果整合为最终输出:
- 汇总各子任务输出
- 检查是否满足原始任务要求
- 生成最终报告或答案
任务分解的策略与方法
任务分解是规划模式的核心能力,常见的分解策略有:
策略 1:按维度分解 适用于需要从多个角度分析的问题。
示例:「研究电动汽车行业」
- 市场规模维度
- 竞争格局维度
- 技术路线维度
- 政策环境维度
策略 2:按流程分解 适用于有明确先后顺序的任务。
示例:「帮我订一张去上海的机票」
- 查询航班信息
- 选择合适航班
- 填写乘客信息
- 支付订单
- 确认出票
策略 3:按模块分解 适用于可以拆分成独立模块的复杂任务。
示例:「分析这份财报」
- 分析资产负债表
- 分析利润表
- 分析现金流量表
- 综合分析
策略 4:按粒度分层 先粗粒度分解,再对关键子任务细粒度分解。
示例:
- L1:调研 → 分析 → 报告
- L2:调研(市场 + 竞品 + 用户)
- L3:市场(规模 + 趋势 + 区域)
分解质量的判断标准:
- MECE 原则:子任务之间互斥且完全穷尽(Mutually Exclusive, Collectively Exhaustive)
- 独立性:尽量让子任务之间相互独立,便于并行
- 可执行性:每个子任务都能明确判断是否完成
- 粒度适中:子任务不要太大(难以执行)也不要太小(管理成本高)
规划与执行的协作模式
规划模式和 ReAct 不是互斥的,而是分层协作:
规划层:制定整体策略(做什么)
↓
执行层:用 ReAct 执行每个子任务(怎么做)
↓
整合层:汇总结果生成最终输出具体协作方式:
规划阶段:用 LLM 生成结构化计划
请为以下任务制定执行计划:... 要求: - 列出所有需要执行的步骤 - 标注步骤之间的依赖关系 - 每个步骤要有明确的完成标准执行阶段:对每个子任务用 ReAct
子任务:搜索电动汽车市场规模 用 ReAct 循环: - 思考:需要哪些关键词? - 行动:调用搜索工具 - 观察:获取结果 - 思考:信息是否足够?整合阶段:用 LLM 汇总各子任务结果
基于以下子任务结果,生成完整报告: - 子任务1结果:... - 子任务2结果:...
动态重规划(Replanning)机制
实际执行中经常会发现原计划有问题,需要支持动态调整:
需要重规划的场景:
- 信息不足:某个子任务发现需要额外的信息才能完成
- 计划遗漏:执行中发现有维度没考虑到
- 意外情况:某个步骤失败了,需要替代方案
- 用户变更:用户中途改变了需求
重规划的触发条件:
- 子任务执行失败
- 子任务输出不符合预期
- 模型判断原计划不再适用
重规划的实现方式:
python
# 伪代码示例
plan = generate_plan(task)
results = {}
for step in plan.steps:
result = execute_with_react(step)
if result.status == "failed" or needs_replanning(result):
# 触发重规划
new_plan = replan(task, plan, results, result.error)
plan = new_plan # 更新计划
continue # 用新计划继续
results[step.id] = result
final_output = synthesize(results)重规划的成本控制:
- 不要频繁重规划(每次重规划都要重新生成计划,成本高)
- 设置重规划次数上限
- 区分「完全重规划」和「局部调整」
常见踩坑与反例
踩坑 1:规划过于详细导致僵化
错误做法: 把每个细枝末节都写进计划,执行中发现一个小变化就要重规划。
问题: 计划过于僵化,失去了灵活性。
正确做法: 规划阶段只定大方向和关键节点,细节在执行阶段用 ReAct 动态处理。
踩坑 2:不做规划直接执行
错误做法: 所有任务都用 ReAct 走一步看一步,没有全局规划。
问题: 复杂任务容易遗漏关键步骤,或执行到一半发现方向错了。
正确做法: 复杂任务(5 步以上或多维度)先用规划模式定框架,再用 ReAct 执行细节。
踩坑 3:规划后不执行或执行不完整
错误做法: 只做了规划,但没有真正执行每个子任务,或执行到一半就停了。
正确做法: 规划是为了执行,要有明确的执行跟踪机制,确保每个子任务都完成。
踩坑 4:子任务之间耦合度过高
错误做法: 子任务之间高度依赖,一步卡住了整个任务都卡住。
正确做法: 尽量让子任务独立,关键路径上的依赖要明确标注,非关键路径的任务可以跳过或延后。
踩坑 5:缺少整合步骤
错误做法: 各子任务执行完了,直接把结果拼接输出,没有综合分析和润色。
正确做法: 必须有明确的整合阶段,用 LLM 对多个子任务结果进行综合分析,生成连贯的最终输出。
面试官可能继续追问
追问 1:规划模式和 ReAct 模式怎么选? 答题要点:简单任务(1-3 步)用 ReAct;复杂任务(多维度、多步骤)用规划模式。规划模式是 ReAct 的上层封装,执行层可以用 ReAct。
追问 2:任务分解的原则是什么? 答题要点:MECE 原则(互斥且穷尽)、独立性(便于并行)、可执行性(有明确的完成标准)、粒度适中(不要太粗也不要太细)。
追问 3:规划模式在工程实现中的挑战是什么? 答题要点:1)计划生成质量不稳定;2)重规划的成本控制;3)长任务的上下文管理;4)并行执行的任务调度。
追问 4:规划模式适合多智能体系统吗? 答题要点:非常适合。Planner Agent 负责制定计划,多个 Worker Agent 分别执行不同子任务,最后整合结果。这是多智能体系统的典型架构。
面试总结
规划模式是处理复杂长任务的核心设计模式。面试时强调三点:
- 核心机制:先规划(制定全局计划)→ 再执行(逐个击破子任务)→ 必要时重规划
- 与 ReAct 的关系:规划模式是宏观策略,ReAct 是微观执行,两者分层协作
- 应用场景:多维度分析、长周期任务、需要保证全面性的复杂任务
记住:规划不是束缚,而是为了更好地执行。好的规划要有灵活性,能根据执行情况动态调整。Deep Research、Manus 等产品的核心能力就是规划模式的应用。