Pi 对比 OpenCode - 您应该使用哪款 AI 编程助手?

KKTG Analysis
컴퓨터/소프트웨어창업/스타트업AI/미래기술

Transcript

00:00:00目前有两个严肃的开源 AI 编程智能体正在争夺终端市场
00:00:04选错一个可能意味着以后要重构你的整个工作流程。
00:00:10其中一个开箱即用,提供了你想要的一切,而另一个
00:00:14几乎什么都不带,并辩称这正是其核心所在。今天,我们
00:00:19让 Open Code 和 Pi 正面交锋。
00:00:21通过这段视频,你将准确知道哪一个才真正属于你的终端。
00:00:27让我们先从这些工具究竟是什么开始。
00:00:30因为它们以截然不同的方式解决同一个核心问题,
00:00:34Open Code 和 Pi 都是基于终端的 AI 编程智能体,你在
00:00:40终端运行它们,它们连接到 Claude 或 GPT 等大语言模型,
00:00:45它们可以阅读代码、编辑文件、运行 shell 命令,并能针对
00:00:50你的代码库进行深入对话,可以把它们看作 Claude Code 的开源替代品。
00:00:55两者都用 TypeScript 编写,采用 MIT 许可,且都支持超过 20 个
00:01:01LLM 供应商,但相似之处也就到此为止了。Open Code 是由
00:01:06Terminal.shop 的创建者和 NeoVim 爱好者社区开发的。
00:01:11它采取了我所谓的“功能齐全”的策略,开箱即用。
00:01:15你会得到一个多智能体系统,拥有针对不同任务的专业智能体,
00:01:20内置带有审批对话框的权限系统、语言服务器协议(LSP)
00:01:24集成以提供代码智能、完整的模型上下文协议(MCP)支持
00:01:29用于连接外部工具、一个用于会话持久化的 SQLite 数据库,
00:01:34甚至除了终端界面外还有一个基于 Tauri 的桌面应用。Open Code 的
00:01:40哲学是:编程智能体应该通过合理的默认设置和深度集成
00:01:45实现立即可用。由 Mario Zechner 创建的 Pi 则采取了相反的
00:01:51方式。其哲学在 README 中写得很清楚:Pi 是
00:01:56极具扩展性的,因此它不必强加给用户某种工作流程。Pi
00:02:00刻意不提供子智能体、不提供 MCP 支持、不提供权限
00:02:05系统、没有计划模式,也没有内置的待办跟踪。相反,它
00:02:11提供了一个强大的扩展 API 并表示:根据你的需求构建工具,
00:02:17或者安装社区包来按你的方式实现。核心保持极简,
00:02:22其他一切都是可选的。所以这两个项目代表了在开发工具
00:02:27设计理念上的真正分歧。让我们深入了解各自的
00:02:32技术细节,然后直接进行对比。首先从
00:02:36Open Code 的架构开始。Open Code 是一个拥有约 21 个包的 monorepo。
00:02:42核心引擎位于单个包中,但有独立的包分别用于
00:02:46Web 控制台、桌面应用、TypeScript SDK、插件系统、共享
00:02:52UI 组件和文档。在底层,它运行在 Bun 上,Bun 的
00:02:57启动和执行速度明显快于 Node。至于其 LLM
00:03:02抽象层,Open Code 使用了功能丰富的 AI SDK 第五版。
00:03:08这是一个维护良好、应用广泛的库,为数十个供应商提供了
00:03:13统一的接口。实际的好处是,随着 Vercel SDK 增加
00:03:18新的集成,Open Code 几乎免费获得了这些供应商支持。
00:03:24Open Code 最突出的特点之一是其多智能体系统。它附带了
00:03:30几个专门的智能体。“构建智能体”是默认设置,一个拥有完全权限的
00:03:35开发智能体,可以读取、写入和执行任何操作。“计划智能体”是只读的,
00:03:40专为探索和分析代码而设计,不作任何更改。它只能
00:03:45写入特定的计划目录。“探索者智能体”是一个快速、轻量级的
00:03:50代码库导航专家,仅限于搜索和读取操作。
00:03:55还有一个“通用智能体”负责复杂的、作为子智能体执行的多步任务。
00:04:00用户可以通过 Tab 键在这些智能体之间切换,每个智能体都有其
00:04:05自己的权限规则集。你也可以在配置文件中
00:04:09定义自定义智能体,指定它们使用的模型、拥有的权限
00:04:14以及它们的系统提示词。至于数据持久化,Open Code 使用了
00:04:19结合 Drizzle ORM 的 SQLite。会话、消息、权限和 MCP
00:04:25凭据都存储在单个数据库文件中。这是一个很有意义的
00:04:30架构选择。SQLite 提供了事务完整性、跨会话的高效
00:04:35查询,以及一个易于备份的单一文件。Open Code
00:04:41以 WAL 模式运行它,以获得更好的并发读取性能。Open Code 的权限
00:04:46系统是分层且细粒度的。每一次工具调用都要经过权限
00:04:52检查。你可以针对每个工具和每个文件模式设置规则。例如,你可能
00:04:57允许读取所有文件,但编辑 .env 文件需要审批,并且完全
00:05:03禁止涉及生产目录的 shell 命令。权限会通过
00:05:08多个配置层级进行级联,从全局用户配置一直到项目特定的
00:05:13覆盖。当智能体需要审批时,它会直接在终端显示
00:05:18一个交互式对话框,你可以选择允许一次或始终允许该操作。其 MCP
00:05:24集成功能完备。Open Code 可以连接到本地和远程 MCP
00:05:30服务器。它支持 stdio 和 HTTP 传输,处理远程服务器的
00:05:37OAuth 身份验证,并能自动注册来自已连接 MCP
00:05:42服务器的工具。如果你已经在其他工具中使用了 MCP 服务器,Open Code
00:05:47可以立即与它们配合使用。另一个显著特点是内置 LSP 支持。
00:05:53Open Code 可以为 TypeScript、Python、Go、Rust 和其他语言启动
00:05:58语言服务器协议服务器。这使得 AI 模型能够访问真实的代码
00:06:04智能,如悬停信息、跳转到定义和符号引用,而不是仅仅
00:06:10依靠文本模式匹配。这在代码理解准确性方面是一个细微但有意义的
00:06:15优势。Open Code 还有一个技能系统,它与
00:06:20Claude Code 的技能格式兼容。技能是带有 front matter 的
00:06:25Markdown 文件,用于定义专门的行为,此外还有一个基于
00:06:30NPM 包的插件系统,几乎可以挂钩到生命周期的每一个环节,从
00:06:35加载配置、消息转换到工具执行。现在
00:06:40让我们看看 Pi 的架构。Pi 也是一个 monorepo,但架构
00:06:45不同。关键的包包括编程智能体本身、作为 LLM
00:06:51抽象层的 Pi-I、用于有状态智能体运行时的 Pi Agent Core,以及用于
00:06:57终端渲染的 Pi-2E。还有 PiMom(一个 Slack 机器人)和用于
00:07:02GPU 部署的 PiPods。Pi 最重大的技术决策是它从零开始
00:07:08构建了自己的 LLM 抽象层,而不是使用 Vercel
00:07:12AI SDK。Pi-I 是一个统一的多供应商 LLM API,支持
00:07:2030 多个供应商,包括 Vercel AI SDK 尚未涵盖的一些
00:07:24供应商,如 Minimax 和 Kimi。构建自己的层让 Pi 团队能完全控制
00:07:30流式传输行为、工具调用解析和供应商特定的优化。这
00:07:35带来的代价是维护负担,但也意味着 Pi 可以按照他们想要的方式
00:07:40实现在工具参数流式传输过程中的部分 JSON 解析等功能。
00:07:44Pi 的会话管理使用 JSONL 格式,这是一种每一行都是一个
00:07:50JSON 对象的纯文本文件。每个条目都有一个 ID 和父 ID,从而在
00:07:56单个文件中实现了树状结构。这种做法很聪明。这意味着你可以
00:08:00分支对话、导航完整的历史树,并在分支间跳转,而这一切都在一个
00:08:06易于使用标准 Unix 工具检查的文件中完成。`tree` 命令让
00:08:12你可以可视化整个对话历史并导航到任何一点。`fork`
00:08:17命令可以从任何消息创建新分支。这确实是我在编程智能体中
00:08:23见过的最好的对话管理界面之一。Pi 的
00:08:28扩展系统是其理念真正发扬光大的地方。扩展是
00:08:33由 JITI 直接加载的 TypeScript 文件,因此没有编译步骤。一个
00:08:38扩展可以注册自定义工具、命令和键盘快捷键。它可以
00:08:44订阅生命周期事件,如会话开始、智能体启动、工具调用和
00:08:49模型选择。它可以通过确认对话框、选择菜单和文本
00:08:55输入提示与用户交互。它甚至可以渲染自定义的 TUI 组件。其
00:09:01扩展 API 让你可以访问会话管理器、模型注册表、认证
00:09:06存储和事件总线。换句话说,扩展程序几乎可以做
00:09:11核心程序能做的一切。这时,Pi 在功能上那些刻意的取舍就开始
00:09:16显得合理了。没有内置权限系统?写一个扩展,在执行危险
00:09:20命令前显示确认对话框。没有子智能体?通过 tmux 启动 Pi 实例,或
00:09:27写一个扩展来协调多个智能体循环。没有 MCP?通过 CLI
00:09:33利用 CLI 工具和 README 构建一项技能,或编写一个扩展程序来添加 MCP 支持。
00:09:40没有计划模式?将计划写入 Markdown 文件,或者构建一个按你
00:09:45喜欢的方式管理计划的扩展。Pi 的终端渲染也是定制的。pi2e
00:09:51包实现了差异化渲染,并采用三种策略来最小化屏幕
00:09:56更新,使用 CSI 2026 协议进行原子更新以消除闪烁。
00:10:02它拥有自己的组件系统,包括容器、编辑器、文本渲染、
00:10:07Markdown 显示、图像支持和选择列表。编程智能体的 TUI 完全基于此框架构建。
00:10:13在工具处理方面,Pi 附带了七个内置工具——
00:10:18READ、bash、edit、write、grep、find 和 ls。这是一套刻意保持精简的工具集。
00:10:25bash 工具支持可选的 Docker 沙盒和实时流式输出。
00:10:30edit 工具使用统一的 diff 格式。所有工具在执行前都会
00:10:36使用 AJV 验证其参数,并且默认支持并行执行,
00:10:42这意味着来自 LLM 的多个工具调用会并发运行,而不是一个接一个。
00:10:48现在让我们在最重要的维度上直接对比这两个工具。
00:10:53供应商支持。两者都支持超过 20 个供应商,并兼容任何
00:10:59OpenAI 兼容的 API。Open Code 使用 Vercel AI SDK,这意味着
00:11:06随着生态系统的增长,它能继承新的供应商支持。Pi 构建了自有的 Pi-I 库,
00:11:12这赋予了它更多控制权,但需要手动集成新供应商。在实践中,
00:11:18两者都涵盖了你可能用到的所有主要供应商。在智能体模型方面,
00:11:22Open Code 附带了多个专业智能体,并允许你通过
00:11:27单次按键在它们之间切换。Pi 只提供一个智能体,并表示如果你想要子智能体,
00:11:33就用扩展构建它们或启动单独的实例。如果你想要
00:11:37开箱即用的专业模式,Open Code 在这里胜出。如果你更愿意构建
00:11:42自己的智能体拓扑结构,Pi 提供了相应的工具。Open Code 使用 SQLite。
00:11:47Pi 使用 JSONL 文件。SQLite 提供了事务完整性和高效的
00:11:53查询。JSONL 提供了可以用 cat 或 grep 检查的人类可读文件,
00:11:58且 Pi 在单个文件内的树状结构非常优雅。两者都支持会话
00:12:04分支和分叉,Pi 的树状导航界面在
00:12:08探索对话历史方面设计得特别出色。Open Code 拥有一个全面的
00:12:13内置系统,包含审批对话框、基于文件的规则以及持久的权限
00:12:19记忆。Pi 核心没有权限系统,并期望通过扩展来处理。
00:12:25如果你想要立竿见影的防护栏,Open Code 是更安全的选择。如果你
00:12:30在容器中运行,或想完全控制你的安全模型,Pi 的方式则能给你
00:12:35更多的灵活性。关于 MCP 支持。Open Code 提供完整的 MCP 支持,包含 OAuth、
00:12:41多种传输方式和自动工具注册。Pi 核心明确拒绝了 MCP,
00:12:48转而支持技能,即通过 README 说明文档化的 CLI 工具。
00:12:54Mario Zeckner 写了一篇博文,辩称 MCP 增加了复杂性,而一个
00:13:00简单的带有 README 的 CLI 工具就能达成同样的目标。如果你现有的工作流
00:13:04已经依赖于 MCP 服务器,Open Code 是明确的选择。如果你更喜欢
00:13:10追求小型、可组合工具的 Unix 哲学,Pi 的方式可能会更引起你的共鸣。
00:13:16代码智能方面。Open Code 内置了 LSP 集成,使得 AI 模型
00:13:22能够访问类型信息、定义和引用。Pi 的核心并不包含 LSP。
00:13:28这使得 Open Code 在处理强类型语言时具有显著优势,
00:13:32因为类型上下文提高了 AI 的理解力。在终端界面上,
00:13:37两者都有复杂的自定义 TUI 实现,但构建方式不同。
00:13:42Open Code 使用 Solid.js 和 OpenID 框架。Pi 则使用
00:13:48它自己的带有差异化渲染的 Pi2E 框架。两者外观都很出色,
00:13:53响应也很迅速。Open Code 此外还提供了一个基于 Tauri 的桌面
00:13:58应用和 Web 控制台。Pi 仅限终端,尽管它提供了一个 Web 组件库
00:14:03供开发者嵌入到他们自己的应用中。两者都使用基于 JSON 的
00:14:07配置,包含项目和全局层级。Open Code 使用 JSONC,
00:14:14即带注释的 JSON,这在体验上很贴心。Pi 则使用标准的
00:14:19JSON。两者都支持对模型、工具和行为的广泛定制。Open Code 的
00:14:26配置更复杂,因为可配置项更多。Pi 的则更简单,
00:14:31因为内置的功能表面积较小。那么你应该选择哪一个呢?
00:14:35以下是你需要问自己的问题。你是想要一个开箱即用、功能齐全的
00:14:39工具?还是更倾向于组建自己的工作流?如果你想
00:14:45安装一个编程智能体,并在五分钟内让一切就绪,拥有
00:14:49权限、多智能体、MCP、LSP 等各种打磨好的体验,Open Code 为此而生。
00:14:56如果你想要一个可以根据需求完全自定义的极简核心,并且你
00:15:01不介意编写 TypeScript 扩展,那么 Pi 就是为你打造的。
00:15:06MCP 对你的工作流有多重要?如果你已经在使用 MCP 服务器
00:15:11或计划使用,Open Code 原生支持它们。Pi 则刻意不支持,
00:15:16更倾向于简单的基于 CLI 的集成。你主要使用强类型
00:15:22语言工作吗?Open Code 内置的 LSP 支持为 AI 模型提供了更丰富的
00:15:28代码理解,这对于 TypeScript、Go、Rust 等语言至关重要。
00:15:34如果你主要在 Python 或动态类型语言中工作,这一优势
00:15:39会小一些。你想要桌面应用或 Web 界面吗?Open Code
00:15:44在终端之外还提供这两者。Pi 仅限终端,并以此为傲。你对
00:15:51信任和沙盒化怎么看?如果你想让智能体在进行任何
00:15:55危险操作前询问你,Open Code 的权限系统开箱即用。如果你
00:16:00宁愿在 Docker 容器中运行整个智能体,让它在沙盒内
00:16:04为所欲为,Pi 的“无权限”策略则能很好地与基于容器的工作流配合。
00:16:10你是一个想定制一切的高级用户吗?Pi 的扩展系统非常强大。
00:16:15你可以修改智能体行为的几乎每一个方面,从工具执行、会话管理
00:16:20到 TUI 本身。Open Code 也有插件系统,但它更多地专注于
00:16:25特定的钩子(hooks),而不是完全的行为覆盖。实话实说,
00:16:30结论如下。就今天来看,Open Code 是更成熟、功能更完备的产品。
00:16:34它提供了更多开箱即用的功能,与更多外部系统集成,
00:16:40且上手门槛更低。对于大多数想要开源 AI 编程智能体的开发者,
00:16:44Open Code 是更稳妥的选择。Pi 则在设计上更有趣。它的
00:16:49极致极简主义和扩展优先的理念使其具有独特的适应性。如果你是那种
00:16:55在写代码之前会花几周时间定制 NeoVim 配置的开发者,如果你想要一个
00:17:01完全按照你的设想工作的智能体,那么 Pi 会回报你的投入,其会话树导航
00:17:05功能确实是同类最佳的。这两个项目都采用 MIT 许可,且都在积极维护,
00:17:09并且都支持同样广泛的 LLM 供应商。你可以在一个下午的时间里把两个都试一下。
00:17:14代码都在 GitHub 上,而且两者都不需要订阅即可开始使用。
00:17:20安装它们,在同一个代码库上运行它们,看看哪一个更符合
00:17:27你的工作方式。这才是唯一真正重要的对比。
00:17:31安装它们,在同一个代码库上运行它们,看看哪一个更符合
00:17:37你的工作方式。这才是唯一真正重要的对比。

