揭秘 ReAct:让大模型学会“边思考,边行动”的 Agent 模式
揭秘 ReAct让大模型学会“边思考边行动”的 Agent 模式大家好我是你们的老朋友一名热衷于探索 AI 前沿技术的程序员。在 LLM大语言模型爆发的今天我们见证了它写代码、写文章甚至做数学题的强大能力。但你是否发现传统的 LLM 有一个致命的弱点它是一个“闭门造车”的孤岛。它无法联网查最新的新闻无法查询你公司的数据库甚至不知道今天上海的天气。它只能基于训练数据“幻觉”出一个答案。为了解决这个问题ReActReason Act模式应运而生。今天我们就来深入浅出地拆解 ReAct看看它是如何赋予 AI “思考”与“行动”的双重能力的。1. 什么是 ReActReAct 是Reasoning推理和Acting行动的组合词。简单来说ReAct 是一种让 LLM 具备“推理 工具调用”能力的 Agent智能体设计模式。 核心痛点传统 LLM 的执行逻辑是线性的输入 - 直接生成答案。这导致两个问题无法交互不能调用外部 API如搜索、计算器、数据库。无法验证一旦推理出错很难自我纠正因为中间过程不可见。 ReAct 的解决方案ReAct 将执行过程拆成了一个闭环循环Thought思考 → Action行动 → Observation观察这就好比一个人类专家解决问题先想一下“我要解决这个问题需要查什么资料”Thought然后去查资料或做实验。Action看到结果后再判断“这个结果对吗下一步该怎么做”Observation 下一轮 Thought2. ReAct 的本质理解如果要用一句话概括 ReAct 的本质那就是LLM 是大脑决策器Tool 是手脚执行器。LLM负责规划路径、决定调用哪个工具、分析工具返回的结果。Tool负责执行具体的、确定的操作如搜索 Google、查询 SQL、调用天气 API。通过这种循环迭代模型具备了与外部世界实时交互的能力从而解决了“知识滞后”和“计算能力不足”的问题。3. ReAct 的执行流程详解让我们通过一个具体的场景来模拟 ReAct 的工作流。场景用户问“今天上海的气温适合穿短袖吗” 循环步骤演示第 1 轮获取信息Thought思考用户想知道上海今天的天气以判断穿衣建议。我需要先获取上海当前的气温和天气状况。Action行动调用天气查询工具。Action: weather_apiInput: 上海Observation观察工具返回结果上海 28°C多云湿度 60%第 2 轮推理与结论Thought思考我已经获取了天气信息。气温 28°C 属于较热天气通常适合穿短袖。我可以生成最终回答了。Final Answer最终回答上海今天气温 28°C多云比较炎热非常适合穿短袖出门。 流程图展示为了更直观地理解这个动态决策过程请看下面的 Mermaid 流程图需要更多信息信息充足用户提问输入 PromptLLM 推理Thought: 任务规划Action: 选择工具 参数执行外部工具Observation: 获取结果将结果加入上下文Final Answer: 生成最终回复结束4. 代码实战模拟一个简单的 ReAct 循环虽然生产环境中我们会使用 LangChain 或 LlamaIndex 等框架但理解底层逻辑最好的方式是看一个简化的 Python 实现。以下代码模拟了一个极简的 ReAct 循环包含一个虚拟的“搜索工具”。importjson# 模拟外部工具搜索引擎defsearch_tool(query:str)-str:模拟搜索工具根据关键词返回固定结果database{上海天气:上海今日气温 28°C多云,Python创始人:Guido van Rossum,ReAct论文:ReAct: Synergizing Reasoning and Acting in Language Models}# 简单匹配实际项目中应使用向量检索或真实 APIforkey,valueindatabase.items():ifkeyinquery:returnvaluereturn未找到相关信息# 模拟 LLM 的决策逻辑 (这里用规则硬编码模拟 LLM 的输出实际由 LLM 生成)defmock_llm_decision(history:list)-dict: 模拟 LLM 根据历史对话决定下一步是 Action 还是 Final Answer last_user_msghistory[-1][content]ifhistoryelse# 简单的规则模拟 LLM 的思考过程if天气inlast_user_msgand气温notinstr(history):return{thought:用户询问天气我需要调用搜索工具获取最新数据。,action:search_tool,input:上海天气}elif气温instr(history):return{thought:已获取气温信息可以总结回答。,final_answer:f根据搜索结果{history[-1][content]}。因此今天上海比较热。}else:return{final_answer:抱歉我无法处理该请求。}defreact_agent(user_question:str):print(f 用户:{user_question}\n)history[{role:user,content:user_question}]max_steps5forstepinrange(max_steps):# 1. LLM 思考与决策decisionmock_llm_decision(history)# 打印思考过程 (Thought)ifthoughtindecision:print(f Thought (Step{step1}):{decision[thought]})# 2. 判断是行动还是结束iffinal_answerindecision:print(f✅ Final Answer:{decision[final_answer]})breakifactionindecision:action_namedecision[action]action_inputdecision[input]print(f️ Action: 调用{action_name}, 参数:{action_input})# 3. 执行工具 (Action Execution)ifaction_namesearch_tool:observationsearch_tool(action_input)else:observation未知工具print(f Observation:{observation}\n)# 4. 将观察结果加入历史供下一轮推理使用history.append({role:assistant,content:fAction:{action_name}})history.append({role:tool,content:observation})# 运行 Agentif__name____main__:react_agent(今天上海天气怎么样)运行结果预期 用户: 今天上海天气怎么样 Thought (Step 1): 用户询问天气我需要调用搜索工具获取最新数据。 ️ Action: 调用 search_tool, 参数: 上海天气 Observation: 上海今日气温 28°C多云 Thought (Step 2): 已获取气温信息可以总结回答。 ✅ Final Answer: 根据搜索结果上海今日气温 28°C多云。因此今天上海比较热。5. ReAct 的优缺点分析在实际工程落地中ReAct 并非银弹我们需要辩证地看待它。✔️ 优点可解释性强你可以清晰地看到模型的Thought过程知道它为什么调用这个工具便于调试Debug。扩展性无限只要编写新的 ToolAgent 就能获得新能力如连接数据库、控制智能家居。处理复杂任务支持多步推理能够解决需要“查 A - 算 B - 查 C”才能得出的复杂问题。⚠️ 缺点与挑战延迟高Latency每一轮 Thought-Action-Observation 都需要一次 LLM 调用。如果步骤多用户等待时间会显著增加。成本高昂Token 消耗量大尤其是当推理链很长时。稳定性问题错误规划LLM 可能选错工具或参数格式错误。死循环有时模型会陷入“思考-行动-观察”的死循环无法跳出。 优化方向为了解决上述问题现代 Agent 架构通常会结合以下技术Router路由简单问题直接回答复杂问题才走 ReAct。Planner规划器先生成整体计划再分步执行减少盲目试探。Workflow工作流将稳定的部分固化成流程图只在不确定环节使用 ReAct。6. 进阶思考ReAct vs Workflow很多开发者会问“既然 ReAct 这么灵活为什么还要用 Workflow如 Dify、Coze 的工作流”这里有一个核心的区别特性ReActWorkflow决策方式动态决策每一步由 LLM 实时决定确定性编排流程提前定义好DAG灵活性⭐⭐⭐⭐⭐ 极高适应未知情况⭐⭐ 较低只能处理预设路径稳定性⭐⭐ 较弱易受 LLM 幻觉影响⭐⭐⭐⭐⭐ 极高可控性强适用场景开放域问答、复杂探索性任务业务逻辑固定、对准确率要求高的场景最佳实践在实际项目中我们通常混合使用。用 Workflow 搭建主干流程保证稳定性在关键节点嵌入 ReAct Agent 处理灵活变通的需求。总结ReAct 模式通过Thought → Action → Observation的循环成功打破了 LLM 的知识边界让它从一个“聊天机器人”进化为真正的“智能助手”。虽然它存在延迟和成本的挑战但随着模型推理能力的提升和架构的优化如 Plan-and-SolveReAct 依然是构建高阶 AI Agent 的基石。希望这篇文章能帮你彻底理解 ReAct。如果你正在开发 AI 应用不妨试着给你的 LLM 加上“手脚”看看它能创造出什么惊喜参考资料ReAct 原始论文: ReAct: Synergizing Reasoning and Acting in Language ModelsLangChain ReAct Agent 文档: LangChain AgentsLlamaIndex Agent 指南: LlamaIndex Agents