Pi:OpenClaw 内部的极简 Agent
这篇文章从 OpenClaw 的爆发谈起,核心在于解释作者为何长期把 Pi 当作主力编码 Agent,以及这种“极简内核 + 自扩展”范式为什么在真实工程里可行。Pi 的核心吸引力Pi 只有极小内核:系统提示短、工具仅 Read/Write/Edit/Bash,减少了复杂度和行为噪声。能力扩展不靠预置庞大工具集,而靠可…
转载说明:本文译自 Pi: The Minimal Agent Within OpenClaw,作者 Armin Ronacher。原文发布时间:2026-01-31。Pi:OpenClaw 内部的极简 Agent 如果你这周没有与世隔绝,大概率已经注意到我朋友 Peter 的一个项目在网上爆火了。它曾经有过很多名字,最近的名字是 OpenClaw,但你在新闻里也可能看到过 ClawdBot 或 MoltBot,取决于你是在哪个时间点看到相关报道。它是一个接入你所选通信渠道、并且就是执行代码的 Agent。 你可能不太熟悉的是:OpenClaw 的底层有一个小型编码 Agent,叫 Pi。而到现在为止,Pi 也是我几乎唯一在用的编码 Agent。过去几周里,我越来越像它的“自来水”。最近我刚做了一次相关分享,才意识到自己居然还没在博客里认真写过 Pi,所以想补一篇,讲讲我为什么会这么迷它,以及它和 OpenClaw 的关系。 Pi 由 Mario Zechner 编写。和追求“带一点疯狂的科幻感”的 Peter 不同 ^1,Mario 的风格非常务实。虽然两人的路径不同,但 OpenClaw 和 Pi 共享同一个核心判断:LLM 非常擅长写代码和运行代码,所以应该顺势而为。从某种意义上说,这也不意外,因为是 Peter 在去年把我和 Mario 一起“带入坑”做 Agent 的。什么是 Pi? Pi 是一个编码 Agent。而现在编码 Agent 已经很多了。说实话,你现在随便拿一个来用,基本都能体验到所谓“Agentic Programming”到底是什么感觉。在这篇博客的其他评测里,我曾正向提到过 AMP;我对 AMP 有共鸣的原因之一,是它看起来确实出自一群既沉迷于 Agent 编程、又真的试过多种方案并比较过优劣的人之手,而不只是给它套一个炫 UI。 Pi 对我有吸引力,主要有两个原因:第一,它的内核极小。它的系统提示词是我见过最短的一类,而且只内置四个工具:Read、Write、Edit、Bash。第二,它用扩展系统来弥补“内核极小”的限制;这个系统还允许扩展把状态持久化到会话里,威力非常大。 还有个额外加分项:Pi 本身写得像一款优秀的软件。它不会闪烁,不怎么吃内存,不会莫名其妙坏掉,可靠性很高,而且能看出作者对软件质量非常在意。 Pi 也可以看作一组小组件,你可以在其上拼自己的 Agent。OpenClaw 就是这么做的;我自己的 Telegram 小机器人也是这么做的;Mario 也用它做了他的 mom。如果你想做一个连接到外部系统的 Agent,让 Pi 指向它自己和 mom,通常就能帮你“长”出一个原型。Pi 里“没有什么” 要理解 Pi 里有什么,先理解 Pi 里没有什么反而更重要:它为什么没有,以及更重要的,它为什么将来也不会有。最显眼的缺失是 MCP 支持。Pi 不内置 MCP。你当然可以自己写扩展,也可以像 OpenClaw 一样,用 mcporter 来支持 MCP。mcporter 通过 CLI 接口或 TypeScript 绑定暴露 MCP 调用,你的 Agent 也许能用上,也许不能,我也不敢打包票 :) 这并不是“偷懒没做”,而是 Pi 的方法论。Pi 的核心理念是:如果 Agent 还不会做某件事,不是去下载一个扩展、技能或别的什么,而是让 Agent 自己把能力扩出来。它把“写代码并运行代码”这件事当成第一原则。 这并不是说你不能下载扩展。完全可以,而且支持很好。只是 Pi 不会默认鼓励你依赖别人的扩展;你也可以把 Agent 指向一个已有扩展,说“照这个思路做,但按我需要改这些地方”。为“构建 Agent 的 Agent”而设计的 Agent 观察 Pi 以及基于它的 OpenClaw,你会看到一种“像黏土一样可塑”的软件形态。这对底层架构提出了特定要求,很多要求实际上会变成系统核心设计必须接受的约束。 例如,Pi 的底层 AI SDK 设计成一个会话可以容纳来自多个模型提供商的不同消息。它承认会话在不同模型提供商之间的可移植性是有限的,因此不会过度依赖那些无法迁移的、提供商专属特性。 第二点,除了模型消息之外,它会在会话文件里维护自定义消息:扩展可以用来存状态,系统也可以用来记录一些信息,这些信息要么完全不发送给 AI,要么只发送其中一部分。 正因为有这套机制,而且扩展状态也能落盘,Pi 内置了热重载:Agent 可以写代码、重载、测试,循环迭代,直到你的扩展真的可用。它还自带文档和示例,供 Agent 自己拿来扩展自己。更进一步,Pi 的会话是树状结构。你可以在一个会话里分叉并导航,这会带来很多有趣机会,比如你可以开一条“支线任务”去修一个坏掉的 Agent 工具,而不污染主会话…
正在初始化 WebAssembly 引擎…
首次编译原生模块可能需要数秒
就绪后,页面交互将以接近原生的速度运行