任务分解的经典范式 · 和 ReAct「走一步看一步」到底差在哪

面试聊 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 与后续 LLMCompilerReWOO 等变体在做的事,本质是在「纯规划」和「纯 ReAct」之间找平衡

Plan-and-Execute vs. ReAct 对比表

维度 Plan-and-Execute(先规划后执行) ReAct(走一步看一步)
节奏 先一次性出完整计划,再逐个执行 思考→行动→观察,循环往复
规划时机 开工前集中规划一次 每一步临时决定下一步
视野 全局视野,步骤统筹 局部短视,易绕路
LLM 调用 / token 少,执行阶段可省推理 多,每步一次、历史累积
灵活性 / 纠错 计划僵硬,需靠重规划补救 高,随时可改方向
擅长场景 步骤清晰、可提前拆解的多步任务 探索性强、结果高度不确定的任务

一句话总结

Plan-and-Execute 把 Agent 拆成「先出完整子任务清单的 Planner + 照单执行的 Executor」,用开头一次全局规划 换来更好的统筹和更省的 token;ReAct 则「走一步看一步」,灵活但话痨。前者胜在稳和省、输在计划僵硬,实战里常靠重规划把两者的长处缝在一起。

相关推荐
是烨笙啊1 小时前
从 npm 与 Bun 的选择看 AI 时代的“最佳实践”焦虑
前端·人工智能·npm
lichenyang4532 小时前
从 Web 容器到本地 HAR:我做了一个 HarmonyOS JSBridge 运行时框架 Demo
前端
超神熊猫2 小时前
🧀🧀🧀前端仔如何快速上手python
前端·python
阿黎梨梨2 小时前
AI 推理太慢用户要退钱?前端流式输出(Stream)究竟是何方神圣?
前端·vue.js
只一2 小时前
从0到1吃透AI流式输出:Vue3+DeepSeek实战,解锁丝滑对话体验
前端·vue.js
JZC_xiaozhong2 小时前
OA调价审批后,采购调价单如何自动同步到ERP?解决漏录错价难题
大数据·linux·服务器·前端·数据库·数据孤岛解决方案·数据集成与应用集成
卷无止境2 小时前
Flet 完全教程:用纯 Python 构建跨平台应用
前端·python
Cobyte2 小时前
24.Vue Vapor 组件事件 emit 的实现
前端·javascript·vue.js
Flynt2 小时前
TypeScript 5.8 让我少踩了一个大坑,顺手再聊聊 --erasableSyntaxOnly
前端·javascript·typescript