三种 Agent 范式的取舍——ReAct、Plan-and-Execute、Reflection

T3-7模块 3 · Agent 开发面试权重 更新于 2026-08-19
前置T3-3
关联题目Q3-07

这篇学完你能回答什么

  1. ReAct、Plan-and-Execute、Reflection 三种范式的区别与选型依据是什么?
  2. 为什么"先出计划再执行"在生产里经常翻车?replan 触发条件怎么设计?
  3. 推理模型普及之后,还需要显式的 planner 节点和反思循环吗?

从一个真实故障讲起

一个数据分析 Agent,接的活是"分析上季度华东区退货率异常"。团队用了 Plan-and-Execute 范式:先让模型出一份完整计划,再逐步执行。

模型给出的计划很漂亮:

1. 查询 orders 表获取华东区上季度订单
2. 关联 returns 表计算退货率
3. 按周聚合,定位异常时间点
4. 下钻到 SKU 维度找 Top10 异常商品
5. 关联 supplier 表看是否集中在某供应商
6. 交叉验证物流时效数据
7. 生成结论报告

执行到第 2 步就出事了:这个库里根本没有 returns,退货信息是 orders 表里的一个 order_status='RETURNED' 状态值。

问题不在于它猜错了表结构——那是可以接受的。问题在于它把剩下 5 步照做完了。第 2 步拿到空结果后,模型没有停下来重新规划,而是继续按计划往下走,用一个空的中间结果去做后续聚合、下钻、关联,最后输出了一份格式完美、数字全是 0、结论写着"华东区退货率显著低于其他区域,运营质量优秀"的报告。

业务同事差点把这份报告发给了 VP。

根因一句话:计划是开环的,而执行是有真实反馈的——两者之间没有连线。 这不是模型能力问题,是范式选择和 replan 机制缺失的工程问题。

三种范式的取舍,考的就是你知不知道它们各自会在哪里坏掉。

猜错表可以原谅,照做完不行
数据分析 Agent 的七步计划:第 2 步就撞空,后 5 步一步没少跑

  1. 七步计划出得漂亮

    分析上季度华东区退货率异常

  2. 第 2 步撞上空结果

    库里根本没有 returns

  3. 剩下 5 步照做完断点

    拿空结果继续聚合、下钻、关联

  4. 报告数字全是 0

    结论写着「退货率显著低于其他区域」

  5. 差点发给 VP

    格式完美,业务同事没看出问题

第 2 步的真实结果预期关联 returns该表不存在,退货是 order_status='RETURNED'
拿到空结果之后该停下来重新规划照原计划又跑完 5 步
交付物长相格式完美、结构完整数字全 0,结论「运营质量优秀」
根因归属看着像模型能力不足是范式选择与 replan 机制缺失
计划是开环的,执行是有真实反馈的 —— 两者之间没有连线。空结果不等于「结论是零」,可在开环里它连一次提问的机会都没有,只能被当成合法输入一路喂下去。

核心概念:先打比方,再给定义

三种范式的差别,本质是**「什么时候思考」的三种不同安排**。

比喻

  • ReAct:开车时看导航,走一段看一眼,路况变了随时改道。灵活,但可能在环岛上绕圈。
  • Plan-and-Execute:出发前把整条路线规划好,然后照着开。省心、可预算,但前方施工封路时,你还在按老路线走。
  • Reflection:到了目的地之后回头检查——"我是不是走错了?"——错了就重开一遍。质量高,但时间和油费翻倍。

定义与术语对照

  • ReAct(Reasoning + Acting,推理-行动交替):每一步都是"想一下 → 做一个动作 → 看结果 → 再想",决策粒度最细(详见 T3-3)。
  • Plan-and-Execute(先规划后执行):先由 planner 产出一个多步计划,再由 executor 逐步执行;执行期间通常不重新决策。
  • Reflection / Self-Critique(反思 / 自我批评):产出结果后,用一次(或多次)额外的模型调用评审自己的输出,据此修订。可以套在前两者之上。
三种范式,差的是什么时候思考
边做边想和事前想是两条路;事后想的那一种,其实是叠在它们上面的

开车时看导航

走一段看一眼,路况变了随时改道

灵活,但可能在环岛上一圈一圈绕

