正在刊行长文 · Essay
2026-05-22所有内容
随机比特 · Random Bits

pi architecture deep dive

2026-05-22AI Engineering / Systemsrbits.uk

Pi 是一个开源的 AI 编程 agent 工具包——你在终端里跟它对话,它能帮你读代码、改代码、跑命令,本质上是"一个住在终端里的 AI 程序员"。52k 星,TypeScript 写的,架构非常干净。 --- 把 Pi 想成一栋四层楼的房子,每层解决一个问题: !Pi 四层架构 下面一层一层讲。 --- 解决什么问…

Pi vs Hermes vs OpenClaw,Pi 是什么?怎么选?

一句话概括

Pi 是一个开源的 AI 编程 agent 工具包——你在终端里跟它对话,它能帮你读代码、改代码、跑命令,本质上是"一个住在终端里的 AI 程序员"。52k 星,TypeScript 写的,架构非常干净。


整体结构:四层积木

把 Pi 想成一栋四层楼的房子,每层解决一个问题:

Pi 四层架构

下面一层一层讲。


第 1 层:tui —— 终端里的"React"

解决什么问题? 终端本质上只能显示文字。你要在里面做出好看的交互界面(高亮代码、显示 diff、画进度条),需要一个渲染引擎。

怎么做的?

类比: 如果整个 Pi 是一辆车,tui 就是"仪表盘"——负责显示信息和接收输入。


第 2 层:ai —— “万能翻译官”

解决什么问题? 市面上十几家 AI 厂商(Anthropic、OpenAI、Google、Mistral、AWS Bedrock、Azure……),每家的 API 格式都不一样。你不想每换一个模型就重写一遍代码。

怎么做的?

支持的厂商(不完全列表): Anthropic、OpenAI、Google Gemini、Google Vertex、Mistral、AWS Bedrock、Azure OpenAI、DeepSeek、xAI、Groq、Together、Fireworks、Hugging Face、OpenRouter、GitHub Copilot……

类比: ai 层就是一个"万能充电头"——管你是 iPhone 还是安卓,USB-C 还是 Lightning,它都能给你充上电。


第 3 层:agent-core —— “大脑”

解决什么问题? 光能调 LLM 还不够,你得实现一个循环:“用户说话 → 问 LLM → LLM 要调工具 → 执行工具 → 把结果喂回 LLM → LLM 继续说”。这个循环要能处理各种边界情况(中断、重试、上下文太长要压缩、多轮嵌套调用等)。

这个循环有两层:

工具调用生命周期:

  1. beforeToolCall 钩子 → 可以拦截或修改
  2. 执行工具(支持串行或并行)
  3. afterToolCall 钩子 → 可以改写结果
  4. 发事件通知外部

Agent Harness(agent 线束): 在 Agent Loop 外面再包一层,负责:

类比: agent-core 就是"自动驾驶系统"——感知(读 LLM 回复)、决策(要不要调工具)、执行(跑工具),循环往复。


第 4 层:coding-agent —— 用户直接用的产品

解决什么问题? 把前三层组装成一个拿来就能用的 CLI 编程助手。

7 个内置工具:

工具 干什么 类比
read 读文件(支持图片、PDF、Notebook) cat 的超级版
write 写文件 重定向 >
edit 精确替换文件中的某段文字,输出 unified diff 智能版 sed
bash 执行 shell 命令,有超时和进程管理 终端本身
grep 正则搜索文件内容 rg/grep
find 按 glob 模式找文件 find/fd
ls 列目录 ls

工具的实现有个很聪明的设计:操作接口可替换。默认用本地文件系统,但你可以注入一个 SSH 实现,让工具在远程机器上执行。

四种运行模式:

  1. Interactive(交互模式):完整的终端 UI,打字对话
  2. Print(打印模式):非交互,适合管道 echo "fix bug" | pi
  3. JSON:结构化输出
  4. RPC:作为服务端,接收 JSON-RPC 请求(给 IDE 插件用)

会话系统:

扩展系统(Extensions): 这是 Pi 最酷的设计之一。你可以写 TypeScript 文件放到 .pi/extensions/ 里,给 Pi 添加能力:

