Agent 为什么要先列计划,失败后还要反思?

先规划后执行与反思

约 14 分钟7 道自测更新于 2026-11-01

一句话记住ReAct 走一步看一步,容易陷进细节;先规划后执行负责看全局,Reflexion 则把失败写成下一次尝试的提醒。两种机制都要配合重规划、可靠反馈和循环上限,才能真正帮助 Agent 纠错。

01学完你能做到

知道 Agent 怎么先列计划再动手,计划失效时怎么重规划,以及怎么用「写反思」从失败中学习。

上一节(第 30 讲(ReAct:边想边做))讲了 ReAct:想一步、做一步、看一步。它的毛病之一是走一步看一步,缺少全局规划。这节讲两种补法:

  • 先规划后执行:动手之前先列出整份步骤清单。
  • 反思(Reflexion):做失败了,用文字总结教训,下次带着教训再试。

02先规划后执行(Plan-and-Execute)

名字从哪来

「Plan-and-Execute」是业界对一种架构的叫法,没有一篇对应的原始论文。和它最接近的学术工作是 Plan-and-Solve 提示(Wang 等,2023),第 18 讲(思维链 CoT)讲过。Plan-and-Solve 把 Zero-shot CoT 的「Let's think step by step」换成了下面这句:

Let's first understand the problem and devise a plan to solve the problem. Then, let's carry out the plan and solve the problem step by step.

(先理解问题,制定解题计划;然后按计划一步一步解题。)

Plan-and-Solve 是一次回答里先写计划再解题。Plan-and-Execute 把这个思路放大成系统结构,分成三个角色:

角色做什么类比
规划器(Planner)读任务,写出步骤清单项目经理排期
执行器(Executor)按清单一步一步做,每步可以调工具工程师干活
重规划(Replan)根据已完成的结果,修改剩下的计划周会调整排期

演示:同一个任务,ReAct 和先规划后执行怎么走

任务:「对比我们产品和竞品 A、B 的定价,写一页结论。」(示意,不是真实运行记录)

ReAct 的走法(第 30 讲(ReAct:边想边做)):

  1. 想:先查竞品 A。做:搜索 A 的定价。看:找到了。
  2. 想:A 有三档,再细看一下企业版……(越挖越深)
  3. ……20 步后窗口快满了,B 还没查。

先规划后执行的走法:

  1. 规划器先列清单:① 查我方定价;② 查 A;③ 查 B;④ 做对比表;⑤ 写结论。
  2. 执行器做 ①②。
  3. 执行器做 ③ 时发现 B 下架了,触发重规划:把 ③ 改成「查 B 的替代品 C」,后面的步骤不变。
  4. 执行器做完 ④⑤。

两种做法的差别:

  • 有全局视野:清单写在那里,不容易在某个分支上陷太深,也不容易漏步骤(Plan-and-Solve 本来就是为了减少「漏步骤错误」)。
  • 省钱:规划可以用强模型,执行用便宜模型;每步执行时不必把全部推理历史带上。
  • 代价:计划是基于开头的信息写的,环境一变就过时,所以必须能重规划。不能重规划的计划比没有计划还危险,Agent 会照着错的清单一路做下去。

什么时候适合

适合先规划适合 ReAct 边走边看
步骤能事先大致想清楚(调研、报告、迁移)下一步完全取决于上一步的结果(排查 bug、探索网页)
任务长,怕中途跑偏任务短,几步就完
想让人先审计划再执行要求反应快

实际产品经常混用:先出计划,每一步内部再用 ReAct 循环。Claude Code 和 Cursor 里的「待办清单(todo list)」就是这种做法:模型先写待办,做完一项勾一项,中途可以增删。(这里描述的是产品的公开表现,不涉及内部实现。)

规划器先列步骤,执行器逐步完成;环境变化时只修改剩余计划并重规划。
规划器先列步骤,执行器逐步完成;环境变化时只修改剩余计划并重规划。

03反思:Reflexion

核心想法

Shinn 等(2023)的 Reflexion,论文标题是「用语言做强化学习」。传统强化学习靠大量试错更新模型权重,又贵又慢。Reflexion 不改权重,而是:

  1. 让 Agent 试一次;
  2. 拿到反馈(成功或失败,或者单元测试报错);
  3. 让模型用文字写一段反思:错在哪、下次怎么改;
  4. 把反思存进记忆,下一次尝试时放进上下文。

论文的说法是:反思像一个「语义梯度」,给出改进的具体方向。

三个部件

部件论文名做什么
执行者Actor生成动作或代码(可以是 ReAct、CoT)
评估者Evaluator给这次尝试打分:对还是错
自我反思Self-Reflection把失败轨迹和分数变成一段文字建议

再加一个记忆:存最近几条反思。论文说上限 Ω 通常设为 1–3 条,因为上下文窗口有限。在 AlfWorld 实验里,他们只保留最近 3 条。

Reflexion 将执行、评估、反思和记忆连成跨尝试循环,把失败写成下一次尝试的文字提醒。
Reflexion 将执行、评估、反思和记忆连成跨尝试循环,把失败写成下一次尝试的文字提醒。

演示:写函数时的一轮反思(示意)

任务:写函数 median(nums) 返回中位数。