对应
ReAct · 边做边想

想 → 做 → 看 → 再想,决策粒度最细

Reasoning + Acting 交替,反馈立即影响下一步(T3-3)

决策点:每步适应变化强天然串行
出发前把路线定死

省心、可预算,照着开就行

前方施工封路时,你还在按老路线走

对应
Plan-and-Execute · 事前想

planner 出计划,executor 逐步执行

执行期间通常不重新决策 —— 开篇故障就出在这一句上

决策点:开头一次计划可审批无依赖步可并行
Reflection 不是第三条路。它是到了目的地回头检查 —— 走错就重开一遍,质量可能更高,时间和油费也翻倍。所以它套在谁身上、值不值,得单独算一笔账。

原理拆解

决策点摆在哪,就在哪出事
同一份任务,三种「什么时候思考」的安排,坏起来的样子完全不同

ReAct · 边做边想想 → 做 → 看 → 想 → 做 → 看 → 答,决策点密集,反馈闭环最紧代价是天然串行、步数不定;主要失败模式是绕圈和漂移,所以必须限步
Plan · 事前想任务 → 一次出完 1..5 步 → 逐步执行,执行期不再重新决策第 2 步的真实结果在这里没有回路 —— 开篇故障就死在这。补上触发式 replan 才能进生产
Reflection · 事后想草稿 → 评审 → 不合格就修订 → 再评审,可以套在前两者之上评审信号来自哪里,决定了它有没有用;成本和延迟近似翻倍,还会让轨迹变长(T3-6)
工程属性对比(回答 Q3-07 的主干)
维度ReActPlan-and-ExecuteReflection
决策粒度每步开头一次产出后
适应变化弱(除非 replan)中(只能事后补救)
可并行差(天然串行)(无依赖步可并发)
可人工审批难(没有整体计划可看)(计划可先给人看)
主要失败模式绕圈、漂移开环崩溃自我肯定、无限修订
额外成本中(多一次 planning 调用)(近似翻倍)

修开环只有一招:显式的 replan 触发条件。至少覆盖五类信号 —— 前置假设被证伪、结果为空或异常、同一步连续失败 N 次、新信息与计划矛盾、预算过半而进度落后。空结果要显式判定是「查到 0 条」还是「查错了地方」,这是最高频的触发点。

Reflection 的增益几乎完全取决于评审信号是不是外部可验证的。单元测试、编译器报错、schema 校验这类「验证比生成便宜」的场景收益明确;让同一个模型评价自己刚写的东西,增益有限,有时甚至为负。

三条链的差别不在聪明程度,在反馈能不能挤进来。Plan 缺的就是这条边;补上 replan 之后它并不比 ReAct 差,还多了可并行和可审批这两样 ReAct 给不了的东西。

三张图

原文示意
【ReAct】决策点密集,反馈闭环紧
  想 → 做 → 看 → 想 → 做 → 看 → 想 → 做 → 看 → 答
   ↑_______________反馈立即影响下一步____________↑


【Plan-and-Execute】决策点集中在开头,执行期开环
       ┌─ Plan ─┐
  任务 →│1 2 3 4 5│→ 执行1 → 执行2 → 执行3 → 执行4 → 执行5 → 答
       └────────┘        ↑
                    第2步的真实结果在这里没有回路 ← 开篇故障就死在这


【Reflection】在产出后加一层评审回路
  任务 → [任何范式] → 草稿 → 评审 → 不合格?→ 修订 → 评审 → 合格 → 答
                              ↑____________________|
                          (评审信号来自哪里,决定了它有没有用)

三者的工程属性对比

维度 ReAct Plan-and-Execute Reflection
决策粒度 每步 开头一次 产出后
适应变化 弱(除非 replan) 中(只能事后补救)
可预算/可估算 弱(步数不定) (步数可见) 中(轮数可控)
可并行 差(天然串行) (无依赖步骤可并发)
可人工审批 难(没有整体计划可看) (计划可先给人看)
主要失败模式 绕圈、漂移 开环崩溃(照做错计划) 自我肯定、无限修订
额外成本 中(多一次 planning 调用) (近似翻倍)

