简体中文 · AI Tools
Pi Coding Agent:构建灵活的 AI 工具以适应实际工作流程
Mario Zechner 探讨了为何 Pi 将工作流程的灵活性置于炒作之上,分析了基于规范的代理开发(spec-driven development)的现实,以及为何代码永远不是免费的。
简介
代码永远不是免费的。这是 Pi 的创建者 Mario Zechner 在讨论 2026 年 AI 辅助开发现状时提出的核心论点。虽然代理可以快速生成大量代码,但这些代码带来的后果终究会找上门来。Pi 的存在是因为 Zechner 发现现有的编码代理并不适合他的工作流程,与其去适应工具,他选择构建一个能适应他的工具。
本次对话涵盖了为何工作流程的稳定性比功能迭代速度更重要,如何在不导致倦怠的情况下与编码代理协作,以及为何整个行业可能正在重复 30 年前在基于规范的开发上犯下的错误。
Pi 存在的意义:工作流程的灵活性优于稳定性
当 Claude Code 刚发布时,Zechner 对其感到满意。然而随着时间的推移,该工具的高频发布节奏成了问题。Claude Code 每天会收到一到三次更新,而每次发布都会伴随着工具定义、系统提示词和底层行为的变更。对于那些构建自定义提示词模板、斜杠命令和工作流程描述的人来说,这些隐形的变更会破坏一切。

即使模型版本保持不变,模型本身似乎每天的表现也不同。Zechner 将此部分归因于“框架”(harness)的变更——即塑造模型响应方式的基础设施和系统提示词。测试框架变更对输出质量的影响非常困难,因为没有确定性的方法来衡量它。结果就是,像 Zechner 这样的开发者无法依赖该工具的一致性,这违背了围绕它构建自定义工作流程的初衷。
Pi 正是源于这种挫败感。它是一个极简、可扩展的编码代理,能够自我修改以适应你的工作流程,而不是强迫你适应它的限制。其底层架构抽象了 LLM 提供商,包含一个终端用户界面库,并提供了通用的代理循环抽象。但关键的区别在于控制权:Zechner 决定了设计,并且可以在无需等待供应商发布周期的情况下进行更改。
Pi 的实际运作方式:并行处理与人工审核
Zechner 使用 Pi 的日常工作流程是有条不紊且刻意保持低技术的。他不会并行运行大量代理。相反,他采用了一种“原始”方法:排队多个会话,每个会话分析跟踪器中的不同问题,然后逐一审查和迭代。

对于错误修复和功能实现,流程从问题描述开始。Zechner 将问题输入给一个带有自定义提示词模板的代理,要求它:提取所有相关信息,忽略问题中的分析,并根据我们想要实现的目标进行自己的分析。这个分析步骤每个问题大约需要五分钟。他会为下一个问题打开第二个会话,再为另一个问题打开第三个,从而创建一个并行预处理流水线。
一旦代理完成问题分析,Zechner 会审查建议,亲自检查代码,并在必要时手动重现问题。他将代理用作“橡皮鸭”——一个思考伙伴——直到他自己对实现方案达成一致。当他告诉代理进行实现时,上下文已经包含了足够的护栏,代理能够准确知道要修改哪些接口、触及哪些模块以及测试应该如何工作。
实现过程需要 10 到 30 分钟。当代理发出完成信号时,Zechner 会调出差异查看器,并对个别行进行反馈标注。他点击完成,反馈会自动回传给代理,迭代持续进行直到代码质量达标。对于核心机制,他会像对待人类同事一样审查每一处变更。对于其他部分,他则会在不深入检查的情况下批准。
这种工作流程之所以有效,是因为 Zechner 在代码库方面拥有 10 多年的经验。他知道什么有效,什么无效。对于新开发者或缺乏经验的人来说,这种方法会有所不同,且风险更高。
基于规范的开发(Spec-Driven Development)的现实
整个行业正在重复 30 年前犯下的错误。瀑布式开发在几十年前就被证明是低效的,然而随着 AI 代理的出现,我们又回到了“超级瀑布”模式:编写详细的规范,然后让代理去实现它们。唯一的区别是,现在你甚至不需要自己写规范——你通过“氛围提示”(vibe prompt)让一个代理写出非常详细的规范,然后由另一个代理去实现。

