Skip to content

64. 规划模式(Planning Pattern) ​

难度 P1 高频 · 岗位 应用 · 频率 ★★★★☆ · 预计阅读 8 min 公司 OpenAI · Anthropic 相关题 Q63 ReAct 模式 · Q95 Plan-and-Execute · Q56 Manus 实现

本题阅读地图 ​

  1. 面试场景还原 — 1 min
  2. TL;DR 速记 — 30 sec
  3. 图解 — 30 sec
  4. 详细解析 — 5 min
  5. 常见踩坑与反例 — 1 min
  6. 面试官可能继续追问 — 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 执行每个子任务(怎么做)
    ↓
整合层:汇总结果生成最终输出

具体协作方式:

  1. 规划阶段:用 LLM 生成结构化计划

    请为以下任务制定执行计划:...
    要求:
    - 列出所有需要执行的步骤
    - 标注步骤之间的依赖关系
    - 每个步骤要有明确的完成标准
  2. 执行阶段:对每个子任务用 ReAct

    子任务:搜索电动汽车市场规模
    用 ReAct 循环:
    - 思考:需要哪些关键词?
    - 行动:调用搜索工具
    - 观察:获取结果
    - 思考:信息是否足够?
  3. 整合阶段:用 LLM 汇总各子任务结果

    基于以下子任务结果,生成完整报告:
    - 子任务1结果:...
    - 子任务2结果:...

动态重规划(Replanning)机制 ​

实际执行中经常会发现原计划有问题,需要支持动态调整:

需要重规划的场景:

  1. 信息不足:某个子任务发现需要额外的信息才能完成
  2. 计划遗漏:执行中发现有维度没考虑到
  3. 意外情况:某个步骤失败了,需要替代方案
  4. 用户变更:用户中途改变了需求

重规划的触发条件:

  • 子任务执行失败
  • 子任务输出不符合预期
  • 模型判断原计划不再适用

重规划的实现方式:

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 分别执行不同子任务,最后整合结果。这是多智能体系统的典型架构。


面试总结 ​

规划模式是处理复杂长任务的核心设计模式。面试时强调三点:

  1. 核心机制:先规划(制定全局计划)→ 再执行(逐个击破子任务)→ 必要时重规划
  2. 与 ReAct 的关系:规划模式是宏观策略,ReAct 是微观执行,两者分层协作
  3. 应用场景:多维度分析、长周期任务、需要保证全面性的复杂任务

记住:规划不是束缚,而是为了更好地执行。好的规划要有灵活性,能根据执行情况动态调整。Deep Research、Manus 等产品的核心能力就是规划模式的应用。

章节首页 · ← Q63 · Q65 →

最后更新2026-05-05
难度P1
频率high
阅读8 min
主题agent / planning / task-decomposition
觉得有帮助?把这个链接转给正在求职的朋友 · 用 Ctrl + K 全站搜索其它题