4.1 ReAct 原理:Reasoning + Acting 的循环结构


4.1 ReAct 原理:Reasoning + Acting 的循环结构

ReAct 这个名字本身点明了一切:Reasoning + Acting,推理加行动。它不是新发明一个算法,而是把两件原本分开的事——「想」和「做」——拧成一股绳,让它们在每一步里交替进行。这个交替的循环,就是 LLM Agent 的运转内核。

4.1.1 从「纯推理」和「纯行动」说起

在 ReAct 之前,LLM 有两种典型的使用方式,各有明显短板:

方式一:纯推理(Reasoning Only)

LLM 只在内部推理(如 CoT),不调用任何工具。

用户: 美国第 47 任总统是谁? LLM (CoT): 让我想想...美国总统一任一任数...第 47 任应该是... (但训练截止后的事它不知道,只能猜) 最终: (可能是错的或编造的)

短板:信息受限——LLM 只能用训练时的知识,不知道当下、查不到外部数据。这就是第 1.1 节讲的「知识截止」。

方式二:纯行动(Acting Only)

LLM 直接调用工具,不展开推理。

用户: 我应该买哪只股票? LLM: 直接调用 stock_recommend() (但该买哪只本身需要推理,工具不会替你想)

短板:失去推理——把决策丢给工具,但工具只提供数据,不提供判断。LLM 的推理能力被浪费。

4.1.2 ReAct:把两者拧起来

ReAct(Yao et al. 2022)的核心洞察:推理与行动应当交替进行,相互增强

  • 推理(Thought)决定下一步该调用什么工具、为什么。
  • 行动(Action)执行工具调用,获得新的信息。
  • 观察(Observation)把信息反馈给推理,作为下一步的依据。

这就是 ReAct 的三元组:Thought-Action-Observation

4.1.3 一个完整的 ReAct 轨迹

下面是一个经典的 ReAct 轨迹,任务是「苹果公司 2024 年营收是多少,比 2023 年增长多少?」

任务: 苹果公司 2024 年营收是多少,比 2023 年增长多少? [Thought 1] 我需要先查苹果 2024 年营收。 [Action 1] search("Apple revenue 2024 fiscal year") [Observation 1] Apple FY2024 total revenue: $391.0B [Thought 2] 拿到 2024 年了 ($391B)。现在需要 2023 年的对比。 [Action 2] search("Apple revenue 2023 fiscal year") [Observation 2] Apple FY2023 total revenue: $383.3B [Thought 3] 两年都有了。计算增长率: (391.0 - 383.3) / 383.3 = 7.7 / 383.3 ≈ 2.0% [Action 3] calculate("(391.0 - 383.3) / 383.3 * 100") [Observation 3] Result: 2.009% [Thought 4] 计算完成,信息齐全,可以回答了。 [Final Answer] 苹果 2024 财年营收约 3910 亿美元, 较 2023 年的 3833 亿美元增长约 2.0%。

注意这条轨迹的几个关键点:

观察 含义
每个 Thought 都明确「我接下来要干什么、为什么」 推理过程外显,可调试
Action 是具体的工具调用(search/calculate) 真实行动,获取外部信息
Observation 把工具结果反馈回来 形成闭环
最后 Thought 判断「信息齐全」才给 Final Answer 自主判断停止时机

💡 ReAct 的精妙:它把第 3 章的「思维链」与第 6 章的「工具调用」无缝融合。Thought 是 CoT 的展开,Action 是 Function Calling 的执行,Observation 是把行动结果接回推理。ReAct 不是新发明,而是把已有的两块积木拼成了完整系统

4.1.4 ReAct 三元组的作用

逐个看 Thought、Action、Observation 各自的作用:

Thought:推理外显

Thought 让 LLM 把内部推理写成显式文本。它的价值:

价值 说明
决定下一步 明确「接下来做什么、为什么」
错误可追溯 出错时能定位是哪步推理错了
人类可审核 推理过程可见,便于调试与监督
引导模型分配算力 与 CoT 同理,外显推理提升准确率

Action:真实行动

Action 是 ReAct 与纯 CoT 的根本区别——它真的去调用工具。

Action 类型 例子
信息查询 search(query)get_stock(ticker)
计算 calculate(expression)
数据操作 sql_query(sql)read_file(path)
通信 send_email(to, subj, body)
求助 request_human_help(reason)

