Agent 推理模式谱系图:从 ReAct 到 Reflexion,一张图看懂它们的位置

很多讲 Agent 的文章,都会把 ReAct、Plan-and-Execute、Reflexion、Self-Consistency、Critic-Refine、Router、Fixed Workflow 一股脑摆在一起。

这很容易让人产生错觉:这些模式彼此互斥、处在同一层级,只需要从中选一个。

但真正做系统时,很快就会发现并不是这样。

  • ReAct 和 Reflexion 可以叠加
  • Router 和 Fixed Workflow 可以组合
  • Self-Consistency 甚至可以包在不同执行器外面

这篇文章想解决的,正是这个混乱:把这些常见模式放进同一张认知地图里,看清它们各自所处的位置。

🎯 核心观点:这些模式并不是同层替代关系,而是分布在不同层级。先看清层级,再谈选型和组合。


一、为什么需要一张「推理模式谱系图」

不少 Agent 入门文章喜欢把各种模式并排介绍,然后告诉你:这是几种主流方案,可以任选其一。

这种写法最大的问题,是会带来三个常见误解:

  • 误解一:把 ReAct 和 Plan-and-Execute 理解成「简单版 vs 高级版」
  • 误解二:把 Reflexion 当成 ReAct 的替代品
  • 误解三:觉得用了 ReAct,就不再需要 Fixed Workflow

但现实并非如此。这些模式往往不在同一个维度里。

硬把它们放在一起比较,就像问「分诊台和手术室哪个更高级」一样------它们压根不是一类东西。

所以,我们需要的不是一张普通的对比表,而是一张 谱系图(Genealogy Map)

  • 每个模式属于哪一层
  • 它解决的是什么问题
  • 它和谁是同类
  • 它又能和谁组合

只有先建立这张图,后面的设计判断才会清晰。


二、三层谱系总览:Agent 推理的认知骨架

Agent 在做动态决策时,本质上在回答三个不同的问题:

层级 回答的问题 典型模式 类比
🧭 路由层 Routing 这个任务该走哪条路? Router / Classifier 医院分诊台
⚙️ 执行层 Execution 进入路径后,具体怎么推进? Fixed Workflow / ReAct / Plan-and-Execute 科室内的诊疗流程
🔍 优化层 Optimization 结果够不够好,要不要修? Reflexion / Critic-Refine / Self-Consistency 复核医生

这三层是 递进关系,不是并列关系:

  • 先路由,再执行,最后优化
  • 某一层可以不存在:只有一条链路时,不需要 Router;流程足够稳定时,也未必需要优化层
  • 最容易混淆的,是把 执行层的 ReAct优化层的 Reflexion 当成同级方案
flowchart TB U["用户输入"] --> R["🧭 路由层 Routing"] R --> E["⚙️ 执行层 Execution"] E --> O["🔍 优化层 Optimization"] O --> F["最终输出"]

💡 记住这句话:ReAct、Reflexion、Router 不是三选一,它们甚至不在同一层。


三、第一层:路由层 Routing ------ 先决定走哪条路

它回答什么问题

当系统里同时存在多种任务类型或多条专门化链路时,怎样把任务分发到最合适的那一条?

路由层本质上是一个 轻量分类决策层

  • 输入是任务描述
  • 输出是标签或目标链路
  • 下游再根据这个结果进入对应流程

它的职责很单纯:只负责选路,不负责执行。

三个直观类比

  • 交换机 vs 水管:交换机只决定流量走哪个端口,不处理具体内容
  • 分诊台 vs 科室:分诊决定你去哪里,真正治疗发生在科室内
  • 导航选路线 vs 开车上路:选路和执行,是两件事

为什么这层经常被低估

📌 很多人学完 ReAct 后,会不自觉地觉得:既然模型能动态决策,那所有任务都该交给它自由发挥。

但在真实系统里,大量任务只需要先被正确分类,然后进入一条稳定流程即可

真正有效的动态,不是每一步都动态,而是只在需要动态的地方动态

什么时候不需要 Router

  • 系统里本来就只有一条执行链
  • 任务类型高度一致
  • 分类本身已经需要复杂多步推理

