Pi harness 的"低效"哲学:为什么小而透明的编码工具更可靠

Pi running in Ghostty with a read tool call

几个月前,Pi的创作者Mario Zechner做了一场关于发展圆周率并减缓进程.它让我非常有共鸣,所以我想试试这个背带。我也越来越担心Claude Code和Codex随着时间推移变得臃肿。

我完全不知道这些工具调用在系统提示中输入了什么,或者这对模型的响应有什么影响。我也不知道它们的工具调用是怎么运作的,或者它们在搜索时用什么搜索引擎。这种不透明的特性,加上它们时不时对系统指令做出的大幅修改,使得构建可靠的工作流程变得困难。模型本身就足够非确定性。我真的不想让我的工具再增加这些。

Pi 是一个用 TypeScript 编写的小型编码工具。默认情况下,它为模型提供了四个工具:read,write,edit, 和bash.表面上,这对大多数编码工作来说就足够了。核心足够小,你可以一次性读完重要部分。仓库里有更多包,但这是四个显著的包,读起来相当愉快:

packages/
|-- ai/           # model APIs, streaming, and token usage
|-- agent/        # agent loop and tool execution
|-- tui/          # terminal rendering and keyboard input
`-- coding-agent/ # CLI, sessions, and extensions

它的能动环归根结底是:

while (true) {
    const response = await callModel(messages, tools)
    messages.push(response)

    if (response.stopReason === "error" || response.stopReason === "aborted") {
        break
    }

    const calls = response.content.filter((part) => part.type === "toolCall")
    if (calls.length === 0) {
        break
    }

    const results = await executeTools(calls)
    messages.push(...results)
}

模型请求工具调用,Pi 执行。结果会回到对话中。这个过程反复进行,直到模型响应而不请求其他工具。实际循环还处理排队的用户消息并发送 UI 事件。上述草图省略了这些,包括工具验证和错误处理。

圆周率系统提示以及工具定义总共大约有1000个代币。相比之下,军规系统提示词CLI自带大约有4400个令牌,算上工具定义。Claude代码不是开源的,但有人开源了重构了其提示仅内置工具描述加起来就有几千个代币。没有基准测试能证明这些庞大的系统提示能让输出变得更优。但它们确实从一开始就让会话成本更高。

Pi 不捆绑额外技能、子代理或 MCP 支持。如果你需要,可以让 Pi 写扩展或安装别人的。Pi 了解自己的内部结构,写扩展过程非常愉快。用任何有能力的模型,你几乎可以一次性完成大部分简单扩展。

我真的很喜欢这种选择加入的方式。别加你觉得我需要的垃圾,其实我不需要。让我自己选。

我对安装网上的随机技能和扩展也持怀疑态度。我本地的设置里有几个我写或改编的:

  • 技能:鞭子:驯服了LLM生成的令人难以忍受的文本。我复制了tropes.fyi并经常用它来修正工作中的公关描述。
  • extension:web.ts:让 Pi 搜索 DuckDuckGo 并以纯文本形式打开结果。它告诉模型在回答事实问题前先阅读页面。
  • 扩展:subagent: 将任务委派给一个独立的 Pi 进程,拥有自己的上下文。我从 Pi 的代码复制了代码扩展示例.我可以同时运行代理,或者把一个代理的发现传递给下一个代理。
  • extension:welcome-logo.ts: 在上面截图中绘制了方块字母的 Pi 标志。这是我写的第一个 Pi 扩展。它替换了启动头,并使用当前主题的强调色。

我不使用。/goal/plan模式。我仍然照看特工,阅读他们输出的每一行,所以还没找到合适的方法/goal对我的工作流程尤其有用。至于规划,我只需让模型把计划导出到plan.md档案。

除此之外,我还安装了Pi-MCP适配器用于访问MCP。它已捆绑在一带中mcp-scriptingskill 让 Pi 可以在 JavaScript 中组合 MCP 调用。这是我目前唯一使用的第三方扩展。以后我也想深入研究它的实现,自己写一个 MCP 扩展。

我的π配置在我的点文件仓库里。

我以为Pi那种基础默认会拖慢我。但几乎是非理性地,我已经连续30天每天都用它,没觉得需要换成功能更丰富的线带。用一个核心能放在脑海里而不乱挥动的工具感觉真好。TUI也非常稳定。它一次都没崩溃或冻结过。我工作时也没见过它闪烁。也许是因为它是个该死的TUI,不是游戏引擎!

添加评论
点赞收藏
点踩分享查看原文
评论
?
参与讨论