← 回總覽

深度解析 pi:OpenClaw 背后的极简 Coding Agent 框架

📅 2026-03-13 08:32 meng shao 人工智能 2 分鐘 1613 字 評分: 88
OpenClaw pi 框架 Coding Agent AI 架构 极简主义
📌 一句话摘要 介绍 pi 框架的极简设计哲学、三层技术架构以及在提示词、工具集和状态管理方面的超前实践。 📝 详细摘要 该推文深入探讨了 OpenClaw 的核心框架 pi。作者总结了 pi 的五个核心经验:保持系统提示词简洁(约 1000 tokens)、最小化工具集(仅读、写、改、执行)、文件化状态管理(使用 TODO.md/PLAN.md)、追求可观察性以及上下文工程优先。技术上,pi 分为统一 API 层 (pi-ai)、终端 UI 层 (pi-tui) 和核心 CLI (pi-coding-agent)。其设计哲学极具反常规色彩,如默认开放权限的 YOLO 模式、拒绝 MCP

重读 OpenClaw 背后的 Agent 框架「pi」,作者 @badlogicgames 对主流 Coding Agent 的反思还是太超前了,pi 的极简设计即使现在带着上帝视角往回看,仍然是精妙,不得不佩服! mariozechner.at/posts/2025-11-… 可复制学习的经验

即使你不使用 pi,这些经验也适用于其他 Agents:

  • 保持系统提示简洁:模型已理解 Coding Agents 模式,冗长的提示反而有害
  • 最小化工具集:四个基本工具(读、写、改、执行)已足够
  • 文件化状态管理:使用文件而非内置功能管理 TODO、计划等状态
  • 追求可观察性:选择能让你看到完整交互过程的工具
  • 上下文工程优先:精确控制进入模型的上下文比工具数量更重要
为什么自建 pi?

· Mario 曾使用 Claude Code,但随着时间推移,该工具变得臃肿(80% 的功能他用不到)

· 系统提示和工具在每个版本中都会变化,破坏了他的工作流程

· 现有工具缺乏可见性(无法查看与模型的交互细节)

· 自托管模型支持不佳

pi 的三层技术架构

  • pi-ai(统一的 LLM API)
解决的关键问题:

· 多提供商兼容:统一支持 OpenAI、Anthropic、Google、xAI 等四种 API 格式

· 上下文切换:可以在会话中切换模型(如从 Claude 切换到 GPT),保留完整对话历史

· 工具调用分割:将工具结果分为 LLM 可见部分和 UI 展示部分

· 中断请求支持:支持 AbortController 中止请求并返回部分结果

  • pi-tui(终端 UI 框架)
设计选择:

· 采用追加模式:不同于全屏 TUIs(如 Amp、opencode),pi 采用类似 Claude Code 的追加输出模式

· 保留滚动历史:不接管终端视口,保留原生滚动和搜索功能

· 差异渲染:只重绘变化的行,配合同步输出转义码实现无闪烁更新

  • pi-coding-agent(核心 CLI)
· 关键特性:极简系统提示词(仅约 1000 tokens)

· 仅有 4 个核心工具:read、write、edit、bash

· 支持项目上下文文件(AGENTS.md)分层加载

设计哲学与反常规选择

  • YOLO 模式(默认开放权限)
· 他认为其他工具的安全措施是"安全剧场"

· 既然 Agent 可以写代码和执行代码,真正的安全防护实际上是不可能的

· 默认赋予文件系统和命令执行的完整权限

  • 不做内置 TODO 功能
· 他认为 TODO 列表往往会让模型更困惑

· 替代方案:直接写入 TODO.md 文件,用复选框标记进度

  • 不做计划模式
· 可以通过 --tools read,grep,find,ls 启动只读模式来实现类似功能

· 持久化计划应写入文件(如 PLAN.md),跨会话可见

  • 不支持 MCP
· 认为 MCP 服务器会占用过多上下文空间(如 Playwright MCP 占 13.7k tokens)

· 替代方案:构建简单的 CLI 工具 + README,按需读取

  • 没有后台 Bash
· 使用 tmux 替代后台进程管理

· 提供更好的可观察性,且用户可以主动进入会话

  • 没有 Sub-agents
· 其他工具的 Sub-agents 是"黑盒中的黑盒"

· 解决方案:通过 bash 直接调用 pi 自身,获得完整输出可见性

查看原文 → 發佈: 2026-03-13 08:32:06 收錄: 2026-03-13 10:00:41

🤖 問 AI

針對這篇文章提問,AI 會根據文章內容回答。按 Ctrl+Enter 送出。