模型 / 数据集
SaladDay/pi-from-scratch avatar
SaladDay/pi-from-scratch

pi-from-scratch:把 coding agent 拆成 600 行可读的 TypeScript

600 行 TypeScript 写成的超级迷你版 pi,让你轻松从 0 写出属于你的 pi-agent

1,207 个 Star93 个 ForkTypeScriptMIT

秒懂

它是什么?
这个仓库不是又一个 agent 框架,而是一篇能逐行打断点读的教程:它沿着 pi 的数据流重新实现了一个 nano-pi,同时保留了运行它所需的全部入口。本文讨论它的教学取舍、运行方式,以及什么时候你不该用它。
适合谁用?
如果你的目标是搞懂 coding agent 的 agent loop 和 tool calling 到底怎么串起来,pi-from-scratch 是少数把源码和讲解放在同一个页面里的材料,适合按网站节奏读一遍再自己改。如果你要的是一个能长期维护、能接多家模型、能跑在团队流水线里的 agent,它不合适:仓库只声明支持 OpenAI 兼容接口,没有发布记录,README 也没有提测试与错误处理策略。
能商用吗?
可以。MIT 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
还在维护吗?
在维护。仓库最近一次提交在 29 天前。
用什么语言写的?
主要是 TypeScript(依据 GitHub 的语言统计)。

以上回答依据项目的 GitHub 数据(最近同步于 2026年9月15日)和我们的分析,不构成法律意见。

开源项目深度解析

它解决的问题不是「缺一个 agent」,而是「缺一条能看懂的路径」

现成的 coding agent 项目动辄几万行,工具注册、权限校验、上下文裁剪、重试逻辑混在一起,读代码的人很难判断哪一行才是 agent 真正的心跳。pi-from-scratch 的定位很明确:README 写的是「删除 pi 的工程细节,留下 pi 的核心思想」。它面向的不是要立刻上线产品的团队,而是想亲手写一遍 agent loop 的人。目标读者需要能读 TypeScript,并且愿意接受一个前提:这里实现的是最小可运行版本,工程上被砍掉的部分不会替你补回来。仓库主题里同时挂了 coding-agent、agent-loop、tool-calling、typescript-tutorial,这个标签组合本身就说明了它的自我认知:教程优先,产品其次。

沿着 pi 的数据流拆,而不是按文件目录拆

README 里有一句关键描述:项目沿着 pi 的数据流拆解,「需要什么、我们造什么」。这决定了代码的组织方式。它不是先把 utils、types、providers 铺好再拼装,而是按一次对话实际经过的环节逐个补全组件,读到哪里就实现到哪里。配套网站把这件事做得更彻底:文章和源码并排,阅读推进时右侧编辑器逐步补全代码,读完时 nano-pi 的完整代码也全部出现在编辑器里。另有 Trace 跟踪功能,可以打断点逐行过代码。这里要注意一个容易被误读的点,README 明确写着线上 trace 是预先生成的静态数据,浏览网站不会发起模型请求。也就是说,网站上的执行轨迹是录好的,不是实时调用模型产生的。想验证真实行为,还是得在本地跑起来。

跑起来只需要三个环境变量级别的决定

README 给出的运行步骤是 npm install,然后 export NANOPI_API_KEY=your-api-key,再 npm run dev。前置条件是 Node.js 22 或更高版本,以及一个 OpenAI 兼容 API。可选配置只有两个:NANOPI_MODEL 指定模型名,NANOPI_BASE_URL 指定兼容接口地址,默认值是 https://api.openai.com/v1。这个设计的好处是没有配置文件、没有 schema 校验、没有多 provider 抽象层,你改一行环境变量就能换模型。代价同样明显:模型名和地址之外的一切参数都写死在代码里,如果你需要控制温度、并发或超时,只能去改源码,而改源码正是这个项目的预期用法。教学网站是独立的一份,需要 cd web 之后再 npm install 和 npm run dev。