最后一种情况尤其值得注意:如果"分类"本身已经很复杂,那它就不再只是路由问题,而进入了执行层。


四、第二层:执行层 Execution ------ ReAct 与 Plan-and-Execute 的本质区别

进入某条路径后,任务要怎样一步步推进,就是执行层要解决的问题。

执行层的三种典型策略

scss 复制代码
┌──────────────────────────────────────┐
│           执行层策略谱系              │
├──────────────────────────────────────┤
│ 1. Fixed Workflow    ------ 写死的流水线   │
│ 2. ReAct             ------ 走一步看一步   │
│ 3. Plan-and-Execute  ------ 先规划再执行   │
└──────────────────────────────────────┘

4.1 Fixed Workflow:并不是「没有推理」

有一些文章会把 Fixed Workflow 讲成一种"老旧方案",仿佛它意味着系统不够智能。这个理解并不准确。

Fixed Workflow 写死的是 编排路径,不是节点内部的推理能力:

  • 每个节点仍然可以调用模型进行局部判断
  • 固定的是节点之间的连接方式
  • 它适合流程稳定、输入结构清晰、异常边界相对可控的场景

在生产环境里,大量环节其实就应该是 Fixed Workflow。只有当路径本身确实需要临场判断时,才有必要引入更高的动态性。

4.2 ReAct:边想边做

ReAct(Reasoning + Acting)把"决定下一步要做什么"的过程显式展开:

erlang 复制代码
Thought → Action → Observation → Thought → Action → ...

🧩 你平时在通用 AI 产品里看到的「正在搜索...」「正在读取网页...」「正在分析...」,背后往往就是类似 ReAct 的循环。

模型先决定下一步动作,拿到结果后,再根据新信息继续往下推进。

ReAct 的核心特征有四点:

  • 决策粒度细:每一步只决定下一步动作
  • 灵活性高:能根据中间结果即时调整方向
  • 可观测性强:执行过程便于追踪和调试
  • 适合探索型任务:尤其适合中间结果会显著影响后续路径的场景

4.3 Plan-and-Execute:先规划,再落地

如果说 ReAct 是"走一步看一步",那 Plan-and-Execute 更像"先画路线图,再按图执行"。

它通常分成两个阶段:

  • Planner:先产出整体计划
  • Executor:再按照计划逐步执行

这种拆分的工程价值很明显:

  • 规划阶段可以用更强的模型
  • 执行阶段可以降级到更轻量的模型
  • 因而更容易控制成本

当然,计划不可能永远完美,所以它通常还需要一个 Replan 机制:

当执行中发现原计划失效时,把当前状态和剩余目标重新交给 Planner,再生成新的方案。

4.4 两者的本质分歧:局部决策 vs 全局规划

维度 ReAct Plan-and-Execute
决策时机 每一步都重新决策 开始时先做整体规划
决策视野 聚焦下一步 关注整体结构
模型成本 大模型持续参与 规划重,执行可降级
类比 每到路口再看地图 出发前先规划整条路线

4.5 一个实用判断标准

当你犹豫该用 ReAct 还是 Plan-and-Execute 时,可以先问自己:

下一步的决策,是否必须依赖上一步的具体结果?

  • 如果必须依赖:更适合 ReAct
  • 如果大体可以提前安排:更适合 Plan-and-Execute
  • 如果流程本身已经足够稳定:那你可能根本不需要两者,Fixed Workflow 就够了

⚠️ ReAct 和 Plan-and-Execute 都只解决执行层的问题。

它们不负责"该走哪条链",也不负责"结果要不要返工"。

把路由、执行、优化混为一谈,是很多设计混乱的根源。


五、第三层:优化层 Optimization ------ 做完以后,要不要回头检查

执行层有一个共同特点:默认任务一旦完成,就直接返回结果。

但现实中的问题是:

  • 前后可能不一致
  • 关键点可能遗漏
  • 结论可能偏题
  • 表达也可能不够好

优化层的作用,就是在执行完成后补上一轮 复核、修订或增强稳定性 的机制。

5.1 Reflexion:整体评估,再带着反思重跑