这张表是回答 Q3-07 的主干。 面试里能把"可人工审批"和"可并行"两列讲出来的人不多——它们恰恰是 Plan-and-Execute 在企业场景里真正的价值,而不是那句空洞的"更有条理"。

修好开篇的故障:replan 的触发条件

Plan-and-Execute 不是不能用,是不能开环用。把它改成 Plan → Execute → 触发式 Replan 的闭环:

plan = planner(task)
i = 0
while i < len(plan) and steps_used < MAX_STEPS:
    result = execute_step(plan[i])          # 每步内部可以是一个小 ReAct 循环
    if should_replan(plan, i, result):      # ← 关键:显式的重规划触发条件
        plan = planner(task, history, reason=diagnose(result))
        i = 0 if plan_restarted else i      # 重规划后从哪继续,要显式决定
        continue
    i += 1

should_replan 至少要覆盖五类信号:

  1. 前置假设被证伪:计划假定存在的表/接口/文件不存在(开篇的情况)。
  2. 结果为空或异常:空结果不等于"结论是零",要区分"查到了 0 条"和"查错了地方"。
  3. 步骤连续失败:同一步重试 N 次仍失败。
  4. 新信息与计划矛盾:中途发现的事实推翻了计划前提。
  5. 预算/步数已用过半但进度明显落后

面试里被问"Plan-and-Execute 怎么用",直接答 replan 触发条件,比复述范式定义高一个层级。

Reflection 的前提:评审信号从哪来

这是 2026 年最值得强调的一条判断:

Reflection 的增益,几乎完全取决于评审信号是不是外部的、可验证的。

  • 有外部信号:单元测试通过/失败、编译器报错、schema 校验、检索到的事实比对、规则引擎判定——这类"验证比生成便宜"的场景,反思循环收益明确且可观。
  • 纯自我反思:让同一个模型评价自己刚写的东西,增益有限,有时甚至是负的。模型倾向于认可自己的输出(自我偏好),或者在没有新信息的情况下把对的改错。

所以工程上的正确形态不是"加一个反思 prompt",而是先想办法造出一个可执行的验证器,再让反思去消费它的输出。没有验证器的 Reflection,多半是花两倍的钱买一个心理安慰。

时效:推理模型改变了什么(截至 2026-08)

推理模型(thinking 类)把"多步推理"内化到了模型自身的生成过程里。这带来两个实际变化:

  1. 显式 planner 节点的必要性下降。过去要专门跑一次"请先列出计划"的调用,现在很多任务里模型在单次响应内就完成了等价的规划。但这只消掉了"生成计划"这一步,没有消掉"计划需要被人看到、被审批、被并行调度"这些需求——如果你需要把计划展示给用户确认,显式 planner 依然有价值。
  2. 单纯的自我反思收益进一步缩小,因为模型已经在内部做过一轮自我检查。反思的价值更集中在"引入外部验证信号"这一侧。

面试里主动区分"因为推理模型所以不需要 planner"和"因为需要人工审批所以仍然需要 planner",是一个明确的加分动作。

工程实践(截至 2026-08)

选型判据

问自己 倾向范式
任务能否在开始前拆成明确的步骤? 能 → Plan-and-Execute;不能 → ReAct
步骤之间是否大量无依赖、可并行? 是 → Plan-and-Execute(这是它最实的收益)
计划是否需要给人审批后才能执行? 是 → Plan-and-Execute(合规场景常见)
中途是否很可能推翻前提? 是 → ReAct,或 Plan + 强 replan
是否存在可执行的质量验证信号? 是 → 加 Reflection;否 → 别加
延迟预算是否紧张? 紧 → ReAct 且限步;反思一律砍掉

生产里最常见的形态是混合

原文示意
Plan(可选:给人审批)
  └→ 每个 step 内部跑一个小 ReAct 循环(带步数上限)
       └→ replan 触发条件常驻监控
            └→ 只在最终产出上做 1 轮 Reflection,且评审依据是外部验证器

参数经验值(起步值,务必自测):

  • 反思轮数:1~2 轮。边际收益衰减很快,第 3 轮往往只是改动措辞,却付了完整成本。
  • 反思要有硬上限,否则会出现"修订 → 评审不过 → 再修订"的无限循环,这是 Reflection 版本的死循环。
  • 计划步数:≤ 10 步。计划越长,开环风险越大,前提被证伪的概率越高。长任务应该分阶段规划,而不是一次规划到底。
  • 每步内 ReAct 子循环:3~5 步上限,超了就上报给上层触发 replan。

