【论文解读】ReAct:从思考脱离行动, 到行动反馈思考

article/2025/6/6 1:09:51

认识从实践开始,经过实践得到了理论的认识,还须再回到实践去。

——《实践论》,毛泽东

1st author: About – Shunyu Yao – 姚顺雨

paper

  • [2210.03629] ReAct: Synergizing Reasoning and Acting in Language Models
  • ReAct: Synergizing Reasoning and Acting in Language Models

code: ysymyth/ReAct: ICLR 2023 ReAct: Synergizing Reasoning and Acting in Language Models

贡献: 提出了一种简单而有效的框架,通过交错生成推理轨迹 (Thought) 和任务特定动作 (Action),使大型语言模型 (LLM) 能够更鲁棒、更透明地解决复杂任务。

Figure 1

1. 思想

从“纯思考”或“纯行动”到“思考指导行动,行动反馈思考”

传统的 LLM 应用范式,要么侧重于利用其内部知识进行“纯思考”(如 Chain-of-Thought, CoT),要么侧重于生成与外部环境交互的“纯行动”序列。ReAct 的洞见在于,人类解决复杂问题时,思考和行动是紧密交织、相互促进的。

  • 思考 (Thought, t i t_i ti): 帮助模型分解任务、制定计划、跟踪进度、处理异常、识别信息需求。这本质上是 LLM 的内部“独白”或元认知。
  • 行动 (Action, a i a_i ai): 允许模型与外部世界(如知识库API、交互式环境)交互,以获取当前思考步骤所需的信息,或执行计划中的某个具体操作。
  • 观察 (Observation, o i o_i oi): 行动的结果,反馈给模型,作为下一步思考的依据。

ReAct 的流程可以概括为一个迭代的 Thought-Action-Observation 循环:
S 0 → LLM ( t 1 , a 1 ) → Env o 1 → S 1 → LLM ( t 2 , a 2 ) → Env o 2 → ⋯ → Final Answer S_0 \xrightarrow{\text{LLM}} (t_1, a_1) \xrightarrow{\text{Env}} o_1 \rightarrow S_1 \xrightarrow{\text{LLM}} (t_2, a_2) \xrightarrow{\text{Env}} o_2 \rightarrow \dots \rightarrow \text{Final Answer} S0LLM (t1,a1)Env o1S1LLM (t2,a2)Env o2Final Answer
其中 S i S_i Si 是在第 i i i 步的上下文状态 (包含历史的 t , a , o t, a, o t,a,o)。

2. 方法

ReAct 的实现主要依赖于精心设计的 Few-Shot Prompting。Prompt 中包含若干个“思考-行动-观察”的完整轨迹示例,指导 LLM 在新的任务实例上生成类似的交错序列。

  • 动作空间增强: ReAct 将 LLM 的输出空间从单纯的文本生成,扩展到了包含特定领域动作自由文本思考的混合空间 A ′ = A task ∪ L thought \mathcal{A}' = \mathcal{A}_{\text{task}} \cup \mathcal{L}_{\text{thought}} A=AtaskLthought
  • 交错生成: LLM 在每个步骤被提示生成一个 "Thought: <文本>",紧接着一个 "Action: <动作指令>"
    • 如果动作是与外部API交互(如 Search[entity]),则执行该动作,并将返回的 Observation 追加到上下文中。
    • 如果动作是内部思考或得出最终答案(如 Finish[answer]),则流程可能终止或继续。
  • 稀疏 VS 密集思考:
    • 对于知识密集型推理任务(如 HotpotQA, Fever),ReAct 采用密集的“思考-行动-观察”步骤,每个行动前都有明确的思考指导。
    • 对于交互式决策任务(如 ALFWorld, WebShop),思考可以更稀疏,仅在关键决策点出现,LLM 自行决定何时插入思考。

3. 优势

  • 可解释性与可信赖性增强: 通过显式的思考轨迹,人类可以更容易理解模型的决策过程,识别错误来源,从而提升对模型输出的信任。
  • 事实基础性 (Grounding): 外部工具的引入(如 Wikipedia API)有效缓解了 CoT 中常见的“事实幻觉”和错误传播问题,使推理过程更加依赖于外部获取的真实信息。
  • 动态适应性:
    • Reason to Act: 思考可以指导行动,例如根据当前理解调整搜索查询,或制定多步计划。
    • Act to Reason: 行动获取的信息可以反过来更新模型的内部状态和推理路径,例如发现某个假设错误后调整策略。
  • 鲁棒性与泛化性: 即使只有极少的 in-context 示例 (1-6个),ReAct 也能在多种任务上展现出强大的性能,超越仅依赖推理或仅依赖行动的基线方法。

