Skip to content

第 8 章:规划不是写给人看的漂亮计划

本章目标:讲清 Agent 里的规划到底是什么,它为什么不是装饰,也不是一份好看的文档,而是系统减少盲动、组织动作和处理分支的核心机制。
本章对应总纲:docs/ebook-outline.md 中“第 8 章正文写作提纲(2026-03-31 归档)”。


8.1 为什么很多人一说“规划”就理解错方向

一提到 planning,很多人脑子里立刻出现的是:

  • 先写一个计划书
  • 把步骤列出来
  • 看上去很完整
  • 好像很有条理

然后就觉得系统已经会规划了。

这不对。

因为在 Agent 系统里,规划真正解决的问题不是“写得像不像计划”,而是:

系统在行动之前,能不能先组织动作;在行动之后,能不能根据反馈调整路径。

如果没有这两点,再漂亮的计划也只是展示,不是执行机制。


8.2 规划到底在解决什么问题

一个真实 Agent 在运行时,通常都要面对三类困难:

  1. 目标不是一步能完成的
  2. 动作之间存在依赖关系
  3. 中途反馈会改变原路径

规划层存在的意义,就是为了处理这三件事。

8.2.1 把模糊目标拆成可执行步骤

用户说:

帮我给这个项目加一个导出功能。

这不是一步动作,而是一串潜在动作:

  • 找现有数据结构
  • 找导出入口
  • 确认格式要求
  • 修改代码
  • 运行验证
  • 检查副作用

如果系统没有规划能力,它很容易一上来就乱改。

8.2.2 识别先后依赖

很多任务不是“想做什么就先做什么”。

例如:

  • 不先读定义,就不该直接改实现
  • 不先确认接口边界,就不该动调用链
  • 不先验证问题复现,就不该自信修复

规划层要做的,就是把依赖关系提前看出来。

8.2.3 在路径分叉时选更合理的一条

同一个任务往往有不止一种路径:

  • 先搜索还是先读文件?
  • 先改局部还是先查根因?
  • 先问用户还是先补足上下文?

规划的价值,不是保证永远选对,而是减少盲撞。


8.3 规划不是一次性的,决策发生在每一轮

8.3.1 前置规划只是一半

很多人对规划的理解停在任务开头:

  • 先列步骤
  • 然后开始执行

这最多只完成了一半。

因为真实 Agent 不是按静态剧本跑,而是边跑边接反馈。于是规划实际上至少分成两层:

  1. 前置规划:先大致设计路径
  2. 过程决策:每轮根据反馈继续调整

8.3.2 为什么过程决策比计划书更重要

计划书可以写得很漂亮,但真正决定系统质量的,往往是执行中的这些判断:

  • 当前是不是该继续当前路径?
  • 这个错误说明方向错了,还是只差补一步?
  • 现在该继续搜,还是该停下来问人?
  • 当前目标是否已经满足,可以停机?

所以从工程角度看,规划不是文档,而是一种持续决策能力。


8.4 好规划的标准,不是完整,而是有用

很多人做规划,最容易滑向一个坏习惯:

  • 把所有能想到的步骤都列出来
  • 把所有可能性都写进去
  • 结果看起来很全

但执行时根本用不上。

8.4.1 过度规划的典型味道

最常见的症状是:

  • 步骤太细,稍微环境一变就废了
  • 分支太多,主线反而看不清
  • 计划长度很长,但关键依赖没说清
  • 计划里混进大量“也许以后会需要”的假想步骤

这不是严谨,这是噪音。

8.4.2 好规划应该保留什么

一个对 Agent 真正有用的规划,通常至少要包含:

  • 当前目标
  • 关键步骤
  • 主要依赖
  • 关键风险点
  • 何时验证
  • 何时停止或求助

这已经足够驱动系统了。再往上堆,往往收益很小。


8.5 规划和工作流不是一回事

这里也必须切一刀。

工作流更像:

  • 预定义好的执行顺序
  • 固定步骤之间的机械衔接
  • 已知路径问题的自动化

规划更像:

  • 在当前任务和当前环境下组织路径
  • 识别依赖和风险
  • 在变化中重选下一步

所以:

  • 工作流偏固定
  • 规划偏动态

可以直接用这张判断表来区分:

问题特征更适合 Workflow更适合 Planning
步骤是否稳定
分支是否很少
中途是否常改路
是否依赖实时反馈
是否需要临场判断

这也是为什么不是所有自动化都需要 Agent。

如果一个任务路径稳定、分支少、失败处理也固定,那 workflow 往往更便宜、更可靠。

只有当任务需要动态决策时,规划层才真正变得不可替代。


