Pi 会话存储为追加式 JSONL 文件,其中每一行是一个带有 id 和 parentId 的节点。这创建了一个树结构,支持分支:你可以返回到任何之前的点并继续,在同一文件中创建新的分支同时保留所有先前的分支。
{"id":"a1","parentId":null,"role":"user","content":"Fix the auth bug"}{"id":"a2","parentId":"a1","role":"assistant","content":"Let me read..."}{"id":"a3","parentId":"a2","role":"tool","results":[...]}{"id":"a4","parentId":"a3","role":"assistant","content":"Found the issue..."}{"id":"b1","parentId":"a2","role":"user","content":"Actually, check tests first"}
节点 b1 从 a2 分支,创建了一个替代时间线。两条路径共存于同一文件中。SessionManager API 提供了列出、创建、恢复和分支会话的操作。
压缩:无限会话长度
当会话接近上下文窗口的 80%(可配置)时,Pi 触发压缩。较旧的消息被一个由廉价模型(如 Claude Haiku)生成的摘要替代。这使得会话长度不受限制而不会降低质量:
压缩阈值是可配置的——而且摘要模型可以与主模型不同。在实践中,使用 Haiku 进行压缩摘要同时运行 Opus 进行推理,以最低成本提供出色的质量。
4 种运行模式
所有四种模式共享一个抽象:AgentSession。各模式仅在 I/O 层上有所不同。
SDK 模式:OpenClaw 如何使用 Pi
OpenClaw——超过 25 万星的个人 AI 助手——使用 Pi 的 SDK 模式。它不会将 Pi 作为子进程启动。它直接导入并实例化 Pi,获得完整的生命周期控制:
pi "Use /plan to refactor the payment module to use Stripe v3"
模式 3:Multi-Agent(编排器 + 专家)
使用 pi --print 子进程或 nicobailon/pi-subagents 包进行并行执行:
# agents/security-reviewer.md---name: security-reviewermodel: claude-sonnet-4-6tools: [read, grep, find]---You are a security specialist. Review code for OWASP Top 10 vulnerabilities.
模式 4:Reflection
让专家代理在呈现之前审查主代理的输出:
pi "Implement the feature, then use /reflect to review your own work"
模式 5:动态工具加载
当你有 50 多个工具时,渐进式加载以避免准确性下降:
api.on("resources_discover", async () => { // Only load tools relevant to current context const packageJson = await readFile("package.json"); if (packageJson.includes("prisma")) { api.addTool(prismaQueryTool); }});
OpenClaw 的故事:从周末黑客到 25 万星
OpenClaw 始于奥地利开发者 Peter Steinberger 的一个"周末黑客项目"。概念是:一个运行在你自己设备上的个人 AI 助手,在你已经使用的渠道上回复——WhatsApp、Telegram、Slack、Discord、Google Chat、Signal、iMessage、IRC、Microsoft Teams、Matrix、LINE 等等。
架构很直接:OpenClaw 是一个消息网关,使用 Pi 的 createAgentSession() SDK 嵌入完整的编程代理。每个渠道获得自己的隔离会话。Docker 沙箱确保代理代码安全运行。定时事件实现类似 cron 的触发器。
图表说明了为什么 Pi 的极简方法在经济上胜出。当你的框架在用户的第一条消息之前消耗 15,000 个 token 时,你在每一次 API 调用上都要为这些开销付费。在包含数百个轮次的长会话中,臃肿系统提示的累积成本是巨大的。
Pi 的方法:系统提示 + 工具约 1,000 个 token。剩余的预算是你的。
如何开始
第 1 步:安装
npm install -g @mariozechner/pi-coding-agent# orollama launch pi
第 2 步:配置提供商
# Anthropic (recommended)export ANTHROPIC_API_KEY=sk-ant-...# OpenAIexport OPENAI_API_KEY=sk-...# Local models via Ollama# No API key needed — Pi auto-detects local Ollama
第 3 步:创建 AGENTS.md
# My Project## Tech Stack- Next.js 15, TypeScript, Tailwind CSS- PostgreSQL with Drizzle ORM- Deployed on Vercel## Conventions- Use conventional commits- Tests required for all new features- No direct database queries — use the ORM layer
第 4 步:运行
# Interactive mode (default)pi# With a specific modelpi --model claude-opus-4-6# Print mode for scriptingpi --print "Generate a migration for adding user roles"# Read-only explorationpi --tools read,grep,find,ls "Explain the auth flow"
第 5 步:构建你的第一个扩展
// .pi/extensions/hello.tsexport default function (api) { api.addSlashCommand({ name: "hello", description: "A warm greeting", execute: async () => "Hello from my first Pi extension!", });}
在 Pi 中输入 /reload,然后 /hello。你的扩展已经上线。
为什么精简到基本的开源会赢
Pi 的教训不是极简主义总是更好。而是在正确的地方保持极简——系统提示、工具集、核心循环——为在重要的地方保持最大化创造了空间:用户对上下文、扩展和工作流程的控制。
Claude Code 是一个优秀的产品。Cursor 是一个优秀的产品。但它们是产品——为普通用户设计,为常见情况优化。Pi 是一个工具包——为那些想要理解和控制进入其代理上下文窗口的每一个 token 的开发者设计。