这篇学完你能回答什么
- ReAct、Plan-and-Execute、Reflection 三种范式的区别与选型依据是什么?
- 为什么"先出计划再执行"在生产里经常翻车?replan 触发条件怎么设计?
- 推理模型普及之后,还需要显式的 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 机制缺失的工程问题。
三种范式的取舍,考的就是你知不知道它们各自会在哪里坏掉。
七步计划出得漂亮
分析上季度华东区退货率异常
第 2 步撞上空结果
库里根本没有
returns表剩下 5 步照做完断点
拿空结果继续聚合、下钻、关联
报告数字全是 0
结论写着「退货率显著低于其他区域」
差点发给 VP
格式完美,业务同事没看出问题
returns 表该表不存在,退货是 order_status='RETURNED'核心概念:先打比方,再给定义
三种范式的差别,本质是**「什么时候思考」的三种不同安排**。
比喻:
- ReAct:开车时看导航,走一段看一眼,路况变了随时改道。灵活,但可能在环岛上绕圈。
- Plan-and-Execute:出发前把整条路线规划好,然后照着开。省心、可预算,但前方施工封路时,你还在按老路线走。
- Reflection:到了目的地之后回头检查——"我是不是走错了?"——错了就重开一遍。质量高,但时间和油费翻倍。
定义与术语对照:
- ReAct(Reasoning + Acting,推理-行动交替):每一步都是"想一下 → 做一个动作 → 看结果 → 再想",决策粒度最细(详见 T3-3)。
- Plan-and-Execute(先规划后执行):先由 planner 产出一个多步计划,再由 executor 逐步执行;执行期间通常不重新决策。
- Reflection / Self-Critique(反思 / 自我批评):产出结果后,用一次(或多次)额外的模型调用评审自己的输出,据此修订。可以套在前两者之上。
走一段看一眼,路况变了随时改道
灵活,但可能在环岛上一圈一圈绕
想 → 做 → 看 → 再想,决策粒度最细
Reasoning + Acting 交替,反馈立即影响下一步(T3-3)
省心、可预算,照着开就行
前方施工封路时,你还在按老路线走
planner 出计划,executor 逐步执行
执行期间通常不重新决策 —— 开篇故障就出在这一句上
原理拆解
| 维度 | ReAct | Plan-and-Execute | Reflection |
|---|---|---|---|
| 决策粒度 | 每步 | 开头一次 | 产出后 |
| 适应变化 | 强 | 弱(除非 replan) | 中(只能事后补救) |
| 可并行 | 差(天然串行) | 好(无依赖步可并发) | 差 |
| 可人工审批 | 难(没有整体计划可看) | 强(计划可先给人看) | — |
| 主要失败模式 | 绕圈、漂移 | 开环崩溃 | 自我肯定、无限修订 |
| 额外成本 | 中 | 中(多一次 planning 调用) | 高(近似翻倍) |
修开环只有一招:显式的 replan 触发条件。至少覆盖五类信号 —— 前置假设被证伪、结果为空或异常、同一步连续失败 N 次、新信息与计划矛盾、预算过半而进度落后。空结果要显式判定是「查到 0 条」还是「查错了地方」,这是最高频的触发点。
Reflection 的增益几乎完全取决于评审信号是不是外部可验证的。单元测试、编译器报错、schema 校验这类「验证比生成便宜」的场景收益明确;让同一个模型评价自己刚写的东西,增益有限,有时甚至为负。
三张图
【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 += 1should_replan 至少要覆盖五类信号:
- 前置假设被证伪:计划假定存在的表/接口/文件不存在(开篇的情况)。
- 结果为空或异常:空结果不等于"结论是零",要区分"查到了 0 条"和"查错了地方"。
- 步骤连续失败:同一步重试 N 次仍失败。
- 新信息与计划矛盾:中途发现的事实推翻了计划前提。
- 预算/步数已用过半但进度明显落后。
面试里被问"Plan-and-Execute 怎么用",直接答 replan 触发条件,比复述范式定义高一个层级。
Reflection 的前提:评审信号从哪来
这是 2026 年最值得强调的一条判断:
Reflection 的增益,几乎完全取决于评审信号是不是外部的、可验证的。
- 有外部信号:单元测试通过/失败、编译器报错、schema 校验、检索到的事实比对、规则引擎判定——这类"验证比生成便宜"的场景,反思循环收益明确且可观。
- 纯自我反思:让同一个模型评价自己刚写的东西,增益有限,有时甚至是负的。模型倾向于认可自己的输出(自我偏好),或者在没有新信息的情况下把对的改错。
所以工程上的正确形态不是"加一个反思 prompt",而是先想办法造出一个可执行的验证器,再让反思去消费它的输出。没有验证器的 Reflection,多半是花两倍的钱买一个心理安慰。
时效:推理模型改变了什么(截至 2026-08)
推理模型(thinking 类)把"多步推理"内化到了模型自身的生成过程里。这带来两个实际变化:
- 显式 planner 节点的必要性下降。过去要专门跑一次"请先列出计划"的调用,现在很多任务里模型在单次响应内就完成了等价的规划。但这只消掉了"生成计划"这一步,没有消掉"计划需要被人看到、被审批、被并行调度"这些需求——如果你需要把计划展示给用户确认,显式 planner 依然有价值。
- 单纯的自我反思收益进一步缩小,因为模型已经在内部做过一轮自我检查。反思的价值更集中在"引入外部验证信号"这一侧。
面试里主动区分"因为推理模型所以不需要 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
避坑清单
- 别让计划"看起来很专业"就信它。计划的自信程度和正确性无关,模型对不存在的表也能规划得头头是道。
- 空结果必须显式判定语义("查到 0 条"还是"查错了地方"),这是 replan 的最高频触发点。
- replan 后要决定从哪继续:重头来、从当前步继续、还是回退 N 步。不显式决定就会出现重复执行副作用。
- 别在每一步都反思,那是成本黑洞。只在最终产出或关键节点反思。
- 反思的 prompt 要给具体检查项,不要只说"请检查你的回答是否正确"——那句话几乎必然得到"我检查过了,是正确的"。
| 问自己 | 倾向范式 | 一句话点评 |
|---|---|---|
| 能否事前拆成明确步骤 | 能 → 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
- 必须给具体检查项;只说「请检查你的回答是否正确」,几乎必然换来「我检查过了,是正确的」
面试视角
- 一句话统一三者ReAct 边做边想、Plan 事前想、Reflection 事后想
- 给工程属性对比重点讲可并行与可人工审批两列
- 主动交代失败模式开环崩溃、绕圈漂移、自我肯定
- 给 Reflection 加限定「只在有测试信号的地方用,纯自我反思实测收益不明显」
- 收在混合架构上并报出自己的反思轮数与计划步数上限
- 三个范式的名词解释背得很流利,说不出各自会怎么坏
- 认为 Plan-and-Execute 比 ReAct「更高级」或「更先进」
- 说 Reflection 能提升效果,却讲不出它的前提条件
- 没有 replan 概念,认为计划出来就照着做完
- 完全没意识到推理模型对显式 planner 的影响
- 讲得出 replan 之后「从哪继续」,以及副作用被重复执行的风险
- 指出 Plan 真正的收益是可并行 + 可审批,不是「更有条理」
- 明确 Reflection 需要外部可验证信号,纯自我反思增益有限
- 说得出 replan 触发条件,尤其「前置假设被证伪」和空结果语义
- 分得清推理模型消掉的是生成计划,没消掉审批与并行调度
Q3-07。面试官怎么问
Q3-07 是一二面常规题,问法通常是「ReAct、Plan-and-Execute、Reflection 有什么区别,你怎么选」。大部分候选人会把它答成名词解释,这正是拉开差距的机会。
高频追问:你的项目用了哪种、为什么?(→ 必须有理由,不能是"框架默认")计划执行到一半发现错了怎么办?(→ replan 触发条件)反思真的有用吗?(→ 外部验证信号,这是最能体现深度的一问)推理模型出来之后还需要 planner 吗?(→ 时效认知)
答题结构建议
- 用"什么时候思考"统一三者:ReAct 边做边想、Plan 事前想、Reflection 事后想。一句话建立框架。
- 给工程属性对比,重点讲可并行和可人工审批——这两点是 Plan-and-Execute 的真实价值。
- 主动交代失败模式:Plan 的开环崩溃、ReAct 的绕圈、Reflection 的自我肯定。讲失败模式比讲优点更能证明你用过。
- 给 Reflection 加限定:"我们只在有测试信号的地方用反思,纯自我反思我们实测收益不明显。"
- 收在混合架构上,并给出你的参数(反思轮数、计划步数上限)。
分水岭信号
只读过资料的回答:
- 三个范式的名词解释背得很流利,说不出各自会怎么坏。
- 认为 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 开发」,去做这一章的题。