ReAct 让大模型像人一样「想一步、做一步、看一眼结果,再想下一步」。它不需要重新训练模型,只要在提示词里给几个示范,模型就能一边推理、一边查资料或操作环境。
今天几乎所有 AI Agent 的工作循环,都能在这篇论文里找到原型。
原文:ReAct: Synergizing Reasoning and Acting in Language Models(2022 年 10 月发布)
作者:姚顺雨(Shunyu Yao)等,普林斯顿大学与 Google Research。
第一作者当时是普林斯顿的博士生,这项工作是他在 Google 实习期间完成的。
先看看人是怎么做事的
周末你想带爸妈出去吃顿饭,脑子里大概是这样转的:
- 想:爸妈不吃辣,最好离家近一点。
- 做:打开地图,搜「附近 粤菜」。
- 看:评分最高那家,周末要排两个小时队。
- 想:排队太久了,换一家能提前订位的。
- 做:给第二家打电话。
- 看:订到了,晚上六点。
- 想:好,搞定。
这个过程里,「想」和「做」是交替进行的:想清楚了才知道该做什么,做了之后看到新情况,又会改变接下来的想法。没人会坐在沙发上光靠想就把餐厅订好,也没人会闭着眼睛把手机上的按钮挨个点一遍。
这件事对人来说再自然不过。但在 2022 年,大模型还不会这样做事。

像这样自己想、自己动手、看了结果再想的 AI 助手,今天有个名字:Agent,中文叫智能体。开头说的「今天几乎所有 AI Agent」,指的就是它。
一、2022 年的大模型
当时研究者让大模型解决复杂问题,大致有两条路,各有各的毛病。
偏科一:只会想,不会查
前面讲过「思维链」(Chain-of-Thought,简称 CoT):
让模型先把推理步骤写出来,再给答案。这一招让模型做数学题、逻辑题的能力明显提升。
但思维链有个根本问题:它是闭卷考试,所有知识都来自训练时记住的东西。
记错了、记混了,或者知识已经过时了,它都没办法发现,只会顺着错误的前提一本正经地推下去。
前面一步错,后面步步错。这就是常说的「幻觉」和「错误传递」。
偏科二:只会做,不会想
另一条路是让模型直接输出动作:
搜索什么、点击哪里、拿起什么东西。模型像一个跑腿的,终于能和外部世界打交道了。
可它只跑腿、不动脑:不会拆解目标,不记得自己做到了哪一步,
结果和预期不一样时也不会调整计划。
论文里有个例子。模型在一个文字版的家务游戏里找胡椒瓶,走到水槽边,环境已经告诉它这里没有胡椒瓶,它还是一遍遍地尝试「从水槽拿起胡椒瓶」,原地打转。
一个会想不会查,一个会查不会想。ReAct 要做的,就是把两者合起来。

这里有个问题:模型只会写字,它怎么「搜索」「拿起胡椒瓶」?
答案是旁边有个程序替它动手。模型写出一行约定好格式的字,比如「搜索[苹果遥控器]」;程序认出这行字,真的去搜,再把搜到的内容贴回给模型看。
下命令的是模型,动手的是程序。文末选修部分的代码,就是这个程序。
二、核心:把 ”想“ 也当成一种动作
ReAct 这个名字来自 Reasoning(推理) + Acting(行动)
做法很简单:在模型原本能做的动作(搜索、点击、拿东西……)之外
再加一种特殊的动作——说出自己的想法。
这个动作不改变外部世界,也不触发任何工具,只是把想法写在「草稿纸」上。
但写下来的想法会留在上下文里,帮模型理清楚:
我现在知道了什么?还缺什么?下一步该做什么?
上下文,就是模型写下一个字时能看到的全部文字:提示词、题目,还有它自己前面写过的东西。
前面讲过,模型每次只算下一个 token,算的时候看着前面所有的文字。它没有另一个「脑子里记着」的地方:没写出来的想法,下一步就看不到了。
所以「说出想法」虽然不碰外部世界,却很管用。开头订餐厅时那句「排队太久了,换一家」,写下来,下一步一眼就能看到。
于是,模型解题的过程变成了三种内容交替出现:
| 环节 | 谁来写 | 作用 |
|---|---|---|
| 思考(Thought) | 模型 | 拆解问题、总结已知信息、决定下一步,发现不对劲时调整计划 |
| 行动(Action) | 模型 | 调用工具,比如搜索一个词条 |
| 观察(Observation) | 外部环境 | 工具返回的结果,比如搜到的那段文字 |
思考 → 行动 → 观察 → 思考 → 行动 → 观察 → …… → 给出答案

说白了,想,是为了更好地做;做,是为了更好地想。
思考帮模型制定和调整行动计划,行动带回来的真实信息又让思考有据可依,不再凭空编造。
这样一圈圈转下来,模型眼前的文字越积越长。每一轮,模型接着写「思考」和「行动」;程序执行行动,把结果作为「观察」贴到后面;下一轮,模型看着这一整段接着写:

注意「观察」那一截不是模型写的。这正是 ReAct 不瞎编的原因:事实来自程序贴回来的结果,不是模型自己想出来的。
还有最关键的一点:ReAct 不需要训练模型。
研究者只是在提示词里放了几个人工写好的示范(问答任务里只有 3~6 个)。
示范里,人把自己解题时的想法和动作一条条写下来。大模型看了这几个例子,就学会了照着这个格式去解新问题。
几个示范为什么就够?前面讲过,语言模型做的事就是接着往下写。它在训练里见过海量文字,很会「照着前面的样子写」。
提示词大概长这样(示意):
请按「思考、行动、观察」的格式解题。行动只能是:搜索[词条]、查找[关键词]、完成[答案]。
问题:(示范题 1)
思考 1:……
行动 1:搜索[……]
观察 1:……
……
行动 3:完成[……]
(再放几道示范题)
问题:(新题)