ReAct 模式指南

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