进阶技术三段式:Reflection

  • 解决什么:把"生成一次就交付"变成"生成-验证-修订",在有客观验证信号的任务上显著提升正确率(代码、结构化抽取、需要满足硬约束的产出)。
  • 代价是什么:① 成本和延迟接近翻倍甚至更多;② 无外部信号时增益微弱甚至为负(自我偏好、把对的改错);③ 可能陷入修订循环;④ 让轨迹变长,加重上下文压力(T3-6)。
  • 什么时候不该用:没有可执行验证器的主观任务("这段文案好不好")——那是 LLM-as-Judge 的评测范畴(T5-2),不该塞进在线链路;延迟敏感的同步接口;以及模型本身已经是推理模型、且任务简单时——你只是在为它已经做过的事情再付一次钱。

避坑清单

  • 别让计划"看起来很专业"就信它。计划的自信程度和正确性无关,模型对不存在的表也能规划得头头是道。
  • 空结果必须显式判定语义("查到 0 条"还是"查错了地方"),这是 replan 的最高频触发点。
  • replan 后要决定从哪继续:重头来、从当前步继续、还是回退 N 步。不显式决定就会出现重复执行副作用。
  • 别在每一步都反思,那是成本黑洞。只在最终产出或关键节点反思。
  • 反思的 prompt 要给具体检查项,不要只说"请检查你的回答是否正确"——那句话几乎必然得到"我检查过了,是正确的"。
六个问题问完,范式基本就定了
参数都是起步值,务必自测:反思 1~2 轮、计划 ≤ 10 步、子循环 3~5 步

选型判据
问自己倾向范式一句话点评
能否事前拆成明确步骤能 → Plan-and-Execute;不能 → ReAct别让计划「看起来很专业」就信它 —— 自信程度和正确性无关
步骤间是否大量无依赖、可并行真收益是 → Plan-and-Execute这是它最实的收益,比「更有条理」值钱得多
计划要不要给人审批后才执行是 → Plan-and-Execute合规场景常见;ReAct 没有整体计划可给人看
中途是否很可能推翻前提是 → ReAct,或 Plan + 强 replan开篇那个不存在的 returns 表就属于这一类
有没有可执行的质量验证信号是 → 加 Reflection;否 → 别加没有验证器的反思,多半是花两倍的钱买心理安慰
延迟预算紧不紧紧 → ReAct 且限步;反思一律砍掉反思的成本和延迟近似翻倍,砍它最划算
混合形态与参数经验值
生产主流形态
Plan(可选:给人审批)→ 每个 step 内跑小 ReAct → replan 触发条件常驻监控 → 只在最终产出做 1 轮 Reflection
反思轮数
1~2 轮,边际收益衰减很快;第 3 轮往往只改措辞却付完整成本,且必须有硬上限
计划步数
≤ 10 步。计划越长,前提被证伪的概率越高;长任务分阶段规划,别一次规划到底
每步子循环
ReAct 子循环 3~5 步上限,超了就上报给上层,由上层触发 replan
replan 之后
重头来、从当前步继续、还是回退 N 步,要显式决定,否则副作用会被重复执行
反思 prompt
必须给具体检查项;只说「请检查你的回答是否正确」,几乎必然换来「我检查过了,是正确的」
没有可执行验证信号就别加 Reflection —— 它是这张表里唯一一个默认该关掉的选项,延迟一紧也是第一个该砍的。多数人却把它当成提升质量的免费开关。

面试视角

三个定义谁都背得出,坏法背不出
四问一路挖下去:用哪种 → 半路错了怎么办 → 反思真有用吗 → 还需要 planner 吗

  1. 一句话统一三者ReAct 边做边想、Plan 事前想、Reflection 事后想
  2. 给工程属性对比重点讲可并行可人工审批两列
  3. 主动交代失败模式开环崩溃、绕圈漂移、自我肯定
  4. 给 Reflection 加限定「只在有测试信号的地方用,纯自我反思实测收益不明显」
  5. 收在混合架构上并报出自己的反思轮数与计划步数上限
