跳转到内容

AI agent 是怎么思考的:ReAct 模式

📍 Agent 通用知识 1/X · 上一板块:← AI 端到端流程

中心一个机器人在思考,周围三个图标(灯泡-手-眼睛)用箭头连成循环,代表 ReAct 三步

你打开 ChatGPT 网页版问:

今天多伦多天气怎样?

它回答:

抱歉,我无法访问实时信息。

你又打开 Claude Code 问同一句话。它回答:

今天多伦多 18 度,晴天 🌞

底层是同一类大模型,差别在哪?

差别在:聊天机器人只会出文字;Claude Code 会先想一下「这事儿我得查」,真的去网上查,然后根据结果回答你。

这个「想一下 → 真的动手 → 看结果 → 再想下一步」的循环,就是这一篇要讲的 ReAct 模式。它是 2022 年普林斯顿大学和谷歌团队提出的范式,现在 Claude Code / 扣子 / Trae,几乎所有能「自己干活」的 AI 工具,底层都在跑这个循环


ReAct = 推理(Reason)+ 行动(Act)+ 观察(Observation)的循环

AI agent 每走一步都在心里默念:

  1. 我接下来应该干啥?(思考)
  2. 那就动手 —— 调一个工具(行动)
  3. 看看结果对不对?(观察)
  4. 回到第 1 步,继续想下一步。

直到任务完成。

ReAct 这个词是「Reasoning(推理) + Acting(行动)」拼出来的,英文叫 ReAct,中文也常直接读「瑞-act」。

左边一个聊天机器人只会说我不知道,右边一个机器人手里拿着工具去查找答案


ReAct 把 agent 的每一轮分成三段:

步骤名字干什么
1思考(Thought)大模型在脑子里想:「现在该干啥?」
2行动(Action)调一个工具(搜网页 / 跑命令 / 读文件 / 写文件)
3观察(Observation)拿到工具的返回结果,作为下一轮的输入

然后回到第 1 步,再想下一步。

三个圆环节点(灯泡-手-眼睛)用箭头连成顺时针循环,代表思考-行动-观察

听起来很抽象?来看真实例子。


你给 Claude 说:

看下这个项目有没有 README,没有就帮我写一个

它内部跑的循环是这样的(我把每一轮拆开):

第 1 轮

  • 思考:「先看看项目里有没有 README 文件」
  • 行动:调 Bash 工具,跑 ls README*
  • 观察:返回 ls: README*: No such file or directory

第 2 轮

  • 思考:「没找到,那需要看一下项目长啥样再写」
  • 行动:调 Bash 工具,跑 ls -la
  • 观察:看到 package.jsonsrc/test/ 三个东西

第 3 轮

  • 思考:「是 Node 项目,看下 package.json 知道这是干啥的」
  • 行动:调 Read 工具,读 package.json
  • 观察:得到「这是一个画 SVG 的库」

第 4 轮

  • 思考:「信息够了,可以写 README 了」
  • 行动:调 Write 工具,写 README.md
  • 观察:写入成功

第 5 轮

  • 思考:「任务完成了」
  • 输出给你:「我看了下项目,是个 SVG 库,README 我写好了,主要包括…」

四个步骤面板 → 读package.json → 写笔记 → 完成竖大拇指,用箭头连接

关键点:它没有事先规划完整流程,而是每走一步都根据当前看到的情况决定下一步

这就是 ReAct 的精髓 —— 见招拆招,而不是「先想 10 步再开始」。


维度聊天机器人(早期 ChatGPT)ReAct agent(Claude Code)
能干什么回答你的问题帮你完成任务
拿数据只能用训练时见过的现场调工具拿最新的
出错怎么办直接编一个(幻觉)看到报错 → 再想 → 再试
多步任务一次答完不能反复想多少轮就想多少轮
调工具没有这个能力调 Bash / Read / Write / WebFetch 等

为啥不直接告诉 AI「先 A 再 B」?

Section titled “为啥不直接告诉 AI「先 A 再 B」?”

你可能问:我直接跟它说步骤不就行了?

可以,但有局限:

  • 任务一复杂就说不清:「帮我清理一下这个项目里没用的依赖」—— 哪些没用?得它自己看才知道
  • 中途结果会变:跑命令报错了,下一步就得改方案,事先没法写死
  • 真实世界是不确定的:网页加载失败、接口限流、文件不存在 —— 都要现场决策

ReAct 的精髓就在「先做一步,看结果,再决定下一步」。

这个思路其实跟人工作很像 —— 你做一件事不会一开始就规划到死,通常是走一步看一步,根据现场反馈调整。


ReAct 2022 年提出的时候,是用纯提示词(prompt)实现的 —— 让模型在输出里手动写:

Thought: 我得先看下文件
Action: ls -la
Observation: package.json, src/, test/
Thought: 是 Node 项目...

然后用程序解析这串文本,把 Action: 后面那段拿去真的跑命令。

听起来很笨?确实有点笨。问题:

  • 模型可能漏写「Action:」前缀
  • 解析器可能崩
  • 整个流程靠字符串黏起来,不稳定

到 2024 年,OpenAI / Anthropic 把这玩意儿做成了官方接口 —— 叫 Tool Use(工具调用)或 Function Calling:

  • 模型直接返回结构化数据:「我要调哪个工具,参数是啥」
  • 不用 prompt 里写「Thought:」这种字符串
  • 更稳定、更省 token、更快

Claude Code 用的就是 Anthropic 的 Tool Use 接口,底层还是 ReAct 范式(思考→行动→观察),只是包装更顺手。

左边一卷凌乱手写文字代表老式提示词 ReAct,右边一张干净结构化卡片代表 Tool Use 接口,中间一支箭头


到 2025 年,Subagent(子智能体)把单线 ReAct 变成多线:

  • 主 agent 跑 ReAct 循环
  • 它可以喊一个 sub-agent,sub-agent 也跑自己的 ReAct 循环
  • 多个 ReAct 循环同时进行

这就是为啥 Claude Code 能一边查 bug 一边写测试一边读文档 —— 多个独立的 ReAct 实例并行跑

中心一个主机器人,周围三个小机器人各干一件事(搜索/写字/修工具),用细虚线连接

详细玩法可以看 Subagents(子智能体) 那一篇。


ReAct = AI 学会「边想边做」的最早一招

理解了这个三步循环,你就懂:

  • 为啥 Claude Code 能自己做决定(每一轮 Thought 都在决策)
  • 为啥它有时候会重试 / 换工具(上一轮 Observation 告诉它失败了)
  • 为啥同样一句话,普通聊天机器人答不出来,Claude Code 能给你结果(它有 Action 环节)

所有 agent 工具的底层 —— Claude Code、扣子、Trae、文心 agent、通义 agent —— 都是这个三步循环在跑,差别只是工具集和包装。



评论

不记名、不需要注册——不要邮箱,不要手机号,不要任何身份信息,填个昵称就能留言。放心说。

  • 加载中 …