8.6 规划和执行之间,最重要的是验证点

很多系统看起来会规划,实际仍然很蠢。原因是它们少了一样东西:验证点

8.6.1 为什么没有验证点的计划很危险

如果系统只是:

  • 列步骤
  • 机械执行
  • 直到全部做完才回头看

那它很容易在错误路径上跑很远。

8.6.2 验证点本质上是在问:现在还走对吗?

在好的规划里,关键步骤之间通常要插入验证点,例如:

  • 读完关键文件后,先确认问题定位是否成立
  • 改完代码后,先跑检查
  • 用户边界不清时,先停下来确认
  • 路径分叉明显时,先判断是否继续当前思路

这说明规划不是单向推进,而是推进 + 校验

没有校验,规划就只是更有条理的盲跑。


8.7 回退能力:规划成熟不成熟,看它会不会承认原路错了

一个真实系统几乎不可能永远第一次就选对路径。

所以判断规划层成熟不成熟,一个很硬的标准就是:

它有没有回退能力。

8.7.1 什么叫回退

回退不是简单地“失败了重来”,而是:

  • 承认当前假设被证伪
  • 放弃旧路径的后续动作
  • 把已获得的负面信息保留下来
  • 换一条更合理的路径继续推进

8.7.2 为什么很多系统不会回退

因为它们的规划只是静态步骤表。

一旦进入执行,就会出现两个极端:

  • 要么死撑到底
  • 要么彻底崩掉

这两种都不成熟。

成熟的 Agent 应该能做到:

  • 错了就回
  • 但不是全盘失忆
  • 而是带着已知失败信息重新决策

8.8 用 Claude Code 看一个现实中的规划样本

Claude Code 这类系统很适合用来理解规划层,因为它并不是一收到任务就无脑开干。

从当前项目能直接看见几条很明显的规划线索:

  • plugins/README.md:19feature-dev 不是一个“直接写代码”的单步命令,而是明确写成 structured 7-phase approach
  • 同一个插件又拆出 code-explorercode-architectcode-reviewer 三种角色,说明规划不是一团话术,而是先探索、再定结构、再做质量回看
  • plugins/README.md:16plugins/README.md:24 里的多 Agent 审查插件也在说明:复杂任务先拆视角,再收敛,不要一上来把所有判断压成一个动作
  • examples/settings/settings-strict.json:1 又提醒你,规划从来不只是“怎么做”,还包括“哪些路当前根本不该走”

所以现实系统里的规划,不是“写一个计划文件”这么浅,而是把几类判断压进执行结构里:

  • 先探索还是先实现
  • 先拆角色还是自己完成
  • 关键验证点插在哪
  • 哪些路径因权限或风险直接排除
  • 当前失败后是补一步还是回退换路

这背后其实对应几条很硬的设计规则:

  • 规划先解决动作组织,再解决文档表达
  • 复杂任务先拆阶段,别一把梭
  • 验证点必须进规划,不然计划只是更整齐的盲跑
  • 风险边界本身也是规划输入,不是执行到一半才补想起来

这才是现实里的 planning:不是写得像项目计划,而是能稳定改变后续执行质量。

如果把话再说死一点:规划解决的是单条执行链里的路径组织、验证插点和回退时机;一旦执行单元不止一个,这个问题就会进一步升级成后面要讲的编排问题。


8.9 为什么“先规划一下”也可能变成表演

这里也得说一句难听的话。

不是所有“先规划一下”都真的有价值。很多时候它只是另一种形式的拖延和表演。

典型表现是:

  • 计划写得很长
  • 但没有关键依赖
  • 没有验证点
  • 没有停机条件
  • 没有回退策略
  • 最后执行时还是临场瞎猜

这种规划只是把混乱提前写出来,并没有减少混乱。

所以判断规划有没有用,不看它写了多少,而看它是否真正改变了执行质量。


8.10 本章小结

这一章真正想讲清的是:规划不是写给人看的漂亮计划,而是 Agent 减少盲动、组织动作和处理变化的核心机制。

你现在应该记住六件事:

  1. 规划解决的是多步目标、动作依赖和路径分叉问题。
  2. 真正的规划不只是任务开始前列步骤,而是每一轮都在持续决策。
  3. 好规划的标准不是更完整,而是更能驱动执行。
  4. 规划和工作流不是一回事,前者偏动态,后者偏固定。
  5. 验证点和回退能力,是判断规划层是否成熟的硬指标。
  6. 没有验证和回退的“规划”,大多只是更有条理的盲跑。

下一章我们继续往下走,看一个 Agent 系统到底该在什么时候停下、什么时候问人、什么时候必须把控制权交还给用户。