Planner与Executor
2595 字约 9 分钟
domain/aiai/agents
2026-07-24
Planner-Executor 是 Agent 系统中最经典的架构模式之一。核心思想是将"想"和"做"分离——Planner 负责任务分解和策略制定,Executor 负责逐步执行。这种分离让架构更清晰、更易维护,也更容易针对规划和执行分别优化。
一句话解释
Planner 生成计划 → Executor 逐步执行 → 失败时触发重规划,用"计划级推理"替代"步级推理"提升复杂任务的成功率。
核心结论
- Planner 负责任务分解和策略制定,Executor 负责具体执行
- 规划与执行分离使 Agent 架构更清晰、更易维护
- Planner 需要将复杂任务分解为可执行的子任务序列
- Executor 需要可靠地执行每个子任务并处理异常
- 好的 Planner-Executor 设计能显著提升复杂任务的成功率
基础概念
Planner:规划器,负责任务分解、策略选择和步骤规划。
Executor:执行器,负责按计划执行具体操作。
Task Decomposition:将复杂任务分解为简单子任务。
Strategy:完成任务的整体方法和路径。
Step:规划中的具体执行步骤。
Feedback:执行结果反馈给 Planner 用于调整计划。
Replanning:根据执行结果重新规划。
Plan-and-Execute 架构详解
完整执行流程
与 ReAct 的核心区别
| 维度 | ReAct | Plan-and-Execute |
|---|---|---|
| 推理粒度 | 步级(每步都重新推理) | 计划级(先规划完整计划再执行) |
| 前瞻性 | 一步一顾(只看当前步骤) | 全局规划(先看全貌再执行) |
| 适合任务 | 简单、短链任务 | 复杂、多步骤任务 |
| 执行效率 | 每步都调 LLM,开销大 | 规划一次,执行多次,开销小 |
| 灵活性 | 高(随时调整方向) | 中(需重规划才能调整) |
| Token 消耗 | 高(每步都带完整上下文) | 中(Executor 只需当前步骤上下文) |
| 典型实现 | ReAct模式 | LangGraph Plan-and-Execute |
关键洞察:ReAct 像是"走一步看一步",Plan-and-Execute 像是"先看地图再出发"。两者不是互斥的——Plan-and-Execute 的 Executor 内部可以使用 ReAct 模式执行单个步骤。
混合模式:Plan + ReAct
规划策略对比
三种规划策略
| 策略 | 描述 | 优势 | 劣势 | 适用场景 |
|---|---|---|---|---|
| 一次性规划 | 开始时生成完整计划,执行中不改 | 全局视角,执行高效 | 无法适应变化 | 流程明确的任务 |
| 迭代规划 | 每步执行后根据结果调整后续计划 | 适应性强 | 规划开销大 | 不确定性高的任务 |
| 层级规划 | 先粗粒度分解,再对子任务递归细化 | 控制粒度灵活 | 层级深时复杂 | 大型复杂项目 |
一次性规划 vs 迭代规划
层级规划
计划修正机制(Replanning)
何时触发重规划
| 触发条件 | 描述 | 示例 |
|---|---|---|
| 步骤失败 | 当前步骤执行失败且重试无效 | API 返回 404,数据源不可用 |
| 结果偏离预期 | 执行结果与计划假设不符 | 搜索返回 0 条结果 |
| 发现新信息 | 执行中发现需要额外步骤 | 数据需要先解密才能处理 |
| 资源耗尽 | Token 或时间预算即将用尽 | 已消耗 80% Token 预算 |
| 用户修正 | 用户中途修改需求 | 用户说"不要用这个数据源" |
重规划策略
Prompt 模式:
"原计划是:{original_plan}
已完成的步骤:{completed_steps}
失败的步骤:{failed_step}
失败原因:{error_message}
新发现的信息:{new_info}
请基于以上信息,生成调整后的新计划。
保留已成功完成的步骤,调整未执行的部分。"重规划的代价
- 成本:每次重规划都是一次完整的 LLM 调用
- 时间:重规划增加延迟
- 一致性:新计划可能与旧计划逻辑不一致
- 无限循环风险:反复重规划但不收敛
防护措施:设置最大重规划次数(如 3 次),超过则回退到降级策略或请求人工介入。
在主流框架中的实现
LangGraph Plan-and-Execute
LangGraph 的优势:
- 每个节点执行后自动保存检查点(支持断点续跑)
- 可以在 Replan 节点暂停等待人工审批
- 可视化展示计划执行进度
OpenAI Agents SDK 的 Handoff 实现
OpenAI Agents SDK 用 Handoff 机制实现类似效果:
- 一个 Agent 可以声明它能"移交"任务给哪些其他 Agent
- Planner Agent 分析任务后,Handoff 给执行型 Agent
- 执行型 Agent 完成后,可以 Handoff 回 Planner 或其他 Agent
- 路由逻辑由 LLM 自动判断
规划质量对执行效率的影响
好计划 vs 坏计划
提升规划质量的方法
- 提供充分的上下文:Planner 需要知道可用工具、约束条件、历史经验
- 参考历史计划:类似任务的成功计划可以作为 few-shot 示例
- 预估每步难度:标注难度有助于提前识别风险步骤
- 设置检查点:在关键步骤后验证中间结果,避免错误传播
何时用 ReAct vs Plan-and-Execute
| 场景特征 | 推荐模式 | 理由 |
|---|---|---|
| 任务简单、步骤少(1-3 步) | ReAct | 规划开销不值得 |
| 任务复杂、步骤多(5+ 步) | Plan-and-Execute | 全局规划提升效率 |
| 任务路径不确定、需探索 | ReAct | 随时调整方向 |
| 任务流程清晰、可预测 | Plan-and-Execute | 按计划执行更高效 |
| 需要向用户展示计划 | Plan-and-Execute | 可以先展示计划再执行 |
| 需要人工审批 | Plan-and-Execute | 在计划阶段审批 |
| 成本敏感 | Plan-and-Execute | 减少 LLM 调用次数 |
| 需要并行执行 | Plan-and-Execute | 规划时可识别并行步骤 |
与任务队列的关系
Planner与Executor 和 Agent任务队列 分工明确:
- Planner 关注任务分解和顺序
- 任务队列关注调度策略和并发控制
- Executor 关注单步执行质量
Executor 模式
- Sequential:顺序执行,前一步的结果作为后一步的输入
- Parallel:并行执行独立任务,汇总结果
- Conditional:根据条件选择执行路径
- Iterative:迭代执行直到满足退出条件
实战场景
- 复杂查询:分解为多个检索步骤,逐步缩小范围
- 数据分析:数据获取 → 清洗 → 分析 → 可视化(流水线)
- 代码生成:需求分析 → 架构设计 → 编码 → 测试(层级规划)
- 报告生成:信息收集 → 整理 → 撰写 → 审核(流水线 + 审核)
- 自动化部署:环境检查 → 构建 → 测试 → 部署(条件分支)
常见误区
- Planner 过度规划:计划太详细缺乏灵活性,任何偏差都触发重规划
- Executor 缺乏判断:盲目执行不验证结果,错误传播到后续步骤
- 不处理计划失败:没有 replanning 机制,一步失败全盘崩溃
- 规划与执行耦合:Planner 和 Executor 共享太多状态,难以独立优化
- 忽视执行成本:多步执行成本累积,不设预算上限
- 重规划无限循环:没有最大重规划次数限制,陷入死循环
进阶方向
- 层次化规划(Hierarchical Planning)—— 递归分解
- 在线规划(Online Planning)—— 边执行边规划
- 学习计划优化 —— 从历史成功/失败中改进规划策略
- 多 Planner 协作 —— 多个 Planner 从不同视角规划
- 规划缓存与复用 —— 类似任务的计划模板化
- 自适应执行策略 —— Executor 根据任务特征选择执行模式
推荐资料
- Anthropic Building Effective Agents - https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/building-effective-agents
- LangGraph Plan-and-Execute - https://langchain-ai.github.io/langgraph/
- HuggingGPT Paper - https://arxiv.org/abs/2303.17580
- Voyager Paper - https://arxiv.org/abs/2305.16291
- AutoGen Task Decomposition - https://microsoft.github.io/autogen/