4. 实验

Figure 2

  • 知识密集型任务 (HotpotQA, Fever):
    • ReAct 显著优于仅有 Action 的模型,并通过结合 CoT-SC (Self-Consistency) 实现了最佳性能,证明了内部知识和外部知识结合的价值。
    • 有效克服了 CoT 的幻觉问题。例如,在 HotpotQA 中,ReAct 的成功案例中,94% 具有正确的推理和事实,而 CoT 仅为 86%;失败案例中,CoT 有 56% 是因为幻觉,ReAct 则为 0%。
  • 交互式决策任务 (ALFWorld, WebShop):
    • 仅用 1-2 个示例,ReAct 的成功率远超使用大量 ( 10 3 ∼ 10 5 10^3 \sim 10^5 103105) 训练实例的模仿学习 (IL) 和强化学习 (RL) 方法 (ALFWorld 提升 34%,WebShop 提升 10%)。
    • 凸显了 LLM 预训练知识 (如常识) 在复杂交互环境中的巨大潜力。

5. 理论思考

从概率角度看,传统的 CoT 可以视为 P ( answer ∣ question , thought_trace ) P(\text{answer} | \text{question}, \text{thought\_trace}) P(answerquestion,thought_trace),而 ReAct 则是在一个更长的序列上进行建模:
P ( ( t 1 , a 1 , o 1 , … , t N , a N , o N , answer ) ∣ question , prompt ) P\big( (t_1, a_1, o_1, \dots, t_N, a_N, o_N, \text{answer}) | \text{question}, \text{prompt} \big) P((t1,a1,o1,,tN,aN,oN,answer)question,prompt)
或者可以看作一个策略 π ( t i , a i ∣ history < i , question , prompt ) \pi(t_i, a_i | \text{history}_{<i}, \text{question}, \text{prompt}) π(ti,aihistory<i,question,prompt)

ReAct 的核心在于它隐式地让 LLM 学会了一个元策略:何时应该依赖内部知识进行演绎推理 (Thought),何时应该通过外部工具获取新信息 (Action)。这种动态切换是其成功的关键。

虽然论文中没有明确的数学模型优化,但其 few-shot prompting 的成功暗示了 LLM 强大的模式识别和上下文学习能力。未来工作或许可以从更形式化的角度(如部分可观察马尔可夫决策过程 POMDP,或基于模型的 RL)来理解和优化这种 “思考-行动” 循环。

6. 回顾

ReAct 发表以来,LLM 智能体领域经历了爆炸式发展。ReAct 的思想成为了许多后续工作的重要基石:

  • 工具使用 (Tool Use) 的普及: ReAct 推广了 LLM 与外部工具交互的范式。如今,几乎所有主流的 LLM Agent 框架 (如 LangChain, LlamaIndex, AutoGen) 都内置了强大的工具调用能力,其核心交互逻辑与 ReAct 的 “Action-Observation” 类似。
  • 更复杂的 Agent 架构: ReAct 主要是一个单 LLM 的线性决策过程。后续工作如 AutoGen (多 Agent 协作)、Tree-of-Thoughts (探索式推理)、Reflection (自我反思与纠错) 等,在 ReAct 的基础上发展出更复杂的推理和规划能力。
  • Agent 即服务: ReAct 证明了 LLM 通过 API 调用完成任务的可行性,为 OpenAI 的 Assistants API 等产品提供了早期概念验证。
  • 挑战与未来:
    • 错误传播与纠正: ReAct 虽然通过外部工具缓解幻觉,但如果工具返回错误信息或 LLM 错误解读观察结果,错误仍会传播。更强的自我纠错和反馈机制是必要的。
    • 规划能力: ReAct 的规划能力主要体现在 “Thought” 中,但对于长程复杂任务,其线性逐步推理可能不是最优的。更高级的规划算法(如 MCTS 结合 LLM)是研究热点。
    • Token 效率: ReAct 的 “Thought-Action-Observation” 循环会消耗大量 token,尤其是在多轮交互中。如何优化交互效率是一个实际问题。
    • 泛化与鲁棒性: 虽然 ReAct 在 few-shot 下表现良好,但在更开放、更动态的环境中,如何保证其对未见工具、未见任务的泛化性和鲁棒性仍是挑战。

7. 总结

ReAct 是 LLM 从“文本处理器”向“通用问题解决器”迈进的关键一步。它通过引入结构化的“思考-行动-观察”循环,巧妙地结合了 LLM 的内部推理能力和与外部世界的交互能力。虽然其实现方式相对简单 (主要依赖 Prompting),但其揭示的“协同推理与行动”的理念对后续 LLM 智能体的发展产生了深远影响,是理解当前 Agent 研究的必读文献之一。它证明了,即使不进行模型微调,仅通过巧妙的提示工程,也能解锁 LLM 在复杂任务解决上的巨大潜力。