Reflexion 通常包裹在执行链外层,形成一个"做完---评估---必要时重跑"的闭环。

它通常包含三个角色:

  • Actor:真正执行任务的 Agent
  • Evaluator:评估输出是否达标
  • Reflector:提炼失败原因,形成可操作的反思

流程大致是:

评估不过关 → 生成反思 → Actor 带着反思再次执行。

🧠 Reflexion 不是另一种执行方式,而是一层执行后的优化机制。

所以它不会替代 ReAct 或 Plan-and-Execute,而是可以叠加在这些执行器之上。

你日常和模型交互时,其实也经常在手动做这件事:

第一轮先让模型输出结果;看完后指出"你漏了行动项""结构还不清楚";第二轮结果往往就更好。把这个人工反馈过程自动化,基本就是 Reflexion 的思路。

5.2 Critic-Refine:局部修订,而不是整链重跑

Reflexion 很强,但也更贵,因为它常常意味着整条链重跑。

如果执行过程本身基本可信,只是最终结果还有局部问题,那更经济的办法是 Critic-Refine:

  • Critic:指出问题点
  • Refine:只修改有问题的部分

它适合:

  • 结论没错,但表达不够清晰
  • 结构基本完整,但个别段落需要润色
  • 输出已接近可用,只差最后一轮修订

5.3 Self-Consistency:多次独立推理,再做投票

第三种优化思路并不是"修",而是"比":

让模型独立推理多次,再根据多数结果做聚合或投票。

它利用的是一个常见现象:

对于有相对明确答案的任务,多次独立推理后的多数结果,通常比单次输出更稳。

常见适用场景:

  • 分类判断
  • 风险评级
  • 冲突检测
  • 相对明确的打分任务

不太适合的场景:

  • 长篇开放式写作
  • 创意内容生成
  • 高度主观的表达任务

因为在这些场景里,投票往往会削弱表达的完整性和风格。

5.4 三种优化策略对比

策略 修订粒度 成本 适用任务
Reflexion 整链重跑 执行过程本身可能出错
Critic-Refine 局部修订 过程可信,但结果需要打磨
Self-Consistency 并行投票 有较明确答案的判断任务

六、把三层合起来看:Agent 系统的常见组合

把三层叠起来,一个完整的 Agent 系统通常长这样:

css 复制代码
用户输入
   ↓
[ 路由层 ] ← 选择是否分流
   ↓
[ 执行层 ] ← 选择执行策略
   ↓
[ 优化层 ] ← 选择是否复核或修订
   ↓
最终输出

不同任务,对应的组合方式也不同:

组合类型 路由层 执行层 优化层 适合场景
稳健型 Router Fixed Workflow Critic-Refine 多类型稳定任务 + 成品打磨
探索型 --- ReAct Reflexion 任务模糊、需要试错
批量型 Router Plan-and-Execute Critic-Refine 多任务编排与统一汇总
判定型 --- Fixed / ReAct Self-Consistency 分类、评分、风险判断

三条组合原则

  1. 不是三选一,而是分层选策略
  2. 某一层可以留空:不是每个系统都需要 Router 或优化层
  3. 层级职责要清晰:选路、执行、复核,最好不要混在一起

⚠️ 要特别警惕一种常见问题:过度动态化

如果你把每一层都交给高自由度的动态决策,系统往往会变得不可预测、难以调试,成本也会迅速上升。

动态是一种能力,也是一种代价。 只在真正有必要的地方使用,通常才是更好的设计。


七、从谱系图回到设计实践

这张谱系图最重要的价值,不是帮你记住几个名词,而是帮你在设计 Agent 时问对问题。

启示一:先分层,再选模式

面对一个任务,先问三个问题:

  • 我需不需要先分流?
  • 执行过程应该固定,还是允许临场调整?
  • 输出结果要不要复核、修订或增强稳定性?

这三个问题想清楚之后,选型通常不会太难。

启示二:默认从稳定方案开始,再逐步引入动态能力

一个很实用的原则是:

  • 能用 Fixed Workflow,就先别上 ReAct
  • 能用 Critic-Refine,就先别上 Reflexion
  • 能用单链路,就先别上 Router

