介绍
ReAct(Reasoning + Acting)是2022年底由普林斯顿与谷歌团队提出的大模型智能体框架,核心是让LLM交替思考(Thought)与行动(Action),并观察(Observation)外部反馈,形成闭环,解决纯文本推理“幻觉”和无法交互环境的问题。
- 全称:Reasoning and Acting(推理与行动协同)。
- 论文:《ReAct: Synergizing Reasoning and Acting in Language Models》(2022年11月)。
- 定位:把思维链(CoT)与工具调用融合,让大模型既能“想”又能“做”,并根据结果调整策略。
- 动机:纯LLM推理易幻觉、无法获取实时信息;工具调用缺推理、步骤僵硬;ReAct交替思考与行动,互相增强。
原理
ReAct 是一个三步闭环,反复迭代直到得出最终答案:
Thought-Action-Observation 循环
1. Thought(思考)
- 模型分析当前问题、历史观察,决定下一步做什么(推理、规划、反思)。
- 输出自然语言推理文本,如:“我需要查2026年世界杯冠军,调用搜索工具”。
2. Action(行动)
- 模型根据思考结果,生成结构化工具调用指令(非自然语言)。
- 格式示例:
Search(query="2026世界杯冠军")或Calculator(25*4)。 - 行动类型:搜索、数据库查询、API调用、代码执行、数学计算等。
3. Observation(观察)
- 系统执行 Action,把工具返回结果格式化后喂给模型。
- 示例:
Observation: 2026世界杯冠军是法国队。 - 作用:补全信息、验证推理、纠正错误,进入下一轮 Thought。
工作流程示例(订机票)
用户请求:“订明天15:00北京→上海机票”。
- Thought 1:需查航班 → Action 1:
FlightSearch(北京,上海,明天15:00)→ Observation 1:3个航班(14:50/15:00/15:10)。 - Thought 2:筛选15:00航班 → Action 2:
Filter(时间=15:00)→ Observation 2:仅剩CA1502。 - Thought 3:需用户确认 → Action 3:
AskUser(确认订CA1502?)→ Observation 3:用户确认。 - Thought 4:执行预订 → Action 4:
BookFlight(CA1502)→ Observation 4:预订成功。 - Final Answer:已为你预订CA1502(明天15:00)。
核心组件
- LLM大脑:负责 Thought 生成、Action 决策、Observation 整合(如GPT-4、Claude、Llama 3)。
- 提示词模板:强制输出格式(Thought/Action/Observation)、可用工具、示例,约束模型行为。
- 工具库:搜索、数据库、API、代码解释器、计算器等,连接外部世界。
- 执行器:解析 Action、调用工具、返回 Observation,隔离模型与环境。
- 记忆模块:存储历史 Thought/Action/Observation,支持多轮上下文。
特性
对比纯CoT/纯工具调用
- 协同增强:思考指导行动,行动结果优化思考,互相提升。
- 可解释性强:每步都有自然语言 Thought,决策透明、易调试。
- 减少幻觉:用外部事实验证推理,显著降低编造概率。
- 动态规划:非固定步骤,根据观察实时调整策略,应对复杂/未知问题。
- 泛化性好:无需针对任务微调,通过提示词即可适配新工具/新场景。
应用场景
- 信息检索与问答:联网搜索、查数据库、实时数据(天气/新闻/股价)。
- 复杂推理与计算:数学题、逻辑推理、代码执行、科学计算。
- 任务自动化:订机票/酒店、发邮件、数据处理、报表生成。
- 智能客服/助手:多轮对话、故障排查、个性化推荐。
- 数据分析与BI:查询数据库、可视化、异常检测、报告生成。
- 多模态交互:图文理解、语音助手、视频内容分析。
不适合场景
极简一次性回答。无需思考、不用调用工具,一句话就能出结果,多轮思考纯属浪费。例:简单翻译、常识短句、固定话术回复。
高实时极速响应。要求毫秒级返回,ReAct多轮思考+工具调用延迟高,达不到速度要求。例:弹幕实时互动、按键快速反馈、高频接口应答。
无外部工具可调用。纯主观创作、情感聊天、脑洞文案,没有查询/计算/执行动作可做。例:写诗歌、谈心安慰、自由闲聊、主观点评。
规则固定、流程死板任务。步骤完全固定,不需要动态思考调整,套模板效率更高。例:固定格式填表、标准化审批、固定话术推送。
上下文极短、多轮受限场景。轮次被严格限制,无法反复思考行动迭代。例:短指令单次交互、小程序单次问答。
成本敏感、低价值小任务。小问题开销远大于收益,没必要启动ReAct循环。例:简单换算、短句纠错、基础格式整理。
隐私/风控禁止外部调用。不能联网、不能执行代码、不能查询数据,行动环节直接失效。例:内网涉密问答、隐私数据处理、强风控会话。
高度发散创意类任务。越约束思考步骤,创作自由度越低,效果变差。例:剧本创作、自由故事、灵感构思。
优缺点
优点
- 推理更准:事实校验,幻觉少。
- 过程透明:每步可追溯,易排查问题。
- 灵活通用:提示词驱动,适配多场景。
- 能力扩展:突破模型知识截止日期,获取实时信息。
缺点
- 成本更高:多轮调用LLM+工具,耗时/费用增加。
- 提示词敏感:模板设计差会导致格式错误、循环、无效行动。
- 工具依赖:工具不可用/返回错误,直接影响结果。
- 长上下文压力:多轮历史累积,易超上下文窗口。
与其他Agent框架对比
- ReAct:Thought+Action交替,单轮内多次思考行动,灵活、可解释。
- Plan-and-Execute:先全量规划,再批量执行,步骤固定,简单任务高效、复杂易失败。
- Toolformer:工具调用融入文本生成,无显式Thought,简洁、可解释性差。
- AutoGPT:自主设定目标、多轮迭代、长期记忆,全自动、易失控、成本高。
实现要点(极简代码思路)
# 伪代码:ReAct 核心循环
def react_agent(user_query, tools, llm):
history = []
while True:
# 1. 生成 Thought
thought_prompt = build_prompt(user_query, history, tools)
thought = llm.generate(thought_prompt)
history.append(("Thought", thought))
# 2. 生成 Action
action = llm.parse_action(thought)
history.append(("Action", action))
# 3. 执行 Action,获取 Observation
observation = tools.execute(action)
history.append(("Observation", observation))
# 4. 判断是否结束
if is_final_answer(observation):
return observation
总结
ReAct 是当前最主流、最实用的大模型智能体框架,通过思考-行动-观察闭环,把LLM从“纯文本生成器”升级为“能感知、能行动、能反思”的智能体。它平衡了灵活性、可解释性与准确性,是构建复杂AI应用(如智能助手、自动数据分析、自主任务执行)的核心技术。