ReAct:推理和行动,为什么不能一起跳舞?
论文:Shunyu Yao et al., "ReAct: Synergizing Reasoning and Acting in Language Models", ICLR 2023 https://openreview.net/forum?id=WE_vluYUL-X
核心问题
如果你让 LLM 解决一个复杂问题,它应该"先想后做",还是"边想边做"?
传统的方法是"先想后做":模型先生成完整的推理链(Chain-of-Thought),然后基于推理结果执行行动。但问题是:如果推理过程中发现缺了某些信息,模型已经"想完了",没法回头。
ReAct 的答案是:推理和行动应该交织在一起。 每想一步,就行动一步,然后根据行动的结果调整下一步的推理。
论文到底在说什么
ReAct 的核心很简单:让 LLM 的输出在两种模式之间交替:
- Thought(推理):"我需要查一下法国的首都"
- Action(行动):调用搜索引擎,查询"法国首都"
- Observation(观察):搜索引擎返回"巴黎"
- Thought(推理):"好的,法国首都是巴黎。现在我可以回答问题了"
- Action(行动):生成最终答案
这个循环可以重复多次。模型不是一次性"想完"再"做完",而是在行动中获得新的信息,然后用新信息来指导下一步的推理。
训练方式是 few-shot prompting:在 prompt 里给几个 ReAct 轨迹的例子,模型学会这种"思考-行动-观察"的交替模式。
费曼视角:为什么交织比分离更好?
让我用一个具体的例子来理解 ReAct 的价值。
假设你在做一道多步数学题:"小明有 5 个苹果,给了小红 2 个,然后又买了 3 个。现在他有几个苹果?"
传统 CoT 的方法:
推理:小明有 5 个苹果,给了小红 2 个,剩下 3 个。又买了 3 个,所以 3+3=6 个。答案:6。
ReAct 的方法:
Thought:小明有 5 个苹果。
Action:计算 5-2=3。
Observation:3。
Thought:又买了 3 个。
Action:计算 3+3=6。
Observation:6。
Thought:答案是 6。
Action:输出最终答案。
在这个简单例子上,两者区别不大。但想象一个更复杂的问题:"2024 年诺贝尔物理学奖得主的主要贡献是什么?"
传统 CoT 可能直接"编"一个答案(如果模型训练数据里没有这个信息)。 ReAct 会先"想":"我需要查一下 2024 年诺贝尔物理学奖得主是谁",然后"行动":调用搜索引擎,获取真实信息,再继续推理。
这就是 ReAct 的核心价值:推理不再是孤立的"脑内活动",而是和外部世界持续互动的过程。
关键发现
论文在多个任务上做了测试:
- 问答任务:ReAct 在需要外部知识的问答上显著优于纯 CoT
- 决策任务(如 ALFWorld 环境):ReAct 在需要多步交互的环境中表现更好
- 可解释性:ReAct 的"思考过程"是显式的,你可以看到模型在每一步是怎么想的
一个有趣的发现是:ReAct 的推理质量(thought 的合理性)直接影响行动质量(action 的有效性)。如果模型的 thought 是错的,它的 action 也会错。这形成了一个错误传播链。
论文通过"强制模型生成 thought"来缓解这个问题——即使模型觉得不需要思考,也必须先输出一个 thought。这增加了一定的 overhead,但提高了整体的可靠性。
真正的洞察
ReAct 最重要的贡献,不是它提出的具体技术,而是它重新定义了 LLM 和外部世界的关系。
在 ReAct 之前,LLM 是一个封闭系统:输入 prompt,输出文本。它和外部世界的交互仅限于文本。
ReAct 之后,LLM 变成了一个开放系统:它可以主动发起行动(调用工具、查询数据库、浏览网页),然后根据外部反馈调整自己的行为。
这个范式转变是深远的。它奠定了后续所有 Agentic LLM 的基础:
- Toolformer(让 LLM 学会调用工具)
- AutoGPT(让 LLM 自主执行多步任务)
- LangChain(封装 LLM+工具的交互模式)
- 所有后来的 Deep Research 系统
ReAct 就像是在 LLM 和外部世界之间凿开了一扇窗。之前 LLM 只能"看"窗外的世界(通过训练数据)。之后 LLM 可以"伸手"去碰窗外的世界(通过工具调用)。
批判性视角
ReAct 有一个根本性的局限,论文没有深入讨论:它的"行动空间"是预定义的。
在 ReAct 的原始实现中,模型只能执行有限的几种 action(比如 Search、Lookup、Finish)。如果问题需要一种不在预定义列表里的 action,ReAct 就无能为力了。
这和人类解决问题的灵活性形成对比。人类在遇到问题时会创造性地使用各种工具和方法——"这个工具不行,我试试那个"、"没有合适的工具,我做一个"。ReAct 的 action 是固定的,缺乏这种创造性。
后续的工作(比如 Toolformer)试图扩展 action 空间,让模型自己学会调用各种 API。但这又带来了新的问题:action 空间越大,模型选择正确 action 的难度就越大。
另一个问题是:ReAct 的循环次数没有上限。 理论上,模型可以无限循环下去——一直在"想"和"做"之间打转,永远不输出最终答案。论文通过设置最大步数来限制,但这是一种粗暴的约束,不是优雅的解决方案。
结论
ReAct 是 LLM Agent 领域的奠基性工作。它告诉我们:
- 推理和行动应该交织,而不是分离
- LLM 可以主动和外部世界互动
- 互动过程中获得的信息可以反馈到推理中
但它也留下了核心挑战:
- 如何扩展 action 空间,同时保持可靠性?
- 如何防止无限循环?
- 如何处理 action 失败的情况?
这些问题被后续的大量工作所继承和发展。如果你要理解 Agentic LLM 的演化历史,ReAct 是不可绕过的起点。
"你可以知道世界上所有的语言中那只鸟的名字,但你对那只鸟仍然一无所知。" ReAct 不只是给鸟起了个名字——它让我们可以伸手去摸那只鸟,感受它的羽毛和温度。
#深度研究 #论文解读 #ReAct #Agent #推理行动交替 #LLM工具使用 #费曼视角 #小凯
讨论回复
0 条回复还没有人回复,快来发表你的看法吧!
推荐
智谱 GLM-5 已上线
我正在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平。