Observation:观察反馈

Observation 把工具执行结果反馈给 LLM。它的质量直接决定 ReAct 能否收敛。

Observation 形态 例子
工具返回值 Result: 391.0B
错误信息 Error: ticker not found
执行状态 Success / Failed
环境状态 当前时间、用户身份等

⚠️ Observation 是 ReAct 的命脉。一个粗糙的 Observation(如把整个 JSON 原样塞回)会让 LLM 抓不住重点;一个精炼的 Observation(如 [search] 苹果 2024 营收: $391B)能让 LLM 高效决策。ReAct 的工程水平,很大程度上体现在 Observation 的格式化质量上——这一点第 2.4 节已讨论过。

4.1.5 ReAct 的循环结构

ReAct 不是「想一次、做一次」就结束,而是一个循环——直到 LLM 自己判断「信息齐全」或触发停止条件。

循环的三个关键判读

判读 含义
何时停 LLM 自主判断「信息齐全」+ 工程兜底(步数上限等)
何时转 Observation 后必然回到 Thought
何时答 Thought 判断「无需再调工具」时输出 Final Answer

注意 ReAct 的「Final Answer」不是一个独立的 Action——它是 Thought 判断「信息已足够、无需再调工具」后的直接输出。LLM 必须学会「什么时候不调工具、直接回答」,否则会陷入「为调工具而调工具」的怪圈。

4.1.6 ReAct 与纯推理、纯行动的对比

维度 纯推理 纯行动 ReAct
调工具 不调
推理展开 是(CoT)
外部信息
错误恢复 强(观察反馈)
可解释性
适用 闭卷推理 简单查询 复杂多步任务

💡 ReAct 的本质贡献:它让 LLM 的「推理能力」与「行动能力」形成正反馈——推理指导行动,行动反馈观察,观察又触发新的推理。这种「想-做-看-再想」的循环,正是人类解决问题的核心模式。ReAct 之所以成为 Agent 的灵魂范式,是因为它最贴近人类思维

4.1.7 ReAct 的循环与第 1 章核心循环的对应

回到第 1.2 节的「感知-规划-行动-观察」核心循环,ReAct 与它一一对应:

核心循环 ReAct 三元组
感知 Observation(观察上一步结果)
规划 Thought(推理下一步)
行动 Action(调用工具)
观察 Observation(接收结果)

可以说,ReAct 就是第 1 章核心循环的最小可运行实现。理解了 ReAct,就理解了 Agent 的运转本质。

4.1.8 ReAct 的关键工程问题预告

ReAct 原理虽简,工程实现却有几个硬问题,留待后续小节:

问题 详见
Prompt 怎么写,LLM 才会按 Thought/Action/Observation 格式输出? 4.2 节
上下文越来越长怎么办(每轮都在累积轨迹)? 4.2 节
出错了怎么学习(不只是当轮纠错,还跨任务积累)? 4.3 节 Reflexion
什么时候不该用 ReAct(延迟、成本)? 4.4 节

本节小结

  • ReAct = Reasoning + Acting,核心是把推理(Thought)与行动(Action)交替进行,用观察(Observation)形成闭环。
  • ReAct 弥补了「纯推理」无外部信息与「纯行动」无推理能力的双重短板。它的三元组 Thought-Action-Observation 构成 Agent 的最小运转单元。
  • 一个完整 ReAct 轨迹:Thought 决定下一步 → Action 调用工具 → Observation 反馈结果 → 回到 Thought,直到 LLM 判断「信息齐全」输出 Final Answer。
  • ReAct 与第 1 章核心循环(感知-规划-行动-观察)一一对应,是 Agent 核心循环的最小可运行实现。
  • Observation 是 ReAct 的命脉——它的格式化质量直接决定 Agent 的收敛效率。粗糙的 Observation 让 LLM 抓不住重点。
  • ReAct 原理虽简,工程实现有四大硬问题:Prompt 模板、上下文管理、跨任务学习、适用边界。这些是 4.2-4.4 节的主题。

下一节《4.2 ReAct 的工程实现》将讨论 Prompt 模板设计、轨迹生成与上下文管理——这是把 ReAct 从原理变成生产系统的关键。


作者与出处
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 会发光的石头的小龙虾 转发
评论区 (0)
U