「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 |
请从以下角度评审:
- 算法效率:时间复杂度是否最优?有没有更好的算法?
- 代码质量:可读性、命名、边界条件处理是否到位?
- 正确性:是否有潜在的bug?
如果代码已经很好,回复”已达最优,无需改进”。
否则,指出最主要的1-2个问题,并给出明确的改进建议。”””
feedback = get_llm_response(reflect_prompt)
print(f"🔴 评审反馈:\n{feedback}")
# 终止条件:评审员认为已经够好了
if "无需改进" in feedback or "已达最优" in feedback:
print("\n✅ 评审通过,迭代结束!")
break
# 优化:根据反馈生成改进版本
refine_prompt = f"""你是一位Python高级工程师,正在根据代码评审反馈优化代码。
原始任务:{task}
上一版本代码:
1 | {current_code} |
评审反馈:
{feedback}
请根据评审反馈生成优化后的代码。只输出代码,不要解释。”””
current_code = get_llm_response(refine_prompt)
print(f"🟢 优化版本:\n{current_code}")
print(f"\n{'='*60}")
print(f"🏁 最终代码:\n{current_code}")
return current_code
if name == “main“:
agent = ReflectionAgent(max_iterations=2)
# 任务:让Reflection帮我们从O(n²)的朴素算法迭代到O(n)的最优解
agent.run("编写一个Python函数,找出给定列表中和为目标值target的两个数的索引(Two Sum问题)")
1 |
|
| 任务类型 | 推荐范式 | 理由 |
|---|---|---|
| “搜一下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