ReAct模式指南已更新
什么是ReAct?ReAct(Reasoning + Acting)结合推理和行动,让AI边思考边行动。
核心流程:Thought -> Action -> Observation -> Thought -> ...
与CoT区别:CoT仅推理,ReAct推理+行动结合,适合需要工具调用的任务。
代码:from langchain.agents import create_react_agent / prompt = hub.pull("hwchase17/react") / agent = create_react_agent(llm, tools, prompt) / executor = AgentExecutor(agent=agent, tools=tools)
工作流程示例:用户问北京天气 -> 思考需要先获取位置 -> 行动get_location("北京") -> 观察北京市 -> 思考查询天气 -> 行动get_weather("北京") -> 观察晴25度 -> 最终回答。
最佳实践:设计清晰的工具描述、限制迭代次数防止无限循环、观察结果要信息丰富、使用JSON格式传递结构化数据、添入错误处理机制。
ReAct 模式指南
ReAct(Reasoning + Acting)是一种结合推理和行动的大语言模型工作模式。模型在解决复杂问题时,会交替进行思考(Thought)、行动(Action)和观察(Observation),从而实现更可靠的推理和决策。
传统 LLM 推理通常是封闭的:模型仅基于内部知识进行推理,无法访问外部信息或工具。ReAct 打破了这一限制,让模型能够与外部世界交互,获取实时信息,执行具体行动。
1. ReAct vs 传统推理
ReAct 与传统的 Chain-of-Thought(CoT)推理有本质区别。
CoT(纯推理):
- 只在模型内部进行思考
- 无法获取外部信息
- 可能产生事实性错误
- 无法验证推理的正确性
ReAct(推理+行动):
- 思考 → 行动 → 观察交替进行
- 可以调用工具获取信息
- 行动结果指导下一步推理
- 能够发现和纠正错误
2. ReAct 工作流程
ReAct 三步循环:
1. Thought(思考):
- 分析当前情况
- 决定下一步要做什么
- 预测行动结果
2. Action(行动):
- 调用外部工具或API
- 执行具体操作
- 搜索、计算、查询等
3. Observation(观察):
- 接收行动结果
- 分析结果是否正确
- 决定是否继续或调整计划
3. ReAct 示例
以下是一个使用 ReAct 模式查询天气的示例:
ReAct 对话示例:
用户:北京今天天气怎么样?
Thought:我需要获取北京的天气信息。我应该先调用天气搜索工具。
Action:search_weather(北京)
Observation:今天北京天气晴朗,气温15-25度
Thought:根据观察结果,我有了天气信息。现在可以直接回答用户的问题。
Answer:今天北京天气晴朗,气温15-25度,非常适合外出。
4. 代码实现
使用 LangChain 实现 ReAct 模式:
from langchain import hub
from langchain.agents import AgentExecutor, create_openai_functions_agent
from langchain_openai import ChatOpenAI
from langchain_community.tools import WikipediaQueryRun, YearQueryRun
from langchain.utilities.wikipedia import WikipediaAPIWrapper
llm = ChatOpenAI(model="gpt-4")
# 定义工具
tools = [
WikipediaQueryRun(
api_wrapper=WikipediaAPIWrapper()
),
YearQueryRun()
]
# 获取 ReAct 提示词
prompt = hub.pull("hwchase17/openai-functions-react")
# 创建 Agent
agent = create_openai_functions_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
# 执行
result = agent_executor.invoke({"input": "北京今天天气怎么样"})5. ReAct 的优势
ReAct 的核心优势:
1. 可验证性:每步行动都有结果,可以验证推理正确性
2. 自纠错能力:发现行动结果不符合预期时,可以调整策略
3. 信息获取:可以调用搜索、API等工具获取实时信息
4. 透明度:思考过程可见,便于理解和调试
5. 通用性:适用于问答、规划、代码执行等多种场景
6. ReAct 的挑战
ReAct 面临的挑战:
1. 循环风险:模型可能陷入反复调用同一工具的模式
2. 工具选择错误:可能选择不适合当前任务的工具
3. 推理深度有限:复杂问题可能推理不充分
4. 成本问题:多轮交互增加 API 调用次数
5. 工具描述依赖:模型理解工具能力依赖描述质量
7. 最佳实践
优化 ReAct 效果的技巧:
1. 清晰的工具描述:明确说明工具用途、参数和返回格式
2. 限制最大步数:防止无限循环,设置最大交互次数
3. 错误处理机制:工具调用失败时有备用方案
4. 优先级排序:让模型知道优先尝试哪些工具
5. 中间结果记忆:保留历史观察结果供后续参考
6. 简洁的思考格式:避免思考过程过于冗长
总结
ReAct 是一种结合推理和行动的工作模式,通过 Thought→Action→Observation 的循环,让 LLM 能够与外部世界交互,解决复杂问题。与纯推理相比,ReAct 具有可验证性、自纠错能力和信息获取等优势,但也要注意循环风险和成本控制。
声明:本文由 AI 生成,可能存在错误或不准确之处。
最后更新:2026-01-29