从 ReAct 到 Agent:让模型边想边做

ReAct(Reasoning + Acting,来自 2022 年的论文 ReAct: Synergizing Reasoning and Acting in Language Models)解决的,是当时两条路各自的缺陷——它把「推理」和「行动」拧成一个循环,也成了现代 Agent 的大脑原型。

要讲清它解决什么,先看它之前的两个半成品。


一、它之前的两个孤立方案

① 只会「想」:思维链(Chain-of-Thought)

让模型一步步推理再回答。但推理是闭卷的——全凭模型脑子里的参数知识,接触不到外部世界。后果:

  • 幻觉:它能一本正经地推出错误事实,因为没法跟现实核对;
  • 错误传播:中间某步搞错,整条链一路歪到底,没机会纠正;
  • 知识静态:拿不到最新信息、私有数据。

② 只会「做」:盲目调工具

让模型调 API / 搜索,但没有显式推理去规划「为什么调、现在该调哪个、上一步结果说明了什么」。后果:多步任务接不住,出了岔子不会自我调整,像没头苍蝇。

一句话:光想不做 = 容易瞎编;光做不想 = 没有章法。


二、ReAct 的解法:想—做—看,循环起来

ReAct 让模型交替进行推理和行动,每一轮三件事:

1
2
3
4
5
Thought(想)    :分析现在的状态、缺什么、下一步该干嘛
Action(做) :调一个工具 / 搜索 / API
Observation(看):把工具返回的真实结果拿回来
↑────────────── 带着观察结果再想下一步,循环 ──────────────┘
直到信息够了 → 给出最终答案

一个例子(问「某公司现任 CEO 的家乡在哪」):

1
2
3
4
5
6
7
8
Thought: 我不确定现任 CEO 是谁,先查。
Action: search("X 公司 现任 CEO")
Observation: 是张三。
Thought: 现在查张三的家乡。
Action: search("张三 出生地")
Observation: 浙江。
Thought: 信息齐了。
Answer: 浙江。

三、所以它到底解决了什么

把这个循环拆开看,它一次性补上了前面两个方案的短板:

  1. 推理被现实「锚定」→ 治幻觉:推理过程能吸收真实观察(搜索 / 工具结果),不再只靠脑内记忆,事实错误大幅下降。
  2. 行动被推理「引导」→ 有章法:每个动作前都先想清楚「为什么调、调什么」,能拆解复杂任务、动态决定下一步。
  3. 能自我纠错 → 抗意外:每步都看结果再重新想——搜索没返回有用的?那就换个关键词重查。出了岔子能调整,而不是一条道走到黑。
  4. 过程可解释 → 好调试:那串 Thought 把决策链摆出来了,你能看懂它为什么这么干、在哪一步想歪了。

四、从 ReAct 到 Agent

ReAct 基本就是现代 Agent 的「大脑循环」原型。回头看 MCP 那篇里「模型决定调哪个工具 → 调用 → 结果塞回上下文 → 继续」的流程,内核正是 Thought → Action → Observation。

可以这样理解一个 Agent 的分工:

1
2
3
4
5
        ┌─────────────── ReAct 循环(脑子)───────────────┐
用户任务 → Thought → Action ──► 工具/MCP(手)──► Observation ┐
↑ │
└──────────────── 拿结果继续想 ◄────────────────┘
→ 直到完成 → 交付结果

MCP / 工具解决「手能伸多远」(能调什么),ReAct 解决「脑子怎么用这些手」(什么时候调、调完怎么办)。两者合起来,才是一个能干活的 Agent。

在 ReAct 之上,工程实践又叠了很多东西,让 Agent 更稳更强:

  • 记忆:短期靠上下文,长期常接 向量数据库 做检索式记忆;
  • 规划:先拆解任务再逐步执行(plan-and-execute),应对更长的任务链;
  • 反思 / 自检:让模型回看自己的轨迹、发现错误再重试(Reflexion 这类思路);
  • 多 Agent 协作:把角色拆开(规划者、执行者、审查者)分工配合。

但这些都是在「想—做—看」这个核心循环上的加法。


一句话总结

ReAct 解决的是「推理」和「行动」分家的问题——让模型边想边做、用真实观察校正推理,从而既少瞎编、又能有条理地完成多步任务,还能出错自纠。它是从「会聊天的模型」走向「会干活的 Agent」的关键一步。