M7 输出 · L20 · 毕业课

实现最小六件套 agent,并逐件自评

45 min 规划 + 两天实现(四个半天)· 从读别人到建自己的

🎒 预备知识:完成上一课「L19」(零基础入口:第 0 课)

本课唯一结论:毕业不是"写完了",是逐件自评通过—— 每件套对照 Easel 的对应实现,能说清"我简化了什么、为什么可以简化"。

一、基础:实现顺序有讲究(依赖图决定开工顺序)

L19 的六张卡怎么变成代码?不是从卡 1 写到卡 6——按依赖图开工: loop 是一切的地基(没有它什么都跑不起来)→ 工具其次(loop 要调)→ 技能加载(loop 要按路由读)→ 提示词(首批请求就要)→ 记忆(首批请求就要)→ 闸门(真发前必须有,但可以最后接)。这个顺序保证每一步结束都有一个能跑的东西—— Day 1 上午结束你就有一个"会调工具的 loop",而不是等六天看到全貌。

二、两日施工计划(四个半天摊开)

时段做什么完成标志
Day1 上午loop.py:双层循环 + 工具执行 + isError 回填(A1 的 30 行起步)模型能调用一个假工具并自我纠错
Day1 下午tools.py 2-3 个真工具 + agents.md 规则文件能完成一次真实任务(如"读文件并总结")
Day2 上午skills/ 路由加载 + memory.md 只追加新技能不改内核即可用;跨轮记得事
Day2 下午guard.py 闸门 + 全链自测 + rubric 自评不可逆操作被拦;自评表完成

三、实现清单(约 250 行的骨架分配)

loop.py        ~90 行  while: 调模型(OpenAI兼容) → tool_calls → 执行 → 回填
                       工具失败 isError 回填(不是异常!A3 铁律①)
                       步数上限 + 超时(铁律③)
skills/        技能目录 frontmatter 路由 + SKILL.md 触发加载(~40 行)
agents.md      规则 ≤30 行(抄 Easel 六条的骨架,L03)
tools.py       ~30 行  2-3 个真实工具(read_file / run_cmd / 你的领域工具,按 A4 设计)
guard.py       ~40 行 出站扫描:命中密钥模式 → exit 7(L14 fail-closed)
memory.md      会话记忆文件,只追加(~20 行读写,A6 文件形态)

对照 C3(现 A1)那 20 行最小 agent:loop.py 是它的成年版(+上限/超时/isError), skills/ 是 A2 第三代封装的微缩,guard.py 是 A12 阶梯第 4 级的落点。 250 行 = 前置课 24 课 + 正课 20 课的物理压缩包。

四、调试清单(卡住时按序自查)

① 模型不调工具?看工具 schema——description 是不是含糊(A4),参数是否 required 太多。
② 调了但参数错?校验失败有没有回填错误消息(还是直接崩了)?错误消息有没有三要素(A4)。
③ 循环不停?停止条件全吗——toolUse 之外 stop 是否正确终止、步数上限有没有生效。
④ 第二轮就失忆?历史有没有 append(assistant 消息本身也要入列,L7 坑 1)。
⑤ 回答质量差?先打印实际发出的 messages 看——十有八九是上下文组装问题(A5),不是模型笨。

五、五个必踩的坑(提前避开,每个都连回课程)

① 工具失败当异常抛给用户——应该是 isError 结果回填(A3 铁律①,L17 六站)。
② 记忆写全局单文件——多会话串味,按会话/画像分域(A6 竞态推演,L05)。
③ 没有 dry-run——不可逆操作直接真发(A12 阶梯 3 级,L13 三段式)。
④ 系统提示塞满所有能力——应该 frontmatter 路由 + 按需加载(A2/L06 token 算术)。
⑤ 历史重写式截断——应该摘要追加(A3 铁律②,L18 只追加三重收益)。

检索练习

六、复盘 rubric(对照两份基准逐件打分)

件套自评问题对照的 Easel 实现
loop停止条件齐全吗(error/abort/上限)?工具失败能自我纠错吗?agent-loop.ts 三段式(L16)
提示词常驻层稳定吗(cache 命中)?人格与规则分层了吗?四层栈(L04)
技能新技能不用改内核代码就能加吗?SKILL-SPEC 三层加载(L06)
分工碰环境的事在脚本/工具里,决策在模型里?薄壳+厚脚本(L07)
记忆并发会话安全吗?历史可回放吗?画像分域(L05)+ 只追加
边界闸门 fail-closed 吗?有对账/留痕吗?content_guard + readback(L14)

七、出口检验(课程毕业)

提交两样:① 可运行代码;② 六件套自评表(每件 ≤3 句,含"简化了什么、为什么可以")。 我对照 Building Effective Agents 与 Easel 源码逐件批改。通过即记入学习档案,这门课就毕业了。

毕业后去哪:把你的 agent 用起来,遇到的每个真实问题都会对应到课程的某一课—— 那时回来重读那一课,是最高效的进阶。