ReAct / Plan-and-Execute / Reflection:三大 Agent 范式有什么核心区别?怎么选型?
一张地图、三张原理图、一张核心对比表,再加两个交互演示,把"什么时候该用哪种"彻底讲透。
一、一句话答案
三者都是「让大模型反复决策」的控制流策略,但决策发生的时机和姿势不同:
- ReAct 边想边做:每走一步都重新推理(局部最优,灵活但可能绕路)。
- Plan-and-Execute 先规划后做:开局先列全局计划,再照着执行(有大局观,但计划可能脱离现实)。
- Reflection 干完再复盘:执行后自我批评,把教训写进记忆再重来(最抗错,但要多花几轮成本)。
二、心智模型:三种「干活方式」
用装修一套房子来类比,三种范式就是三种项目经理的工作风格:
🛠️ ReAct = 边干边想的电工
到了现场才决定下一步:先看看插座在哪,决定拆哪面墙,看一眼结果再决定下一步。灵活,但没人提前画全屋图纸,复杂工程容易返工。
📋 Plan-and-Execute = 先出图纸再施工
开工前先出完整施工图(水电、泥木、油漆分步),工人照图执行。有全局把控,但若现场和图纸不符(比如墙体结构变了),就卡住。
🔍 Reflection = 干完拍视频复盘
每干完一段就录下来自己挑刺:"这里线排乱了、下次要先标尺寸",把教训记到本子上,下一处就改。越干越稳,但费时间。
三、范式地图总览
把三种范式按「是否先有全局计划」和「是否显式反思」两个维度摆开:
四、ReAct:边想边做
ReAct = Reasoning(推理) + Acting(行动),Yao 等 2022 年提出。核心是 Thought → Action → Observation 的循环:想一步、调一次工具、看一眼结果、再想下一步,直到 Finish。
✅ 适合
- 需要实时/外部信息(搜索、API、数据库、代码执行)
- 任务中等复杂度、步骤不太多
- 需要根据结果动态调整路线
- 想快速出原型、可解释可审计
⚠️ 短板
- 无全局计划:容易绕路、重复、卡死
- 上下文爆栈:步数一多,草稿本很长
- 错误传播:某步 Observation 错,后面全歪
- 长任务易"走偏"或陷入死循环
五、Plan-and-Execute:先规划后做
Plan-and-Execute 把过程拆成两段:Planner(规划者)先产出一份完整、可执行的步骤计划;Executor(执行者)再逐条执行(执行者本身往往就是个 ReAct)。开局定方向,中途少迷路。
✅ 适合
- 多步骤、长任务,需要全局把控
- 流程相对可预测、能提前分解
- 希望计划可被人工审核/审批
- 步骤可并行、可分工
⚠️ 短板
- 计划可能脱离现实:模型开局看不见执行细节,常列错/漏步骤
- 环境一变(数据缺失),计划就失效,需重规划兜底
- 重规划有额外成本,且不擅长临时改路线
六、Reflection:干完再复盘
Reflection(论文 Reflexion,Shinn 等 2023)是"语言化强化学习":Agent 先尝试,再由 Critic(批评者)对自己整段轨迹自我批评,把"哪错了、怎么改"写成反思记忆,下一轮带着记忆重来。错误不白犯。
✅ 适合
- 易出错、需要反复试错的任务(写代码、决策、博弈)
- 有客观反馈/可验证对错(单测、评分)
- 质量要求高,容得下多花几轮成本
- 希望 Agent"越用越聪明"
⚠️ 短板
- 成本最高:同一任务跑多遍
- 依赖 Critic 自评质量,评不准就白反思
- 延迟高、可能不收敛(反复改仍不对)
- 单轮失败没有兜底,必须多轮
七、核心区别对比表(重点)
把三者放在同一张表里逐维度对照——这是选型时最常翻的一页。
| 维度 | ReAct | Plan-and-Execute | Reflection |
|---|---|---|---|
| 核心动作 | 想+做交错循环 | 先出计划再执行 | 执行后自我批评再重来 |
| 下一步何时决策 | 每步即时、局部 | 开局一次性定全局 | 每轮结束后反思纠偏 |
| 是否有全局计划 | ❌ 只有局部思路 | ✅ 开局就有 | ⚠️ 通常无(可叠加) |
| 是否利用失败经验 | 仅限当前轮上下文 | 靠重规划补救 | ✅ 显式写记忆复用 |
| 上下文结构 | 线性草稿本(Thinking+Obs) | 计划 + 执行轨迹 | 轨迹 + 反思记忆 |
| 适合任务长度 | 短–中 | 中–长 | 中(靠多次尝试) |
| 容错性 | 低(错误易传播) | 中(可重规划) | 高(反思能改) |
| token / 成本 | 中 | 中–高(计划+执行) | 高(跑多遍) |
| 实时信息依赖 | 强(边查边用) | 中 | 中 |
| 最大风险 | 绕路/死循环/走偏 | 计划脱离现实 | 不收敛/自评失真 |
| 典型实现 | LangChain AgentExecutor、OpenAI 工具调用 | LangGraph、PlanAndExecute Agent | Reflexion、LangGraph + Critic 节点 |
八、为什么会有这些区别(本质)
区别的根本来源,是「规划 / 行动 / 反思」三者被放在了循环的哪个位置:
ReAct:规划=行动内循环
没有独立规划阶段,规划被压缩进每一步的 Thought。所以灵活但无大局。
Plan:规划=独立前置
把规划单拎出来一次性完成,执行阶段尽量"别动脑"。所以稳但怕变。
Reflection:反思=独立后置
不改动单次循环,而是在循环外加一层"复盘→记忆"。所以贵但抗错。
九、交互1:同一任务,三种范式怎么走
任务:「分析竞品 A 上月销量,写一份与本公司、行业的对比报告」(需要查多源数据 + 易漏项)。分别点三种范式,看它们各自的处理轨迹。
十、实际项目里怎么选型
不要盲选,按下面 4 个信号对号入座:
信号①:要不要实时/外部信息?
只要任务需要查搜索、API、数据库、跑代码——必须含"行动",ReAct 类是最低门槛。纯 CoT 直接排除。
信号②:步骤多不多、要不要大局?
超过 5 步、且顺序/依赖重要(如"订机票→酒店→行程")——优先 Plan-and-Execute,先定计划再走,避免中途迷失。
信号③:容不容得错、好不好验证?
写代码、生成方案这类易错且能自动校验的——上 Reflection,让它试错后自我修正。
信号④:预算与延迟?
Reflection 最贵最慢,ReAct 最省最灵活,Plan 居中。在线高并发选轻量,离线批处理可上 Reflection。
十一、选型决策树
决策树读起来就是:需要信息→必行动;步骤多→先计划;易错→加复盘。最右那支(ReAct 起步)往往还会再叠加 Reflection,见下一节。
十二、真实项目:多数要"组合"而非单选
工业级 Agent 几乎不会只用一种。最常见的组合是 规划 + 执行 + 复盘 三段式:
十三、框架映射:你在用什么就在用哪种
| 范式 | 代表框架 / 组件 | 怎么认 |
|---|---|---|
| ReAct | LangChain AgentExecutor、LlamaIndex ReActAgent、OpenAI 函数调用 / 工具调用 | Prompt 里写 Thought/Action/Observation,运行时解析循环 |
| Plan-and-Execute | LangChain PlanAndExecute Agent、LangGraph(planner/executor 节点)、Microsoft TaskWeaver、AutoGPT(早期) | 明显分"先生成计划列表"和"再跑计划"两阶段 |
| Reflection | Reflexion(原论文)、LangGraph + Critic 节点、self-reflection loop、AI Scientist / CAMEL 反思模块 | 有独立的"批评/复盘"步骤,并把结论存回记忆 |
| 组合 | LangGraph 状态图、CrewAI、AutoGen 多角色 | 规划→执行→批评 多节点串成图,可循环 |
十四、落地检查清单
- ☐ 任务是否必须调外部工具?否 → 别上 Agent,纯 LLM 更省。
- ☐ 步骤 >5 且依赖顺序重要?是 → 先上 Plan-and-Execute。
- ☐ 过程易错且能自动验证(单测/评分)?是 → 叠加 Reflection。
- ☐ 是否在线高并发、延迟敏感?是 → 轻量 ReAct,慎用 Reflection。
- ☐ 是否离线批处理、质量优先?是 → 可放心用 Reflection 多轮。
- ☐ 有没有给 ReAct 加
max_steps防死循环?有没有给 Plan 加重规划兜底? - ☐ Reflection 的 Critic 有没有"客观反馈"可用?纯主观任务反思容易空转。
十五、小结速记
| 问题 | 答案 |
|---|---|
| 三者核心区别? | ReAct 每步即时决策(灵活);Plan 开局定全局(不乱);Reflection 执行后复盘(抗错) |
| 本质差异来自哪? | 「规划/行动/反思」被放在循环的 内 / 前 / 后 三个不同位置 |
| 怎么选? | 需实时信息→必含行动;步骤多→Plan;易错可验证→Reflection;多数组合使用 |
| 真实项目怎么用? | Planner → Executor(ReAct) → Critic(Reflection) 三段式闭环,用图编排 |
| 最容易踩的坑? | ReAct 走偏/死循环;Plan 计划脱离现实;Reflection 不收敛/自评失真 |
agent-reasoning-react.html(ReAct 原理与实现细节)、agent-tools.html(工具调用机制)。