Pi:OpenClaw使用的AI代理

如果你一直生活在岩石下,你会注意到这一周我的朋友Peter的一个在互联网上走红了。它有很多名字。最近的一个是OpenClaw,但在新闻中你可能根据你何时阅读它而遇到了ClawdBot或MoltBot。

它是一个连接到你选择的通信通道的代理,只是运行代码

你可能不太熟悉的是,OpenClaw使用的是一个名为Pi的小编码代理。而且Pi恰好是,在这一点上,我几乎专门使用的编码代理。

在最后几周里,我越来越多地成为了这个小代理的拥护者。我最近就此发表演讲后,我意识到我实际上并没有在这个博客上写关于Pi的内容,所以我觉得我可能想提供一些关于我对它着迷的背景,以及它与OpenClaw的关系。

Pi由Mario Zechner编写,与Peter不同,Peter的目标是"带有疯狂触感的科幻"1,Mario非常务实。尽管方法不同,OpenClaw和Pi遵循相同的想法:LLM确实擅长编写和运行代码,所以拥抱这一点。在某种程度上我认为这不是偶然,因为Peter让我和Mario在去年迷上了这个想法和代理。

1、什么是Pi?

所以Pi是一个编码代理。而且有很多编码代理。真的,我认为你现在可以从货架上有效地选择任何一个,并且你将能够体验代理编程是什么感觉。在这个博客上的评论中,我积极地谈到了AMP,我与AMP产生共鸣的原因之一是它真的感觉像是由既沉迷于代理编程也尝试了一些不同的东西来看看哪些有效并且不仅仅是在它周围构建一个花哨的UI的人构建的产品。

Pi对我来说很有趣,主要有两个原因:

首先,它有一个微小的核心。它有我知道的任何代理中最短的系统提示,并且只有四个工具:读取、写入、编辑、Bash。

第二件事是它通过提供扩展系统来弥补其微小的核心,该系统还允许扩展将会话持久化到状态,这非常强大。

还有一个小奖励:Pi本身像优秀的软件一样编写。它不闪烁,它不消耗大量内存,它不会随机崩溃,它非常可靠,并且由非常关心软件内容的人编写。

Pi也是一组小组件,你可以在其上构建自己的代理。这就是OpenClaw的构建方式,这也是我构建自己的小Telegram机器人和Mario构建他的mom的方式。如果你想构建自己的代理,连接到某物,当Pi指向自身和mom时,会为你构建一个。

2、Pi中没有什么

为了理解Pi中有什么,理解Pi中没有什么、为什么不在Pi中以及更重要的:为什么不会在Pi中甚至更重要。最明显的省略是MCP支持。它中没有MCP支持。虽然你可以为它构建扩展,你也可以做OpenClaw做的事情来支持MCP,即使用mcporter。mcporter通过CLI接口或TypeScript绑定公开MCP调用,也许你的代理可以做一些事情。或者不,我不知道 :)

这不是一个懒惰的省略。这是从Pi的哲学而来的。Pi的整个想法是,如果你想让代理做一些它还没有做的事情,你不要去下载扩展或技能或像这样的东西。你要求代理扩展自己。它庆祝编写和运行代码的想法。

这不是说你不能下载扩展。它非常支持。而不是必然鼓励你下载别人的扩展,你也可以将你的代理指向一个已经存在的扩展,说,像,像你在那边看到的那样构建它,但进行你喜欢的更改。

3、为构建代理而构建的代理

当你看看Pi以及通过扩展OpenClaw在做什么时,有一个像粘土一样可塑的软件的例子。这为它的底层架构设定了某些要求,这些要求实际上在许多中 方式对系统设定某些约束,这些约束确实需要进入核心设计。

所以例如,Pi的底层AI SDK编写方式是,会话可以真正包含来自许多不同模型提供商的许多不同消息。它认识到会话在模型提供商之间的可移植性是有限的,所以它不太过多地依赖任何特定于模型提供商的功能集,该功能集无法转移到另一个。

第二个是,除了模型消息外,它在会话文件中维护自定义消息,这些消息可以被扩展用于存储状态或被系统本身用于维护根本没有发送给AI或只发送部分信息的信息。

由于该系统存在并且扩展状态也可以持久化到磁盘,它具有内置的热重新加载,以便代理可以编写代码、重新加载、测试它并循环进行,直到你的扩展实际功能。它还附带文档和示例,代理本身可以使用这些文档和示例来扩展自己。甚至更好:Pi中的会话是树。你可以在会话中分支和导航,这开辟了所有种有趣的机会,例如启用在修复损坏的代理工具的工作流,而不会在主会话中浪费上下文。工具修复后,我可以将会话回滚到更早,并且Pi总结在其他分支上发生了什么。