ReAct 的启示在于:

  1. 结构化输出的重要性: 引导 LLM 产生结构化的中间步骤 (如思考和动作) 对提升性能和可解释性至关重要。
  2. 内部模拟与外部交互的平衡: 如何让 LLM 有效地在利用其庞大内部知识和查询外部实时信息之间取得平衡,是提升智能体能力的核心。
  3. Prompting 的力量尚未枯竭: 即使在模型能力飞速提升的今天,精心设计的 Prompt 依然是引导和控制 LLM 行为的强大工具。

希望对各位有所帮助。


http://www.hkcw.cn/article/nVOpFpvteL.shtml

相关文章

AXURE-动态面板

1.概述 动态面板原件&#xff0c;容器类的原件一个动态面板可以有多种状态 同一时刻只展示一个状态 默认展示第一个状态 主要用于多个状态的切换可拖动 1.1 创建 将原件库中的“动态面板”原件&#xff0c;直接拖动到工作区中&#xff0c;创建空白动态面板将页面中原件选中…

AI地面垃圾检测算法智能分析网关V4打造城市/公园/校园等场景环保卫生监管解决方案

一、方案背景​ 在城市管理与场所运营中&#xff0c;地面垃圾的及时清理是环境品质的重要指标。传统人工巡检效率低、成本高&#xff0c;存在明显滞后性&#xff0c;难以满足现代环境管理需求。随着人工智能与计算机视觉技术发展&#xff0c;智能化管理成为趋势。AI智能分析网…

帝国CMS QQ登录插件最新版 获取QQ头像和QQ昵称

帝国CMS QQ登录插件最新版 获取QQ头像和QQ昵称 QQ一键登录&#xff0c;免邮箱 随机密码 获取QQ头像 获取QQ昵称 直接下载上传到帝国CMS&#xff1a;/e/memberconnect UTF-8版本 GBK的自己转换 QQ登录后的默认密码 是随机的邮箱账号前面的随机6个字母和数字 【下图字母数…

Kafka 的优势是什么?

Kafka 作为分布式流处理平台的核心组件&#xff0c;其设计哲学围绕高吞吐、低延迟、高可扩展性展开&#xff0c;在实时数据管道和大数据生态中具有不可替代的地位。 一、超高吞吐量与低延迟 1. 磁盘顺序 I/O 优化 突破磁盘瓶颈&#xff1a;Kafka 将消息持久化到磁盘&#xff…

低谷才是出成绩

有些朋友说我现在是高光&#xff0c;其实不然 之所以有这样的误解&#xff0c;是我个人的简历上是不断增加名誉。这点属实&#xff0c;看看我的词条&#xff1a;https://www.modb.pro/wiki/4245的确如此。但是其实也有误会。事情可以反过来看。因为&#xff0c;如果做技术的在…

Bash shell四则运算

文章目录 四则运算1. ‌expr 命令‌2. ‌$(( )) 表达式&#xff08;推荐&#xff09;‌3. ‌$[ ] 表达式&#xff08;已弃用&#xff09;‌4. ‌let 命令‌小数运算i 和 i 区别 四则运算 算术运算&#xff1a; - * / %&#xff08;取模&#xff0c;求余数&#xff09; Bash sh…

Windows + CPU也能跑时序预测:TSLib框架快速上手与踩坑避雷

在时序预测领域,选择一个成熟的框架往往能让我们事半功倍。最近接手了一个紧急的时序预测项目,经过一番调研后,我选择了TSLib(Time-Series-Library)这个优秀的开源框架来快速搭建整个预测流程。 由于开发环境限制在Windows平台且没有GPU支持,整个部署过程还是遇到了一些…

多模态大语言模型arxiv论文略读(105)

UnifiedMLLM: Enabling Unified Representation for Multi-modal Multi-tasks With Large Language Model ➡️ 论文标题&#xff1a;UnifiedMLLM: Enabling Unified Representation for Multi-modal Multi-tasks With Large Language Model ➡️ 论文作者&#xff1a;Zhaowei…

set map数据结构

#include <set> #include <iostream> using namespace std;int main() {// 设置控制台输出编码为UTF-8system("chcp 65001");set<int> s1; // 创建一个整数集合// 插入元素s1.insert(5);s1.insert(3);s1.insert(7);s1.insert(1);s1.insert(9);//默…

云开发实现新闻列表小程序