上下文管理(Compaction): 对话太长时,token 会超出模型的上下文窗口。Pi 的做法:

  1. 检测 token 用量接近上限
  2. 找到合适的"切割点"(一般是对话中自然的分段)
  3. 把前面的对话交给 LLM 做摘要
  4. 用摘要替换原始消息,释放空间
  5. 继续对话,用户无感知

数据流全景:当你敲入一句话

数据流全景


工程亮点

  1. 供应链安全做得很硬核:所有依赖精确锁版本、--ignore-scripts 安装、shrinkwrap 锁传递依赖、pre-commit 阻止意外锁文件提交、CI 跑 npm audit
  2. 多 agent 并行安全AGENTS.md 里有详细规则——禁止 git add .、禁止 git reset --hard、只 add 自己改的文件
  3. TypeScript 使用 strip-only 模式:不用 enum、不用参数属性、不用 namespace——这些需要编译时转换的语法都不用,保证代码可以被 Node 直接 strip 类型后执行
  4. Monorepo 但不用 Turborepo/Nx:手动 cd + npm run build 管理构建顺序,够朴素,不引入额外复杂度

横向对比:Pi vs Hermes vs OpenClaw

这三个项目都是 AI agent 框架,但设计哲学完全不同。用一个比喻:Pi 是乐高积木,Hermes 是自学习机器人,OpenClaw 是开箱即用的家电

Pi vs Hermes vs OpenClaw 对比

三者定位

维度 Pi Hermes(Nous Research) OpenClaw
一句话定位 极简编程 agent 工具包,最大化可扩展 自学习 agent,越用越聪明 一体化 AI 助手平台,5 分钟上手
目标用户 想把 agent 适配到自己工作流的开发者 想要一个能跨会话学习的 power user 不想折腾、开箱即用的非技术用户
语言 TypeScript Python TypeScript(Node.js)
星数 ~52k ~50k 较大社区

架构差异

Pi 的思路:四层积木,每层可拆

Pi 的核心武器是分层和可替换。tui、ai、agent-core、coding-agent 四个包互不耦合,你可以只用 ai 层接 LLM,也可以只用 agent-core 跑自己的循环。扩展系统让你不用 fork 就能加功能。会话存成 JSONL,可观测、可审计、可分叉。

Hermes 的思路:自主学习闭环

Hermes 最独特的是"用着用着自己变强"。它有三个 Pi 没有的能力:

代价是架构更重、更黑盒——你不太容易看清它学了什么、为什么做这个决策。

OpenClaw 的思路:全都帮你装好

OpenClaw 走的是"全家桶"路线:100+ 插件预装、25+ 通信渠道(微信、Telegram、Discord、邮件……)、语音能力、可视化 Canvas UI。npm install 五分钟跑起来,不需要懂代码。但灵活性有限——你很难把它的某一层拆出来单独用。

关键能力对比

能力 Pi Hermes OpenClaw
工具数量 7 个核心工具 + 扩展系统无限加 40+ 内置工具 + MCP 扩展 100+ 插件预装
模型支持 十几家厂商统一接口 200+ 模型(via OpenRouter)+ 本地模型 多模型支持
记忆系统 JSONL 会话文件,手动管理 agent 自主整理 + FTS5 检索 + 用户画像 插件化记忆
学习能力 无(靠人写扩展) 自动生成/改进 skill
部署方式 本地终端 / RPC 服务 本地 / Docker / SSH / Serverless / HPC 本地 Node.js 服务
会话管理 分叉、恢复、压缩,全可观测 跨会话记忆,自动总结 基础会话
定时任务 无(委托给外部 cron/tmux) 内置自然语言 cron 依赖外部
多用户 单用户终端 Gateway 支持多用户 多渠道多用户
可观测性 极强(JSONL 审计轨迹) 一般(学习过程较黑盒) 一般

怎么选?

取决于你要解决什么问题:

一个有意思的趋势:Pi 和 Hermes 都拿到了 ~50k 星,但走的是完全相反的路——Pi 做减法(核心工具只有 7 个,其他全靠扩展),Hermes 做加法(40+ 工具、自动学习、定时任务全内置)。最终谁赢不好说,但对于想理解 agent 架构的人来说,两个都值得读。Pi 教你怎么分层,Hermes 教你怎么做记忆和学习。

随机比特公众号二维码
公众号 · 随机比特
从 AI 工具热闹里拆工程真相

写边界、控制面、上下文、成本与安全。