Reasoning-Acting(ReAct)
摘要:ReAct(推理-行动)是大语言模型智能体实现自主决策的核心范式,通过"思考→行动→反馈"闭环机制,使AI系统具备动态决策、工具集成和适应反馈的能力。该范式包含观察、思考、行动、反馈、状态更新五个步骤,解决了传统LLM在幻觉、工具集成和动态适应等方面的痛点。ReAct适用于复杂问答、任务规划、故障排查等场景,其落地需要合理设计推理Prompt、明确工具参数、设置终止条件和
ReAct(Reasoning-Acting)是大语言模型(LLM)驱动智能体(Agent)实现自主决策与复杂任务处理的核心交互范式,其核心逻辑是 “推理 - 行动” 闭环” —— 通过显式的 “思考推理” 明确任务目标与下一步行动,再通过 “工具调用 / 环境交互” 执行行动,最后基于行动反馈更新思考,循环迭代直至完成任务。这种范式打破了传统 LLM “静态生成答案” 的局限,让智能体具备 “动态决策、工具集成、反馈适应” 的能力,是构建能处理真实世界复杂任务(如多步推理、故障排查、资源调度)的高级 AI 系统的基础。
一、核心定义与本质
核心定义
ReAct 是一种结构化的 LLM 智能体交互策略:以 “推理” 为核心驱动,让智能体在处理任务时,先通过自然语言显式输出 “思考过程”(如 “我需要先查询天气,再规划行程”),基于思考确定下一步 “行动”(如调用天气 API、检索景点信息),执行行动后获取 “环境反馈”(如 API 返回的天气数据、检索到的景点列表),再结合反馈更新思考,形成 “思考→行动→反馈→再思考” 的闭环,直至达成任务目标。
本质特征
- 推理显式化:思考过程被明确输出(而非 LLM 内部隐式计算),既提升可解释性(便于定位决策错误),又能引导智能体聚焦任务核心(如 “现在需要确认用户出发时间,否则无法规划交通”);
- 行动目标化:每一步行动都由推理驱动,而非随机尝试(如 “因为查询到周六下雨,所以下一步要筛选室内景点”),避免无意义的工具调用;
- 反馈闭环化:行动结果(反馈)直接参与下一轮推理,让智能体具备 “动态调整策略” 的能力(如 “检索到景点预约已满,需更换备选景点”);
- 工具泛化化:支持集成任意外部工具(API、数据库、物理设备接口等),突破 LLM “仅生成文本” 的原生局限,延伸智能体的交互边界(如控制智能家居、调用支付接口)。
二、工作原理
ReAct 的核心是 “循环迭代”,其完整工作流程可拆解为观察→思考→行动→反馈→状态更新五步,每一步紧密衔接,形成自驱动的任务处理闭环:
1. 观察(Observation)
智能体首先接收 “任务目标 + 初始环境信息”,作为推理的基础输入:
- 任务目标:用户明确需求(如 “帮我规划周六北京一日游”);
- 初始环境信息:已知条件(如用户偏好 “文化类景点”)、可调用工具列表(如天气 API、景点检索工具、交通查询工具);
- 示例:观察输入 = 任务 “周六北京一日游” + 初始信息 “偏好文化景点” + 工具 “天气 API、景点检索、地铁查询”。
2. 思考(Reasoning)
LLM 基于 “观察到的上下文”,生成显式的思考过程,明确 “当前任务进展、待解决问题、下一步行动理由”:
- 核心逻辑:回答三个问题 ——“现在我知道了什么?”“还需要什么信息?”“为什么要做这个行动?”;
- 示例思考输出:“当前已知任务是周六北京一日游,用户偏好文化景点;但不知道周六北京天气(若下雨需调整为室内景点),因此下一步需要调用天气 API 查询周六北京天气,确保行程不受天气影响。”
3. 行动(Action)
智能体根据推理结果,选择对应的工具并执行行动,行动需包含 “工具类型 + 具体参数”(确保可执行):
- 工具类型:明确调用的工具(如 “天气 API”“景点检索工具”);
- 行动参数:工具所需的关键信息(如 “天气 API 需传入城市‘北京’、日期‘周六’”);
- 示例行动输出:
[{"action": "调用天气API", "parameters": {"city": "北京", "date": "周六"}}]; - 执行逻辑:智能体通过工具接口发送请求,等待返回结果(如天气 API 返回 “周六北京小雨,气温 12-18℃”)。
4. 反馈(Feedback)
智能体获取工具执行后的反馈数据,将其转化为 “可用于下一步推理的结构化信息”(避免原始数据杂乱导致推理偏差):
- 反馈类型:
-
- 成功反馈:工具正常返回有效数据(如天气 API 返回的温度、降水概率);
- 失败反馈:工具调用出错(如 “城市参数错误,无法查询天气”)或返回无效数据(如 “未找到周六北京天气数据”);
- 示例反馈解析:“成功获取周六北京天气:小雨,气温 12-18℃,降水概率 60%”(剔除 API 返回的冗余字段,保留核心信息)。
5. 状态更新(State Update)
将 “初始上下文 + 思考过程 + 行动记录 + 反馈结果” 整合为 “新的任务状态”,作为下一轮 “观察” 的输入,触发循环迭代:
- 状态内容:需包含 “已完成的行动、已获取的信息、待解决的问题”(避免信息丢失);
- 终止条件:当思考过程判断 “任务目标已达成”(如 “行程规划包含景点、交通、餐饮,满足用户需求”)或 “无法继续推进(如关键工具故障)” 时,停止循环,输出最终结果;
- 示例状态更新:新观察输入 = 原任务 + 已获取 “周六北京小雨” + 待解决 “筛选北京室内文化景点” + 工具列表(不变)。
三、关键组件
ReAct 的落地依赖四大组件的协同,每个组件承担 “闭环中的特定角色”,缺一不可:
|
组件名称 |
核心作用 |
关键设计要点 |
|
LLM 推理核心 |
负责 “思考过程生成” 与 “行动决策”,是 ReAct 的 “大脑” |
|
|
工具集(Tools) |
智能体与外部环境交互的 “手脚”,执行具体行动(如查询、控制、计算) |
|
|
反馈解析器 |
将工具返回的原始数据(如 API JSON、数据库结果)转化为 “LLM 可理解的结构化信息” |
|
|
任务状态管理器 |
存储 “历史思考、行动、反馈”,维护任务上下文一致性,避免信息丢失 |
|
四、ReAct 解决的核心痛点
相比传统 LLM “静态生成” 和早期工具调用 “无推理行动”,ReAct 通过 “推理 - 行动闭环” 针对性解决了复杂任务处理的三大核心痛点:
|
痛点类型 |
传统 LLM(无工具) |
早期工具调用(无推理) |
ReAct(推理 - 行动闭环) |
|
幻觉与决策盲目 |
依赖内部知识生成,易编造虚假信息(如 “虚构景点开放时间”) |
随机调用工具(如未查天气先选景点),行动无目标 |
推理显式化,行动基于需求(如 “先查天气再选景点”),减少盲目性 |
|
工具集成能力弱 |
无法与外部工具交互,仅生成文本 |
仅支持单一工具调用,无法多工具协同(如查天气后无法自动筛选景点) |
多工具协同(天气 API→景点检索→交通查询),工具调用有逻辑关联 |
|
动态适应能力差 |
无法处理任务中的变化(如 “用户临时更改出发时间”) |
行动失败后无调整策略(如景点预约满后直接终止) |
基于反馈动态调整(如 “景点满员→调用备选景点检索”),适应任务变化 |
|
可解释性低 |
生成结果无思考过程,无法定位错误原因 |
仅记录行动,无决策理由(如 “不知道为什么调用天气 API”) |
显式输出思考过程,错误可追溯(如 “因天气下雨选择室内景点,错误源于天气数据误判”) |
五、典型应用场景
ReAct 的 “动态决策 + 工具集成” 特性,使其特别适配 “多步推理、外部交互、状态变化” 的复杂任务,以下是五大核心场景及实践逻辑:
1. 复杂问答与知识检索(如跨领域多步问答)
- 任务目标:回答需多轮检索验证的问题(如 “2024 年北京冬奥会金牌数最多的国家,其 2023 年 GDP 排名是多少?”);
- ReAct 闭环:
-
- 观察:任务 “回答 GDP 排名”+ 初始信息 “需先确定金牌最多国家”+ 工具 “体育数据检索、GDP 数据库”;
- 思考:“当前需先查 2024 北京冬奥会金牌榜,确定最多国家,再查该国 2023 年 GDP 排名”;
- 行动:调用体育数据检索工具,参数 “赛事 = 2024 北京冬奥会,类型 = 金牌榜”;
- 反馈:返回 “挪威金牌数最多(16 枚)”;
- 状态更新:新观察 = 原任务 + 已知 “挪威金牌最多”+ 待查 “挪威 2023 年 GDP 排名”;
- 循环:调用 GDP 数据库→反馈 “挪威 2023 年 GDP 排名全球第 24 位”→思考 “任务完成”→输出结果。
2. 任务规划与执行(如旅行、学习计划)
- 任务目标:生成 “周六上海亲子一日游” 行程(含景点、交通、餐饮,适配 5 岁儿童);
- ReAct 闭环:
-
- 思考:“需先查周六上海天气(避免户外景点下雨)→筛选适合 5 岁儿童的室内 / 户外景点→查景点间交通→推荐儿童友好餐厅”;
- 行动:调用天气 API→反馈 “周六上海晴天”→行动:检索 “上海亲子景点”→反馈 “上海科技馆、迪士尼小镇”→行动:查 “科技馆到迪士尼小镇地铁线路”→反馈 “11 号线直达,40 分钟”→行动:检索 “迪士尼小镇儿童餐厅”→反馈 “ABC 亲子餐厅”;
- 终止:整合所有信息生成行程,任务完成。
3. 故障排查与问题解决(如技术支持、设备调试)
- 任务目标:排查 “笔记本电脑无法连接 WiFi” 的问题;
- ReAct 闭环:
-
- 思考:“需先确认 WiFi 是否开启→检查路由器是否正常→验证其他设备能否连接→查看电脑 WiFi 驱动状态”;
- 行动:调用 “电脑硬件检测工具”→反馈 “WiFi 已开启”→行动:调用 “路由器状态查询工具”→反馈 “路由器离线”→行动:调用 “路由器控制工具”→执行 “重启路由器”→反馈 “路由器已在线”→行动:再次检测电脑连接→反馈 “已连接 WiFi”;
- 终止:问题解决,输出 “重启路由器后恢复连接”。
4. 多工具协同的业务流程(如电商订单处理)
- 任务目标:处理 “用户申请退货” 请求(含订单验证、退货原因记录、退款计算、物流单生成);
- ReAct 闭环:
-
- 思考:“需先验证订单是否有效→记录用户退货原因→计算退款金额(扣除运费)→生成物流退货单”;
- 行动:调用 “订单数据库”→反馈 “订单有效,未确认收货”→行动:调用 “退货原因录入工具”→记录 “商品尺寸不符”→行动:调用 “退款计算工具”→反馈 “应退 199 元(扣除 10 元运费)”→行动:调用 “物流 API”→生成 “退货单号 SF123456”;
- 终止:输出 “退货申请已处理,退款 199 元,退货单号 SF123456”。
5. 动态环境交互(如智能家居控制)
- 任务目标:实现 “晚上 8 点自动关闭客厅灯、开启卧室空调”(需结合时间、用户位置);
- ReAct 闭环:
-
- 思考:“需先确认当前时间→检测用户是否在卧室→若时间≥20 点且用户在卧室,关闭客厅灯 + 开启卧室空调”;
- 行动:调用 “时间工具”→反馈 “20:05”→行动:调用 “智能家居定位工具”→反馈 “用户在卧室”→行动:调用 “灯光控制工具”→执行 “关闭客厅灯”→行动:调用 “空调控制工具”→执行 “开启卧室空调,温度 26℃”;
- 终止:输出 “已执行操作:关闭客厅灯,开启卧室空调(26℃)”。
六、实战:用 LangChain 实现 ReAct 智能体(以 “天气行程规划” 为例)
基于 LangChain 框架构建 ReAct 智能体,实现 “查询天气→筛选景点→生成行程” 的闭环,清晰展示核心组件的协同逻辑:
1. 环境准备
pip install langchain langchain-openai langchain-core langchain-community
2. 代码实现
from langchain_openai import ChatOpenAI
from langchain.agents import create_react_agent, AgentExecutor
from langchain_core.prompts import PromptTemplate
from langchain_community.tools import WeatherQueryRun, Tool
from langchain_community.utilities import WeatherAPIWrapper
# 1. 初始化工具集(天气查询工具+景点检索工具)
# 工具1:天气查询(调用WeatherAPI,需替换为真实API密钥)
weather_api = WeatherAPIWrapper(weather_api_key="YOUR_WEATHER_API_KEY")
weather_tool = WeatherQueryRun(api_wrapper=weather_api)
# 工具2:模拟景点检索工具(实际可对接景点数据库API)
def retrieve_attractions(city: str, type: str = "all") -> str:
"""根据城市和类型检索景点,type支持"indoor"(室内)、"outdoor"(户外)、"all"(全部)"""
attractions = {
"北京": {
"indoor": ["故宫博物院", "中国国家博物馆", "北京天文馆"],
"outdoor": ["颐和园", "八达岭长城", "奥林匹克森林公园"]
},
"上海": {
"indoor": ["上海科技馆", "上海自然博物馆"],
"outdoor": ["外滩", "迪士尼乐园"]
}
}
return f"{city}{type}景点:{attractions.get(city, {}).get(type, ['暂无推荐景点'])}"
attraction_tool = Tool(
name="景点检索工具",
func=retrieve_attractions,
description="根据城市和类型(室内/户外)检索景点,参数需包含city(城市名)和type(景点类型)"
)
# 工具列表
tools = [weather_tool, attraction_tool]
# 2. 定义ReAct Prompt(引导显式推理与行动)
react_prompt = PromptTemplate.from_template("""
你是一个行程规划智能体,需通过"思考→行动→反馈"循环完成任务。
任务:帮用户规划{city} {date}的一日游,用户偏好{preference}类型景点。
规则:
1. 先思考:明确当前需要解决的问题,以及为什么需要调用某个工具;
2. 再行动:仅从工具列表选择工具,格式为`Action: 工具名, Action Input: {{参数}}`;
3. 接收反馈后,结合反馈更新思考,直至生成完整行程。
工具列表:
- 天气查询工具:查询指定城市和日期的天气,参数:location(城市), date(YYYY-MM-DD)
- 景点检索工具:检索指定城市的景点,参数:city(城市), type(景点类型:indoor/outdoor)
当前上下文:
{agent_scratchpad}
请先输出思考过程,再执行行动(若任务已完成,直接输出最终行程)。
""")
# 3. 初始化LLM与ReAct智能体
llm = ChatOpenAI(model="gpt-4", temperature=0)
# 创建ReAct智能体
react_agent = create_react_agent(llm, tools, react_prompt)
# 创建智能体执行器(管理闭环循环)
agent_executor = AgentExecutor(
agent=react_agent,
tools=tools,
verbose=True, # 打印思考、行动、反馈过程
max_iterations=5 # 最大循环次数,避免无限循环
)
# 4. 运行ReAct智能体(任务:规划北京2025-11-10一日游,偏好文化景点)
task_input = {
"city": "北京",
"date": "2025-11-10",
"preference": "文化"
}
result = agent_executor.invoke(task_input)
print("最终行程规划:", result["output"])
3. 代码核心逻辑解读
- 工具定义:明确每个工具的 “名称、功能、参数格式”,确保智能体可正确调用(如天气工具需 “location+date”,景点工具需 “city+type”);
- ReAct Prompt:强制引导 “先思考后行动”(如 “明确当前需要解决的问题”),避免智能体跳过推理直接调用工具;
- AgentExecutor:自动管理 “思考→行动→反馈” 的循环,直至任务完成或达到最大迭代次数,简化闭环逻辑开发;
- verbose 模式:打印完整交互过程(如 “思考:需要先查北京 2025-11-10 天气→行动:天气查询工具,参数 {location: 北京,date:2025-11-10}→反馈:北京 2025-11-10 小雨→思考:下雨需选室内文化景点→行动:景点检索工具,参数 {city: 北京,type:indoor}→反馈:故宫博物院等→思考:可生成行程→输出结果”),便于调试。
七、ReAct 落地关键要点与避坑指南
- 推理 Prompt 设计是核心:
-
- 必须引导显式推理,避免模糊表述(如用 “请说明当前缺少什么信息,为什么需要调用这个工具” 替代 “请选择工具”);
- 限定工具选择范围(如 “仅从以下工具列表选择”),防止智能体虚构工具;
- 示例:在 Prompt 中加入 “思考示例:‘当前不知道天气,无法确定景点类型,所以调用天气工具查询’”,降低 LLM 理解门槛。
- 工具参数必须明确:
-
- 每个工具需定义 “必填参数”(如天气工具必须传 “city” 和 “date”),避免智能体调用时遗漏参数;
- 提供参数示例(如 “date 格式为 YYYY-MM-DD,如 2025-11-10”),减少格式错误。
- 终止条件需清晰:
-
- 明确 “任务完成” 的判定标准(如 “行程需包含景点、交通、时间安排,满足用户偏好”),避免智能体提前终止或无限循环;
- 设置最大迭代次数(如 5-10 次),防止因工具故障导致的死循环。
- 错误处理需完善:
-
- 工具调用失败时(如 API 超时、参数错误),需在反馈中明确错误类型(如 “天气 API 调用失败,原因:date 格式错误”),引导智能体重试或调整参数;
- 示例:在工具反馈中加入 “若参数错误,请重新调用工具并修正参数格式”,提升闭环容错性。
- 状态管理需精简:
-
- 任务状态仅保留 “关键信息”(如已获取的天气、筛选的景点),剔除冗余内容(如工具调用的原始日志),避免 Token 超限;
- 长任务可采用 “状态压缩”(如用 LLM 总结历史上下文),维持循环可持续性。
八、总结与未来方向
ReAct 的核心价值在于为 LLM 智能体提供了 “自主决策的工程化框架”—— 通过 “推理显式化、行动目标化、反馈闭环化”,让智能体从 “被动生成文本” 升级为 “主动解决问题”,是实现 “通用人工智能(AGI)” 的重要一步。其核心要点可概括为:
- 推理是 “大脑”:引导智能体明确目标与行动逻辑;
- 工具是 “手脚”:延伸智能体的交互边界;
- 反馈是 “眼睛”:让智能体动态调整策略;
- 闭环是 “动力”:驱动任务逐步推进直至完成。
未来,ReAct 将向三个方向演进:
- 多智能体 ReAct:多个 ReAct 智能体分工协作(如 “行程规划智能体 + 交通预订智能体 + 餐饮推荐智能体”),通过跨智能体反馈完成复杂任务;
- 多模态 ReAct:支持图像、语音等多模态输入输出(如 “通过图像识别景点人流→调整行程时间”),适配更真实的交互场景;
- 强化学习 ReAct:结合 RLHF(基于人类反馈的强化学习)优化推理策略(如 “奖励‘少步骤完成任务’的思考逻辑”),提升决策效率。
掌握 ReAct,本质是掌握 “让 AI 自主解决问题的思维方式”—— 它不仅是构建高级智能体的技术基础,更是未来 AI 系统从 “工具” 升级为 “助手” 的核心范式。
更多推荐




所有评论(0)