← 懂一点

ReAct——让模型“边想边做”的经典循环

2026-07-21

本文是专栏《从零看懂 AI Agent》第 3 篇。回到目录与导读。上一篇:Agent 的大脑与四肢

ReAct 是什么

ReAct 是两个词的合体:Reasoning(推理)+ Acting(行动)。它描述的是一个特别简单、却特别有用的循环:

想(Thought) → 做(Action) → 看(Observation) → 再想 → 再做 → ……直到搞定。

你可以把它想成一个人解决问题的自然过程。比如你要查"北京今天要不要带伞":

  1. :我需要知道北京今天的天气。
  2. :打开天气 App 查北京。
  3. :显示"多云转小雨"。
  4. :有雨,那应该带伞。
  5. :告诉你"带伞吧"。

ReAct 就是让大模型也这样一步步来,而不是憋着一口气直接给答案。

为什么不直接一步到位?

你可能会问:模型那么聪明,为什么不直接回答,非要绕这个圈?

因为模型自己不知道实时信息,也容易想当然。如果你直接问它"北京今天要不要带伞",它没有实时天气,只能瞎猜。而 ReAct 强制它:先停下来想缺什么信息 → 去用工具查 → 拿到真实结果再下结论。

这带来两个好处:

一次真实的 ReAct 过程长什么样

我们让 Agent 回答:"帮我算一下,北京今天最高温比上海高几度?"

模型会一轮轮这样输出(Thought/Action/Observation 是它内部的循环,Observation 由外部工具填回):

Thought: 我需要北京今天的最高温。先查北京。
Action: 查天气(city="北京")
Observation: 北京今天 32℃,多云。

Thought: 再查上海的最高温。
Action: 查天气(city="上海")
Observation: 上海今天 29℃,小雨。

Thought: 北京 32,上海 29,差 3 度。信息够了,可以回答。
Action: 给出最终答案
Answer: 北京今天最高温比上海高 3 度(32℃ vs 29℃)。

看到没?模型没有一次算完,而是:查一次 → 看结果 → 再查一次 → 看结果 → 最后综合。每一步的"想"都写得明明白白。这就是 ReAct 的全部精髓。

它和上一篇的循环是一回事

还记得第 2 篇里调度器那个圈吗?ReAct 就是给那个圈里的每一步起了名字:

调度器循环 ReAct 里的叫法
模型判断下一步 Thought(想)
调用工具 Action(做)
工具返回结果写回历史 Observation(看)
输出最终结果 Answer(答)

所以 ReAct 不是什么高深的新东西,它就是给"边想边做"这个循环起了个名字,并且约定模型要把"想"这一步显式地写出来。

关键的一环:把"看到的"塞回去

ReAct 能转起来,靠的是每次都把 Observation(工具结果)重新拼回对话历史,再整个丢给模型。因为上一篇说过,模型是"失忆"的——你不把上一步的结果再喂给它,它下一轮就忘了自己查到过北京 32℃。

用伪代码看就是:

历史 = ["任务:北京比上海最高温高几度?"]

while True:
    输出 = 模型.生成(历史)        # 想 + 决定做什么

    if 输出.是最终答案:
        return 输出.answer          # 答

    结果 = 执行工具(输出.action)    # 做
    历史.append(输出)               # 把"想+做"记下来
    历史.append(结果)               # 把"看到的"记下来 ← 关键!
    # 回到循环开头,带着新信息再想一遍

那行"把看到的记下来",就是整个 Agent 能持续推进的命脉。

ReAct 的局限,以及 2026 年的新趋势

ReAct 很经典,是简单工具型 Agent 的默认之选,但它也有毛病:

所以到 2026 年,工程实践出现了一个明显趋势:在能预先确定流程的地方,用更"死板"但更可控的方式——比如预先定义好的状态图(把"第一步只能到第二步或第三步"这种转移写死),或者结构化的工具调用,而不是每一步都让模型自由推理。一句话概括这个趋势:

能确定的部分就写死,不确定的部分才交给模型临场决定。 把自由发挥的空间收窄到真正需要它的地方。

这其实呼应了第 1 篇的那句忠告——灵活是有代价的。ReAct 给了你最大的灵活,但生产系统往往需要在灵活和可控之间找平衡。

小结

下一篇,我们钻进 ReAct 里的"做(Action)"这一步:模型明明只会输出文字,它到底是怎么真的调用工具、动手做事的?

继续阅读:工具调用与 Function Calling——Agent 如何"动手"