10-day3-ReAct

🧠 ReAct 理论

1. 什么是 ReAct?

ReAct(读作 “React”)= Reasoning(推理) + Acting(行动)
智能体(Agent)设计框架之一

旨在让大语言模型(LLM)不仅能“回答问题”,
还能主动规划、调用工具、获取信息、迭代思考,最终解决复杂任务。

图片

🔍 图中各部分解释:

  1. LM(Language Model)

    • 代表大语言模型,如 GPT、PaLM 等。
    • 负责生成推理过程和决策动作。
  2. Env(Environment)

    • 代表 Tools,例如搜索引擎、数据库、API 接口等。
    • 可以执行 LM 发出的“动作”,并返回结果。
  3. Actions(动作)

    • 由 LM 决定并发送给 Env 的指令,比如“搜索‘北京天气’”、“调用计算器”等。
    • 是 LM 与外部世界交互的方式。
  4. Observations(观测)

    • Tools 对动作的响应,例如搜索、计算、错误处理等。
    • 这些信息被反馈给 LM,供其继续推理。
  5. 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),
从而真正成为能思考、会做事的智能体。

posted @ 2026-01-26 22:14  船山薪火  阅读(24)  评论(0)    收藏  举报
![image](https://img2024.cnblogs.com/blog/3174785/202601/3174785-20260125205854513-941832118.jpg)