10-day3-ReAct
🧠 ReAct 理论
1. 什么是 ReAct?
ReAct(读作 “React”)= Reasoning(推理) + Acting(行动) ,
是智能体(Agent)设计框架之一;
旨在让大语言模型(LLM)不仅能“回答问题”,
还能主动规划、调用工具、获取信息、迭代思考,最终解决复杂任务。

🔍 图中各部分解释:
-
LM(Language Model)
- 代表大语言模型,如 GPT、PaLM 等。
- 负责生成推理过程和决策动作。
-
Env(Environment)
- 代表 Tools,例如搜索引擎、数据库、API 接口等。
- 可以执行 LM 发出的“动作”,并返回结果。
-
Actions(动作)
- 由 LM 决定并发送给 Env 的指令,比如“搜索‘北京天气’”、“调用计算器”等。
- 是 LM 与外部世界交互的方式。
-
Observations(观测)
- Tools 对动作的响应,例如搜索、计算、错误处理等。
- 这些信息被反馈给 LM,供其继续推理。
-
Reasoning Traces(推理轨迹)
- LM 在内部进行的思考过程,例如:“我需要先查一下今天是星期几……”
- 这些推理内容会与观察结果一起作为上下文输入到下一轮推理中。
✅ ReAct 的核心思想:
“边想边做” ——
大模型不是一次性输出答案,而是通过交替进行推理和行动,逐步逼近正确答案。
🌟 举个例子:
假设问题是:“今天北京的天气怎么样?”
- Step 1: LM 推理:“我需要查询今天的北京天气。” → 发出动作:
search("北京 天气") - Step 2: Env 返回观测:
“今天北京晴,气温 20°C” - Step 3: LM 推理:“根据观测,天气很好。”
ReAct 框架通过让语言模型(LM)与环境(Env)交互,在“推理”和“行动”之间不断循环,从而实现更智能、更准确的任务完成能力。
它特别适用于需要外部工具支持的复杂任务,如问答、规划、代码生成等。
功能行为层面
| 对比维度 | 分析选择工具(Function Calling) | ReAct(Reasoning + Acting) |
|---|---|---|
| 本质定位 | 工具调用决策机制 (LLM 的一项能力) |
智能体工作范式 (Agent 的一种执行策略) |
| 所属层级 | LLM 层(模型原生支持) | Agent 层(由提示词 + 执行器实现) |
| 核心行为 | 模型自动判断: • 是否需要调用工具 • 调哪个工具 • 参数如何填充 |
模型按结构化流程循环: 1. Thought:推理当前状态2. Action:选择并调用工具3. Observation:接收外部反馈4. 重复或输出最终答案 |
| 是否显式推理 | ❌ 隐式(内部完成,不输出思考过程) | ✅ 显式(强制输出 Thought 步骤) |
| 是否支持多轮交互 | ❌ 一次工具调用 + 回答 | ✅ 支持多跳推理(多次工具调用+反思) |
| 输出格式 | 结构化 JSON(如 tool_calls) |
自然语言 + 标记格式(如 Thought: ...\nAction: ...) |
| 可解释性 | 低(黑盒决策) | 高(每步思考可见,便于调试) |
| 典型实现 | DashScope / OpenAI 原生 Function Calling | LangChain + ReAct 提示词模板(如 hwchase17/react) |
| 依赖组件 | 仅需 LLM + 工具描述 | 需 LLM + 工具 + 提示词模板 + 执行循环控制器 |
| 人类类比 | “我该用温度计还是地图?” | “我想知道北京冷不冷 → 需查天气 → 调 API → 得到 2°C → 结论:很冷,穿羽绒服” |
系统架构层面
| 层级 | 角色 | 与 ReAct 的关系 |
|---|---|---|
| Agent(完整智能体) | = LLM + 工具集(Tools)+ 执行控制器(Executor)+ 网络Agent。 | ✅ ReAct 是 Agent 的一种核心工作方式→ Agent 可采用 ReAct 作为其推理与行动的执行策略 |
| ReAct(Reasoning + Acting) | “标准操作规程”(SOP):一套人为设计的结构化推理协议。 | 🧠 定义了 LLM 在 Agent 中应如何分步思考与行动:“先输出 Thought(分析),再决定 Action(调用工具),接收 Observation(结果),循环直至得出 Final Answer。” |
| LLM(大语言模型) | “大脑”:具备强大的语言理解与生成能力,没有结构化推理机制。 | ❌ 不原生支持 ReAct✅ 可通过提示词(prompt) |
💡 比喻:
- Agent = 就像一家“公司”——有前台、后台、流程、员工,能独立接单、拆解任务、调用资源、交付结果。
- ReAct = 一种特定的推理与行动框架 / 工作方法论,但不是 Agent 的全部。Agent 还可以使用其他策略(如 Plan-and-Execute、Chain-of-Thought、Multi-Agent 协作等)。
- Function Calling = 工具、厂房(执行动作的能力)
- LLM = 发言人(能写能说,但需要明确的工作流程指导)
2. ReAct 的工作流程(五步闭环)
ReAct Agent 的执行过程是一个循环推理-行动链:
1. Thought(思考)
→ “我需要知道上海今天的天气才能判断是否适合锻炼。”
2. Action(行动)
→ 决定调用哪个工具(如 get_weather)
3. Action Input(输入)
→ 传入参数(如 "上海")
4. Observation(观察)
→ 获取工具返回的真实结果(如 "上海: ☁️ 11°C, 风速21km/h")
5. Final Answer(最终回答)
→ 综合所有信息,生成合理、安全、有上下文的回答
🔁 如果一次不够,Agent 会继续循环(Thought → Action → Observation),直到得出答案。
3. ReAct 在 LangChain 中的实现
在 Python 的 langchain 库中,ReAct Agent 通过以下组件构建:
| 组件 | 作用 |
|---|---|
@tool 装饰器 |
将普通函数注册为 Agent 可调用的“工具” |
ChatOpenAI |
连接大模型(如 Qwen via DashScope) |
hub.pull("hwchase17/react") |
加载标准 ReAct 提示词模板(含 Thought/Action/Observation 格式指令) |
create_react_agent() |
组装 LLM + 工具 + 提示词 |
AgentExecutor |
负责循环执行整个 ReAct 流程 |
✅
react_agent.py完整体现了上述架构!
4. ReAct vs 普通问答:本质区别
传统 LLM 的局限:
- 只能基于训练时的知识回答问题(无法获取实时数据)
- 遇到未知问题容易“胡编乱造”(幻觉)
- 缺乏自主决策和工具使用能力
而 ReAct Agent 能:
✅ 查询实时天气、股票、新闻
✅ 调用计算器、数据库、API
✅ 分步解决多跳推理问题
(如:“北京明天适合跑步吗?” → 先查天气 → 再判断)
| 能力 | 普通 LLM | ReAct Agent |
|---|---|---|
| 实时信息获取 | ❌ 不能 | ✅ 能(通过工具) |
| 自主规划 | ❌ 被动响应 | ✅ 主动决策 |
| 错误处理 | ❌ 易幻觉 | ✅ 可验证外部事实 |
| 多步推理 | ⚠️ 有限 | ✅ 显式分步 |
| 可扩展性 | ❌ 固定能力 | ✅ 注册新工具即可增强 |
🌟 ReAct 让 LLM 从“知识库”升级为“智能助手”。
5. 趋势
- 理解智能体(Agent)范式:AI 不再只是“聊天”,而是能“做事”
- 连接现实世界:通过工具调用打破模型封闭性
- 国产化落地:使用 Qwen + DashScope,无需依赖 OpenAI
- 可拓展性强:轻松接入数据库、企业 API、IoT 设备等
🔮 未来 AI 应用 = LLM + ReAct Agent + 工具生态
✅ 总结:
ReAct 是让大语言模型“知之为知之,不知则查之”的关键机制
——在 Day 2 赋予它行动的双手(Tools)之后,Day 3 再赋予它自主推理的大脑(Reasoning),
从而真正成为能思考、会做事的智能体。
浙公网安备 33010602011771号