详细解释
ReAct(Reasoning + Acting 推理与行动) 是 2022 年普林斯顿 + Google 论文《ReAct: Synergizing Reasoning and Acting in Language Models》提出的范式,如今已经成为所有 Agent 产品(自动写代码机器人、科研助手、公司内部知识机器人、RPA 自动化)事实上的底层”大脑循环”。
它把人类做事的”想一下 → 做一步 → 看看结果 → 再想”提炼成三个固定步骤,循环执行直到任务完成:
| 步骤 | ReAct 原始名 | 做什么 |
|---|---|---|
| 1. 思考 | Thought | 让 LLM 先输出一段”当前状态分析 + 下一步我要做什么、为什么”。相当于给自己写草稿,减少跳步、瞎操作。 |
| 2. 行动 | Action(Action: <工具名> + Action Input: <参数>) | 调用一个具体的外部工具:搜 Google、查 SQL 数据库、调用 Python 解释器算 Python 代码、查 RAG 知识库、发邮件、下单…… |
| 3. 观察 | Observation | 把上一步工具的真实返回结果(不是模型猜的)喂回模型。 |
然后回到第 1 步,再思考……直到模型输出 Final Answer / Finish 结束循环。
和纯 CoT 思维链 的核心区别:
- CoT 是”在脑子里想,所有信息都是模型内部记忆的”——很容易出 幻觉;
- ReAct 是”想不出来就调用工具查真实世界再回来想”——通过外部工具(搜索/数据库/代码执行)把幻觉率直接拉下来一大截。
一次真实的 ReAct 循环(用户问题:“唯元智创 2025 Q2 营收同比增长百分之几?”)
User: 唯元智创 2025 Q2 营收同比增长百分之几?
Thought 1: 我需要知道唯元智创 2025 Q2 和 2024 Q2 的营收,再算同比。模型记忆里没有最新财报,应该调用搜索工具。
Action: Search[weimeta.cn 2025 Q2 财报 营收]
Observation 1: [结果 3 条] 标题:"唯元智创 2025 Q2 营收 1.28 亿元,同比增长 37%"(来源:官方微信公众号,2025-07-22)
Thought 2: 搜索结果里第一条直接给出了同比 37%。为了避免 SEO 软文错误,我再去查原文的 PDF 财报确认具体数值。
Action: LinkReader[https://weimeta.cn/investors/2025Q2-report.pdf]
Observation 2: PDF 关键数据表格:2025Q2 营收 128,241,980 元;2024Q2 营收 93,603,072 元;同比增长率 36.9%,四舍五入 37%。
Thought 3: 两个独立来源(微信公众号 + 官方 PDF)一致,37% 可信度高。可以给出最终答案。
Final Answer: 唯元智创 2025 Q2 营收同比增长约 37%(精确值 36.9%)。
这就是”先查再确认再回答”的标准 ReAct 循环。
ReAct 在现代 Agent 框架里的对应物(2025 年)
原始论文里的 ReAct 是 Prompt 驱动的(手写 Thought/Action/Observation 模板,Few-Shot 示例),现代框架已经把它变成了结构化 API:
| 原生 ReAct 写法 | 现代等价实现 | 说明 |
|---|---|---|
字符串 Action: Search[...] | Function Calling / Tools 的 tool_calls 数组 | 不用模型输出字符串了,直接返回 JSON 格式的工具调用,解析更稳 |
Observation: ... 文本喂回去 | 把 tool_result 作为新的 role=tool 消息 | 消息格式原生支持,不用字符串拼接 |
| 手写 8 条 Few-Shot 示例 | System Prompt 写规则 + JSON Schema 约束 | 配合 JSON Mode 更不容易走形 |
| 单模型单循环 | LangGraph / CrewAI / AutoGen 的多智能体图 + 节点边 | 更复杂的多 Agent 分工协作 |
落地 ReAct 的 4 条经验(避坑总结)
- 限制最大循环次数 max_iters = 10:防止模型陷入”无限查 Google → 无限看新链接 → 永远停不下来”的死循环。到达上限强制抛错或总结。
- 工具参数严格校验:所有 Function Calling 参数在执行前走”枚举 + 类型 + 内容审核”,防止 提示词注入 让它删库。
- 加”自我反思节点”:每 3 步一轮,如果 LLM 在重复同样的 Action,强制进入反思:“你刚才用 A 工具没查到东西,为什么不换 B 工具/换关键词?“,防止原地打转。
- 高价值工具二次确认:发邮件、下单、转账这种”有副作用”的 Action,加【人审】节点——让人类点确认再执行。
- 唯元智创 企业 Agent SDK 已经内置了 ReAct 循环、max_iters、参数校验、人审钩子、ReAct 路径可视化回放等 8 大防坑功能,不用你自己从 Prompt 拼。
常见问题
ReAct 和 Tree of Thoughts(ToT) 是竞争关系吗?
不是,是正交可叠加的。ToT 管”思考阶段怎么多路径探索 + 剪枝”(比如在 Thought 阶段生成 5 条候选计划,只保留 Top-2),ReAct 管”思考 + 行动 + 观察的整体循环”。现在最稳的架构是:规划层用 ToT 做 2 至 3 层树搜索选最优计划;执行层按计划每一步走 ReAct 调用工具。两者配合几乎是 2025 年复杂 Agent 产品的标准答案。
为什么我的 ReAct Agent 老是”读不完搜索结果”就下结论?
典型坑:你把 Search 返回的”前 3 条摘要”直接当 Observation 喂了,里面刚好写的是 2024Q2,模型以为拿到了 2025 的就下结论。解决方案三管齐下:(1)给每个搜索结果补一个”原始网页全文”的工具 LinkReader,让它有能力读全文;(2)在 System Prompt 里强制”至少交叉验证 2 个独立信源”;(3)把 Observation 里每条结果的时间戳放在最前面,让模型一眼知道新旧。
ReAct 每轮调用都跑 LLM,会不会太贵?
大多数场景平均 3 至 5 轮结束,一次总消耗约 3 至 8 千 tokens,成本约几毛钱到几块钱。要再省的话按”分层策略”调:Thought 阶段(推理)用便宜的 gpt-4o-mini / Qwen2.5 14B;最终 Final Answer 总结用强的 GPT-4o / Claude 3.5,再用 唯元智创 的模型智能路由(简单任务自动走便宜模型),综合成本还能砍一半。95% 的任务消费在几毛钱以内,比招一个人工便宜百倍。