只读过:这些回答会暴露你
  • 三个范式的名词解释背得很流利,说不出各自会怎么坏
  • 认为 Plan-and-Execute 比 ReAct「更高级」或「更先进」
  • 说 Reflection 能提升效果,却讲不出它的前提条件
  • 没有 replan 概念,认为计划出来就照着做完
  • 完全没意识到推理模型对显式 planner 的影响
真做过:这些细节骗不了人
  • 讲得出 replan 之后「从哪继续」,以及副作用被重复执行的风险
  • 指出 Plan 真正的收益是可并行 + 可审批,不是「更有条理」
  • 明确 Reflection 需要外部可验证信号,纯自我反思增益有限
  • 说得出 replan 触发条件,尤其「前置假设被证伪」和空结果语义
  • 分得清推理模型消掉的是生成计划,没消掉审批与并行调度
四问里最深的是「反思真的有用吗」,答案只有五个字:外部验证信号。答不到这一层,前面讲得再顺,也只是名词解释的加长版。配套题目:Q3-07

面试官怎么问

Q3-07 是一二面常规题,问法通常是「ReAct、Plan-and-Execute、Reflection 有什么区别,你怎么选」。大部分候选人会把它答成名词解释,这正是拉开差距的机会。

高频追问:你的项目用了哪种、为什么?(→ 必须有理由,不能是"框架默认")计划执行到一半发现错了怎么办?(→ replan 触发条件)反思真的有用吗?(→ 外部验证信号,这是最能体现深度的一问)推理模型出来之后还需要 planner 吗?(→ 时效认知)

答题结构建议

  1. 用"什么时候思考"统一三者:ReAct 边做边想、Plan 事前想、Reflection 事后想。一句话建立框架。
  2. 给工程属性对比,重点讲可并行可人工审批——这两点是 Plan-and-Execute 的真实价值。
  3. 主动交代失败模式:Plan 的开环崩溃、ReAct 的绕圈、Reflection 的自我肯定。讲失败模式比讲优点更能证明你用过。
  4. 给 Reflection 加限定:"我们只在有测试信号的地方用反思,纯自我反思我们实测收益不明显。"
  5. 收在混合架构上,并给出你的参数(反思轮数、计划步数上限)。

分水岭信号

只读过资料的回答

  • 三个范式的名词解释背得很流利,说不出各自会怎么坏。
  • 认为 Plan-and-Execute 比 ReAct"更高级"或"更先进"。
  • 说 Reflection 能提升效果,但说不出前提条件。
  • 没有 replan 概念,认为计划出来就照做。
  • 完全没意识到推理模型对显式 planner 的影响。

真做过的回答

  • 说得出 replan 的具体触发条件,尤其是"前置假设被证伪"和"空结果的语义判定"。
  • 明确指出 Reflection 需要外部可验证信号,纯自我反思增益有限。
  • 提到 Plan-and-Execute 真正的收益是可并行 + 可审批,而不是"更有条理"。
  • 报得出反思轮数上限和边际收益衰减的观察。
  • 提到 replan 之后"从哪继续"以及副作用重复执行的风险。
  • 能说清推理模型之后"planner 什么时候还需要保留"。

小结与延伸

  • 三范式的本质是"什么时候思考":ReAct 边做边想、Plan 事前想、Reflection 事后想。
  • Plan-and-Execute 的致命伤是开环;修法是显式的 replan 触发条件(假设证伪、空结果、连续失败、新信息矛盾、进度落后)。
  • Reflection 的增益取决于评审信号是否外部可验证;没有验证器就别加。
  • 推理模型削弱了显式 planner 的生成价值,但没有削弱它的审批价值和并行调度价值
  • 生产主流是混合:Plan(可审批)→ 每步内小 ReAct → replan 常驻 → 关键产出做 1~2 轮带验证器的 Reflection。

延伸:ReAct 的循环骨架与退出条件见 T3-3;把"计划"拆给多个 Agent 执行的编排模式与代价见 T3-8;反思所依赖的评审信号怎么构造,见模块 5 的评测方法。

继续深入

本篇归属第 3 章「Agent 开发」,去做这一章的题