来源:X @cellinlab
2026 年 5 月,X 用户 cellinlab 发了一条帖子:刷到好几个 Pi Agent 的推荐后,他让 Codex 帮忙学习并生成了一份手把手教程《Pi Agent 原理与实现:从零到一实现一个 AI Agent》[0,2]。教程的最终形态是一个完整可运行的 VitePress 中文教学站点,在线学习地址是 how-pi-agent-works.vercel.app,源码托管在 github.com/cellinlab/how-… [2](素材原文里这两个链接没有显示出具体 URL [0])。Codex 收到的提示词把任务定得很明确:先联网理解 Pi 的核心原理、架构设计、关键模块和实现链路,再生成一个适合计算机本科毕业生的渐进式教学项目,让读者从零到一复现一个”简化但保留核心思想”的目标项目,前端用 React、后端用 Node.js,可以上 TypeScript [2]。
教程在拆什么:五个模块对应 Pi 的真实架构
素材把 Pi 的核心设计思想归纳为五个关键模块:模型流、Agent Loop、工具调用、会话树以及资源加载与上下文压缩 [0]。这五个模块不是教程凭空编排的,而是与 Pi 项目本身的工程结构一一对应。
Pi 是一个完全用 TypeScript 构建的 monorepo,以一组 npm 包的形式发布 [7]。与这五个模块直接相关的三个包是 [5]:
- pi-ai:统一的多供应商 LLM API,覆盖 OpenAI、Anthropic、Google 等 [5]——对应”模型流”;
- pi-agent-core:带工具调用和状态管理的 agent 运行时 [5]——对应”Agent Loop”与”工具调用”;
- pi-coding-agent:交互式编码 agent CLI,是前两者的产品化外壳 [5]。
“会话树”和”上下文压缩”则属于运行时内置的状态管理:会话以树的形式存储,可以像 git 一样分支、导航、fork、回滚 [26];长会话靠自动压缩(compaction)防止上下文被撑满 [27]。
Pi 对自己的定位是”极简的 agent 外壳”(minimal agent harness):默认不带子代理和计划模式,主张”让 Pi 适配你的工作流,而不是反过来” [4]。先看清这个定位,才能理解教程为什么非要带着读者从零搭一遍。
Agent Loop:整个系统的骨架
Agent Loop 是素材所说”模型能够像人一样进行多轮思考、执行动作并修正错误”的机制来源 [0]。它的工作方式很朴素:定义好工具,agent 调用 LLM,执行工具,把结果喂回去,再调用 LLM,如此重复直到任务完成 [29]。循环会一直跑,直到 agent 自己声明完成——没有 max-steps 之类的步数上限旋钮 [26]。
真正说明问题的是规模。核心 agent loop 只有 418 行 TypeScript,系统提示不足 1000 token,工具只有四个 [12]。这不是功能缺失,而是刻意的设计哲学:对比之下,Claude Code 带着几十个专用工具、系统提示超过 10000 token,LangChain 则有 1000+ 集成 [12]。一篇拆解文章认为,正是这种极简让 Pi 在 Terminal-Bench 2.0 上稳定与 Claude Code、Cursor 并列 [12]。
会话树、上下文压缩、跨模型切换、工具调用——这些机制全部挂在同一个几百行的循环上 [26,27,29,25]。看懂这个循环,就看清了 Agent 系统的骨架。
会话树与上下文压缩:围绕循环的记忆管理
会话是 agent 的记忆。Pi 的会话以树存储,可以分支、导航、fork、回滚 [26],终端里的会话管理也提供树视图和 fork 能力 [6]。更重要的是会话与模型解耦:用 Claude 保存的会话,加载后可以继续用 GPT-4 接着对话,thinking 块会被自动转换 [25,26]。素材把它概括为”处理多轮对话中的历史记忆与状态持久化” [0]。
上下文压缩解决的是 token 溢出问题 [0]。Pi 在两个时机检查是否需要压缩:agent 结束一个回合时,以及发送 prompt 之前 [27]。压缩的动作是用 LLM 把当前消息历史总结成摘要,替换进消息历史 [27]。这套默认逻辑也是可替换的——可以通过扩展换成自定义摘要管线,或者裁剪旧的工具结果,让上下文窗口保持聚焦 [29]。
模型流与工具:插拔式的能力层
模型流(pi-ai)是循环的动力来源:一个接口调用任意 LLM,包括 Anthropic、OpenAI、Google、Bedrock、Mistral、Groq、xAI、OpenRouter、Ollama 等,附带流式输出、工具定义和成本追踪 [29],总共支持 15+ 供应商,本地模型(LM Studio、Ollama)也在其中 [6]。
工具层则贯彻”按需加载”。Pi 实现了 Agent Skills 标准,技能采用渐进式披露(progressive disclosure):启动时只把每个技能的名字和描述放进系统提示,任务匹配时模型才用 read 工具加载完整说明——这样即使装很多技能,也不会一开始就撑满上下文 [1]。与之呼应的是 Pi 整体上不做 MCP 设置、没有子代理、没有权限弹窗,直接执行 CLI 命令 [6];权限确认流程需要的话由你自己用扩展构建 [4]。
渐进式构建:教程的四步走
教程的实现路径是渐进式 Demo,拆成四个核心环节 [0]:
- 最小心智模型:建立基础模型流,保证数据在组件间正确传输 [0]
- 功能扩展:引入 Agent Loop 和工具调用,赋予模型执行外部操作的能力 [0]
- 状态管理:构建会话树,处理多轮对话的历史记忆与状态持久化 [0]
- 性能优化:实施资源加载与上下文压缩,解决长对话导致的 token 溢出 [0]
形式上是 VitePress 站点,充分使用 Mermaid 架构图、流程图、时序图、代码示例、目录树、表格、小练习和常见错误说明,风格要求像”有实战经验的工程师在手把手教学”,讲清楚”为什么这么设计”、“每一步在解决什么问题”、“代码如何运行起来” [2]。对读者的前置要求是 TypeScript、Node.js 与 HTTP API 基础 [0]——这与《pi 的设计艺术》一书给读者的门槛(能读懂 TypeScript 类型,了解 prompt、tool calling、streaming 等 LLM API 概念)基本一致 [3]。
为什么值得从零搭一遍?素材的回答是:这种自底向上的方式能”彻底厘清各层代码存在的必要性” [0]。
与传统方案的对照
素材用一张表格把 Pi 的教学实现与传统框架(如 LangChain)对照:上手难度上,前者需要手动编写底层逻辑,后者封装完善适合快速集成;黑盒程度上,前者每一行代码都清晰可见,后者内部机制复杂难以调试;适用场景上,前者面向原理学习与定制化深度优化,后者面向商业级快速落地;技术栈上,前者聚焦 TypeScript/Node.js 全栈,后者语言无关、生态庞大 [0]。
这些差异有数量支撑:LangChain 的 PyPI 累计下载约 4700 万 [12],而 Pi 的核心只有前面说的那几百行循环和四个工具 [12]。对”黑盒”的不满在社区里并不罕见——Hacker News 上那篇《我们为什么不再用 LangChain 构建 agent》的讨论里,一个代表性观点就是:那只是把一个黑盒的输出接到另一个黑盒的输入 [15]。
局限与定位
素材并不回避这套教育型框架的局限:手写底层 Loop 意味着要自行维护大量边缘情况(Edge Cases),在商业环境里成本极高;针对 TS/Node 的实现也限制了其他语言环境的通用性 [0]——Pi 本身确实是一个 TypeScript monorepo [7]。
但这不妨碍 Pi 的设计被真实项目采用:OpenClaw 把 Pi 作为其内核 agent,pi.dev 也把 OpenClaw 列为真实世界的集成案例 [22,4]。素材的最终判断是:对于想突破”API 搬运工”瓶颈的开发者,这种去黑盒化的学习方式是目前掌握 Agent 开发的最优路径之一 [0]。这个判断之所以成立,是因为教程让读者亲手重建了一个简化但保留核心思想的项目 [2]——而其中最关键的那几百行循环,正是 Pi 整个架构的骨架 [12]。
原文更正:素材中“在线学习”与“文档源码”两个链接未显示具体 URL,实际分别为 how-pi-agent-works.vercel.app 和 github.com/cellinlab/how-…。 [2]
参考来源
- 素材原文(见文首来源链接)
- Pi Coding Agent 入门教程 | 菜鸟教程
- [Cell 细胞 on X: “Codex 提示词: 请帮我完成一个详细的教程,主题是 「 Pi Agent 的原理与实现:从零到一实现一个 AI Agent」。 参考 earendil-works/pi 和 https://t.co/a1TRY6nV5N 等,进行联网搜索,先完整理解它的核心原理、架构设计、关键模块和实现链路,然后为它生成一个基于” / X](https://x.com/cellinlab/status/2059463085585211489)
- 前言- pi 的设计艺术:构建生产级Coding Agent 的架构决策
- Pi Coding Agent
- earendil-works/pi: AI agent toolkit: unified LLM API …
- Pi: Open-Source AI Agent Terminal Set-Up
- Pi: The Open-Source AI Coding Agent You Probably …
- Setting Up and Using the Pi Coding Agent
- Pi - Open-Source Coding Agent - Sean’s Blog
- 做Agent 开发你会想到什么?
- LangChain vs LangGraph vs CrewAI vs PydanticAI vs Mastra …
- Pi Agent: The 418-Line Agent Loop That Outperforms …
- Part 36 | Agent Evaluation Enablement with LangChain + LangGraph
- Comparing Open-Source AI Agent Frameworks
- Why we no longer use LangChain for building our AI agents
- How We Benchmark Deep Agents
- 前言- pi 的设计艺术:构建生产级Coding Agent 的架构决策
- 寻新投资方向(三) AI Agent,大模型时代重要 …
- A Survey of Self-Evolving Agents: On Path to Artificial Super Intelligence
- disler/pi-vs-claude-code: Comparison between …
- Pi.dev Review: The Pi Coding Agent Tested Hands-On
- Pi: The Minimal Agent Within OpenClaw
- Pi to Pi: Two-Way Agent Orchestration with the Pi Coding …
- Pi Coding Agent: The Only Claude Code Competitor
- Pi — Anatomy of a minimal coding agent powering OpenClaw
- Pi AI SDK vs Anthropic Claude Agent SDK
- PI Architecture EXPLAINED | Agent Loop, Tools, TUI and More
- Pi Agent vs Claude Code: When Minimal Beats Maximal
- How to Build a Custom Agent Framework with PI - Nader’s Thoughts
- Pi Coding Agent + Archon: Build ANY AI Coding Workflow (No …
- TypeScript AI Agent Framework - Voltagent | VoltAgent
- 2026 年AI Agent 的12 大构建框架
- Building agents with Large Language Models(LLMs) and Node.js | Red Hat Developer
- TypeScript Integration Guide
- LLM Agents in TypeScript: Step-by-Step Guide | LlamaIndex
- AI Agent 框架怎么选?不要先看热度,先看你到底要控制什么 - 快猫星云Flashcat
- GitHub - andreibesleaga/awesome-agentic-ai-js: Agentic AI with JavaScript/TypeScript · GitHub
- TypeScript AI Agent Framework
- TypeScript LLM Tracing: Top Tools and Best Practices | MLflow
- 8 Best TypeScript AI Agent Frameworks: AI SDK vs Mastra
- AI Agent Frameworks: A Guide to Production
- Medium
- AI 智能体的有效上下文工程
- 上下文工程:Agent 的”记忆”与”注意力”管理 - warm3snow - 博客园
- 什么是上下文工程?打造可靠的 AI | Elastic
- 【人工智能】什么是上下文工程Context Engineering | 上下文Context | Agent的缺点 | 提示词工程 | RAG | MCP | 写入 | 选取 | 压缩 | 隔离
- 上下文工程 | Easy-Vibe 教程
- Agentic AI基础设施实践经验系列(九):Context Engineering 上下文工程 | 亚马逊AWS官方博客
- Effective context engineering for AI agents
- The instructional layer (system prompts) | LLM context engineering bootcamp | Lecture 2
- Context engineering vs. prompt engineering | Elasticsearch Labs
- What Is a Context Window? | DataHub
- Context Engineering Guide | Prompt Engineering Guide
- Why AI teams are moving from prompt engineering to context engineering
- 概览 - OpenClaw
- 从对话到Agent:大模型工具调用能力的量化评测 - EvalScope
- 工具 | OpenAI Agents SDK
- AI Agent框架探秘:拆解 OpenHands(12)--- Function call - 罗西的思考 - 博客园
- 14.5 AI Agent 与工具调用:让模型从“说”到“做” | 大模型原理与架构 | LLM Internals
- 智能体 | LibreChat