@XAMTO_AI: 想自己写一个编码 Agent,原理文章没少看,一动手就卡在第一行。 最近发现《动手学 Pi》这本中文教程,从一段真实的离线 Agent 日志开始,带你把 15 个关卡从头过一遍。 真正从零撸一个完整的编码 Agent,每一步都有可运行的代…
摘要
介绍中文教程《动手学 Pi》,通过 15 个可运行 checkpoint 从零实现一个 Pi-style 编码 Agent,涵盖协议、工具循环、会话树、上下文压缩与评测,每个章节配有正文、commit、测试和故障实验。
查看缓存全文
缓存时间: 2026/08/13 23:25
想自己写一个编码 Agent,原理文章没少看,一动手就卡在第一行。
最近发现《动手学 Pi》这本中文教程,从一段真实的离线 Agent 日志开始,带你把 15 个关卡从头过一遍。
真正从零撸一个完整的编码 Agent,每一步都有可运行的代码,拉下来就能验证。
消息和模型协议 → 工具与 Agent 循环 → 会话树存储 → 上下文压缩 → 组装运行时跑评测。
每章配齐四样:正文、对应提交、聚焦测试、故障实验。
练习目录一行命令生成,不带答案,把说明扔给 AI 当陪练就行。
:https://github.com/hahhforest/pi-textbook…
hahhforest/pi-textbook
Source: https://github.com/hahhforest/pi-textbook
简体中文 · English
动手学 Pi
沿 15 个 checkpoint,从一条离线轨迹开始,亲手实现一个 Pi-style coding agent。
这是什么
沿 15 个可运行 checkpoint,从一条离线 Agent 轨迹出发,逐步实现:
TypeScript 协议 → 流式模型 → Provider → 工具 → Agent Loop → 会话树 → Context Compaction → 扩展 → Eval
每章由四部分闭环:教材正文 + 真实 commit + 聚焦测试 + 故障实验。课程代码不是伪代码演示,而是一条可以 checkout、运行和验证的 Git 历史。
内容速览(Checkpoint 00–14)
15 个 checkpoint 沿同一条 Agent 执行链逐层推进:先建立消息与模型协议,再接入工具和循环,随后保存状态与历史,最后组合 Runtime 并用独立评测验收。
| 部分 | Checkpoint | 章节 | 这一章完成什么 | 阅读 |
|---|---|---|---|---|
| 序章 | 00 | 一次 README 读取请求怎样走完 Agent 闭环 | 跟随一次 README 请求,把用户消息、两次模型调用、工具调用与结果、最终回答连成完整闭环。 | 打开 |
| I · 模型与协议 | 01 | TypeScript 生存集:四个 DemoEvent 怎样进入测试 | 用四个 DemoEvent 串起联合类型、运行时校验、Promise 与 ESM 测试。 | 打开 |
| I · 模型与协议 | 02 | EventStream:同一个对象怎样交付下一项和最终结果 | 实现 EventStream,让事件先到与消费者先等两种时序都能交付过程项和最终结果。 | 打开 |
| I · 模型与协议 | 03 | 保存一次完整的工具往返 | 把文本、工具调用和配对结果保存为统一消息,并从模型事件收束出完整 assistant message。 | 打开 |
| I · 模型与协议 | 04 | ScriptedModel:同一个实例怎样依次播放两个回合 | 实现可重复播放预设回合的 ScriptedModel,保存请求快照并投影稳定事件流。 | 打开 |
| I · 模型与协议 | 05 | 模型调用:在课程协议和 Provider API 之间转换 | 把课程消息写成 Provider 请求,再将 SSE 响应还原为统一模型事件。 | 打开 |
| II · 工具与循环 | 06 | 工具调用:一条 echo 请求怎样变成配对结果 | 让 echo 调用经过 schema、Registry 和 executor,返回沿用原 call id 的工具结果。 | 打开 |
| II · 工具与循环 | 07 | Agent Loop:一次 README 往返怎样调用模型两次 | 实现两轮 Agent Loop:模型提出 read,工具结果写回后再生成最终回答。 | 打开 |
| II · 工具与循环 | 08 | 四个工具怎样在同一个 workspace 里完成文件任务 | 让 read、write、edit、bash 在同一 workspace 内完成受控的文件与进程操作。 | 打开 |
| III · 状态与历史 | 09 | 从单次循环到有状态 Agent | 让同一个 Agent 保存跨运行消息,并管理订阅、取消、运行中指令、follow-up 与重入。 | 打开 |
| III · 状态与历史 | 10 | 从一棵会话树恢复当前对话 | 把完成消息追加为带父指针的 JSONL 记录,再从指定叶子恢复当前对话路径。 | 打开 |
| III · 状态与历史 | 11 | 历史不动,上下文按预算重建 | 按完整工具交互切分历史,在 token 预算内保留后缀,并用结构化摘要补回早期事实。 | 打开 |
| IV · 扩展与验证 | 12 | 知识按需进入上下文,代码先过信任门 | 发现项目规则、Skill 与模板,按需送入上下文,并让可信扩展原子注册工具与 hooks。 | 打开 |
| IV · 扩展与验证 | 13 | 把已有能力接成一个能提交历史的 Runtime | 把 Agent、Session Store、上下文、资源与扩展接成 Runtime,让 prompt 在新消息被接受后完成。 | 打开 |
| IV · 扩展与验证 | 14 | 给完整的 Pi 建一套独立评测 | 用全新 fixture 运行 Runtime,核对活动路径与文件结果,再输出稳定的分类和计数。 | 打开 |
开始阅读
直接打开在线教材,或在本地运行:
git clone https://github.com/hahhforest/pi-textbook.git
cd pi-textbook
npm install
npm run dev
教材与课程代码
| 仓库 | 作用 |
|---|---|
pi-textbook | 你正在看的 HTML 教材与网站 |
pi 的课程分支 | 15 个 checkpoint 的可运行代码;课程源码位于仓库内的 packages/pi-course/ |
课程分支从固定上游 commit 8479bd84 出发,以 course(00) 到 course(14) 组织完整历史;pi-course-v1 与 course-v1/00 到 course-v1/14 tags 固定第一版课程。
和 Agent 一起练习
git clone --branch course/build-your-own-pi https://github.com/hahhforest/pi.git
cd pi
npm install
npm run checkpoint -w @pi/course -- 05
npm run practice -w @pi/course -- 05 ../pi-practice-05
checkpoint 定位本章的 parent、target 与聚焦测试;practice 创建一个不含答案和 Git 历史的练习目录。把本章网页、命令输出与练习目录中的 LEARNING.md 一起交给陪学 Agent 即可。
项目说明
这是社区原创的非官方课程,不隶属于或代表 Pi / Earendil Works。应用与原创代码采用 MIT License;教材正文与原创媒体采用 CC BY 4.0;Pi 上游代码沿用其原许可证和作者归属。详见 LICENSE 与 LICENSE-CONTENT。
构建、测试和跨仓库历史校验见 CONTRIBUTING.md。
感谢 LINUX DO 提供中文技术交流空间。
相似文章
@cellinlab: 时间线 刷到 好几个 Pi Agent 的推荐, 让 Codex 帮我学了下,做了个手把手教程 Pi Agent 原理与实现:从零到一实现一个 AI Agent 在线学习:https://how-pi-agent-works.vercel…
作者发布了一个从零到一实现 Pi Agent 的手把手教程,包含概念讲解和可运行的示例项目。
@antiAIvo: 如何从零手写一个Agent?整了一套 Agent 教程,共18 篇 Claude Code、Codex 这些编码 Agent 内核其实就是一个循环: 模型请求工具,代码执行,结果放回对话,直到模型不再请求 这套教程从100 行代码开始 用…
分享了一套共18篇的手写Agent教程,从100行Python代码起步,逐步实现工具调用、权限、上下文管理、Skills、MCP、子Agent、计划与记忆等核心模块,并对照拆解Claude Code、Codex、Grok Bot、DeepSeek Harness等主流编码Agent的实现取舍,指出其最大分歧在于安全层应交给提示词还是代码。
@tech_shrimp: Pi 大道至简,超越Codex和Claude Code的极简Agent,保姆级全攻略, 一文精通
本文提供了Pi AI Agent的完整教程,介绍其安装、配置和使用方法,并展示其在编程任务中的效率和性能优势,超越其他主流编码代理。
@yibie: 每个程序员都应该自己手写一个 agent。 只要 50 行代码,很有趣,而且会让你惊讶。但为了获得最大收获,请做这两件事: 第一,从零手写。打开空白文本文件,自己敲完每一行代码。不要用任何 AI,连自动补全都不要。 第二,只依赖标准库文档…
本文鼓励程序员亲手手写一个简单的AI agent(约50行代码),以加深对agent工作机制的理解,并建议从零手工编写、只依赖标准库和API文档。
@alin_zone: 想了解 Pi Agent 的朋友不能错过的白皮书! 最近 Pi Agent 非常火,然后我在网上找资料的时候发现了一个教程非常不错。 里面含有 10 个章节,从 Agent Loop 到上下文工程都有源码剖析,非常精华。 网站链接在评论区
分享了一个关于 Pi Agent 的热门白皮书教程,包含10个章节,从 Agent Loop 到上下文工程都有源码剖析。