为什么需要 ReAct
我们已经讲过 Chain of Thought(单向推理)和 Tree of Thoughts(多路搜索),它们解决的是"想"的问题。但现实任务常常需要"做":
- 查汇率要做计算 → 需要计算器
- 答案涉及最新数据 → 需要搜索
- 需要处理结构化数据 → 需要代码执行
纯推理模型会编造数据(幻觉),纯工具调用模型会不加思考地乱调。ReAct(Yao et al., 2022)把两者缝合:
Reasoning + Acting = 在调用工具前先思考,在拿到结果后再规划下一步
这正是现代 AI Agent 的底层范式。
ReAct vs CoT vs Function Calling
| 维度 | CoT | Function Calling | ReAct |
|---|---|---|---|
| 推理 | ✅ 单向 | ❌ 无显式推理 | ✅ 循环推理 |
| 工具调用 | ❌ | ✅ 一次性 | ✅ 多轮 |
| 自我修正 | ❌ | ❌ | ✅ 基于 Observation 调整 |
| 适用任务 | 数学、逻辑 | 单步查询 | 多步探索、复杂决策 |
| Token 消耗 | 低 | 低 | 中-高 |
| 典型代表 | 经典 CoT | OpenAI Tools | AutoGPT、LangChain Agent |
三步循环核心结构
ReAct 的精髓是 Thought → Action → Observation 的重复循环:
Thought: 我需要先查今天的美元兑人民币汇率
Action: search
Action Input: {"query": "美元兑人民币汇率 今日"}
Observation: 1 美元 = 7.25 人民币(2026-08-01)
Thought: 用户问 1000 美元等于多少人民币,需要做乘法
Action: calculator
Action Input: {"expression": "1000 * 7.25"}
Observation: 7250
Thought: 已获得答案,可以结束
Action: finish
Action Input: {"answer": "1000 美元 ≈ 7250 人民币(按今日汇率 7.25 计算)"}
注意第三步 Observation 不是模型瞎编的,而是工具真实返回的结果。模型在每个 Thought 中重新评估"我现在知道什么、还缺什么",这就是 ReAct 比 Function Calling 强的地方。
实战模板:用 ReAct 做竞品分析
任务:"对比 Notion 和 Obsidian 在 2026 年的企业级功能差异"
Thought: 这是一个对比类任务,需要两款产品的最新功能信息。先查 Notion 企业版。
Action: search
Action Input: {"query": "Notion enterprise features 2026"}
Observation: Notion 企业版新增 AI Connector、审计日志、SCIM 配置...
Thought: 已有 Notion 信息,现在查 Obsidian 企业版。
Action: search
Action Input: {"query": "Obsidian enterprise commercial license features"}
Observation: Obsidian Commercial License 包含多设备同步、优先支持...
Thought: 信息足够,整理对比表。
Action: finish
Action Input: {"answer": "Notion 优势在 AI 与协作,Obsidian 优势在本地化与隐私..."}
整个过程显式记录推理链,每一步都可审计、可调试。
四类典型适用场景
- 多跳问答:答案依赖多个数据源(汇率 + 计算、搜索 + 知识库)
- 信息补全:先搜索补全缺失信息,再推理得出结论
- 调试排错:代码出错 → 执行看报错 → 修改 → 再执行
- 决策探索:多个候选方案 → 查证每个方案的优劣 → 综合排序
常见误区
- 误区 1:Observation 部分模型自己编造。必须在 Prompt 中强调"基于真实结果",并配合工具实际执行。
- 误区 2:循环不收敛,陷入无限调用。务必限定最大轮数(建议 5-8 轮)。
- 误区 3:工具列表过多。可用工具超过 5 个时模型选择困难,建议按场景裁剪。
- 误区 4:把 ReAct 用在简单任务上。"2+2=?" 用 ReAct 是杀鸡用牛刀,直接 CoT 即可。
- 误区 5:Thought 写成流水账。Thought 应该是"分析+决策",不是"我现在要..."的流水账。
进阶技巧
- Few-shot 引导:给 1-2 个 ReAct 示例,模型格式遵循率从 60% 提升到 95%
- 工具描述精炼:每个工具描述不超过 30 字,否则模型容易混淆
- 错误恢复 Prompt:加入"若 Observation 包含 error,请在下一个 Thought 中分析原因并调整"
- 结合 Reflexion:每轮循环后让模型反思"我走的路对吗",进一步提升成功率
ReAct 的现代演进
ReAct 是 2022 年的范式,2024-2026 年的 Agent 框架已在其基础上演进:
| 框架 | 演进点 |
|---|---|
| Reflexion | 在 ReAct 循环外再加一层"反思" |
| Plan-and-Execute | 先规划全部步骤,再依次执行 |
| ReWOO | 解耦推理与工具调用,减少 Token |
| LLMCompiler | 并行执行多个 Action |
但万变不离其宗,理解 ReAct 是理解所有 Agent 框架的前提。
小结
ReAct 把 LLM 从"只会想"升级为"会想会做会修正"。当你遇到的任务需要调用外部工具 + 多步推进 + 中途回溯时,ReAct 就是答案。把上面的 Prompt 模板复制到 Claude 或 GPT-4 中,把 {在此填入你的任务} 替换为实际问题,即可体验 Agent 的底层范式。
下一篇我们会讲 Step-back Prompting(退一步思考),看如何让模型在解题前先"抽象出原则"。