这都很重要,因为例如如果你考虑MCP如何工作,在大多数模型提供商上,MCP的工具,像LLM的任何工具,需要在会话开始时加载到系统上下文或其工具部分。这使得完全重新加载工具可以做什么,而无需完全丢弃缓存或混淆AI先前的调用如何不同地工作,变得非常困难到不可能。

4、上下文之外的工具

Pi中的扩展可以注册工具以供LLM调用,并且我每隔一段时间就发现这很有用。例如,尽管我对Beads的实现方式有批评,但我认为给代理访问待办事项列表是一件非常有用的事情。而且我确实使用了一个本地工作的代理专用问题跟踪器,我让我的代理自己构建了它。而且因为我也想让代理也管理待办事项,在这个特定情况下我决定给它一个工具而不是CLI。这感觉适合问题的范围,并且它目前是我加载到上下文中的唯一额外工具。

但对于我所添加到代理的大多数部分来说,要么是技能,要么是使与代理工作对我来说更愉快的TUI扩展。除了斜杠命令外,Pi扩展可以直接在终端中渲染自定义TUI组件:旋转器、进度条、交互式文件选择器、数据表、预览窗格。TUI足够灵活,以至于Mario证明了你可以在其中运行Doom。不实用,但如果你可以运行Doom,你当然可以构建一个有用的仪表板或调试界面。

我想强调我的一些扩展,以便给你一个可能的事情的想法。虽然你可以不加修改地使用它们,但整个想法真的就是将代理指向一个并将其改编到你内心的内容。

/answer

不使用计划模式。我鼓励代理提问,并且有来回的富有成效。但我不喜欢如果你给代理一个问题工具就会发生的结构化问题对话。我更喜欢代理的自然散文,穿插着解释和图表。

问题:内联回答问题变得混乱。所以/answer读取代理的最后响应,提取所有问题,并将它们重新格式化为一个不错的输入框。

/todos

即使我批评Beads的实现,给代理一个待办事项列表是真正有用的。/todos命令将存储在.pi/todos中的所有项目作为markdown文件带出。代理和我都可以操作它们,并且会话可以声明任务以将它们标记为正在进行中。

/review

随着更多代码由代理编写,在代理先审查之前将未完成的工作扔给人类没有什么意义。由于Pi会话是树,我可以分支到一个新的审查上下文,获取发现,然后将修复带回主会话。

UI模仿Codex,后者提供了易于审查提交、差异、未提交的更改或远程PR。提示符注意我关心的东西 关于,所以我得到我想要的调用(例如:我要求它调用新添加的依赖项。)

/control

一个我实验但不积极使用的扩展。它允许一个Pi代理向另一个发送提示。它是一个没有复杂编排的简单多代理系统,这对于实验很有用。

/files

列出会话中更改或引用的所有文件。你可以在Finder中揭示它们,在VS Code中比较,快速查看它们,或者在提示中引用它们。

shift+ctrl+r快速查看最近提到的文件,当代理生成PDF时很方便。

其他人也构建了扩展:Nico的子代理扩展interactive-shell,后者让Pi自主地在可观察的TUI覆盖中运行交互式CLI。

5、软件构建软件

这些都只是你可以用代理做什么的想法。它的主要点是,这些都不是我写的,它是代理按照我的规范创建的。我告诉Pi制作一个扩展,它做到了。没有MCP,没有社区技能,什么都没有。不要误会,我使用大量的技能。但它们由我的笨拙手工制作,而不是从任何地方下载。例如,为了浏览器自动化,我用一个技能完全替换了所有的CLI或MCP,该技能只是使用CDP

不是因为替代方案不起作用或不好,而是因为这很简单和自然。代理维护自己的功能。

我的代理有相当多的技能,关键是如果我不再需要它们,我就扔掉技能。例如,我给它一个技能来阅读其他工程师分享的Pi会话,这有助于代码审查。或者我有一个技能来帮助代理制作提交消息和我想要的提交行为,以及如何更新变更日志。这些最初是斜杠命令,但我目前正在将它们迁移到技能,看看这是否同样有效。我还有一个技能希望帮助Pi使用uv而不是pip,但我也添加了一个自定义扩展来拦截对pippython的调用,并将它们重定向到uv

对使用像Pi这样的最小代理的着迷的部分在于,它使你生活在使用构建更多软件的软件的想法。这被推到极端的是当你移除UI和输出并将其连接到你的聊天时。这就是OpenClaw所做的,并且鉴于其巨大增长,我真的感觉到越来越,这将以一种方式或另一种方式成为我们的未来。


原文链接: Pi: The Minimal Agent Within OpenClaw

汇智网翻译整理,转载请标明出处