1, 什么是 ReAct?
ReAct 是 Reason(推理) + Act(行动) 的缩写,是一种让大模型 “边想边做” 的思考模式,核心规则:
Agent 先输出 “思考过程”(我需要解决什么问题?需要调用什么工具?)→ 执行 “行动”(调用工具)→ 观察 “工具结果”→ 重复 “思考 - 行动” 直到得到答案。
对比普通大模型:
- 普通大模型:直接生成答案(可能幻觉、计算错误);
- ReAct 模式的 Agent:先想→再做→再验证→最后回答(更严谨、更准确)。
2, ReAct 在 LangChain 中的核心特征
LangChain 内置了 ReAct 风格的 Prompt 模板,核心是引导 Agent 输出 “思考 - 行动 - 观察” 的循环,关键特征:
- 思考(Thought):Agent 明确 “当前需要做什么、为什么这么做”;
- 行动(Action):Agent 指定 “调用哪个工具、传入什么参数”;
- 观察(Observation):Agent 记录 “工具返回的结果”;
- 循环:重复上述步骤,直到 “思考” 认为 “无需调用工具,可直接回答用户”。
3, 举个栗子:基于 ReAct 框架构建 Agent
LangChain 中 ReAct 的核心是 Prompt 模板的设计—— 需要明确引导 Agent 按 “思考 - 行动 - 观察” 的逻辑决策。
from langchain_core.prompts import PromptTemplate
# 自定义 ReAct 风格的 Prompt(核心:明确思考-行动-观察的格式)
react_prompt = PromptTemplate.from_template("""
你是一个遵循 ReAct 框架的智能助理,必须按以下步骤解决问题:
1. 思考(Thought):分析用户问题,判断是否需要调用工具;如果需要,明确调用哪个工具、传入什么参数;如果不需要,直接回答。
2. 行动(Action):如果需要调用工具,格式为 `Action: 工具名[参数]`;如果不需要,格式为 `Action: Final Answer`。
3. 观察(Observation):记录工具调用的结果(由系统自动填充)。
现有工具列表:
- calculator:计算数学表达式,参数是 expression(字符串),比如 calculator["10+20"]
- search_web:检索实时信息,参数是 query(字符串),比如 search_web["2024 Python最新版本"]
用户问题:{input}
请按 ReAct 框架逐步解决:
""")
# 结合 ChatPromptTemplate 适配 Agent
chat_react_prompt = ChatPromptTemplate.from_messages([
("system", react_prompt.template),
("placeholder", "{agent_scratchpad}")
])
# 重新构建 Agent
agent = create_openai_tools_agent(llm=llm, tools=tools, prompt=chat_react_prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
2026.01.08 上午
信息家