深色模式
03 · ReAct 与规划:边想边做
学完你能说出:
- ReAct 的格式:Thought(思考)→ Action(行动)→ Observation(观察),循环往复。
- 为什么「先想再做」比「直接做」好,为什么「边做边看结果」比「只想不做」好。
- 另一种思路「先规划再执行」(Plan-and-Execute)和 ReAct 的区别。
先看地图
前两篇讲了 Agent 的组成和单次工具调用。这一篇讲多步任务里,模型怎么一步步推进。
本篇讲 4 个点:① ReAct 是什么 → ② 一个多步任务的完整记录 → ③ 为什么这么设计 → ④ 先规划再执行。
一句话本质
ReAct = 让模型每一步先写下「我在想什么」,再决定「做什么」,看到结果后再想下一步。 名字来自 Reasoning(推理)+ Acting(行动)。
生活类比:侦探破案
- 只推理不调查的侦探:坐在家里空想,很容易想错(只想不做)。
- 只调查不推理的侦探:到处乱问,不知道自己在找什么(只做不想)。
- 好侦探:「凶手可能是左撇子 → 去查谁是左撇子 → 发现管家是 → 那再查管家当晚在哪……」想和做交替推进,每一步的发现都会修正下一步的想法。
一步步看:「《三体》作者今年多大?」
可用工具:search(query) 搜索、calculator(expr) 计算。
Thought 1: 要知道作者年龄,先得知道作者是谁、哪年出生。
Action 1: search("《三体》 作者")
Observation 1: 《三体》的作者是刘慈欣。
Thought 2: 再查刘慈欣的出生年份。
Action 2: search("刘慈欣 出生年份")
Observation 2: 刘慈欣,1963 年出生。
Thought 3: 今年是 2026 年,算一下 2026 − 1963。
Action 3: calculator("2026 - 1963")
Observation 3: 63
Thought 4: 信息齐了,可以回答。
Final Answer: 《三体》的作者是刘慈欣,1963 年出生,今年(2026 年)63 岁(生日没过的话是 62 岁)。注意第 2 步:「查出生年份」这个动作,是看到第 1 步的结果后才决定的。提前写死流程做不到这一点。
为什么这么设计
为什么要先写 Thought(思考),而不是直接行动?
- 问题:模型直接输出行动,容易「想当然」:调错工具、漏掉步骤。
- 方案:每次行动前,先把推理写出来(类似第 04 篇讲的思维链)。
- 好处:写出来的推理成为后续生成的上下文,行动更有针对性;开发者也能看到它「为什么这么做」,方便调试。
一句话答法
先写思考相当于打草稿,让行动有依据、更准确;同时推理过程可见,出错时容易定位原因。
为什么要交替进行,而不是先全部想完再做?
- 问题:很多信息只有执行之后才知道。不知道作者是谁,就没法提前决定「查谁的出生年份」。
- 方案:想一步、做一步、看结果,再想下一步。
- 好处:能根据真实结果随时调整,减少凭空推理带来的幻觉。
一句话答法
因为后续步骤往往依赖前一步的结果,交替进行能用真实观察修正推理,比一次性想完更准确,也更少幻觉。
怎么知道该停下来?
- 问题:模型可能一直查下去,或在两个动作之间打转。
- 方案:三重保险:① 模型判断信息够了,输出最终答案;② 最大轮数限制;③ 检测重复调用(同样的工具、同样的参数连续出现)。
- 好处:不会死循环,成本可控。
一句话答法
由模型判断完成并输出最终答案,同时程序设置最大轮数和重复检测兜底。
另一种思路:先规划,再执行
Plan-and-Execute(规划-执行):先让模型列出完整计划,再一步步执行,必要时修改计划。
计划:① 搜索三体作者 ② 搜索作者出生年份 ③ 计算年龄
执行:按步骤做 → 某一步结果出乎意料 → 回头修改计划| ReAct | 先规划再执行 | |
|---|---|---|
| 怎么推进 | 走一步看一步 | 先列全盘计划,再按计划做 |
| 适合 | 步骤少、不确定性高的任务 | 步骤多、结构清晰的任务 |
| 优点 | 灵活,随时调整 | 全局视角好,不容易跑偏 |
| 缺点 | 长任务容易迷失方向 | 计划可能不符合实际,要能重新规划 |
英文术语拆解
| 术语 | 拆开看 | 一句话意思 |
|---|---|---|
| ReAct | Reasoning 推理 + Acting 行动 | 推理和行动交替进行的 Agent 模式(2022 年提出) |
| Thought | 思考 | 模型写下的推理过程 |
| Action | 行动 | 调用某个工具 |
| Observation | 观察 | 工具返回的结果 |
| Final Answer | final 最终 + answer 答案 | 任务完成后的最终输出 |
| Plan-and-Execute | plan 计划 + execute 执行 | 先规划再执行的 Agent 模式 |
| Replanning | re 重新 + planning 规划 | 根据执行情况修改计划 |
面试怎么问
Q:介绍一下 ReAct。
ReAct 让模型交替输出推理(Thought)和行动(Action):先推理下一步需要什么,再调用工具,拿到观察结果(Observation)后继续推理,直到得出最终答案。它把思维链的推理能力和工具调用结合起来:推理指导行动,行动的结果又修正推理,比只推理更少幻觉,比只行动更有方向。
Q:ReAct 和 Plan-and-Execute 有什么区别?
ReAct 是逐步决策,每一步都根据最新观察决定下一步,灵活但长任务容易偏离目标;Plan-and-Execute 先生成全局计划再执行,适合步骤多、结构清晰的任务,但需要在执行偏离预期时重新规划。
Q:Agent 陷入循环怎么办?
设置最大迭代次数;检测重复的工具调用;在提示里要求信息足够时立即给出答案;循环被中断时,返回已有的部分结果和失败原因。
容易混的地方
- ReAct ≠ React(前端框架):名字撞了,完全无关。
- Thought 不一定展示给用户:它主要给模型自己和开发者看。很多产品只展示最终答案。
- 现在很多模型原生支持工具调用:不一定要严格按「Thought: / Action:」这种文本格式写,但「推理 → 行动 → 观察」的循环思想是一样的。
和其他知识的连接
- ← 来自 Prompt 与采样参数:Thought 就是思维链(CoT)用在 Agent 里。
- ← 来自 工具调用:每个 Action 就是一次工具调用。
- → 影响 记忆与 MCP:步骤一多,历史越来越长,就需要记忆管理。
- 原论文:Yao 等人,ReAct: Synergizing Reasoning and Acting in Language Models(2022)。你的
E:\Desktop\1\local_materials里有这篇 PDF。
自测 3 问
Q1:ReAct 的三个环节是什么?用侦探类比说一下。
点开看答案
Thought(思考)→ Action(行动)→ Observation(观察),循环往复。像好侦探:先推理「可能是左撇子」,再去调查,看到调查结果后修正推理,再决定下一步查什么。
Q2:为什么不让模型一次把所有步骤都想好再执行?
点开看答案
后面的步骤往往依赖前面的结果:不知道作者是谁,就没法决定查谁的出生年份。交替进行能用真实结果修正推理,更准确,也更少幻觉。
Q3:Agent 怎么避免停不下来?
点开看答案
① 模型判断信息够了就输出最终答案;② 程序设置最大轮数;③ 检测重复的工具调用,出现就中断并返回原因。
✅ 验收清单
- 能写出「三体作者年龄」例子的 Thought / Action / Observation 记录
- 能讲清「先想再做」和「交替进行」各自解决什么问题(问题 → 方案 → 好处)
- 能说出 Agent 停止的三重保险
- 能对比 ReAct 和 Plan-and-Execute,各说出一个适合的场景
- 能说出 ReAct 名字的来历
下一步该懂什么
- 步骤一多,对话历史越来越长,Agent 怎么「记住」重要的事?外部工具那么多,怎么统一接入?→ 记忆与 MCP