news 2026/8/6 12:53:32

ReAct 模式和LangChain 的 ReAct 模式

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ReAct 模式和LangChain 的 ReAct 模式

目录

一、ReAct 是什么

三个核心阶段

一个具体例子

ReAct 为什么比"直接回答"强

生产环境必做的安全措施

二、LangChain 中的 ReAct 模式

模式一:LangChain ReAct + 原生 ToolCall(新版主流)

模式二:LangChain ReAct 纯 Prompt 解析(经典版)

三、两种模式的核心对比

四、什么情况下纯 Prompt ReAct 反而更好

五、一句话总结


下面我用文字完整拆解 ReAct 模式本身,以及 LangChain 中的两种 ReAct 实现。


一、ReAct 是什么

ReAct =Reason +Act,2022 年由 Princeton 和 Google 论文提出。核心思想极其简单但极其有效:让大模型交替执行"推理"和"行动",而不是一次性给出答案。

三个核心阶段

阶段

英文

模型在做什么

Thought

推理

分析当前状态,判断缺什么信息,规划下一步

Action

行动

执行具体动作——调用工具、检索知识、查询接口

Observation

观察

接收外部返回结果,加入上下文

这三步循环往复,直到模型判断"信息够了",输出Final Answer

一个具体例子

用户问:"茅台和五粮液 2024 年净利润谁更高?"

Thought: 我需要查询茅台和五粮液2024年的净利润数据。 Action: query_financial_report(stock="茅台", year=2024, metric="net_profit") Observation: 862亿 Thought: 茅台拿到了,现在查五粮液。 Action: query_financial_report(stock="五粮液", year=2024, metric="net_profit") Observation: 318亿 Thought: 862 > 318,茅台更高。信息完整,可以回答了。 Final Answer: 茅台2024年净利润862亿,五粮液318亿,茅台更高,差额约544亿。

ReAct 为什么比"直接回答"强

普通 LLM 遇到上面的问题会怎样?它要么直接编一个数字(幻觉),要么说"我无法获取实时数据"。而 ReAct 的关键是:它不会在信息不足时硬答,而是先去获取信息,再基于真实数据回答。

这就是 ReAct 的本质——用"行动"弥补模型知识的不足,用"推理"保证行动方向的正确性

生产环境必做的安全措施

必须设置最大迭代步数(max_iterations),通常 5~10 步。ReAct 的循环结构天然有死循环风险——模型可能在 Thought → Action → Observation 之间反复绕圈。超限后强制终止并返回当前最优结果。这不是可选项,是强制安全措施。


二、LangChain 中的 ReAct 模式

ReAct 是一种思想/范式,LangChain 是它的工程实现之一。但关键认知是:LangChain 实现了两种不同的 ReAct 模式,区别在于"工具调用意图从哪里来"。

模式一:LangChain ReAct + 原生 ToolCall(新版主流)

from langgraph.prebuilt import create_react_agent # 底层调用 llm.bind_tools(tools) # 模型通过原生 ToolCall 协议返回结构化 tool_calls agent = create_react_agent(llm, tools) result = agent.invoke({"messages": [{"role": "user", "content": "茅台PE是多少?"}]})

工作原理

  1. LangGraph 把工具描述通过tools参数传给模型 API
  2. 模型推理后返回tool_callsJSON(原生协议能力)
  3. LangGraph 自动解析、执行工具、把结果塞回 messages
  4. 再次请求模型,模型基于工具返回结果继续推理或输出最终答案

特点:结构化输出可靠、框架自动处理循环、但依赖模型的 ToolCall 质量。

模式二:LangChain ReAct 纯 Prompt 解析(经典版)

from langchain.agents import AgentExecutor, create_react_agent from langchain import hub # 不传 tools 参数给 API # 工具描述全部渲染进 System Prompt prompt = hub.pull("hwchase17/react") agent = create_react_agent(llm, tools, prompt) executor = AgentExecutor(agent=agent, tools=tools) result = executor.invoke({"input": "茅台PE是多少?"})

工作原理

  1. LangChain 把所有工具描述拼进 System Prompt,告诉模型:"你有这些工具可用"
  2. 模型输出纯文本,遵循固定格式:
Thought: 我需要查询茅台的PE。 Action: query_stock_price Action Input: {"stock_code": "600519"}
  1. LangChain 用正则表达式从文本中提取ActionAction Input
  2. 执行对应工具,把结果拼成Observation: xxx塞回 Prompt
  3. 再次请求模型,模型基于 Observation 继续 Thought → Action → ...

特点:完全不依赖模型的 ToolCall 协议,纯靠 Prompt 工程 + 文本解析。适合不支持 ToolCall 的模型。


