20 min · 先讲清"长任务为什么难",再讲规划怎么落盘、断点怎么续跑
🎒 预备知识:完成上一课「A13 错误处理与韧性」(零基础入口:第 0 课)
人类做一个两小时的项目,靠三样东西:记得开头做了什么(记忆)、知道接下来做什么(计划)、 做完一步划掉一步(进度)。agent 天生三样都缺,根源都在 L1–L2 学过的机理:
| 人类靠什么 | agent 缺什么 | 后果 |
|---|---|---|
| 长期记忆 | 无状态 + 窗口有限(L1/L2) | 做到第 8 步,第 1 步的决定可能已被压缩或遗忘 |
| 纸面计划 | 计划只存在于上下文消息里 | compaction 一压缩,计划跟着旧消息一起变摘要 |
| 进度清单 | 没有"做到哪了"的持久记录 | 失败重来 = 全部从头,包括已花钱、已发布的步骤 |
所以"规划"对 agent 不是锦上添花的智力展示,是把这三样缺失补上的工程手段: 记忆缺 → 状态写文件;计划缺 → 计划写文件;进度缺 → 每步登记。
任务分解 = 把"做一个论文解读视频"(不可直接执行)变成一串可执行步骤 (读论文 → 提要点 → 写脚本 → 生成配音 → 剪辑 → 发布)。两种分解者:
模型自己分:在 loop 里每一步现场决定下一步——这就是 A3 的反应式循环,
天然带"微规划"。适合步骤间强依赖前一步结果的任务(写了脚本才知道配什么画面)。
先规划后执行:开工前让模型(或人)产出完整步骤清单,再逐步执行。
适合路径可预知的流水线。Easel 的规则(AGENTS.md):单层任务直接执行,
跨两层以上的多步任务先给简短 Plan——注意是"简短":3–5 个里程碑,
不是 30 步施工图。
为什么里程碑粒度就够?因为计划会过时:执行中发现论文读不懂要换篇、 生成的配音不合格要换声音——细粒度计划每改一步全盘作废,里程碑之间的细节让模型现场反应(A10 的规划-执行模式)。
看 Easel AGENTS.md 编排节的规定(正课 L03 逐条读)——跨层任务用
manifest.py 传递"产物路径 + 一句结论",每层完成或失败都登记:
outputs/视频项目/
├── manifest.json # 薄索引:每步 {层, 产物路径, 结论, 状态}
├── brief.md # 关键决策记录(为什么选这个方向)
├── script.md # 产物:文案
└── assets/ # 中间素材
三个设计点,每个都在补第一节的一块缺失:① 薄索引不搬内容 (A5 蒸馏原则——下游按路径自取,计划文件不膨胀);② 状态显式 (success/failed/skipped,失败保留断点——补"进度清单");③ 决策与产物分离 (brief.md 记"为什么",产物记"是什么"——复盘时才能重建推理链)。
失败时登记 --status failed 并保留已完成产物
重试逻辑:读 manifest → 找到第一个 failed/缺失步骤 → 从那里继续
(不重跑已成功的层——那可能已经花过钱、发过内容!)
这里有个和 A3 铁律①的精妙对比,值得停下来想清楚:同样是失败,为什么工具失败要 "消息回填让模型当场重试",跨层任务失败却要"登记断点冷启动"?判断标准是 步骤有没有不可逆副作用:读文件失败重试无害(可逆); 而"发布"这一层如果失败,你不知道它到底是没发出去还是发出去了但响应超时—— 盲目重跑可能二次发布。所以轻失败(可逆)当场重试,重失败(不可逆)停下来先对账(A13 展开)。
① 进度可见:每步完成向用户推送 activity(Easel 的 SSE 事件流,正课 L10 详述)——
20 分钟黑箱没人受得了。
② 步骤幂等设计:每步尽量可独立重跑(产物写文件而非只留在上下文),
为断点续跑打底。
③ 超时与预算分层:每步有自己的超时,整任务有自己的预算
(Easel:制作层 7200s / 直接层 300s,三入口单一真相源)——没有分层预算,
一步卡死全任务陪葬。
坑 1:计划活在上下文里。写在 assistant 消息里的计划,一次 compaction 就可能被摘要掉—— 重要计划写文件。坑 2:失败从头重跑。已发布的层被重跑 = 二次发布事故; 断点是安全设计不只是效率设计。坑 3:规划过细。十步任务写三十步计划, 改一步全盘作废——里程碑粒度就够。
给"自动制作并发布一个论文解读视频"设计 manifest 结构:至少 5 个步骤的名称、 每步的产物类型、哪些步骤不可逆(失败后绝不能自动重跑)、断点续跑的判定逻辑。 发到对话里我批改。