什么是ReAct范式?让AI像人一样思考与行动的核心逻辑
在大模型应用开发中,你是否遇到过这样的问题:AI明明掌握相关知识,却给出前后矛盾的回答?复杂任务中,模型无法拆解步骤、灵活调用工具?这背后的核心痛点是:传统大模型往往只专注于"思考"(推理)或"行动"(工具调用),缺乏两者的协同。而ReAct范式的出现,正是为了解决这一问题——它让AI像人类一样,在思考中行动,在行动中调整思考,成为构建智能Agent的关键底层逻辑。
一、ReAct范式的核心定义
ReAct(Reasoning + Acting)范式源于2022年的论文《Synergizing Reasoning and Acting in Language Models》,其核心思想是将"推理"与"行动"相结合,让语言模型在解决复杂任务时,通过"思考-行动-观察"的循环,逐步逼近最终答案。
简单来说,ReAct范式模拟了人类解决问题的自然过程:当我们面对一个复杂任务时,不会直接给出答案,而是先思考"我需要做什么",再采取行动(比如查询资料、计算数据),观察行动结果后,再调整思考方向,重复这一过程直到任务完成。
与传统模式相比,ReAct的核心优势在于:
- 解决大模型"胡言乱语"问题:通过行动获取真实反馈(如工具返回结果),约束推理的合理性;
- 提升结果可解释性:每一步思考和行动都清晰可见,便于追溯决策过程;
- 增强任务灵活性:支持动态调整步骤,适配复杂多变的任务场景。
二、ReAct范式的核心流程:思考-行动-观察循环
ReAct范式的运作遵循固定的循环逻辑,每一轮循环都包含三个关键环节,且可根据任务需求重复多次:
1. 思考(Thought):明确下一步目标
模型基于用户问题和已有的观察结果,分析当前任务进展,判断"接下来需要做什么"。例如:
- 用户问题:"除了苹果遥控器,还有什么设备能控制它最早设计交互的程序?"
- 初始思考:"我需要先确认苹果遥控器最早设计用于控制哪个程序,再查找该程序的其他控制设备。"
这一步的核心是让模型理清任务逻辑,避免盲目行动,相当于人类解决问题时的"规划阶段"。
2. 行动(Action):执行具体操作
根据思考结果,模型调用对应的工具或资源,执行具体行动。行动的类型包括:
- 工具调用:如搜索引擎查询、数学计算、API调用等;
- 信息检索:如查询知识库、文档数据库等;
- 其他操作:如数据转换、文本处理等。
例如,基于上述思考,模型会执行第一个行动:"搜索[Apple Remote 最早设计交互的程序]"。
3. 观察(Observation):获取行动反馈
行动执行后,模型会接收工具返回的结果或环境反馈,形成观察结论。观察结果将作为下一轮循环的输入,约束后续的思考和行动。
例如,上述搜索行动的观察结果可能是:"Apple Remote于2005年推出,最早用于控制Front Row媒体中心程序"。
循环终止条件
当模型通过思考判断"已获取足够信息,能够给出最终答案"时,循环终止,直接输出最终结果。整个过程就像侦探破案:先分析线索(思考),再调查取证(行动),根据证据调整方向(观察),直到查明真相。
三、ReAct范式的核心:提示词模板设计
ReAct范式的落地离不开规范的提示词模板,它为模型的"思考-行动-观察"循环提供了明确的格式约束,确保推理过程的连贯性和工具调用的准确性。以下是LangChain中ReAct范式的经典提示词模板及设计逻辑:
1. 基础模板框架(LangChain标准模板)
按照给定的格式回答以下问题。你可以使用下面这些工具: {tools}
回答时需要遵循以下格式:
Question: 我需要回答的问题
Thought: 回答这个问题我需要做些什么
Action: "{tool_names}" 中的一个工具名
Action Input: 选择这个工具所需要的输入
Observation: 选择这个工具返回的结果
(这个思考/行动/行动输入/观察可以重复N次)
Thought: 我现在知道最终答案
Final Answer: 原始输入问题的最终答案
现在开始回答,记得在给出最终答案前,需要按照指定格式进行一步一步的推理。
Question: {input}
{agent_scratchpad}
2. 模板关键变量说明
-
{tools}:当前可用的工具列表及描述,让模型了解每个工具的功能(如"SerpAPI:用于搜索引擎查询,获取实时信息"); -
{tool_names}:工具名称集合(如["SerpAPI", "llm-math", "文本分析工具"]),约束模型只能选择指定工具; -
{input}:用户的原始问题; -
{agent_scratchpad}:核心占位符,用于存储中间推理过程(包括之前的Thought、Action、Action Input、Observation),相当于模型的"草稿本",支持多轮循环的上下文延续。
3. 进阶模板(支持工具串联与记忆)
针对需要多工具串联调用或会话记忆的场景,可扩展模板如下:
你是一个智能助手,能够通过工具调用解决复杂问题,并且可以记住之前的交互信息。
可用工具: {tools}
工具名称列表: {tool_names}
历史交互记录: {chat_history}
请按照以下格式回答:
Question: {input}
Thought: 结合历史记录和当前问题,我需要先做什么?(如需要调用工具,明确工具类型和输入;如已掌握足够信息,直接准备最终答案)
Action: 工具名(必须来自{tool_names})
Action Input: 工具所需的具体参数(需明确、完整)
Observation: 工具返回的结果
(可重复思考-行动-观察步骤)
Thought: 现在已获取所有必要信息,可整理最终答案
Final Answer: 清晰、准确的回答,包含关键依据和结论
注意:如果工具调用失败或结果无效,可重新选择工具或调整输入参数;无需调用工具时,直接跳过Action和Observation步骤。
4. 模板设计核心原则
- 格式强约束:明确规定Thought、Action、Action Input、Observation的输出格式,避免模型输出混乱;
- 工具透明化:完整展示工具功能和名称,让模型能根据任务需求精准选择;
- 上下文延续:通过
{agent_scratchpad}和{chat_history}保留中间过程,支持多轮推理; - 容错性提示:允许模型调整工具调用策略,提升复杂场景的适应性。
四、ReAct范式的经典案例:从问题到答案的完整过程
为了更直观理解ReAct的运作逻辑,我们以"除了苹果遥控器,还有什么设备能控制它最早设计交互的程序?"为例,结合提示词模板,完整拆解ReAct的执行流程:
| 轮次 | 思考(Thought) | 行动(Action) | 行动输入(Action Input) | 观察(Observation) |
|---|---|---|---|---|
| 1 | 需先确认苹果遥控器最早控制的程序 | 搜索工具(SerpAPI) | Apple Remote 最早设计交互的程序 | Apple Remote于2005年推出,最早用于控制Front Row媒体中心程序 |
| 2 | 需查找Front Row程序的其他控制设备 | 搜索工具(SerpAPI) | Front Row 控制设备 | 未找到直接结果,相似关键词包括"Front Row (software)" |
| 3 | 需补充搜索Front Row软件的控制方式 | 搜索工具(SerpAPI) | Front Row (software) 控制设备 | Front Row软件可通过Apple遥控器或键盘功能键控制 |
| 4 | 已获取足够信息,可给出答案 | - | - | - |
最终答案:"苹果遥控器最早设计用于控制Front Row媒体中心程序,该程序除了苹果遥控器外,还可通过键盘功能键控制。"
对比传统模式(直接输出答案),ReAct通过三轮循环,逐步明确目标、补充信息,最终得到准确结果,且每一步决策都有迹可循。
五、ReAct范式的核心应用场景
ReAct范式尤其适合需要多步骤、强逻辑、工具协作的复杂任务,典型应用场景包括:
1. 智能客服与知识库问答
如LangChain中的本地知识智能客服案例,模型通过ReAct循环:
- 思考:"用户询问Model3怎么样,需要先获取产品描述和品牌信息";
- 行动:调用"查询产品名称"工具获取Model3参数,调用"公司相关信息"工具获取特斯拉背景;
- 观察:获取产品定价、设计特点、品牌优势等信息;
- 最终整合信息给出答案。
2. 故障诊断与问题排查
如网络故障诊断Agent,通过ReAct实现工具串联调用:
- 思考:"用户无法访问网站,需先检查DNS解析,再测试网络连通性";
- 行动1:调用DNS解析工具,获取网站IP地址;
- 观察1:解析成功,得到IP地址93.184.216.34;
- 行动2:调用Ping工具,测试该IP连通性;
- 观察2:连接超时;
- 行动3:调用网络日志分析工具,查找超时原因;
- 最终结合多轮观察给出诊断结论。
3. 复杂信息检索与分析
如"历史上的今天有哪些名人出生"这类问题,模型通过ReAct:
- 思考:"需先确认今天的日期,再查找该日期对应的名人出生记录";
- 行动1:调用搜索引擎获取当前日期(2023年5月27日);
- 行动2:调用历史数据库查询5月27日出生的名人;
- 观察:获取亨利一世、康熙帝等名人信息;
- 最终整理输出答案。
六、ReAct范式与LangChain的结合:快速落地智能Agent
ReAct范式的落地离不开开发框架的支持,而LangChain作为LLM应用开发的主流框架,提供了完善的ReAct实现方案,让开发者能够快速构建基于ReAct的智能Agent。
1. LangChain中ReAct的核心组件
- LLM:作为推理引擎,负责思考过程和决策;
- Tools:行动的载体,包括内置工具(如SerpAPI搜索引擎、llm-math计算器)和自定义工具;
- PromptTemplate:即前文所述的ReAct提示词模板,约束思考、行动、观察的输出规范;
- AgentExecutor:负责调度ReAct循环,管理工具调用和结果整合;
- Memory:存储对话历史和中间观察结果,支持多轮循环的上下文延续。
2. 关键代码示例:LangChain实现ReAct Agent
以下是基于LangChain构建ReAct Agent的核心代码框架,结合提示词模板,实现"查询天气并计算温度的1/4"的任务:
# 1. 加载依赖库
from langchain.agents import load_tools, initialize_agent, AgentType
from langchain_community.llms import Tongyi
from langchain.prompts import PromptTemplate
import os
# 2. 定义ReAct提示词模板
REACT_PROMPT_TMPL = """
你可以使用以下工具: {tools}
可用工具名称: {tool_names}
请按照以下格式回答用户问题:
Question: {input}
Thought: 我需要做什么?
Action: 工具名
Action Input: 工具输入参数
Observation: 工具返回结果
(可重复Thought-Action-Action Input-Observation步骤)
Thought: 我现在知道最终答案
Final Answer: 问题的完整回答
"""
# 3. 初始化提示词模板
prompt = PromptTemplate(
template=REACT_PROMPT_TMPL,
input_variables=["input", "tools", "tool_names"]
)
# 4. 初始化LLM(通义千问)
api_key = os.environ.get('DASHSCOPE_API_KEY')
llm = Tongyi(model_name="qwen-turbo", dashscope_api_key=api_key)
# 5. 加载工具(SerpAPI用于搜索天气,llm-math用于计算)
tools = load_tools(["serpapi", "llm-math"], llm=llm)
# 6. 初始化ReAct Agent
agent = initialize_agent(
tools,
llm,
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, # 零样本ReAct模式
verbose=True, # 打印思考、行动、观察过程
prompt=prompt # 传入自定义ReAct提示词模板
)
# 7. 运行任务
agent.run("当前北京的温度是多少华氏度?这个温度的1/4是多少?")
代码执行流程(ReAct循环):
- 思考:"我需要先查找当前北京的华氏温度,再计算该温度的1/4";
- 行动:SerpAPI;
- 行动输入:"当前北京温度 华氏度";
- 观察:"北京当前华氏温度为86°F";
- 思考:"已获取温度,需计算86的1/4";
- 行动:llm-math;
- 行动输入:"86 / 4";
- 观察:"21.5";
- 思考:"已获取所有必要信息,可给出最终答案";
- 最终答案:"当前北京的华氏温度为86°F,该温度的1/4是21.5°F"。
七、ReAct范式的优势与局限
核心优势
- 高可信度:通过工具调用获取真实反馈,减少大模型的虚构内容(hallucination);
- 强可解释性:每一步思考和行动都透明可见,便于调试和问题定位;
- 强适配性:支持动态调整步骤,可处理流程不固定的复杂任务;
- 易扩展:可灵活集成各类工具(搜索、计算、数据库、API等),适配不同场景;
- 模板化落地:通过标准化提示词模板,降低开发门槛,确保推理逻辑一致性。
潜在局限
- 效率依赖工具响应:每一步行动都需要工具返回结果,工具响应速度直接影响任务完成效率;
- 对提示词要求较高:模板格式需严格规范,否则可能导致模型推理混乱或工具调用失败;
- 不适配简单任务:对于单步即可完成的简单问题(如"1+1等于几"),ReAct的循环机制会增加不必要的开销。
八、总结:ReAct范式的核心价值
ReAct范式的本质是让AI具备"理性决策"的能力——它不再是简单的"输入-输出"黑盒,而是能够像人类一样规划步骤、调用资源、调整策略,最终解决复杂问题。而提示词模板作为ReAct范式的"操作手册",为模型的推理和行动提供了明确指引,是范式落地的关键支撑。
在LangChain等开发框架的支持下,ReAct范式已成为构建智能Agent的基础逻辑,广泛应用于客服、诊断、数据分析等场景。随着大模型技术的发展,ReAct与记忆机制、多Agent协作的结合,将进一步拓展AI的应用边界,让智能系统更灵活、更可信、更贴近人类的思考方式。
如果你的项目需要处理多步骤、强逻辑的复杂任务,不妨尝试基于ReAct范式+定制化提示词模板构建Agent——它会让AI从"能说会道"升级为"能思会做"。