动态能力不是"越多越先进",而是"越精准越有效"。

启示三:模式更像叠加关系,而不是替代关系

这是整张图最关键的洞察。

当你再看到"用 ReAct 替代 Fixed Workflow""用 Reflexion 替代 Plan-and-Execute"这类说法时,先别急着接受,先问一句:

它们真的在同一层吗?

部分概念的争议,一旦放回层级框架里,往往会立刻变得清楚。

启示四:让每一层都能独立替换

更好的系统设计,通常具备这样的可替换性:

  • 换一个 Router,不影响下游执行器
  • 换一个执行器,不影响优化层
  • 增加一种优化机制,不需要重写主链路

这意味着系统的演进可以沿着层级逐步展开,而不是牵一发而动全身。

启示五:真正的智能,往往发生在路径级

很多人理解 Agent 智能时,容易把重点放在"某一步推理多聪明"。

但在实际系统里,更关键的往往是:

  • 有没有走对链路
  • 有没有在合适的时机切换策略
  • 有没有在输出前做必要的复核

单步很聪明,不一定代表系统整体可靠;路径判断正确,往往更重要。


八、结论:推理模式不是互相替代,而是可以分层叠加

回到文章开头的问题:为什么这些模式总让人觉得杂乱?

答案是:因为它们原本就分布在不同层。

  • 路由层决定任务进入哪条路径
  • 执行层决定任务如何推进
  • 优化层决定结果是否需要再检查和修订

当你把 ReAct、Plan-and-Execute、Reflexion、Critic-Refine、Self-Consistency、Router、Fixed Workflow 放回这三层框架里,就会发现:

它们不是互相排斥,而是各有位置,也各有组合空间。

这张谱系图真正的意义,不是让你背下几个术语,而是提供一张可复用的认知地图。

以后再遇到新的模式时,你可以更快判断:

  • 它属于哪一层
  • 它解决什么问题
  • 它适合替换谁
  • 它又可以和谁叠加

一句话总结:

好的 Agent 设计,不是堆最多的模式,而是在合适的层级,用合适的模式。


写在最后 🧪

这里是言萧凡的 AI 编程实验室 。 我会在这里持续记录和分享 AI 工具、编程实践 ,以及那些值得沉淀下来的高效工作方法。 不只聊概念,也尽量分享能直接上手、能够复用的经验。 希望这间小小的实验室,能陪你一起探索、实践和成长。2026 年,一起进步。
有兴趣的话可以添加我的微信号一起交流,不仅是编程也可以是畅谈人生

延伸阅读

如果你想更系统地理解 AI Agent 如何从概念走向可落地的产品实践,可以看看我在掘金小册新上架的《AI Agents 开发实践》。

你会在书里看到一个产品怎样从第一行代码逐步长成完整系统:架构怎么决策,抽象在哪里引入,性能瓶颈在哪里出现,安全边界在哪里划定,以及多个 Agent 怎么分工又怎么协调。

相关推荐
程序员陆业聪2 小时前
如何给"有状态的 LLM 系统"写一套量化评测
ai编程
小程故事多_803 小时前
从推理到智能体,大模型强化学习中信用分配机制的演进与突破
人工智能·prompt·aigc·ai编程
Hooray3 小时前
为了在 Vue 项目里用上想要的 React 组件,我写了这个 skill
前端·ai编程
Bigger3 小时前
告别 AI 塑料感:我是如何用 frontend-design skill 重塑项目官网的
前端·ai编程·trae
Lei活在当下3 小时前
借助Vibe Coding,我用周末两天开发了一套简历维护系统
chatgpt·openai·ai编程
小程故事多_804 小时前
破局AI Agent落地困境,Harness六大组件全解析与实践启示
人工智能·自动化·ai编程
软件测试君5 小时前
新手小白也能写出好用Skill,保姆级教程和Skill分享
aigc·openai·ai编程
jarvisuni7 小时前
成了!Opus4.7直接克隆Claude桌面版!
人工智能·ai编程
F_U_N_8 小时前
拒绝手动配环境!MonkeyCode:手机就能写项目,AI全程扛事
人工智能·ai编程