Key Takeaway

开发者应根据对功能集成度的需求做出选择:Open Code 提供包含 LSP、MCP 和权限系统在内的全功能开箱即用体验,而 Pi 则通过极简核心和强大的 TypeScript 扩展 API 满足追求深度定制的高级用户。

Highlights

  • Open Code 与 Pi 均支持超过 20 家 LLM 供应商,且兼容所有 OpenAI 格式的 API。

  • Open Code 基于 Bun 运行,并集成了 Vercel AI SDK 第五版以获得广泛的模型支持。

  • Pi 采用自定义的 Pi-I 抽象层,支持 Minimax 和 Kimi 等 Vercel 尚未涵盖的特定供应商。

  • Open Code 具备多智能体系统,包含专门用于代码探索的只读型“探索者智能体”和拥有完全权限的“构建智能体”。

  • Pi 的对话管理使用 JSONL 格式,支持通过 tree 命令进行树状历史导航和 fork 命令创建对话分支。

  • Open Code 内置语言服务器协议(LSP)集成,能直接访问 TypeScript、Go 和 Rust 等强类型语言的类型信息和符号引用。

  • Pi 核心仅提供 READ、bash、edit、write、grep、find 和 ls 这七个精简的内置工具。

Timeline

终端 AI 编程智能体的核心定位与设计分歧

  • Open Code 和 Pi 是基于终端且采用 MIT 许可的开源 AI 编程智能体。
  • Open Code 采取功能全覆盖策略,集成多智能体、权限系统、LSP 和 MCP 支持。
  • Pi 遵循极简主义哲学,刻意剔除内置功能以换取极高的 API 扩展性。