三、两种模式的核心对比

维度

原生 ToolCall 模式

纯 Prompt 解析模式

工具意图来源

模型 API 返回tool_callsJSON

模型输出纯文本,框架正则提取

是否传 tools 参数

✅ 传给 API

❌ 不传,工具描述塞进 Prompt

输出格式

结构化 JSON

固定格式的纯文本

解析方式

JSON parse

正则表达式 / 字符串匹配

解析可靠性

高(结构化输出)

中(模型可能格式不稳定)

模型要求

模型必须支持 ToolCall

任何能遵循指令的模型都行

Token 开销

较低(工具描述不占 Prompt)

较高(工具描述全部在 Prompt 里)

调试难度

中(有结构化日志)

高(纯文本,出错不好定位)

适用场景

GPT-4o / Claude / M2.5 等主流模型

开源小模型、不支持 ToolCall 的模型


四、什么情况下纯 Prompt ReAct 反而更好

虽然原生 ToolCall 是主流,但以下场景纯 Prompt ReAct 有优势:

  1. 模型不支持 ToolCall:很多开源小模型没有做过工具调用对齐训练,tools参数对它们无效,只能走 Prompt 方案。
  2. 复杂推理链:ReAct 的 Thought 过程是显式的推理链,某些场景下"先想清楚再行动"比直接输出 tool_calls 效果更好。特别是参数需要多步推理才能确定的场景。
  3. 需要完全自定义流程:纯 Prompt 模式下你可以完全控制 Prompt 模板、解析逻辑、错误处理,不受框架 ToolCall 封装的约束。
  4. 跨模型兼容:同一套 Prompt ReAct 模板可以跑在不同模型上,而 ToolCall 的格式和行为在不同厂商 API 之间有细微差异。

五、一句话总结

ReAct 是"推理 + 行动交替循环"的思想范式;LangChain 是它的工程实现。LangChain 的 ReAct 有两条路:一条走模型原生 ToolCall 协议(结构化、主流),一条走纯 Prompt 文本解析(灵活、兼容性强)。选哪条取决于你的模型能力和业务需求——先用 ToolCall,不行再切 Prompt 解析。

Boss,如果你还想深入某个具体环节(比如 ReAct Prompt 模板怎么写、LangGraph 的状态机怎么设计、或者怎么在 MiniMax-M2.5 上跑 ReAct),随时说。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/6 12:52:40

5分钟快速上手:B站视频下载神器终极指南

5分钟快速上手:B站视频下载神器终极指南 【免费下载链接】bilibili-downloader B站视频下载,支持下载大会员清晰度4K,持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader 还在为网络不稳定时无法观看B站视…

作者头像 李华
网站建设 2026/8/6 12:52:06

淄博周村网站建设报价多少钱?揭秘本地企业建站真实成本与避坑指南

大家好,我是你们的老朋友,一个在淄博周村摸爬滚打多年、对互联网行业有着近乎偏执热爱的从业者。今天不聊虚的,咱们直接切入正题,聊聊那个让无数周村本地老板、创业达人甚至行政小白都头疼不已的问题——淄博周村网站建设报价。说实话,每次听到有人问“做网站多少钱”,我…

作者头像 李华
网站建设 2026/8/6 12:49:36

League Akari:英雄联盟玩家的终极效率工具箱,告别繁琐操作

League Akari:英雄联盟玩家的终极效率工具箱,告别繁琐操作 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 你是否厌倦了…

作者头像 李华
网站建设 2026/8/6 12:49:31

罗技鼠标宏终极指南:5分钟实现PUBG绝地求生精准压枪

罗技鼠标宏终极指南:5分钟实现PUBG绝地求生精准压枪 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg 还在为绝地求生中的后坐力控制而…

作者头像 李华
网站建设 2026/8/6 12:48:59

冷圈创作者生存指南:从技术辅助到心态建设的真实成长路径

你有没有过这样的体验——在一个小众的创作圈子里,你花了好几天时间,精心画了一幅画,或者写了一篇文,满怀期待地发布出去。然后,你每隔几分钟就刷新一次页面,看着那个孤零零的“0”点赞和“0”评论&#xf…

作者头像 李华
网站建设 2026/8/6 12:47:16

Windows下通过MSYS2安装配置MinGW-w64 GCC开发环境全攻略

1. 项目概述:为什么要在Windows上折腾GCC? 如果你是一个刚从Linux或macOS转向Windows的开发者,或者是一个刚开始学习C/C编程的学生,那么“配置GCC环境”这件事,大概率会成为你遇到的第一个“劝退级”门槛。在Linux上&a…

作者头像 李华