认识从实践开始,经过实践得到了理论的认识,还须再回到实践去。
——《实践论》,毛泽东
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) 能够更鲁棒、更透明地解决复杂任务。
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)Envo1→S1LLM(t2,a2)Envo2→⋯→Final 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′=Atask∪Lthought。
- 交错生成: LLM 在每个步骤被提示生成一个
"Thought: <文本>"
,紧接着一个"Action: <动作指令>"
。- 如果动作是与外部API交互(如
Search[entity]
),则执行该动作,并将返回的Observation
追加到上下文中。 - 如果动作是内部思考或得出最终答案(如
Finish[answer]
),则流程可能终止或继续。
- 如果动作是与外部API交互(如
- 稀疏 VS 密集思考:
- 对于知识密集型推理任务(如 HotpotQA, Fever),ReAct 采用密集的“思考-行动-观察”步骤,每个行动前都有明确的思考指导。
- 对于交互式决策任务(如 ALFWorld, WebShop),思考可以更稀疏,仅在关键决策点出现,LLM 自行决定何时插入思考。
3. 优势
- 可解释性与可信赖性增强: 通过显式的思考轨迹,人类可以更容易理解模型的决策过程,识别错误来源,从而提升对模型输出的信任。
- 事实基础性 (Grounding): 外部工具的引入(如 Wikipedia API)有效缓解了 CoT 中常见的“事实幻觉”和错误传播问题,使推理过程更加依赖于外部获取的真实信息。
- 动态适应性:
- Reason to Act: 思考可以指导行动,例如根据当前理解调整搜索查询,或制定多步计划。
- Act to Reason: 行动获取的信息可以反过来更新模型的内部状态和推理路径,例如发现某个假设错误后调整策略。
- 鲁棒性与泛化性: 即使只有极少的 in-context 示例 (1-6个),ReAct 也能在多种任务上展现出强大的性能,超越仅依赖推理或仅依赖行动的基线方法。
4. 实验
- 知识密集型任务 (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 103∼105) 训练实例的模仿学习 (IL) 和强化学习 (RL) 方法 (ALFWorld 提升 34%,WebShop 提升 10%)。
- 凸显了 LLM 预训练知识 (如常识) 在复杂交互环境中的巨大潜力。
5. 理论思考
从概率角度看,传统的 CoT 可以视为 P ( answer ∣ question , thought_trace ) P(\text{answer} | \text{question}, \text{thought\_trace}) P(answer∣question,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,ai∣history<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 的启示在于:
- 结构化输出的重要性: 引导 LLM 产生结构化的中间步骤 (如思考和动作) 对提升性能和可解释性至关重要。
- 内部模拟与外部交互的平衡: 如何让 LLM 有效地在利用其庞大内部知识和查询外部实时信息之间取得平衡,是提升智能体能力的核心。
- Prompting 的力量尚未枯竭: 即使在模型能力飞速提升的今天,精心设计的 Prompt 依然是引导和控制 LLM 行为的强大工具。
希望对各位有所帮助。