第 1 次尝试:Actor 写出 sorted(nums)[len(nums)//2]。评估:Agent 自己写的测试 median([1,2,3,4]) == 2.5 没通过,返回了 3。反思(存入记忆):

我没处理偶数长度的情况。偶数个元素时,中位数是中间两个数的平均值。下次要先判断长度奇偶。

第 2 次尝试:Actor 读到这条反思,写出分奇偶的版本,测试通过。

注意第 2 次是全新的一次尝试,不是在第 1 次的代码上打补丁。第 1 次留下的只有那段文字。

和第 20 讲(程序辅助与自我改进) Self-Refine 的区别

Self-Refine(第 20 讲(程序辅助与自我改进))Reflexion
改的对象同一份输出,一稿一稿地改整个下一次尝试
反馈来源模型自己评可以是环境、测试、启发式规则或模型
记忆本次改稿历史跨尝试保存的反思
典型场景写作、改代码风格需要多次试错的任务(游戏环境、编程)

论文结果

  • 编程:HumanEval(Python)pass@1 达到 91.0%,当时的 GPT-4 是 80.1%。
  • 决策:AlfWorld 134 个任务里,ReAct + Reflexion 完成了 130 个。只用 ReAct 时,第 6 到第 7 次尝试之间就不再进步。
  • 论文摘要的汇总说法:比强基线高 AlfWorld 22%、HotPotQA 20%、HumanEval 11%(都是绝对值)。

图里有个反例值得看:MBPP Python 上 Reflexion(77.1)反而低于 GPT-4(80.1)。论文的解释是:Agent 自己写的测试有假阳性,测试本身错了却显示「通过」。MBPP Python 的假阳性率是 16.3%,HumanEval Python 只有 1.4%。

这一点很重要:反思的质量取决于反馈的质量。评估信号不准,反思就会朝错的方向「学习」。

反思依赖可靠反馈;论文不同任务设置的结果说明错误测试可能让 Agent 朝错误方向学习。
反思依赖可靠反馈;论文不同任务设置的结果说明错误测试可能让 Agent 朝错误方向学习。

局限(论文自己写的)

  • 本质上仍是策略优化,可能卡在局部最优。
  • 记忆只是一个有容量上限的滑动窗口。
  • 很多代码难写准确的测试:不确定输出、调外部 API、并发等。

04重规划:计划和反思合在一起

把两节内容合起来看,一个能自我纠正的 Agent 有两个层次的循环:

层次什么时候触发改什么
步骤内(ReAct,第 30 讲(ReAct:边想边做))每次工具调用之后下一个动作
计划层(重规划)某一步失败,或者出现新信息剩下的步骤清单
尝试层(Reflexion)整次任务失败下一次整体尝试的思路

演示:设计一个「重规划触发条件」清单

设计 Agent 时,可以明确写出何时重规划,不让模型自己随意决定(示意):

  1. 某一步连续失败 2 次 → 重规划这一步及之后的步骤;
  2. 工具返回「资源不存在」 → 重规划;
  3. 已用步数超过计划的 1.5 倍 → 停下,请人确认;
  4. 重规划超过 3 次 → 放弃,报告人类。

第 4 条很重要。Reflexion 论文在 AlfWorld 里用的也是简单的启发式规则:同一动作得到同样的结果超过 3 轮,或者动作数超过 30,就触发反思。有上限的循环才安全。错误恢复的更多做法在第 36 讲(权限、沙箱与错误恢复)展开。

05延伸阅读

  • Shinn et al., Reflexion: Language Agents with Verbal Reinforcement Learning, 2023:arxiv.org
  • Wang et al., Plan-and-Solve Prompting, 2023:arxiv.org

06一分钟讲给别人

试着用自己的话讲一遍ReAct 走一步看一步,容易陷进细节、缺全局。先规划后执行把工作分成规划器、执行器和重规划:先列清单再执行,环境变了就改剩下的计划。它是业界叫法,学术上最接近的是 Plan-and-Solve 提示。Reflexion 不改模型权重,而是让 Agent 失败后用文字写反思,存进记忆(通常 1–3 条),下次带着反思重新尝试。它让 HumanEval 从 80.1% 升到 91.0%,AlfWorld 完成 130/134。但在 MBPP Python 上反而下降,因为自己写的测试有假阳性,反馈不准,反思就学偏。三层循环(步骤、计划、尝试)都要设上限。

想一想

7 道自测

先在心里答一遍,再展开对照。能说清理由,比答对数字更重要。

  1. 01Plan-and-Execute 有原始论文吗?学术上最接近的工作是什么?

  2. 02先规划后执行的三个角色分别做什么?为什么必须有重规划?

  3. 03举一个更适合 ReAct、不适合先规划的任务。

  4. 04Reflexion 的「强化学习」和传统强化学习最大的区别是什么?

  5. 05Reflexion 的三个部件和记忆各做什么?记忆为什么只存 1–3 条?

  6. 06为什么 Reflexion 在 MBPP Python 上反而不如 GPT-4?这对设计 Agent 有什么启示?

  7. 07Reflexion 和 Self-Refine 的主要区别是什么?

已看 0/7 题

练动手练习

先给一个你熟悉的非投资任务(例如整理一份长报告)写出 4–5 步计划,再故意加入一个“资料不存在”的变化,改写后续步骤。然后让任意 AI 聊天工具分别用 ReAct 和“先规划后执行”的方式回答同一个小问题,比较哪种更容易漏步骤;最后写下一条失败反思,看看它能否指导下一次尝试。

完成这一课

完成这一课

读完讲义、看完自测答案,这一课就算学完了。

  • 读完讲义
  • 看完全部自测

本课为投资者教育内容,案例数字均为示意,不构成任何投资建议,也不承诺收益。规则和费率会变,实际操作前请以交易所、监管机构和产品的最新公告为准。