面试聊 Agent,绕不开一个问题:「给你一个复杂任务,你的 Agent 怎么把它拆开做?」 如果只答「用 ReAct 边想边做」,面试官往往会追一句:「任务步骤很多、还想省 token 时,你会怎么改?」 这时候能不能说清 Plan-and-Execute,基本就是初级和中高级的分水岭。这篇把它讲透,并和 ReAct 摆在一起对比。
核心思想:规划和执行,分成两个阶段
Plan-and-Execute(先规划后执行)的做法非常直白,一句话概括就是:先让模型一次性产出一份完整计划(一个有序的子任务列表),再拿着这份计划逐个执行下去。它把 Agent 的工作显式地切成两个角色:
- Planner(规划器) :接到用户目标后,通盘思考,输出一个分好步骤的子任务列表,比如「1. 查 A 城天气 → 2. 查 B 城天气 → 3. 对比两地温度 → 4. 汇总成建议」;
- Executor(执行器) :不再重新思考大局,只负责照单执行------按顺序把每个子任务交给工具或子模型完成,拿到结果填回去。
关键在于:整体计划在开工前就已经定好了。执行阶段基本是「照本宣科」,不需要每走一步都重新调用大模型去想「下一步该干嘛」。
对照组:ReAct 是「走一步看一步」
要理解 Plan-and-Execute 的价值,得先看它想改进谁------ReAct(Reason + Act)。ReAct 的节奏是一个不断循环的小步子:
ini
# ReAct:每一步都重新想一次
loop:
thought = LLM(观察历史) # 想:现在该干嘛
action = 选一个工具去调用 # 做:执行这一步
observation = 工具返回结果 # 看:拿到反馈
if 任务完成: break # 没完成就带着新观察再想一轮
ReAct 没有「全局计划」这回事,它每走一步都要把全部历史喂回大模型、重新推理下一步 。好处是极其灵活------上一步的结果不对,下一步立刻能改方向;坏处是它视野短、话痨、贵:每一步一次 LLM 调用,历史越滚越长,token 蹭蹭涨,还容易在中途「想偏」绕远路。
Plan-and-Execute 则相反,把「想」集中到开头一次做完:
ini
# Plan-and-Execute:先想全,再照做
plan = Planner(目标) # 一次性产出完整子任务列表
for step in plan: # 逐个执行,通常不再调大模型规划
result = Executor(step)
results.append(result)
answer = 汇总(results)
为什么先规划反而更好:全局视野 + 省 token
把规划提前,带来两个实打实的好处:
- 全局视野,减少绕路:Planner 在动手前就纵览了整个任务,能安排合理的步骤顺序、避免 ReAct 那种「走到一半发现方向错了」的短视问题。步骤之间的依赖关系也看得更清楚。
- 省 token、更快 :规划只用一次(可能用贵的大模型),执行阶段每步不必再把完整历史反复喂给大模型重新推理------很多实现里执行器用更小/更便宜的模型甚至纯工具调用即可。相比 ReAct 每步一次昂贵 LLM 推理,整体调用次数和上下文长度都显著下降。
一句记忆点:ReAct 把「思考」摊到每一步,所以灵活但费;Plan-and-Execute 把「思考」压到开头一次,所以省且稳,代价是计划一旦定死就不够随机应变。
代价:计划僵硬,遇到意外不会转弯
Plan-and-Execute 最大的软肋,正来自它的优点------计划是一次性定死的。一旦执行中出现规划时没预料到的情况,纯粹的「照单执行」就会翻车:
- 某一步工具报错、返回空结果,后续步骤却还在按原计划硬跑;
- 第 2 步拿到的信息本该改变第 4 步的做法,但计划早已写死,执行器不会自主调整;
- 任务本身信息不全,开头根本无法制定出正确的完整计划。
工程上的常见补救是引入 Re-planning(重规划) :执行完一批步骤后回看结果,让 Planner 判断是否需要修改剩余计划------这其实就是 LangChain 的 Plan-and-Execute 与后续 LLMCompiler、ReWOO 等变体在做的事,本质是在「纯规划」和「纯 ReAct」之间找平衡。
Plan-and-Execute vs. ReAct 对比表
| 维度 | Plan-and-Execute(先规划后执行) | ReAct(走一步看一步) |
|---|---|---|
| 节奏 | 先一次性出完整计划,再逐个执行 | 思考→行动→观察,循环往复 |
| 规划时机 | 开工前集中规划一次 | 每一步临时决定下一步 |
| 视野 | 全局视野,步骤统筹 | 局部短视,易绕路 |
| LLM 调用 / token | 少,执行阶段可省推理 | 多,每步一次、历史累积 |
| 灵活性 / 纠错 | 计划僵硬,需靠重规划补救 | 高,随时可改方向 |
| 擅长场景 | 步骤清晰、可提前拆解的多步任务 | 探索性强、结果高度不确定的任务 |
一句话总结
Plan-and-Execute 把 Agent 拆成「先出完整子任务清单的 Planner + 照单执行的 Executor」,用开头一次全局规划 换来更好的统筹和更省的 token;ReAct 则「走一步看一步」,灵活但话痨。前者胜在稳和省、输在计划僵硬,实战里常靠重规划把两者的长处缝在一起。