这两款工具旨在解决相同的核心问题:通过终端连接大语言模型来阅读、编辑文件及执行 shell 命令。Open Code 针对 Terminal.shop 用户和 NeoVim 爱好者开发,强调合理的默认设置。Pi 由 Mario Zechner 创建,主张工具不应强加工作流,核心程序仅保持基本功能,其余需求均通过社区包或自定义扩展实现。

Open Code 的架构:多智能体与深度集成

  • Open Code 采用 Bun 运行时和 Vercel AI SDK 架构以实现快速启动和广泛的供应商兼容。
  • 分层权限系统允许用户针对特定工具或文件模式(如 .env)设置审批规则。
  • 多智能体系统通过不同的权限集区分构建、计划、探索和通用任务。

其架构由 21 个包组成的 monorepo 构成,涵盖了桌面应用、SDK 和插件系统。SQLite 数据库配合 Drizzle ORM 负责存储会话数据、凭据和权限记忆,确保了事务完整性和高效查询。通过内置的 LSP 支持,AI 模型能获取比文本匹配更准确的代码智能。此外,该系统完全兼容 Claude Code 的技能格式。

Pi 的架构:极简核心与树状对话管理

  • Pi 使用自研的 Pi-I 抽象层来完全控制流式传输行为和部分 JSON 解析。
  • 基于 JSONL 格式的会话管理实现了树状结构的对话历史导航。
  • 扩展系统允许使用 JITI 直接加载 TypeScript 文件,无需编译即可修改智能体行为。

