定义
ReAct(Reasoning + Acting)是一种将推理(Reasoning)与行动(Acting)结合的提示范式,由 Shunyu Yao 等人于 2022 年提出。核心思想是形成”思考-行动-观察”循环,让推理指导行动、行动结果修正推理。
工作原理
ReAct 模式的核心循环:
- 思考(Thought):模型分析当前状态,决定下一步行动
- 行动(Action):模型执行具体操作(调用工具、搜索、计算等)
- 观察(Observation):获取行动的结果反馈
- 循环:基于新观察继续思考,直至达成目标
形式化表达
每个时间步 ,策略 (LLM)根据原始问题 和历史轨迹,生成当前思考 和行动 :
工具 执行行动并返回观察 ,循环直至任务完成。
ReAct vs CoT
| 维度 | Chain of Thought | ReAct |
|---|---|---|
| 核心机制 | 纯推理链路 | 推理 + 外部交互 |
| 信息源 | 仅模型内部知识 | 结合外部工具和数据 |
| 适用场景 | 纯逻辑推理、数学 | 信息检索、任务执行 |
| 可验证性 | 推理过程可见 | 行动结果可验证 |
| 局限 | 容易产生事实幻觉 | 依赖 LLM 格式遵循能力 |
核心实现结构
ReActAgent:
循环(最多 max_steps 次):
1. 格式化提示词(注入工具列表 + 问题 + 历史)
2. 调用 LLM 生成 Thought + Action
3. 解析输出(正则提取 Thought 和 Action)
4. 如果是 Finish[答案] → 返回并终止
5. 否则执行工具调用 → 获取 Observation
6. 追加 (Action, Observation) 到历史
提示词模板要素:角色定义、工具清单、格式规约(Thought/Action/Action Input/Observation 标签)、动态上下文(question/history)。
关键解析函数:_parse_output 用正则分离 Thought/Action,_parse_action 用正则从 Search[xxx] 中提取工具名和输入。
特点与局限
特点
- 高可解释性:Thought 链清晰展示每一步决策依据
- 动态规划与纠错:“走一步,看一步”,根据 Observation 动态调整
- 工具协同:LLM 负责规划推理,工具负责搜索计算
局限性
- 对 LLM 自身能力高度依赖:逻辑推理、指令遵循和格式化能力不足时流程易中断
- 执行效率问题:需多次调用 LLM,网络延迟和计算成本高
- 提示词脆弱性:模板微小变动可能影响 LLM 行为
- 可能陷入局部最优:缺乏全局长远规划
适用场景
- 需要外部信息查询的任务(搜索、数据库查询)
- 多步骤工具调用工作流
- 需要与环境交互的代理任务
- 动态决策制定
与 Plan-and-Solve、Reflection 的关系
ReAct 是 Agent_Paradigms 中的三种经典范式之一:
- ReAct:边想边做,动态调整(适合探索性任务)
- Plan-and-Solve:先完整规划,后严格按序执行(适合逻辑确定的任务)
- Reflection:执行→反思→优化迭代(适合高精度任务)
三者可混合使用,如用 Reflection 作为外层循环包裹 ReAct。
关联连接
- Agent_Paradigms — 三种经典 Agent 范式总览
- Agentic_Systems — 智能体系统(ReAct 是其核心范式)
- Chain_of_Thought — 思维链(ReAct 的前身)
- Tree_of_Thoughts — 思维树
- Prompt_Engineering — 提示工程总览
- 摘要-hello-agents — Datawhale 智能体教程来源(含可运行实现代码)