L1 · loop、工具、上下文、会话
内核解剖
这一阶段自己写一个能跑的最小 agent,然后拿 Pi 的实现逐项对照:它的 loop 多了什么、上下文怎么管、会话为什么是树。写过一遍再读源码,收获完全不同。
7 节课 · 约 4 小时已完成 0/7
- 1
八十行写出你自己的 agent loop
动手45 分钟不借任何框架,用一个 while 和两个工具跑起来。这八十行是后面所有内容的地基。
- 从零写出一个能读写文件、能跑命令的最小 agent,并让它完成一个真实小任务
- 说出循环的三个退出条件,以及每一个漏掉会出什么事
- 给自己的 loop 加上轮次上限与 token 上限两道保险
- 2
Pi 的 loop:事件流、中断与 steering
推演35 分钟真实 harness 的循环比教学版复杂的地方,几乎都在「人要能插话」这件事上。
- 按步走完 Pi 的一轮循环,指出每一步的产物与失败表现
- 解释 steering(Enter)与排队(Alt+Enter)在循环里的落点差异
- 判断某个现象该去循环的哪一段找原因
- 3
工具设计:粒度、错误与幂等
原理35 分钟agent 的能力上限由工具决定。工具设计糟糕时,换更强的模型也救不回来。
- 按「一个工具一件事」的原则拆分或合并现有工具
- 写出对模型友好的错误返回:说清哪里错了、下一步能做什么
- 区分只读与写入工具,并为写入工具设计幂等与回滚
- 4
系统提示词、AGENTS.md 与 SYSTEM.md
原理30 分钟同一个模型、同一套工具,换一份系统提示词就是另一个 agent。Pi 把这层完全交给你改。
- 读懂 Pi 的默认系统提示词分了哪几块、各自解决什么问题
- 为自己的项目写出一份有效的 AGENTS.md,并说明它和 SYSTEM.md 的分工
- 判断某条规则应该写进提示词、写进工具描述、还是做成 skill
- 5
上下文预算与 compaction
推演40 分钟上下文是最贵、最先撞墙的资源。这一节把账算清楚:谁在吃、第几轮撞墙、压缩要压什么。
- 算出一个 agent 会话的上下文构成,并指出最先撑爆窗口的那一项
- 预测在给定窗口下大约第几轮触发 compaction
- 设计一个不破坏 prompt 缓存的压缩策略
- 6
会话状态:为什么 Pi 把历史存成一棵树
原理30 分钟线性日志只能后悔,树可以回到任意一步重新走。这个选择直接改变了使用方式。
- 解释树状会话与线性日志的差别,以及 fork 解决了什么实际问题
- 用 `/tree` 回到指定节点重开一条分支
- 设计自己应用里的会话持久化格式
- 7
流式输出与 TUI:agent 的体感
原理25 分钟同样的模型,等三十秒黑屏和边跑边出字,用起来是两个东西。
- 把模型的流式事件映射成界面上的增量更新
- 设计工具执行过程中的进度呈现与可中断入口
- 说出终端 UI 的三个常见坑:重绘、宽字符、滚动