前置知识与学习路径
本系列面向会写一点代码、但不一定了解 Agent 的读者。你不需要先学会所有终端术语,也不需要把整个仓库读完。先理解一个小 Agent,再在遇到问题时补 TypeScript、异步和终端知识,会更容易坚持下去。
最重要的前置知识只有三个:
- 能读懂基本的 TypeScript/JavaScript;
- 知道
async/await大概在做什么; - 愿意在本地运行代码,并观察一次输入是怎样流动的。
其余概念会在文章中边用边解释。
前置技能矩阵
不需要的前置:React/Vue/Web 框架、数据库、Docker。本项目是纯 Node.js 终端应用。
读源码时只需要先记住的几个词
当前 Pi 的 LLM 层由两层组成。先理解 pi-ai 的通用能力,再理解 coding-agent 如何用 ModelRuntime 把它们组合起来:
仓库规模(v0.85.1)
好消息:你不需要读完所有代码。先沿着运行时边界阅读,核心逻辑会自然收敛到几组文件:
packages/agent/src/agent-loop.ts— Agent 循环packages/coding-agent/src/core/agent-session.ts— 产品层会话中枢packages/coding-agent/src/core/sdk.ts— 把streamFn接到ModelRuntimepackages/ai/src/models.ts— Models 运行时packages/tui/src/tui.ts— 差分渲染
其余大量文件是按 Provider 生成的模型目录、各家 API 实现、工具渲染、测试和实验性代码。
阅读顺序(推荐)
目标问题可以一直问自己:
- 我在终端输入
pi hello,发生了什么? - LLM 如何调用工具、循环处理、最终给出答案?
- 认证、项目信任和压缩分别在哪一层拦住了什么?
不同背景的读者
如果你是前端开发者
最需要补的是 Node.js Stream、终端 raw mode,以及“LLM + 工具 + 循环”而不是“请求 → 响应”。优势是 TUI 的 Component 很像组件树。
如果你是后端开发者
最需要补的是 streaming、tool calling,以及终端 UI 不是 Web 渲染模型。优势是事件循环和 API 抽象会很熟悉。
如果你是 Python / 非 TS 开发者
先花一点时间看类型注解、接口、async/await 和 ES Module。Pi 的风格是显式类型、尽量避免 any、纯 async/await,读起来通常比看起来吓人。
调试工具
不要只在 GitHub 网页上读。这个项目需要本地跑一次,才能看到输入如何变成事件。
下一步
→ 环境搭建与调试

