公司动态
ReAct模式详解:小白程序员必备的大模型学习指南,收藏必备!
本文详细解析了ReAct模式在大模型中的应用从基本概念到实际操作帮助小白和程序员理解大模型的内部机制。通过ReAct模式LLM能够边想边做实现推理与行动的交替循环有效避免幻觉问题。文章还介绍了如何在LangChain.js中使用ReAct Agent并探讨了常见的陷阱及解决方法。对于想要深入学习大模型技术的读者本文提供了宝贵的实践指导。为什么需要 ReAct先说一个问题。你问普通 LLM“阿根廷现任总统的夫人是哪里人”LLM 怎么处理它直接从训练数据里回忆答案一步到位给你。但训练数据可能过时了也可能压根没收录这个信息。于是它就「编一个看起来很像的答案」——这就是所谓的幻觉。问题出在哪「LLM 不会查资料只会靠记忆。」ReAct 的解决思路很直接别让 LLM 光靠记忆答题「让它边想边查查完再想」。普通 LLM vs ReAct Agent左边是普通 LLM问题进去答案出来中间全靠脑补右边是 ReAct Agent问题进去后它会思考→调工具查数据→看结果→再思考→直到有把握了才回答ReAct 到底是什么ReAct 「Re」asoning 「Act」ing推理 行动。它来自 2022 年普林斯顿大学的一篇论文。核心思想就一句话「让 LLM 把想和做交替进行而不是先想完再做或者直接做不想。」具体来说ReAct Agent 在工作时会反复经历三个阶段「Thought思考」分析当前情况决定下一步做什么「Action行动」调用某个工具去执行操作「Observation观察」看看工具返回了什么结果然后拿着结果继续思考决定是继续行动还是给出最终回答。这个循环会一直转直到 Agent 觉得信息够了我可以回答了才停下来。用一个真实例子走一遍完整循环光说概念太抽象我们用一个具体例子走一遍。「用户问北京和东京今天哪个更热」ReAct 循环的真实样子Agent 内部的执行过程 Thought #1: 用户想比较北京和东京的温度我需要分别查两个城市的天气。先查北京。 Action #1: 调用 get_weather({ city: 北京 }) Observation #1: 晴25°C湿度 40% Thought #2: 拿到北京是 25°C 了接下来查东京。 Action #2: 调用 get_weather({ city: 东京 }) Observation #2: 多云31°C湿度 70% Thought #3: 北京 25°C东京 31°C东京比北京热 6 度。信息够了可以回答。 ✅ Final Answer: 东京今天更热东京 31°C北京 25°C东京比北京高 6 度。注意看Agent 「不是一开始就知道要调两次工具再做一次计算」。它是一步一步走的——查完北京再决定查东京查完东京再决定回答。每一步都基于上一步的结果来决策。这就是想一步做一步的核心含义。在 LangChain.js 里怎么用 ReAct Agent上一篇我们用的createToolCallingAgent其实已经内置了 ReAct 模式。如果你想用更正宗的 ReAct AgentLangGraph 提供了一个专门的createReactAgentimport { ChatOpenAI } fromlangchain/openai; import { createReactAgent } fromlangchain/langgraph/prebuilt; import { tool } fromlangchain/core/tools; import { z } fromzod; // 定义工具 const weatherTool tool( async ({ city }) { const data: Recordstring, string { 北京: 晴25°C, 东京: 多云31°C, 伦敦: 阴18°C, }; return data[city] || 暂不支持 ${city}; }, { name: get_weather, description: 查询城市天气。用户问天气、温度相关问题时使用。, schema: z.object({ city: z.string().describe(城市名) }), } ); const searchTool tool( async ({ query }) { return关于${query}的搜索结果这是一条模拟的搜索结果...; }, { name: web_search, description: 搜索网络信息。用户问事实性问题且天气工具无法回答时使用。, schema: z.object({ query: z.string().describe(搜索关键词) }), } ); // 创建 ReAct Agent const agent createReactAgent({ llm: new ChatOpenAI({ modelName: gpt-4o, temperature: 0 }), tools: [weatherTool, searchTool], }); // 运行 const result await agent.invoke({ messages: [{ role: user, content: 北京和东京哪个更热 }], });createReactAgent和上一篇的createToolCallingAgentAgentExecutor本质上做的是同一件事但createReactAgent基于 LangGraph 构建更适合后续扩展到复杂的多步工作流和多 Agent 场景。ReAct 的内部实现原理如果你好奇 ReAct 在底层到底是怎么实现的其实核心逻辑非常简单。用伪代码写出来就几行asyncfunctionreactLoop(input: string, tools: Tool[], llm: LLM) { const messages [ { role: system, content: 你是一个有工具可用的助手... }, { role: user, content: input }, ]; while (true) { // 1. 让 LLM 思考可能返回文本回答也可能返回工具调用请求 const response await llm.call(messages); // 2. 如果 LLM 没有请求调用工具 → 直接返回回答循环结束 if (!response.toolCalls || response.toolCalls.length 0) { return response.content; } // 3. 如果 LLM 请求了工具调用 → 执行工具 for (const toolCall of response.toolCalls) { const targetTool tools.find(t t.name toolCall.name); const result await targetTool.invoke(toolCall.args); // 4. 把工具结果追加到消息历史这就是观察 messages.push({ role: tool, content: result, toolCallId: toolCall.id }); } // 5. 带着工具结果回到第 1 步让 LLM 继续思考 } }就是一个 「while(true)」 循环问 LLM“接下来干什么”LLM 要么说我要用工具要么说我能回答了如果要用工具 → 执行 → 把结果喂回去 → 回到第 1 步如果能回答了 → 返回答案 → 循环结束「就这么简单。」 没有什么复杂的状态机没有什么神经网络魔法。核心就是LLM 判断 工具执行的反复交替。那聪明的部分在哪全在 LLM 本身。LLM 负责判断现在需不需要用工具、用哪个、传什么参数、结果够不够。ReAct 只是给了它一个可以反复思考和行动的框架。ReAct 的两个关键机制看起来简单但有两个细节让 ReAct 真正能跑起来机制一Stop Sequence停止生成普通的 LLM 调用是生成到结束——它会一口气把回答写完。但在 ReAct 里「LLM 生成到我要调工具的时候必须停下来」等工具执行完再继续。怎么做到的现代 LLM 的 Tool Calling API 原生支持这个——当 LLM 决定调工具时它返回的不是普通文本而是一个结构化的 tool_call 对象。运行时检测到 tool_call 就知道该停下来执行工具了。机制二Scratchpad草稿纸上一篇提到的agent_scratchpad就是 ReAct 的工作记忆。每一轮的 Thought、Action、Observation 都会追加到这个草稿纸里下一轮思考时 LLM 能看到之前做了什么、得到了什么。没有 ScratchpadAgent 就像一条金鱼——每转一圈都忘了之前做过什么只能反复调同一个工具。ReAct 最容易踩的坑死循环ReAct 最常见的问题就是 「Agent 陷入死循环」——反复调同一个工具、得到同样的结果、但就是不停下来。为什么会这样常见原因有三个「原因一工具返回的结果 Agent 看不懂」比如工具返回了一堆 HTML 或者报错的 stack traceLLM 不知道该怎么理解这个结果就决定再试一次——然后又得到一样的结果——然后又再试一次……「解法」确保工具返回清晰、简洁的文本让 LLM 能理解。出错时返回查询失败原因是 xxx而不是抛一堆错误堆栈。「原因二没有替代方案」Agent 只有一个工具可以完成某类任务这个工具失败了Agent 不知道还能干什么就只能反复重试。「解法」给 Agent 提供退路。比如在 system prompt 里加一句“如果工具调用失败超过 2 次直接告诉用户’我暂时无法获取这个信息’。”「原因三没设上限」ReAct 的 while(true) 循环理论上可以无限跑下去。「解法」一定要设maxIterations。一般 5~10 次就够了超过大概率是出了问题。// LangChain.js 的两种设法 // 方式一AgentExecutor const executor new AgentExecutor({ agent, tools, maxIterations: 8 }); // 方式二createReactAgent通过 recursionLimit const agent createReactAgent({ llm, tools, // 每个 tool call 算两步call result所以 recursionLimit 约等于 maxIterations * 2 }); const result await agent.invoke(input, { recursionLimit: 16 });三种 Agent 模式怎么选ReAct 不是唯一的 Agent 模式。了解不同模式的适用场景才能选对武器。三种 Agent 模式对比模式一句话描述适合什么场景不适合什么场景「ReAct」边想边做走一步看一步探索性任务、不确定需要几步才能完成的任务步骤非常多且固定的流水线任务「Plan-and-Execute」先列计划再执行复杂的多步任务、步骤之间有依赖关系简单查询、需要快速响应的场景「Function Calling」直接调工具一步到位单步操作、明确知道该调哪个工具需要多步推理的复杂任务实际使用中的建议「大部分场景用 ReAct 就够了」——它是目前 90% 生产级 Agent 的默认架构如果你的任务步骤固定比如搜索→总结→翻译→发送可以考虑 Plan-and-Execute如果只是单步工具调用“帮我查个天气”Function Calling 最简单直接让 ReAct 更靠谱的 5 个实践1. system prompt 里明确什么时候该停不要让 Agent 自由发挥。明确告诉它什么情况下应该直接回答什么情况下才需要用工具你是一个助手遵循以下规则 - 如果是闲聊或你已经知道答案的问题直接回答不要调工具 - 只在需要实时数据天气、新闻、股价或精确计算时才使用工具 - 如果工具调用失败 2 次告诉用户你暂时无法获取该信息 - 每次回答都要基于工具返回的真实数据不要编造2. 给工具返回值加格式规范工具返回的内容越结构化LLM 理解起来越轻松// ❌ 返回一大坨原始数据 returnJSON.stringify(apiResponse); // ✅ 返回精简、结构化的信息 return城市${city}天气${weather}温度${temp}°C湿度${humidity}%;3. 打开 verbose 观察思考过程调试阶段一定要看 Agent 的完整 Trace。很多回答不对的问题你一看 Trace 就知道哪一步跑偏了——是选错了工具传错了参数还是理解错了工具返回的结果// AgentExecutor 方式 const executor new AgentExecutor({ agent, tools, verbose: true }); // 或者用 LangSmith 做更完整的追踪推荐生产环境用4. 限制工具数量控制复杂度前面说过5~8 个工具是舒适区。如果超过了考虑做工具分组用户问题 → 路由 Agent判断属于哪个分类 ├── 天气类 → 天气子 Agent2-3 个天气相关工具 ├── 数据类 → 数据子 Agent2-3 个数据库相关工具 └── 搜索类 → 搜索子 Agent2-3 个搜索相关工具这就是从单 Agent 多工具到多 Agent 协作的演进方向后面的文章会专门讲。5. 生产环境加上兜底和监控// 超时兜底 const timeout setTimeout(() { /* 强制返回兜底回答 */ }, 30000); // 成本监控记录每次请求用了多少 token、调了几次工具 // 异常告警如果某个 Agent 频繁触发 maxIterations说明有问题需要排查一个稍微复杂的例子研究助手最后来一个比查天气稍微复杂一点的例子让你感受 ReAct 在多步推理中的威力import { ChatOpenAI } fromlangchain/openai; import { createReactAgent } fromlangchain/langgraph/prebuilt; import { tool } fromlangchain/core/tools; import { z } fromzod; const searchTool tool( async ({ query }) { // 模拟搜索结果 if (query.includes(React 19)) { returnReact 19 于 2024 年 12 月正式发布主要新特性包括React Compiler、Server Components 正式版、Actions、use() Hook 等。; } if (query.includes(Vue 3.5)) { returnVue 3.5 于 2024 年 9 月发布主要改进响应式系统性能提升、SSR 改进、新增 useTemplateRef 等。; } return关于${query}的搜索结果较少建议换个关键词。; }, { name: search, description: 搜索技术资讯。当需要查找框架版本、技术动态等信息时使用。, schema: z.object({ query: z.string().describe(搜索关键词) }), } ); const compareTool tool( async ({ items, dimension }) { return从${dimension}角度对比 ${items.join( vs )}两者各有优势需要结合具体场景选择。; }, { name: compare, description: 对比分析两个或多个技术方案。当用户要求对比时使用。, schema: z.object({ items: z.array(z.string()).describe(要对比的项目列表), dimension: z.string().describe(对比维度如性能、生态、学习成本), }), } ); const agent createReactAgent({ llm: newChatOpenAI({ modelName: gpt-4o, temperature: 0 }), tools: [searchTool, compareTool], }); const result await agent.invoke({ messages: [{ role: user, content: 帮我对比一下 React 19 和 Vue 3.5 的主要更新哪个更值得关注 }], });Agent 的执行过程大概是这样Thought:用户想对比React19和Vue3.5我需要先查两者的信息 Action:search({query:React 19 新特性}) Observation:React19主要新特性包括ReactCompiler、ServerComponents... Thought:拿到React19信息了再查Vue3.5 Action:search({query:Vue 3.5 新特性}) Observation:Vue3.5主要改进响应式系统性能提升... Thought:两个都查到了现在用对比工具来分析 Action:compare({items: [React 19, Vue 3.5],dimension:新特性和值得关注程度}) Observation:两者各有优势... Thought:信息够了综合搜索结果和对比分析来回答 ✅Final Answer: [综合对比分析...]三步搜索 一步对比Agent 自己规划了整个研究流程。你只需要问一个问题它自己想办法搞定。总结ReAct 的核心非常简单「让 LLM 边想边做做完再想直到搞定为止。」它之所以成为 90% 生产级 Agent 的默认架构就是因为这个想→做→看的循环足够通用——不管你的任务是查天气、做研究、写代码还是排查 bug都可以用这个模式来处理。记住三个关键点「ReAct Reasoning Acting 的交替循环」不是一步到位而是走一步看一步「底层实现就是一个 while 循环」——LLM 判断 工具执行的反复交替没有魔法「最大的坑是死循环」——设好 maxIterations、给好兜底策略、让工具返回清晰的结果如何学习大模型 AI 由于新岗位的生产效率要优于被取代岗位的生产效率所以实际上整个社会的生产效率是提升的。但是具体到个人只能说是“最先掌握AI的人将会比较晚掌握AI的人有竞争优势”。这句话放在计算机、互联网、移动互联网的开局时期都是一样的道理。我在一线科技企业深耕十二载见证过太多因技术卡位而跃迁的案例。那些率先拥抱 AI 的同事早已在效率与薪资上形成代际优势我意识到有很多经验和知识值得分享给大家也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。我们整理出这套AI 大模型突围资料包✅ 从零到一的 AI 学习路径图✅ 大模型调优实战手册附医疗/金融等大厂真实案例✅ 百度/阿里专家闭门录播课✅ 大模型当下最新行业报告✅ 真实大厂面试真题✅ 2026 最新岗位需求图谱所有资料 ⚡️ 朋友们如果有需要《AI大模型入门进阶学习资源包》下方扫码获取~① 全套AI大模型应用开发视频教程包含提示工程、RAG、LangChain、Agent、模型微调与部署、DeepSeek等技术点② 大模型系统化学习路线作为学习AI大模型技术的新手方向至关重要。 正确的学习路线可以为你节省时间少走弯路方向不对努力白费。这里我给大家准备了一份最科学最系统的学习成长路线图和学习规划带你从零基础入门到精通③ 大模型学习书籍文档学习AI大模型离不开书籍文档我精选了一系列大模型技术的书籍和学习文档电子版它们由领域内的顶尖专家撰写内容全面、深入、详尽为你学习大模型提供坚实的理论基础。④ AI大模型最新行业报告2025最新行业报告针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估以了解哪些行业更适合引入大模型的技术和应用以及在哪些方面可以发挥大模型的优势。⑤ 大模型项目实战配套源码学以致用在项目实战中检验和巩固你所学到的知识同时为你找工作就业和职业发展打下坚实的基础。⑥ 大模型大厂面试真题面试不仅是技术的较量更需要充分的准备。在你已经掌握了大模型技术之后就需要开始准备面试我精心整理了一份大模型面试题库涵盖当前面试中可能遇到的各种技术问题让你在面试中游刃有余。以上资料如何领取为什么大家都在学大模型最近科技巨头英特尔宣布裁员2万人传统岗位不断缩减但AI相关技术岗疯狂扩招有3-5年经验大厂薪资就能给到50K*20薪不出1年“有AI项目经验”将成为投递简历的门槛。风口之下与其像“温水煮青蛙”一样坐等被行业淘汰不如先人一步掌握AI大模型原理应用技术项目实操经验“顺风”翻盘这些资料真的有用吗这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理现任上海殷泊信息科技CEO其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证服务航天科工、国家电网等1000企业以第一作者在IEEE Transactions发表论文50篇获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。资料内容涵盖了从入门到进阶的各类视频教程和实战项目无论你是小白还是有些技术基础的技术人员这份资料都绝对能帮助你提升薪资待遇转行大模型岗位。以上全套大模型资料如何领取