被删掉的工程细节,就是你上线时会踩到的坑

README 自己承认删掉了 pi 的工程细节,这是它最诚实的部分,也是最需要警惕的部分。一个能在本地读懂并跑通的 agent loop,和能在真实仓库里连续工作几小时的 agent,中间隔着上下文窗口管理、工具调用失败后的重试、文件写入的并发冲突、命令执行的超时与中断处理。这些在 600 行的教学实现里没有位置,因为它们的复杂度会淹没主线。所以判断标准很简单:如果你读代码的目的是理解机制,删减是优点;如果你打算把这个仓库直接当底座接进生产流程,那它缺的不是几行代码,而是整整一层可靠性设计。README 没有提供测试说明,也没有发布记录,这两点都指向同一个结论:它没有为长期维护做过承诺。

和直接读 pi 源码相比,差别在阅读顺序

最自然的替代方案是直接读它参照的 pi(earendil-works/pi)。两者面对的是同一套核心思想,区别在于你从哪里进入。读 pi 是从一个已经成型的工程里逆向推断设计意图,你得先分清哪些代码是核心机制、哪些是后来为了兼容和稳定性加上的补丁,判断成本高,但你能看到真实项目如何处理边界情况。读 pi-from-scratch 是正向构建,每个组件出现在它被需要的那一刻,理解路径短,代价是你看到的是一个理想化的版本。README 另外提到 pi-book 这本书,说它为本项目从零实现 nano-pi 提供了思路和参考,并建议在完成 nano-pi 后继续深入理解 pi 时去读。这其实给出了一个合理的三段路径:先用 pi-from-scratch 建立骨架认知,再用 pi-book 补深度,最后回到 pi 源码看工程实践。

MIT 许可与后续维护成本

仓库采用 MIT 许可,这意味着你可以复制、修改、再分发,包括用于闭源项目,前提是保留版权声明和许可文本。具体条款以仓库根目录的 LICENSE 文件为准,这里不做法律层面的解读。维护成本方面,能确认的信息有限:仓库未归档,最后一次推送时间是 2026 年 8 月 18 日,没有检索到任何 release。没有发布记录意味着不存在版本号意义上的升级路径,你拿到的就是 main 分支的当前状态,跟进上游的方式是看提交而不是看 tag。如果你 fork 之后做了自己的改动,未来同步上游只能靠手动比对,这一点在决定把它当作长期学习底座之前值得先想清楚。

该怎么读它才不浪费时间

最有效的用法是先在本地把 nano-pi 跑起来,确认 npm run dev 能正常发起一次请求,再回到网站上按顺序读。先跑后读的顺序很重要,因为线上 trace 是静态数据,只有本地跑过一遍,你才有真实输出来对照网站上展示的执行流。读的过程中遇到不理解的环节,就在本地代码里打断点,而不是反复看文章。读完之后,比较有价值的动作是挑一个被删掉的工程细节自己补上,比如给工具调用加超时,或者给文件写入加冲突检查。这个仓库的价值不在于它实现了什么,而在于它把实现的门槛降到了你能亲手改一行代码的程度。

编辑结论

如果你的目标是搞懂 coding agent 的 agent loop 和 tool calling 到底怎么串起来,pi-from-scratch 是少数把源码和讲解放在同一个页面里的材料,适合按网站节奏读一遍再自己改。如果你要的是一个能长期维护、能接多家模型、能跑在团队流水线里的 agent,它不合适:仓库只声明支持 OpenAI 兼容接口,没有发布记录,README 也没有提测试与错误处理策略。动手之前先确认两件事:本机 Node.js 版本是否满足 22+,以及你手上的 API key 对应的 base URL 是否与 NANOPI_BASE_URL 的默认值一致。

官方来源

  1. Issues
  2. License: MIT
  3. Project website
  4. README
  5. SaladDay/pi-from-scratch on GitHub
社区笔记

社区笔记