「Hello Agents 第04章」Agent思考三剑客:ReAct、Plan-and-Solve与Reflection
一句话结论:Agent”想太多”绝对是优点——关键是用对思考方式。ReAct适合动态探索,Plan-and-Solve适合结构化任务,Reflection适合精益求精,三种范式各有其战场。
Agent”想太多”是优点还是缺点?
有人测试AutoGPT,让它”帮我规划一次东京旅行”,结果它连续思考了47步,期间查了天气、汇率、签证政策、各区域住宿评比、美食推荐……最后把用户的账户余额花了个七七八八,旅行计划还没出来。
这就是初代Agent最典型的”想太多”综合征:没有方法论的自主思考,比没有思考更危险。
但真正的问题不是”想多想少”,而是用什么框架想。
2022-2023年间,AI研究界提出了三种经典的Agent推理范式,它们从不同角度解决了”Agent该怎么想”的问题:
- ReAct:边想边做,像侦探破案
- Plan-and-Solve:先谋后动,像厨师做菜
- Reflection:做完复盘,像运动员看回放
今天,我们不只讲理论,还要从零实现它们。
一、三种范式速览
先看一张全局对比表,建立整体认知:
| 维度 | ReAct | Plan-and-Solve | Reflection |
|---|---|---|---|
| 核心思路 | 思考与行动交替进行 | 先规划再执行 | 执行后反思改进 |
| 最擅长场景 | 信息搜集、动态探索 | 结构化多步骤任务 | 代码生成、创意写作 |
| 工具依赖 | ✅ 强依赖外部工具 | ✅ 需要工具执行 | ⚠️ 可以纯LLM内部迭代 |
| 可解释性 | ✅ 高,每步有思考日志 | ✅ 高,计划清晰 | ⚠️ 中等 |
| 应对计划外情况 | ✅ 灵活适应 | ❌ 计划可能失效 | ⚠️ 需要多轮 |
| 计算成本 | ⚠️ 中等 | ⚠️ 中等 | ❌ 高(多轮调用) |
| 适合任务长度 | ⚠️ 中等复杂 | ✅ 长链任务 | ✅ 高质量输出任务 |
三种范式不是谁取代谁,而是各有适用场景的工具箱。
二、ReAct:侦探推理法
什么是ReAct?
**ReAct(Reasoning + Acting)**来自2022年Google的论文《ReAct: Synergizing Reasoning and Acting in Language Models》。
核心思想:让Agent交替进行”思考”和”行动”,就像侦探破案——看到线索(观察),推断意义(思考),去调查新线索(行动),再观察……
类比来说:你走进一个陌生城市找一家餐厅。你不会坐下来先规划”完整路线”,而是:
“这条街好像没有,往左边看看” → 走过去 → “哦,有家店,看看评价” → 搜评价 → “评分4.7,合适!” → 进去
边走边想,随机应变。 这就是ReAct的精髓。
ReAct的工作流程
flowchart TD
START(["🚀 输入问题"])
THINK["🟣 Thought<br/>分析当前情况<br/>决定下一步行动"]
ACT["🟢 Action<br/>调用工具执行<br/>搜索/计算/查询"]
OBS["🟡 Observation<br/>收集工具返回结果"]
CHECK{"🔴 是否可以<br/>给出答案?"}
FINISH["✅ Finish<br/>输出最终答案"]
START --> THINK --> ACT --> OBS --> CHECK
CHECK -->|"不够,继续"| THINK
CHECK -->|"可以了"| FINISH
style START fill:#C7CEEA,stroke:#9FA8DA,color:#333
style THINK fill:#E8D5F5,stroke:#CE93D8,color:#333
style ACT fill:#B5EAD7,stroke:#80CBC4,color:#333
style OBS fill:#FFF9C4,stroke:#F9A825,color:#333
style CHECK fill:#FFB3C6,stroke:#F48FB1,color:#333
style FINISH fill:#B5EAD7,stroke:#80CBC4,color:#333每一轮循环,Agent都输出以下格式:
1 | Thought: [分析问题,决定下一步] |
ReAct实战代码
下面是一个完整的、可直接运行的ReAct Agent:
运行条件:需要
pip install openai,并设置OPENAI_API_KEY环境变量。
1 | import re |
三、Plan-and-Solve:厨师做菜法
什么是Plan-and-Solve?
**Plan-and-Solve(计划后执行)**来自2023年的论文《Plan-and-Solve Prompting》。
核心思想:先花时间制定完整计划,再逐步执行。类比厨师做一桌菜:先看菜谱(规划流程和顺序),再依序准备食材、下锅(执行步骤)。
区别于ReAct的”边走边想”,Plan-and-Solve认为:好的计划能避免走弯路,提前识别依赖关系,减少无效探索。
Plan-and-Solve工作流程
flowchart TD
START(["🚀 输入复杂任务"])
PLAN["🔵 规划阶段<br/>将任务分解为<br/>有序子步骤清单"]
EXEC1["🟢 执行步骤1<br/>可能调用工具"]
EXEC2["🟢 执行步骤2<br/>利用上一步结果"]
EXECN["🟢 执行步骤N<br/>..."]
INTEGRATE["🟡 整合结果<br/>综合所有步骤输出"]
FINISH["✅ 最终答案"]
START --> PLAN --> EXEC1 --> EXEC2 --> EXECN --> INTEGRATE --> FINISH
style START fill:#C7CEEA,stroke:#9FA8DA,color:#333
style PLAN fill:#C7CEEA,stroke:#9FA8DA,color:#333
style EXEC1 fill:#B5EAD7,stroke:#80CBC4,color:#333
style EXEC2 fill:#B5EAD7,stroke:#80CBC4,color:#333
style EXECN fill:#B5EAD7,stroke:#80CBC4,color:#333
style INTEGRATE fill:#FFF9C4,stroke:#F9A825,color:#333
style FINISH fill:#B5EAD7,stroke:#80CBC4,color:#333Plan-and-Solve代码示例
1 | import os |
四、Reflection:运动员看回放法
什么是Reflection?
**Reflection(自我反思)**的核心思想来自认知科学——人类的学习不只是”做”,还要”复盘”。运动员看比赛录像、医生参加病例讨论、程序员做code review,都是反思机制在起作用。
对Agent来说,Reflection意味着:先生成一个答案,让另一个”评审员角色”指出问题,然后根据反馈改进,循环迭代直到满意。
这特别适合代码生成、写作润色、方案设计这类”没有唯一正确答案,但有优劣之分”的任务。
Reflection工作流程
flowchart TD
START(["🚀 输入任务"])
INIT["🟢 初始生成<br/>产出第一版答案"]
REFLECT["🔴 Reflection<br/>评审员角色<br/>指出问题和改进方向"]
CHECK{"🟡 达到终止<br/>条件了吗?"}
REFINE["🟣 Refine<br/>根据反馈<br/>生成改进版本"]
FINAL["✅ 最终输出"]
START --> INIT --> REFLECT --> CHECK
CHECK -->|"还需改进"| REFINE --> REFLECT
CHECK -->|"满意/达到上限"| FINAL
style START fill:#C7CEEA,stroke:#9FA8DA,color:#333
style INIT fill:#B5EAD7,stroke:#80CBC4,color:#333
style REFLECT fill:#FFB3C6,stroke:#F48FB1,color:#333
style CHECK fill:#FFF9C4,stroke:#F9A825,color:#333
style REFINE fill:#E8D5F5,stroke:#CE93D8,color:#333
style FINAL fill:#B5EAD7,stroke:#80CBC4,color:#333Reflection代码示例
1 | import os |
运行这段代码,你会看到一个有趣的现象:第一版往往是O(n²)的暴力解法,Reflection会指出”可以用哈希表优化到O(n)”,第二版就会变成更高效的实现。这就是AI自我改进的缩影。
五、三种范式的对比:何时用哪种?
graph LR
TASK["📥 收到任务"]
Q1{"需要实时查询<br/>外部信息?"}
Q2{"任务结构清晰<br/>步骤可预定义?"}
Q3{"需要高质量输出<br/>允许多次迭代?"}
REACT["⚡ ReAct<br/>动态探索<br/>边想边做"]
PAS["📋 Plan-and-Solve<br/>先谋后动<br/>按图索骥"]
REF["🪞 Reflection<br/>迭代精进<br/>不断优化"]
TASK --> Q1
Q1 -->|"是"| REACT
Q1 -->|"否"| Q2
Q2 -->|"是"| PAS
Q2 -->|"否"| Q3
Q3 -->|"是"| REF
Q3 -->|"否,单次即可"| PAS
style TASK fill:#C7CEEA,stroke:#9FA8DA,color:#333
style Q1 fill:#FFF9C4,stroke:#F9A825,color:#333
style Q2 fill:#FFF9C4,stroke:#F9A825,color:#333
style Q3 fill:#FFF9C4,stroke:#F9A825,color:#333
style REACT fill:#B5EAD7,stroke:#80CBC4,color:#333
style PAS fill:#FFDAB9,stroke:#FFAB76,color:#333
style REF fill:#E8D5F5,stroke:#CE93D8,color:#333| 任务类型 | 推荐范式 | 理由 |
|---|---|---|
| “搜一下XXX的最新消息并总结” | ReAct | 需要动态搜索,信息不确定 |
| “分析竞品并写一份市场报告” | Plan-and-Solve | 步骤清晰,结构化输出 |
| “帮我写一段Python爬虫代码” | Reflection | 代码质量可以迭代提升 |
| “帮我订机票+酒店+制定行程” | Plan-and-Solve + ReAct混合 | 先规划,执行时动态查询 |
| “写一篇技术博客” | Reflection | 内容质量可以通过反思打磨 |
| “回答一个即时的事实问题” | ReAct | 快速查找,不需要复杂规划 |
六、常见误区
❌ 误区一:ReAct就是最好的Agent范式
ReAct论文发表时轰动了圈子,但它并非万能。在任务结构清晰、步骤已知的场景下,Plan-and-Solve往往成功率更高——因为它避免了ReAct在探索过程中走弯路的问题。选错范式,不如没有范式。
❌ 误区二:Reflection迭代越多越好
每轮Reflection都要多消耗1-2次LLM调用。在GPT-4的API成本下,3轮Reflection的费用接近6次普通问答。要为质量收益和成本之间找到平衡点,而不是无限循环迭代。
❌ 误区三:这三种范式是互斥的
实际项目中,它们经常被组合使用。比如:先用Plan-and-Solve制定整体计划,执行阶段用ReAct动态调用工具,最终输出时用Reflection打磨质量。框架是工具,不是教条。
✅ 实用建议:从ReAct开始
如果你是第一次构建Agent,从ReAct开始。它结构简单、可解释性强、容易调试。等你对Agent的基本行为有了感觉,再考虑引入Plan-and-Solve或Reflection来提升特定场景的表现。
七、下一步怎么学?
恭喜!你已经掌握了三种经典Agent范式:
- ReAct:适合动态信息搜集,边想边做
- Plan-and-Solve:适合结构化任务,先谋后动
- Reflection:适合高质量输出,迭代精进
推荐行动:
- 运行ReAct代码,观察Agent如何在多步骤中保持连贯推理
- 运行Reflection代码,看AI如何把自己的代码从朴素解优化到最优解
- 思考:你工作中最近遇到的一个复杂问题,适合用哪种范式来解决?
- 进阶探索:LangGraph、CrewAI 等框架都是在这些经典范式上构建的,值得深入研究
📚 本文参考:datawhalechina/hello-agents 第四章
📚 Hello Agents 系列导航
本文是《Hello Agents》开源系列第 4/16 章,适合 AI Agent 开发入门到进阶学习。
| 方向 | 章节 |
|---|---|
| ◀ 上一章 | 第03章:LLM原理:它不理解语言,却比你更会用语言 |
| 下一章 ▶ | 第05章:不会写代码也能搭AI Agent?低代码平台实战指南 |
📖 全部 16 章目录(点击展开)
- 初识智能体:LLM会聊天,Agent能办事
- 智能体60年:从会下棋到能打工
- LLM原理:它不理解语言,却比你更会用语言
- Agent思考三剑客:ReAct、Plan-and-Solve与Reflection ← 当前
- 不会写代码也能搭AI Agent?低代码平台实战指南
- 当一个Agent不够用时:三大框架多智能体实战
- 为什么要造轮子?200行Python手写Agent框架
- Agent为何失忆?RAG与记忆系统深度解析
- Context Engineering:让Agent真正聪明的隐秘武器
- AI Agent如何与世界对话:MCP、A2A、ANP协议全解析
- 用强化学习驯服AI Agent:GRPO与Agentic RL全解析
- 你的Agent真的好用吗?智能体评估体系完全指南
- 用Agent规划日本5日游,2分钟搞定2小时的活
- 自动写研究报告的Agent:比ChatGPT深,但有盲点
- 赛博小镇:25个AI角色自主生活,涌现了什么?
- 学完16章,现在从0构建你自己的Agent
本章介绍 ReAct、Plan-and-Solve、Reflection 三种 Agent 思考范式,对比维度:三种范式内部 vs 相邻章节的 LLM 与框架实践 vs 工业界主流 Agent 框架的实现选择。
对比分析
一、本章概念 vs 相邻章节
| 维度 | ch04 思考范式 | ch03 LLM 原理 | ch05 低代码平台 | ch06 框架实战 |
|---|---|---|---|---|
| 抽象层级 | 思考模板 | 模型能力 | 拖拽工具 | 代码级框架 |
| 关注问题 | “如何决定下一步” | “为什么能决定” | “不写代码怎么做” | “怎么选框架” |
| 与本章互补 | —— | 提供推理能力 | 把范式封装成可视化 | 把范式封装成 SDK |
二、对比生产中类似框架
| 范式 | 工业对应 | 代表实现 | 适用任务 |
|---|---|---|---|
| ReAct | Thought → Action → Observation 循环 | LangChain AgentExecutor、ReAct Agent | 需要调用工具的开放任务 |
| Plan-and-Solve | 先列计划再逐步执行 | LangChain PlanAndExecute、BabyAGI | 多步结构化任务 |
| Reflection | 生成 → 评审 → 改进 | Reflexion、CrewAI reviewer 角色 | 写作 / 代码 / 长链推理 |
三、本章观点的优缺点
优点:
- 把三种范式的”何时用”讲得清楚,避免乱选
- 用同一个旅行规划例子贯穿三种范式,对比直观
缺点:
- 没有覆盖 Tree of Thoughts、Self-Ask 等进阶方法
- 对失败回滚机制讨论较少
四、何时选
- 简单查 / 写任务:ReAct 足够
- 多步有依赖:Plan-and-Solve
- 需要质量把关:Reflection(可与 ReAct 嵌套使用)