Pi 的技术决策侧重于灵活性。Pi2E 渲染框架利用 CSI 2026 协议实现原子更新,消除了终端闪烁并支持自定义 TUI 组件。虽然核心只提供七个基础工具,但其并行执行能力允许模型同时调用多个工具。其对话管理界面允许用户分支和分叉对话,是目前编程智能体中较出色的设计。

核心功能维度对比与选择指南

  • Open Code 在处理强类型语言和依赖 MCP 工作流的场景中具有优势。
  • Pi 适合在容器沙盒中运行且需要完全控制安全模型的高级用户。
  • Open Code 提供 Web 和桌面界面,而 Pi 坚持仅限终端的交互方式。

在供应商支持上两者旗鼓相当,但在智能体拓扑结构上存在差异:Open Code 预置了专业分工,而 Pi 鼓励用户自行构建。Open Code 的权限系统提供了即时防护,Pi 则通过扩展性将安全控制权交给用户。对于现有工作流已深度绑定 MCP 服务器的开发者,Open Code 是唯一具备原生支持的选择。

成熟度与用户匹配结论

  • Open Code 是目前功能更完备、上手门槛更低的选择。
  • Pi 的极致极简主义为追求 NeoVim 级别定制感的开发者提供了回报。
  • 两款工具均无需订阅,建议通过在同一代码库上运行来决定最终选择。

Open Code 能够满足大多数寻求开源替代品的开发者,其集成度能让用户在五分钟内进入工作状态。Pi 则代表了 Unix 哲学的可组合性,适合愿意投入时间编写扩展以打造专属工具的用户。由于两者均采用 MIT 许可并活跃维护,实际的操作体验是判断其与个人工作方式契合度的唯一标准。

Community Posts

No posts yet. Be the first to write about this video!

Write about this video