Plan-and-Execute Pattern
Plan-and-Execute Pattern 是先用 LLM 生成完整计划,再逐步执行的 Agent 模式。它比 ReAct 更适合复杂多步任务,因为计划可以全局优化。
#type / concept
#status / evergreen
#tech / ai
#tech / architecture
[!info] related notes
- 所属 MOC: AI Agent Application MOC
- 相关: Planner, ReAct Pattern, 工作流编排
Plan-and-Execute Pattern
一句话定义
Plan-and-Execute Pattern 是先用 LLM 生成完整计划,再逐步执行的 Agent 模式。和 ReAct 的”想一步做一步”不同,它是”先想清楚所有步骤,再逐步做”。
它解决什么问题
ReAct 的问题:
- 每步只看当前状态,不考虑全局
- 容易走弯路(做了 A 才发现应该先做 B)
- 无法并行执行独立步骤
Plan-and-Execute 先规划全局,再执行局部。
核心原理
两阶段架构
阶段 1: Planning
用户目标 → LLM 生成 Plan (步骤列表)
阶段 2: Execution
逐步执行 Plan → 每步调用工具 → 收集结果
(可选: 执行中 Re-plan)
与 ReAct 的对比
| ReAct | Plan-and-Execute | |
|---|---|---|
| 思维模式 | 想一步做一步 | 先想清楚再做 |
| 全局视野 | 弱 | 强 |
| 适应性 | 强(每步可调整) | 中(需要 Re-plan) |
| 适用场景 | 简单任务、探索性任务 | 复杂多步任务 |
Python 实现
class PlanAndExecuteAgent:
def __init__(self, planner: Planner, executor: PlanExecutor, llm):
self.planner = planner
self.executor = executor
self.llm = llm
async def run(self, goal: str) -> str:
# 阶段 1: 生成计划
plan = await self.planner.create_plan(goal)
# 阶段 2: 逐步执行
for step in plan.steps:
result = await self.executor.execute_step(step)
if result.error:
# 失败时 Re-plan
plan = await self.re_plan(goal, plan, step, result)
continue
step.result = result.data
# 汇总结果
return await self.summarize(plan)
async def re_plan(self, goal: str, current_plan: Plan, failed_step: PlanStep, error) -> Plan:
"""执行失败时重新规划"""
prompt = f"""
原始目标: {goal}
原计划: {current_plan}
失败步骤: {failed_step}
错误: {error}
请重新规划剩余步骤。
"""
return await self.planner.create_plan(prompt)
常见设计模式
1. 静态 Plan
一次性生成完整 Plan,不修改。
2. 动态 Re-plan
执行中遇到失败或新信息时重新规划。
3. 分层 Plan
高层 Plan 定义大步骤,每个大步骤内部再生成子 Plan。
常见坑
- Plan 不可执行: 步骤太抽象,无法转换为工具调用
- 不做 Re-plan: 执行失败后卡住
- Plan 太长: 20 个步骤的 Plan 容易出错
- 不做结果验证: 步骤执行了但结果不对