问题是根本性的。一个完整的规范本质上就是程序本身。如果你用自然语言编写规范,你就会留下空白。代理会用它从互联网上 20 年的代码中学习到的任何模式来填补这些空白——其中大部分代码都是垃圾。结果就是一个看起来像“氛围编码”(vibe-coded)的软件代码库,因为它确实就是这样。
有一种反驳观点:代码现在很便宜,迭代很快。以前,一个瀑布式规范可能需要几个月才能实现。现在可能只需要一天。你可以通过手动测试来完成它。但 Zechner 尚未看到证据表明这对于生产级软件确实有效。他怀疑最终开发者会在半夜醒来时意识到一切都崩溃了。
话虽如此,在某些限制条件下,代理驱动的开发是有意义的。Bun 从 Zig 重写为 Rust 之所以成功,是因为该项目拥有广泛的测试套件。代理可以在一定程度上验证自己的工作。在这些情况下,此类工具确实很有用。但对于大多数软件而言,这种方法风险很大。
大规模管理开源项目:Clanker 问题
在代理出现之前,一个成功的开源项目每周可能只会收到一两个拉取请求。而 Pi 现在每天收到 50 到 60 个拉取请求——全部来自代理(Zechner 称它们为“clankers”)。每个 PR 的描述都像一本完整的《哈利·波特》,并包含 10 到 1,000 个文件变更。