新闻列表小程序需要两个页面即新闻列表页及新闻发布页&#xff0c;这两个页面需要以tabBar的形式展示&#xff0c;单击tab图标可以进行页面相互切换。本项目中是分别在cloudfunctions中创建一个名为“submit”的云函数&#xff0c;功能为向小程序端发布信息&#xff0c;在pages…

《C++ Core Guidelines解析》深入理解C++

前言 在计算机编程领域&#xff0c;C一直以其高效、灵活和强大而闻名。然而&#xff0c;C作为一种复杂的编程语言&#xff0c;如果没有正确的理解和使用&#xff0c;很容易导致软件质量的下降和性能问题的出现。幸运的是&#xff0c;一本名为《CCore Guidelines解析》的书籍为…

报错:Java HotSpot(TM) 64-Bit Server VM warning: Sharing is only supported for boot loader classes beca

问题描述&#xff1a;运行单元测试时&#xff0c;报这个警告&#xff1a;Java HotSpot(TM) 64-Bit Server VM warning: Sharing is only supported for boot loader classes beca 操作步骤如下&#xff1a; 将原来的&#xff1a;-ea 修改为 -ea -Xshare:off 重新启动单元测试&a…

万字详解CSS动画核心——@keyframes,看完就会做动画!

新手福利 -- 还在为CSS动画发愁&#xff1f;一篇搞定keyframes所有知识点&#xff01; 一、什么是keyframes&#xff1f; ‌简单说‌&#xff1a;keyframes 是CSS3的 ‌动画关键帧规则‌&#xff0c;就像导演给动画片分镜头一样&#xff0c;你可以定义动画在不同时间点的样式…

【氮化镓】GaN HMETs器件物理失效分析进展

2021 年 5 月,南京大学的蔡晓龙等人在《Journal of Semiconductors》期刊发表了题为《Recent progress of physical failure analysis of GaN HEMTs》的文章,基于多种物理表征技术及大量研究成果,对 GaN HEMTs 的常见失效机制进行了系统分析。文中先介绍失效分析流程,包括使…

工业智能网关保障冷冻仓储设备无人值守安全运行

一、项目背景 冷链物流行业在近年来发展迅速&#xff0c;冷库作为其中的关键环节&#xff0c;其制冷设备的稳定运行至关重要。传统的冷库制冷设备监控方式存在诸多弊端&#xff0c;如需要人工现场巡检&#xff0c;不仅效率低下&#xff0c;且难以及时发现问题&#xff1b;数据…

电工基础【5】简单的电路设计接线实操

07 简单的电路设计 传送带控制示例图 传送带可以转的&#xff0c;电机带动它转。好&#xff0c;这红色的是停止按钮。绿色1启动按钮&#xff0c;这是自锁电路。 原本绿色1启动按钮(按下转、松开转) 客户想加个绿色2手动按钮(按下停、松开转)。 我们前面也学过那个点动了&#…

手机上网可以固定ip地址吗?详细解析

在移动互联网时代&#xff0c;手机已成为人们日常上网的主要设备之一。无论是工作、学习还是娱乐&#xff0c;稳定的网络连接都至关重要。许多用户对IP地址的概念有所了解&#xff0c;尤其是固定IP地址的需求。那么&#xff0c;手机上网能否固定IP地址&#xff1f;又该如何实现…

QGIS 矢量数据属性表中文乱码解决方案:4 步修复编码匹配问题

在QGIS中导入矢量数据后&#xff0c;属性表出现中文字符乱码&#xff0c;多由字符编码不匹配导致。以下是条理清晰的解决方案&#xff0c;可整理为博客内容&#xff1a; 目录 一、问题根源&#xff1a;编码不匹配二、解决方案&#xff1a;分场景修复编码1. 图层属性修改编码&am…

Qwen2.5-VL 视觉编码器的SwiGLU

Qwen2.5-VL 视觉编码器的SwiGLU flyfish 视觉编码器在多模态大模型中扮演着至关重要的角色。我们从头开始训练了一个原生动态分辨率的 ViT&#xff0c;包括 CLIP、视觉-语言模型对齐和端到端训练等阶段。为了解决多模态大模型在训练和测试阶段 ViT 负载不均衡的问题&#xff…

Unity UI 性能优化终极指南 — Image篇

&#x1f3af; Unity UI 性能优化终极指南 — Image篇 &#x1f9e9; Image 是什么&#xff1f; Image 是UGUI中最常用的基本绘制组件支持显示 Sprite&#xff0c;可以用于背景、按钮图标、装饰等是UI性能瓶颈的头号来源之一&#xff0c;直接影响Draw Call和Overdraw &#x1…