一、开篇导读
1.1 核心定位
大型语言模型(LLM)能写诗、能编程、能考试,但有一个致命短板——只会说,不会做。它无法获取实时信息,不能调用计算器,不能查询数据库,更不能在复杂任务中边思考边行动。ReAct(Reasoning + Acting)框架正是为补齐这一短板而生,它是当前 AI 智能体(AI Agent)最核心的底层技术范式。
1.2 阅读门槛
本文零基础友好,不预设你对 Agent 开发有任何经验。我们将从核心概念讲起,配合架构图解、流程拆解、可运行代码,直至生产落地与行业案例,完整呈现 ReAct 的技术逻辑与工程实践。
1.3 核心适用场景
- AI 智能体开发(Agent Development)
- 大模型工具调用(Tool Calling)
- 企业私有知识库问答(RAG + Agent)
- 复杂多步骤任务推理(Multi-step Reasoning)
- 自动化工作流编排(Workflow Automation)
二、ReAct 框架核心定义
2.1 技术起源
2022 年 10 月,Google 与普林斯顿大学的研究团队在论文“ReAct: Synergizing Reasoning and Acting in Language Models”中首次提出了 ReAct 框架。它并非一个具体的软件库,而是一种大模型推理与行动协同的 prompting 范式。
2.2 核心内核:Reason + Act 双向闭环
ReAct 将两个关键能力融为一体:
| 能力 | 英文 | 核心作用 |
|---|---|---|
| 推理 | Reason | 分析当前信息缺口,制定下一步行动策略 |
| 行动 | Act | 调用外部工具(搜索、计算、数据库等)获取真实反馈 |
二者形成一个双向闭环:推理指导行动,行动反馈结果,结果驱动下一轮推理,循环往复直至问题解决。
2.3 模式升级:打破「输入-输出」单次生成
传统大模型的交互模式是简单的「输入 → 输出」单次生成。ReAct 则将其升级为**「思考 → 行动 → 复盘 → 输出」**的完整流程:
用户提问 → 模型思考 → 调用工具 → 观察结果 → 再次思考 → 再次行动 → ... → 最终答案这相当于给大模型装上了「手」和「眼」,让它不再只是闭卷考试的学生,而是可以查资料、用计算器、做实验的研究员。
三、ReAct 核心价值:解决传统大模型的三大致命缺陷
传统大模型在真实业务场景中面临三大结构性缺陷,ReAct 正是为逐一击破它们而设计。
3.1 缺陷一:训练知识滞后,无法获取实时信息
大模型的知识截止于训练数据的时间点。如果你问它「今天北京的天气」或「某只股票最新行情」,它要么拒绝回答,要么自信地编造内容(幻觉)。
ReAct 的解法:通过 Action 步骤调用实时搜索 API、天气接口、金融数据接口,让模型获取最新信息,彻底杜绝「一本正经地胡说八道」。
3.2 缺陷二:复杂推理能力薄弱,逻辑断层与幻觉突出
面对需要多步推理的复杂问题(如「计算某公司过去三年净利润复合增长率,并与行业均值对比」),传统模型往往在中间某一步出现逻辑断层,导致最终答案偏差巨大。
ReAct 的解法:将复杂问题拆解为多个子步骤,每一步只处理一个小问题,并通过 Observation 验证中间结果。如果某步出错,Thought 会识别错误并调整策略,实现自主纠错。
3.3 缺陷三:无外部工具联动能力,能力边界受限
大模型本质上是一个「文本预测机」,它不会算复杂的数学公式,不能执行代码,不能查询 SQL 数据库。它的能力边界被牢牢锁死在训练语料中。
ReAct 的解法:通过标准化的工具调用接口,让模型可以「使用」计算器、Python 解释器、数据库、搜索引擎等外部工具,实现能力的无边界扩展——而且无需微调模型,只需在 Prompt 中注册工具即可。
3.4 核心价值总结
ReAct 的核心价值可以概括为一句话:通过迭代式思考与行动,自主补全信息、纠错验证,输出精准且可溯源的结果。
四、ReAct 完整工作原理:五大核心步骤
ReAct 的运行机制是一个迭代式闭环,由五大核心步骤组成,循环执行直至问题解决或达到终止条件。
步骤 1:问题接收与任务拆解
模型首先接收用户问题,判断:
- 当前信息是否充足?
- 是否需要调用外部工具?
- 任务需要几步完成?
示例:
用户问:「(123 + 456) × 789 = ?」
模型判断:这是多步计算,需要先用计算器算加法,再用结果算乘法。
步骤 2:Reason(推理决策)
基于当前掌握的信息,模型进行推理,分析信息缺口,制定下一步行动方案。
示例:
Thought: 用户要求计算 (123+456)×789,我需要先计算加法部分。
步骤 3:Act(行动执行)
根据推理结果,调用对应的外部工具,传入参数执行具体操作。
示例:
Action: Calculator(“123 + 456”)
步骤 4:Observation(接收工具反馈)
工具执行完成后,返回真实结果。模型接收该结果,补齐信息短板。
示例:
Observation: 579
步骤 5:迭代复盘 / 最终作答
模型评估当前状态:
- 信息充足且验证通过→ 输出最终答案,终止循环
- 信息仍有缺口或需要进一步验证→ 回到步骤 2,开启下一轮推理-行动循环
示例:
Thought: 加法结果是 579,接下来需要计算 579 × 789。
Action: Calculator(“579 * 789”)
Observation: 456831
Thought: 已获得最终结果,可以作答。
Final Answer: 456,831
这个循环的核心威力在于:每一步都有明确的推理依据和行动目标,每一步的结果都被记录并用于指导下一步决策,形成可追溯、可验证的完整推理链。
五、核心技术对比:ReAct vs CoT vs Tool Calling
理解 ReAct 的定位,需要将它与两种相关技术进行严格区分:
5.1 CoT(Chain-of-Thought,思维链)
- 能力:仅思考,不行动
- 机制:在输出答案前,先生成一段推理过程
- 局限:无法调用外部工具,不能获取实时信息,所有推理都依赖模型内部参数
- 适用:纯逻辑推理题(数学题、逻辑谜题)
5.2 Tool Calling(工具调用)
- 能力:仅执行,无自主思考
- 机制:模型识别需要工具时输出结构化调用指令,由外部系统执行
- 局限:缺乏中间的推理复盘环节,通常依赖人工预设的规则链决定何时调用何种工具
- 适用:单次、明确的工具调用场景(如「查天气」)
5.3 ReAct:融合推理与执行的完整智能闭环
| 维度 | CoT | Tool Calling | ReAct |
|---|---|---|---|
| 推理能力 | 有 | 无 | 有 |
| 工具调用 | 无 | 有 | 有 |
| 自主决策 | 无 | 弱 | 强 |
| 错误纠正 | 无 | 无 | 有 |
| 多步迭代 | 无 | 弱 | 有 |
| 结果溯源 | 中 | 强 | 强 |
关键区别:Tool Calling 回答「该调用什么工具」,ReAct 回答「为什么要调用、调用后怎么办、下一步该做什么」。ReAct 在 Tool Calling 的基础上增加了推理层和反馈层,实现了真正的自主决策闭环。
六、极简代码实战:复刻 ReAct 核心闭环
下面是一个完整可运行的轻量化 ReAct 实现,模拟搜索和计算工具调用,清晰展示「推理-行动」核心闭环。
""" 极简 ReAct Agent 实现 模拟搜索和计算工具,展示 Thought -> Action -> Observation 循环 """importreimportjsonclassReActAgent:def__init__(self,llm_client):self.llm=llm_client self.tools={"Search":self.tool_search,"Calculator":self.tool_calculator,}self.max_iterations=10self.history=[]# 记录完整的推理轨迹# ========== 工具定义 ==========deftool_search(self,query:str)->str:"""模拟搜索引擎:返回与查询相关的知识片段"""knowledge_base={"北京今天天气":"晴,25°C,东南风2级","2026年诺贝尔物理学奖":"2026年诺贝尔物理学奖授予了量子计算领域的先驱者","圆周率":"3.141592653589793","中国人口":"约14.1亿(2025年统计)",}# 简单模拟:返回最匹配的知识forkey,valueinknowledge_base.items():ifkeyinqueryorqueryinkey:returnvaluereturnf"未找到与「{query}」直接相关的信息,建议更换关键词。"deftool_calculator(self,expression:str)->str:"""模拟计算器:安全执行数学表达式"""try:# 仅允许数字和基础运算符,防止代码注入allowed_chars=set("0123456789+-*/(). ")ifnotall(cinallowed_charsforcinexpression):return"错误:表达式包含非法字符"result=eval(expression)returnstr(result)exceptExceptionase:returnf"计算错误:{str(e)}"# ========== 核心 ReAct 循环 ==========defrun(self,question:str)->str:"""执行 ReAct 循环,返回答案"""print(f"{'='*60}")print(f"用户问题:{question}")print(f"{'='*60}\n")# 初始化 Prompt 上下文context=self._build_system_prompt()context+=f"\nQuestion:{question}\n"forstepinrange(1,self.max_iterations+1):print(f"--- 第{step}轮迭代 ---")# Step 1: 调用 LLM 生成 Thought + Actionresponse=self.llm.generate(context)print(f"LLM 输出:\n{response}\n")# Step 2: 解析 Thought 和 Actionthought=self._extract_thought(response)action_str=self._extract_action(response)ifnotaction_str:print("未检测到 Action,终止循环")break# 记录历史self.history.append({"thought":thought,"action":action_str})# Step 3: 执行工具tool_name,tool_input=self._parse_action(action_str)iftool_name=="Finish":print(f"✅ 任务完成!最终答案:{tool_input}")returntool_inputiftool_namenotinself.tools:observation=f"错误:未知工具「{tool_name}」,可用工具:{list(self.tools.keys())}"else:observation=self.tools[tool_name](tool_input)print(f"工具执行:{tool_name}({tool_input})")print(f"Observation:{observation}\n")# Step 4: 将 Observation 追加到上下文,进入下一轮context+=f"{response}\nObservation:{observation}\n"return"达到最大迭代次数,未能完成任务。"# ========== 辅助方法 ==========def_build_system_prompt(self)->str:"""构建 ReAct 系统提示词"""return"""You are a helpful assistant that solves problems by interleaving reasoning and actions. Available tools: - Search(query: str): Search for factual information - Calculator(expression: str): Calculate mathematical expressions - Finish(answer: str): Provide the final answer and terminate You MUST follow this exact format for each step: Thought: <your reasoning about what to do next> Action: <ToolName>(<input>) After each Action, you will receive an Observation. Use it to inform your next Thought. When you have enough information to answer, use Action: Finish(<answer>). Begin! """def_extract_thought(self,text:str)->str:match=re.search(r"Thought:\s*(.+?)(?=\nAction:|\Z)",text,re.DOTALL)returnmatch.group(1).strip()ifmatchelse""def_extract_action(self,text:str)->str:match=re.search(r"Action:\s*(.+?)(?=\n|\Z)",text)returnmatch.group(1).strip()ifmatchelse""def_parse_action(self,action_str:str):"""解析 Action 字符串,返回 (tool_name, input)"""match=re.match(r"(\w+)\((.*)\)",action_str)ifmatch:returnmatch.group(1),match.group(2).strip('"').strip("'")returnNone,None# ========== 模拟 LLM 客户端 ==========classMockLLM:""" 模拟 LLM 的推理过程。 在真实场景中,这里应替换为 OpenAI、Claude、Qwen 等真实 API。 """def__init__(self):self.responses=[]self.step=0defgenerate(self,context:str)->str:""" 根据上下文动态生成 Thought + Action。 这是一个简化版的状态机,真实 LLM 会基于 Prompt 自主学习格式。 """if"Question: (123 + 456) * 789"incontext:# 数学计算任务if"Observation: 579"notincontext:return"Thought: 用户要求计算 (123+456)×789,我需要先计算加法部分。\nAction: Calculator(\"123 + 456\")"else:return"Thought: 加法结果是 579,接下来需要计算 579 × 789。\nAction: Calculator(\"579 * 789\")"elif"Observation: 456831"incontextor"Observation: 456831.0"incontext:return"Thought: 已获得最终结果 456831,可以作答。\nAction: Finish(\"456831\")"elif"北京今天天气"incontext:if"Observation:"notincontext:return"Thought: 用户询问北京今天天气,我需要搜索实时信息。\nAction: Search(\"北京今天天气\")"else:return"Thought: 已获取天气信息,可以直接回答用户。\nAction: Finish(\"北京今天天气晴,25°C,东南风2级。\")"# 默认兜底return"Thought: 我已掌握足够信息。\nAction: Finish(\"根据已有信息,无法确定答案。\")"# ========== 运行示例 ==========if__name__=="__main__":llm=MockLLM()agent=ReActAgent(llm)# 示例 1: 数学计算answer=agent.run("(123 + 456) * 789 = ?")print(f"\n最终输出:{answer}\n")# 示例 2: 信息查询agent2=ReActAgent(llm)answer2=agent2.run("北京今天天气怎么样?")print(f"\n最终输出:{answer2}")6.1 代码核心解析
| 模块 | 功能 | 工程意义 |
|---|---|---|
ReActAgent | 核心 Agent 类 | 封装完整的 ReAct 循环逻辑 |
tool_search / tool_calculator | 工具实现 | 模拟外部能力扩展,真实场景替换为真实 API |
run() | 主循环 | 控制 Thought → Action → Observation 的迭代流程 |
_build_system_prompt() | Prompt 工程 | 通过 Few-shot 格式约束 LLM 输出结构 |
max_iterations | 安全兜底 | 防止无限循环,生产环境必备 |
history | 轨迹记录 | 支持审计溯源和调试分析 |
6.2 工程落地拓展方向
- 接入真实 LLM:将
MockLLM替换为openai.ChatCompletion或anthropic.Messages - 工具注册中心:使用装饰器模式动态注册工具,支持热插拔
- 结构化输出:用 JSON Schema 约束 Action 输出,替代正则解析
- 记忆持久化:将
history存入 Redis/数据库,支持跨会话经验累积 - Human-in-the-Loop:在敏感 Action 前插入人工确认节点
七、ReAct 核心优势与落地痛点
7.1 五大核心优势
优势一:降低模型幻觉,结果可溯源、可验证
ReAct 的每一步推理和行动都被记录在案,形成完整的「审计轨迹」。如果最终答案有误,可以逐行回溯是哪一个 Thought 或 Action 出了问题。这种可追溯性是传统端到端生成模型无法比拟的。
优势二:低成本能力拓展,插件式扩展全场景能力
无需微调模型,无需准备训练数据,只需在 Prompt 中注册新工具,模型就能立即获得新能力。这种插件化扩展让企业可以快速将 ReAct Agent 对接内部 ERP、CRM、数据库等业务系统。
优势三:仿生迭代推理,适配复杂多步骤任务
ReAct 模拟了人类解决复杂问题的自然方式——先分析、再行动、观察结果、调整策略。这种仿生设计使其在需要多步推理的任务(如数据分析、故障排查)中表现远超单次生成模型。
优势四:工程适配性强,无缝对接企业工作流
ReAct 的 Action 可以是任何可调用接口——REST API、SQL 查询、Python 函数、Shell 命令。这意味着它可以无缝嵌入企业现有技术栈,不需要推翻重来。
优势五:高兼容性,不绑定模型底座
ReAct 是一种 Prompting 范式,而非特定模型的专属功能。无论是 GPT-4、Claude、Qwen、Llama 还是 DeepSeek,只要支持文本生成,就可以通过精心设计的 Prompt 实现 ReAct 循环。
7.2 五大现存局限性
局限一:多轮迭代导致响应延迟,不适用于超高实时性场景
每轮迭代都需要一次 LLM API 调用,复杂任务可能需要 5-15 轮。如果应用场景要求毫秒级响应(如高频交易、实时游戏),ReAct 的延迟将不可接受。
局限二:推理质量依赖模型能力与 Prompt 工程
如果底层 LLM 的推理能力较弱,或者 Prompt 设计不当,模型可能生成错误的 Thought 或格式错误的 Action,导致整个链条崩溃。
局限三:复杂任务易出现无效迭代、循环死锁
模型可能在两个相似的状态之间反复横跳(如「搜索 A → 没结果 → 搜索 B → 没结果 → 再搜索 A」),陷入死循环。必须依赖迭代上限和智能终止条件来兜底。
局限四:多轮上下文占用 Token 高,长链路任务易丢失信息
每一轮 Thought/Action/Observation 都会追加到上下文中。长链路任务可能导致上下文窗口溢出,早期关键信息被截断,导致推理断裂。
局限五:原生无工具调度机制,多工具场景易决策混乱
当可用工具超过 10 个时,模型在 Thought 阶段选择工具的难度显著增加,可能出现「选错工具」或「同时调用互斥工具」的混乱情况。需要额外的工具路由层来辅助决策。
八、ReAct 核心落地场景与行业案例
ReAct 框架的价值最终体现在它能够解决的真实世界问题上。以下六大领域展示了 ReAct 从实验室走向产业化的完整图景。
8.1 通用 AI 智能体 / 个人助理
这是最直接的应用场景。ReAct 驱动的个人助理可以自主拆解用户指令,并自动化完成各类日常任务:
- 场景:「帮我查一下下周去北京的高铁票,看看有没有上午出发的,然后对比一下北京西站和朝阳站哪个离我的会议地点更近。」
- ReAct 循环:查询高铁 API → 获取车次信息 → 查询地图 API 计算两地距离 → 综合对比 → 给出建议
8.2 实时资讯 / 金融问答
金融领域对信息的实时性和准确性要求极高,ReAct 恰好满足这两点:
- 场景:「分析某科技股今日异动原因,结合最新财报数据和行业新闻。」
- ReAct 循环:调用实时行情 API → 检索最新财报 → 搜索相关新闻 → 综合分析 → 生成带数据支撑的行情解读
8.3 数理计算 / 代码工程 / 数据分析
这是 2026 年最成熟、最广泛部署的 ReAct 应用。以 Claude Code、Cursor、GitHub Copilot Workspace 为代表的编码 Agent,本质上是一个高度工程化的 ReAct 循环:
Thought: "用户说修复这个 Bug,我需要先读取相关文件" Action: Read("src/api/client.ts") Observation: [文件内容...] Thought: "第 42 行的类型断言有问题,需要添加空值检查" Action: Edit("src/api/client.ts", line=42, ...) Observation: [编辑成功] Thought: "修改完成,需要运行测试验证修复" Action: RunTests("npm test -- client.test.ts") Observation: [3 passed, 0 failed] Action: finish("Bug 已修复")8.4 企业私有知识库问答
企业内部的文档、制度、产品手册往往分散在不同系统中。ReAct Agent 可以:
- 场景:「新员工询问公司的报销流程,需要结合最新的财务制度和 IT 系统的操作指南。」
- ReAct 循环:检索制度文档 → 检索系统操作手册 → 发现信息冲突时自动标记 → 整合为结构化回答
8.5 行业自动化工作流 / 智能运维
在 IT 运维和业务流程自动化中,ReAct 被用于故障排查和工单处理:
- 场景:「生产环境 API 响应延迟飙升,自动定位根因。」
- ReAct 循环:查询监控仪表盘 → 检索近期部署记录 → 检查数据库慢查询日志 → 分析依赖服务状态 → 定位到某次数据库索引变更 → 自动生成回滚建议
8.6 教育科研辅助
ReAct 在教育领域可以帮助学生进行题目拆解答疑和文献检索:
- 场景:「解释量子纠缠的概念,并推荐三篇近两年的综述论文。」
- ReAct 循环:生成概念解释 → 调用学术搜索引擎 → 筛选高引用综述 → 验证论文可访问性 → 整合推荐列表
九、ReAct 技术未来发展趋势
ReAct 框架自 2022 年诞生以来已经历了从 Prompt 技巧到系统架构的蜕变。面向 2026 年及以后,以下六大方向正在塑造 ReAct 的下一个发展阶段。
9.1 推理智能化:自适应迭代与强化学习优化
传统 ReAct 的迭代次数和深度是固定的或由简单规则控制。未来的 ReAct Agent 将引入自适应迭代机制——根据任务复杂度、当前置信度和历史成功率动态调整推理深度。强化学习(RL)将被用于优化决策策略,从根本上解决「无效迭代」问题。
9.2 工具调度智能化:多工具自主编排与并行执行
当可用工具从 3 个扩展到 30 个时,工具选择的复杂度呈指数级增长。未来的 ReAct 变体将内置工具编排层,支持:
- 优先级调度:根据任务类型自动排序工具调用顺序
- 并行执行:同时发起多个无依赖的工具调用,减少总延迟
- 工具组合:自动发现工具之间的组合模式(如「搜索 + 计算」是常见组合)
9.3 群体智能升级:多智能体分工协同
单一 ReAct Agent 的能力受限于单点上下文和专长范围。多 Agent 协作将成为标配:
- 架构师 Agent:负责高层任务拆解
- 执行 Agent:负责具体工具调用
- 校验 Agent:负责结果验证和纠错
- 协调 Agent:负责冲突解决和资源分配
这种「分而治之」的群体智能架构将适配超复杂任务场景。
9.4 轻量化落地:压缩上下文、降低成本、适配端侧
当前 ReAct 的主要成本来自多轮 LLM 调用和长上下文 Token 消耗。未来的优化方向包括:
- 轨迹蒸馏:将历史交互压缩为高层洞察,减少上下文占用
- 端侧推理:将轻量级 ReAct 循环部署到手机、IoT 设备,降低云端依赖
- 缓存复用:对相似任务的推理轨迹进行缓存,避免重复计算
9.5 安全合规化:权限管控、审计溯源、风险拦截
随着 ReAct Agent 被赋予越来越多的权限(文件系统访问、代码执行、资金操作),安全性成为不可忽视的议题:
- 权限分级:不同 Agent 拥有不同的工具访问权限
- 审计溯源:完整的 Thought/Action/Observation 日志,满足合规要求
- 风险拦截:敏感操作前强制人工确认(Human-in-the-Loop)
9.6 生态标准化:成为 AI 智能体通用底层技术标准
ReAct 正在从一种研究范式演变为行业标准。OpenAI 的 Function Calling、Anthropic 的 Computer Use、Google 的 Vertex AI Agent,本质上都是 ReAct 思想的工程化实现。未来,ReAct 有望成为 AI 智能体的「HTTP 协议」——统一、开放、全场景内嵌。
十、结语:从静态知识库到动态推理行动者
ReAct 框架的技术价值,远不止于一种 Prompt 技巧或 Agent 架构。它代表了大模型发展史上的一次关键跃迁——从「静态知识库」到「动态推理行动者」的质变。
技术特质:融合两种 AI 范式
ReAct 的独特之处在于它融合了符号主义的严谨推理与深度学习的流畅生成:
- 它用 Thought 步骤实现了符号主义的可解释、可追溯推理
- 它用 LLM 的生成能力实现了自然语言层面的灵活表达
- 它用 Action/Observation 机制实现了与外部世界的实时交互
这种融合让 ReAct 兼具了严谨与流畅、可控与灵活。
行业意义:适配真实世界的复杂性
真实世界不是闭卷考试,它充满了实时变化的信息、不确定的中间状态、需要多步探索的复杂问题。ReAct 通过「思考与行动迭代」的机制,教会模型直面未知,在试错与验证中逼近真相。这正是 AI 从实验室玩具走向产业利器的核心能力。
智能本质:在迭代中逼近真相
如果要用一句话概括 ReAct 的哲学,那就是:
智能不是拥有所有答案,而是知道如何寻找答案、验证答案、并在错误中修正方向。
ReAct 教会大模型的,正是这种元能力——一种关于「如何思考」的思考。而这,或许正是通向通用人工智能(AGI)的必经之路。
参考资源
- Yao et al.,“ReAct: Synergizing Reasoning and Acting in Language Models”(2022)
- Zhao et al.,“DLLM-Searcher: Adapting Diffusion LLM for Search Agents”(2026) — P-ReAct 并行推理
- Guerin,“KAIJU: An Executive Kernel for Intent-Gated Execution of LLM Agents”(2026) — IGX 安全执行
- Yi et al.,“Learning Agent-Compatible Context Management for Long-Horizon Tasks”(2026) — AdaCoM 上下文管理
- Wang et al.,“DataFactory: Collaborative Multi-Agent Framework for Advanced TableQA”(2026) — 企业表格问答
- Han et al.,“Toward E2E Intelligence in 6G Networks: An AI Agent-Based RAN-CN Converged Intelligence Framework”(2026) — 网络智能控制
- Dubrov,“AI Agent Reasoning Loops in 2026: ReAct vs ReWOO vs Plan-and-Execute”(2026)