默认的做法是宣布每个代理生成的 PR 都是垃圾并自动关闭它们。但 Zechner 找到了一个解决方案:要求人们首先用自己的语言写一个不超过一屏的问题描述,准确解释他们想做什么以及原因。如果问题描述得好,他会批准,然后对方可以发送 PR。这证明了他们是人类,理解问题,并且理解解决方案。
一旦获得批准,有意义的 PR 就会进来。Clanker PR 停止出现。问题仍然源源不断,但 Zechner 会手动进行分类。他每天阅读 30 到 60 个已关闭的问题,识别哪些是合法的,哪些是垃圾。在他最近的一次分类中,收到了 50 个问题,只有 2 个被保留。这大约需要 30 分钟,因为大多数问题很容易被识别为噪音。
对于 OpenClaw 这种规模的项目,这种手动方法行不通。Peter Steinberger 的 Token 消耗量达到每月 130 万美元,部分原因在于在该规模下自动化过滤问题和 PR 需要复杂的架构。Zechner 编写了一些可视化工具来帮助聚类相似的问题,但即使这样也不够。其数量级要大得多。
本地推理与小型模型的未来
Zechner 对在消费级硬件上本地运行强大的 AI 模型持乐观态度。对于他的机器人项目——一个使用智能手机作为微控制器运行编码代理的玩具——他使用了 Gemma 4 和 Qwen 3.6,这些是较小的混合专家模型(MoE)。它们对于带有电机和摄像头控制的聊天机器人来说绰绰有余,而且速度很快。
这种设置是负担得起的。使用 Parakeet 进行语音转文字大约需要 10 GB 的统一内存。使用 Qwen TTS 进行文字转语音需要另外 10 GB。Qwen 3.6 需要 4 GB。总计:macOS 上 14 GB 的统一内存,或者 Windows 上等效的 NVIDIA 设置。这对许多人来说是负担得起的,虽然不是全世界,但也是很大一部分人。
DeepMind 的 Denise Asaves 曾建议,当前的巨型模型并不需要它们所有的参数,可以蒸馏成更小的模型而不会损失太多输出质量。Zechner 的希望是,未来涉及将大模型蒸馏成保留大部分能力的小模型,而不是为特定任务训练专用模型。Redis 的 Antirez 已经开始为 DeepSeek V4 开发一个名为 ds4 的自定义推理引擎,并在 128 GB 的笔记本电脑上运行它。这是一个非常强大的模型,可以处理 Zechner 使用 Pi 处理的 60% 到 70% 的问题。
代码的成本与工艺的纪律
Zechner 见过有人在一周内通过代理生成了 50 万行代码。结果总是相同的:灾难。代码永远不是免费的,因为后果终究会找上门来。如果你认为现在生成的代码越多越好,你只是推迟了惩罚。
软件开发中真正的瓶颈不是打字速度或代码生成。而是思考、设计和探索解决方案空间。代理在那个阶段确实很有用——你可以让多个代理探索不同的方法并更快地看到结果。但这些探索的产出并不能自动重用。你仍然需要理解它、重构它并维护它。
对于 Zechner 来说,代理带来的最大生产力提升来自于工作的异步性。他可以给代理一个任务,去开个会,然后回来查看结果。但他不认为并行运行 10 个代理能让他的产出翻 10 倍。仅上下文切换就让人精疲力竭。他每个月做过一两次,一天处理 30 个问题,之后他的大脑就变成了一团浆糊。
协作方面是他最看重的。拥有一个代理作为结对编程伙伴——提问、提出选项、解释代码——就像是思维的自行车。它比独自坐着更能帮助他思考问题。但这需要纪律:不要把一切都委托给机器,因为每次他这样做,他最终都会陷入困境,因为一切都不再好用,一切都分崩离析。
重构 Pi:为未来而构建
Pi 积累了历史包袱。其中一部分早于 Zechner 使用代理的时间,而且很稳固。其他部分,比如 HTML 导出,他从未看过,只要能渲染出来,他就不关心。有些部分是“氛围编码”出来的。
重构工作有几个目标。首先,在不破坏现有扩展的情况下,更容易地扩展到其他类型的用户界面——Web、原生等。其次,实现远程能力:在一台机器上运行一个 Pi 会话,并从另一台机器连接到它,具有良好的持久性和可观测性。第三,使 Pi 的 SDK 可以在 Cloudflare Workers、Vercel 和其他环境中部署,而不仅仅是带有 bash 的本地计算机。
Zechner 正在主分支上进行重构,因为他不关心传统意义上的稳定性。他正在一点一点地进行,从与 LLM 提供商通信的底层包开始。编码代理本身看起来和工作方式将保持不变,但所有底层基础设施都将变得干净且可重用。他希望在一两周内完成该阶段,然后花几周时间开发新的扩展机制,使扩展具有服务器端和 UI 端组件。
为何 Pi 默认以 YOLO 模式运行
Pi 在执行代码之前不会请求许可。这是故意的。通过告诉人们 YOLO 模式很危险并且他们应该考虑一下,Zechner 实际上促使人们思考安全性。他希望他们从自身寻找安全意识,并决定如何在自己的环境中保护代理工作。
答案通常是容器化。如果你不想让代理破坏你的计算机,就将代理或它使用的工具(文件读写、bash 等)容器化。这解决了问题。但 Zechner 不能为你做决定。他可以捆绑 Anthropic 的沙箱或 bubble wrap,但这些是不完整的解决方案。在具有特定基础设施限制的企业环境中,内置沙箱可能根本无法工作。
Claude Code 中存在的东西大多是安全剧场。Claude Code 现在在自动模式下执行 bash 命令之前会询问 LLM 该命令是否安全。Zechner 认为这不好。LLM 无法可靠地确定命令是否安全——它只能根据模式进行猜测。
结论
Pi 代表了一种不同的哲学:构建开发者可以拥有和修改的工具,而不是拥有开发者的工具。Pi 的成功不是以功能或基准测试来衡量的,而是以 Zechner 是否能维持一个小团队并继续探索代理工作的应用——从编码到机器人技术再到本地推理。
更广泛的教训是,工作流程比炒作更重要。稳定性、可预测性和自定义工具的能力比最新功能更有价值。而且代码永远不是免费的——你行为的后果终究会找上门来。