理解AI Agent的大脑:ReAct模式从入门到实战

理解AI Agent的大脑:ReAct模式从入门到实战
Pei系列文章
本篇是 AI Agent 深度解析系列的第 3 篇。以下是系列完整目录,建议收藏作为学习索引。
🏗️ 基础理论篇
- 从零理解 RAG:检索增强生成完整指南
- Embedding 向量化的魔法:从文本到向量的数学之旅与 Java 实战
- 理解 AI Agent 的大脑:ReAct 模式从入门到实战
- Spring AI 核心架构全解析:从 ChatModel 到 Advisor Chain 的设计哲学
🧩 核心组件篇
- AI Agent 的记忆系统:从 ChatMemory 到持久化记忆的 Java 实战
- AI Agent 的记忆力是怎么实现的——LangChain4j Memory 机制深度解析
- AI Agent 的工具箱:深入理解 Tool Use 与 Spring AI Function Calling 实战
- 让 AI 学会”说人话”——Spring AI 结构化输出实战
- AI Agent 的灵魂对话:Prompt Engineering 系统提示词设计的艺术与工程
🏛️ 架构设计篇
- AI Agent 的规划大脑:从任务分解到自适应执行策略
- AI Agent 的工作流编排:从顺序链到自适应 DAG 的 Java 实战
- AI Agent 团队协作:多 Agent 系统架构设计与 Java 实战
- Agent 间如何对话:A2A 协议深度解析与 Java 实战
🔍 知识检索篇
- AI Agent 的知识检索引擎:从向量搜索到智能检索策略的 Java 实战
- 当 RAG 遇上知识图谱:GraphRAG 原理与 Java 实战
- 当 RAG 遇到 Agent:Agentic RAG 的架构设计与 Java 实战
- MCP 模型上下文协议:AI 的万能接口与 MCP Server 实战
🚀 进阶能力篇
- AI Agent 的推理引擎:从 Chain-of-Thought 到推理模型的深度解析与 Java 实战
- AI Agent 的多模态感知:从图片理解到语音交互的 Java 实战
- AI Agent 的自我反思与经验学习:从错误中进化的 Java 实战
- AI Agent 的上下文工程与 Token 预算管理:从窗口压缩到成本优化的 Java 实战
- AI Agent 的人机协作:从 Human-in-the-Loop 到渐进式自治的 Java 实战
🛡️ 生产保障篇
- AI Agent 的安全防线:Prompt 注入防御与生产级安全防护实战
- AI Agent 的可观测性:从链路追踪到成本监控的 Java 实战
- AI Agent 的流式响应与实时交互:从 SSE 到 WebSocket 的 Java 实战
- AI Agent 的容错与韧性:从错误处理到生产级可靠性保障的 Java 实战
- AI Agent 评估与优化:从基准测试到生产环境的质量守护实战
- AI Agent 的成本优化:从模型路由到缓存策略的 Java 实战
🧭 全景总结
从一次点餐说起
周末你想去吃个饭,打开微信问朋友:”帮我推荐一家餐厅呗。”
你的朋友大概不会直接甩一个店名给你。他会先想:你喜欢什么口味?川菜还是日料?预算多少?离你家远不远?现在几点了,附近还在营业的有什么?
思考一圈之后,他打开大众点评搜了一下,发现附近有几家评分不错的川菜馆,但有一家离你家太远了。他再想想,你上次说最近在减肥,于是排除了那家以大盘菜出名的。
最后他说:”去那家’蜀香小馆’吧,走路十分钟,评分4.8,分量不大适合你。”
这个过程其实就是一个ReAct的缩影:想一想→做一做→看看结果→再想想→再做做→直到得到满意的答案。
今天我们就来聊聊,AI Agent 是怎么像你朋友一样”边想边做”的。
什么是ReAct?
ReAct 这个名字来自论文《ReAct: Synergizing Reasoning and Acting in Language Models》,它是两个单词的组合:
- Reasoning(推理)—— LLM 天生就会的事,分析、思考、推理
- Acting(行动)—— 调用工具、查询数据、执行操作
传统的 LLM 只能”想”——你问它一个问题,它根据训练数据生成一段回答。但它不能”做”,它不知道今天北京的天气是几度,因为它没有访问实时数据的能力。
ReAct 的核心思想很简单:让 LLM 在推理的同时,可以调用外部工具,然后根据工具返回的结果继续推理,如此循环,直到得出最终答案。
换句话说,ReAct 赋予了 LLM “手和脚”——它不仅能思考,还能行动。
下图展示了 ReAct 的完整循环过程,以及与传统 Chain 模式的对比:
如图左侧所示,ReAct 的核心是一个三步循环:Thought(想一想,分析下一步该做什么)→ Action(做一做,调用外部工具)→ Observation(看看结果,获取工具返回)。循环持续到 LLM 判断信息足够,才生成最终回答。右侧对比了传统 Chain 模式——Chain 一步到位,容易编造数据;ReAct 通过工具调用获取真实数据,代价是需要多轮循环。
接下来我们详细对比一下 Chain 和 ReAct 的区别。
和传统 Chain 的区别
如果你用过 LangChain,你一定知道 Chain 的概念。Chain 是线性的:输入 → 处理 → 输出,一条路走到底。
1 | 传统 Chain: |
但现实世界的问题往往没那么简单。比如:
“帮我查一下北京今天的最高气温,然后算一下如果每天省下3度电,一周能省多少?”
这个问题需要两步:先查天气,再计算。普通 Chain 做不到,因为它只会一口气生成回答,很可能”瞎编”一个温度数字。
ReAct 的做法不同,它是一个循环:
1 | ReAct 流程: |
区别一目了然:Chain 是一条直线,ReAct 是一个圆圈,可以转很多圈。
ReAct 的工作流程
ReAct 的执行循环可以用四个词概括:
1. Think(思考)
LLM 分析当前的情况,决定下一步该做什么。它可能会想:”用户问我北京的天气,我需要调用天气查询工具。”
2. Act(行动)
LLM 调用一个外部工具,比如搜索 API、数据库查询、计算器等。
3. Observe(观察)
LLM 收到工具返回的结果,比如”北京今天最高气温32℃”。
4. 判断是否需要继续
如果已经有了足够的信息,就直接生成最终答案。如果还不够,回到第1步继续。
用一个更直观的流程图:
1 | ┌─────────────────────────────────┐ |
代码实战:用 LangChain 实现 ReAct Agent
光说不练假把式,我们来写一个真实的例子。场景很简单:一个能查天气、做计算的 AI 助手。
安装依赖
1 | pip install langchain langchain-community langchain-openai duckduckgo-search |
完整代码
1 | import os |
运行效果
当你运行上面的代码,你会看到 Agent 的思考过程:
1 | > Entering new AgentExecutor chain... |
看到了吗?Agent 先思考需要查天气,然后行动调用了天气工具,观察结果后继续思考需要做计算,再行动调用计算器,最终得出完整答案。
这就是 ReAct 的魅力——它不是一次性把答案吐出来,而是一步一步地解决问题。
什么时候该用 ReAct?
不是所有场景都需要 ReAct,用对了才高效:
适合用 ReAct 的场景:
- 需要多步推理的问题(比如”先查A,再根据A算B”)
- 需要调用外部工具的场景(查数据库、调API、搜索网页)
- 问题比较复杂,一次推理搞不定的任务
- 需要根据中间结果动态调整策略的场景
不需要 ReAct 的场景:
- 简单的问答、翻译、总结,直接调 LLM 就行
- 答案就在输入里,不需要外部数据
- 对延迟要求极高的实时场景(ReAct 多轮交互会增加延迟)
一个简单的判断标准:如果你的问题能一步到位,就用普通 Chain;如果需要”想一想、做一做、再想想”,那就该上 ReAct。
写在最后
ReAct 不是什么高深莫测的技术,它的核心思想就是模仿人类解决问题的方式:边想边做,根据反馈调整策略。
这其实和你平时的工作方式很像——你写代码的时候,不是一次写完就跑通了,而是写着写着发现不对,改一改,跑一下看看,再改改,直到程序正确运行。
ReAct 之所以重要,是因为它是 AI Agent 的基础思维模式。你后面会看到的各种 Agent 框架、各种复杂的 Agent 架构,底层几乎都离不开 ReAct 这个核心思想。
理解了 ReAct,你就理解了 AI Agent 为什么能”做事”,而不只是”说话”。
下一次你让 AI 助手帮你完成一个复杂任务的时候,不妨想想:它此刻可能正在 Think → Act → Observe 的循环中,一步一步帮你找到答案。
参考论文:Yao, S. et al. “ReAct: Synergizing Reasoning and Acting in Language Models” (ICLR 2023)
本文代码:基于 LangChain 0.2+ 版本,完整示例可在 GitHub 上找到。











