任务分解的经典范式 · 和 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 则「走一步看一步」,灵活但话痨。前者胜在稳和省、输在计划僵硬,实战里常靠重规划把两者的长处缝在一起。

相关推荐
0end13 小时前
AI Agent 学习笔记(三):上下文工程(下)—— KV Cache、提示词设计与 Agent Skills
前端·aigc·ai编程
CAD老兵3 小时前
在浏览器里对比 DWG/DXF 图纸 —— @mlightcad/cad-diff-viewer
前端·javascript·github
JasonYin4 小时前
AI 定义的 H5移动端 开发规范,直接抄作业!
前端
诗章与猫4 小时前
Leaflet 渲染 100 万 marker 卡成 PPT?我用 WebGL 重写了渲染器
前端
用户921080262864 小时前
在 AI 代码生成项目里接入 Thought:别展示“玄学思维链”,只展示用户真正关心的工具调用
前端
艾醒(AiXing-w)4 小时前
LangChain 1.0 入门(二):LangChain 全模型标准化接入最佳实践(小白参数详解版)
前端·javascript·langchain
计算机魔术师4 小时前
我看了 Hugging Face 的 Daily Papers,发现这件事
前端
yu俞娥宝5 小时前
Codex官网前端可抄吗?技术拆解、风险边界与合规借鉴方案
前端
捧 花6 小时前
FastAPI 基础语法:从一个完整接口理解 Web API 的设计
前端·python·fastapi·middleware
Hilaku6 小时前
一行 CSS 新特性干掉 20 行 JavaScript ?
前端·javascript·程序员