我讨厌所有的编程智能体,所以我自己做了一个 —— Mario Zechner (Pi)

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

Transcript

00:00:00[音乐播放]
00:00:02大家好,我叫 Mario。
00:00:04我来自阿诺德·施瓦辛格的故乡,
00:00:06你们可能还没注意到这一点,
00:00:09基于我非常棒的英语水平。
00:00:12我想先说明一下,
00:00:13我们一整天都在带着四岁的孩子
00:00:16在伦敦到处乱跑。
00:00:17所以我们看了恐龙、木乃伊,当然还去了 Nandos,
00:00:24还有一些我已经忘掉的东西。
00:00:26我现在非常、非常累。
00:00:28如果你听不懂我说的话,
00:00:31就请举起手说:“老爷爷,醒醒。”
00:00:36我今天来这里其实是因为另一个人,
00:00:39他今天也在这里,在 Cockneyville。
00:00:40我们叫他 Shteter Pineburger 吧。
00:00:44回到 2025 年,大概是四月份左右,
00:00:53他告诉我还有 Armin Ronecha(你们可能也知道他,
00:00:58Flask 和 Sentry 的成名人物):“伙计,那些编程智能体,”
00:01:02“它们现在真的能用了。”
00:01:04我的反应是:“噢,闭嘴吧。”
00:01:06抱歉,我也用了一些脏话。
00:01:09完全不是那样的。
00:01:10一个月后,我们在那套公寓里组队工作了 24 小时,
00:01:13熬了通宵,让自己沉浸在那些“破铜烂铁”中,
00:01:19沉浸在 Vibe Code(氛围代码)和 Vibe Slop(氛围废料)中。
00:01:21从那以后,我们基本上
00:01:23再也没怎么睡过觉了。
00:01:27所以我们开发了很多东西,很多东西,
00:01:32其中大部分我们其实从未用过,因为这是 2025 年的新趋势,
00:01:36还有 26 年。
00:01:37我们开发了很多东西,但真正投入使用的
00:01:39并不多。
00:01:40我们写了很多东西。
00:01:42最终,这让我产生了一个想法:
00:01:46“嘿,我讨厌所有现有的编程智能体或测试框架。”
00:01:50“我自己写一个能有多难?”
00:01:53Peter 当时觉得:“噢,我只是想做点东西。”
00:01:56“可能没几个人会听说它。”
00:01:58“它将成为一个私人助手,”
00:02:01“因为那是我一直想要的东西。”
00:02:03你们大多数人可能都知道他的故事结局。
00:02:05所以今天,我要讲讲我那个没那么令人印象深刻的故事。
00:02:08但我希望能传达一些经验教训,
00:02:11正如我们在行业中所看到的,这些是我
00:02:16在过去的几个月里收集到的。
00:02:17所以,关于 Pi。
00:02:19起初,有了 Cloud Code。
00:02:21其实最开始是从 ChatGPT 复制粘贴。
00:02:25在 2023 年初,我们都干过这事。
00:02:27然后出现了——谁还记得最初的 GitHub Copilot?
00:02:32是的,实际上,你们中有多少人是工程师?
00:02:35有多少人正在使用编程智能体,
00:02:37比如 Cursor 或 Cloud Code?
00:02:39好的。
00:02:40流行度测试,Cloud Code?
00:02:43Codex CLI?
00:02:45Cursor?
00:02:48Open——
00:02:48[听不清]
00:02:49是的。
00:02:50Open Code?
00:02:50Anti-gravity。
00:02:51噢,那不算多。
00:02:52有人在用这个吗?
00:02:55我喜欢你。
00:02:56待会我们要一起喝杯啤酒。
00:02:58总之,这就是 2025 年
00:03:03及以前发生的事情。
00:03:04从 ChatGPT 复制粘贴开始。
00:03:06基本上都是坏的。
00:03:07大多是些简单的函数,是你不想写的东西。
00:03:10然后你有了 GitHub Copilot,集成在你的 Visual Studio
00:03:13Code 里面,你只需要一直按 Tab 键就能通向幸福,
00:03:15这有时确实有效,但大多数时候不行。
00:03:17有时候它还会[听不清]背诵 GPL 代码,
00:03:22比如 John Carmack 的平方根倒数算法
00:03:25之类的,那真的很有趣。
00:03:29然后出现了 Adir。
00:03:30有人记得 Adir 吗?
00:03:31有的。
00:03:32老伙计们。
00:03:33你好。
00:03:33是的。
00:03:37你都有白头发了。
00:03:37你显然知道 Adir。
00:03:41还有 AutoGPT。
00:03:43可能人不多。
00:03:44好的,行吧。
00:03:45他什么都知道。
00:03:48最后终于出现了 Cloud Code。
00:03:51我记得他们是在 11 月发布的,
00:03:52实际上是 2024 年的一个测试版。
00:03:55但它真正开始被广泛使用,再重复一遍?
00:03:59是在二月。
00:04:01是的,二月或三月,大概是 2025 年。
00:04:03我的反应是:“我太爱它了。”
00:04:05“太棒了。”
00:04:06Cloud 团队也非常出色。
00:04:07他们在社交媒体上很活跃。
00:04:08他们都是非常优秀且才华横溢的人。
00:04:13他们基本上开创了整个品类。
00:04:15我知道虽然有 Adir 和 AutoGPT 这种前身,
00:04:18但都没有达到这种程度。
00:04:20这基本上就是整个“代理搜索”的事情。
00:04:22不像 Cursor 那样进入你的代码库,
00:04:25进行索引、构建抽象语法树(AST)并对之索引。
00:04:29而且那种方式效果并不太好。
00:04:31他们只是说,呃。
00:04:33我们对模型进行了强化训练,
00:04:35让它能够直接使用文件工具、Bash 工具,
00:04:37实时探索你的代码库,找到它需要的
00:04:41位置来理解代码,然后修改代码。
00:04:44这效果非常好,以至于,是的,我们
00:04:46停止了睡觉,因为突然之间,
00:04:48我们能比以前手动编写产出多得多的代码。
00:04:52那时候,它简单、可预测,
00:04:54而且非常契合我的工作流程。
00:04:57很好。
00:04:58但随后他们掉进了陷阱,我们大多数人
00:05:05可能都会掉进去。
00:05:06这些智能体可以写这么多代码。
00:05:08为什么不让它实现你能想象到的所有功能呢,对吧?
00:05:11这难道不棒吗?
00:05:11让我们把这个功能加进去,那个也加进去,
00:05:12还有这个,还有那个。
00:05:14最终,你得到了荷马·辛普森设计的——
00:05:15我都不知道那叫什么。
00:05:18我管它叫宇宙飞船。
00:05:20现在的 Cloud Code 就是一艘宇宙飞船。
00:05:21它提供了如此多的功能,而你实际
00:05:23可能只会用到其中的 5%。
00:05:26你总共也才了解其中的 10%。
00:05:28而剩下的那 90%,
00:05:30就像是 AI 和智能体领域里的“暗物质”。
00:05:33没人知道它到底在干什么。
00:05:36我个人觉得这并没有什么帮助,
00:05:37因为我仍然认为你某种程度上需要
00:05:40知道智能体在做什么。
00:05:43这位仁兄在某种程度上可能不同意。
00:05:45我们现在在 TESOL,他们也
00:05:49喜欢上下文管理或上下文工程,
00:05:51正如我们所称呼的那样。
00:05:54我最终发现 Cloud Code 在可观察性
00:05:55和实际管理上下文方面
00:05:58并不是一个好工具。
00:06:01然后还有这个。
00:06:04谁会喜欢 Cloud Code 这一点,比如那大量的
00:06:06无法解释的闪烁?
00:06:09好吧,其实我知道怎么解释以及它为什么发生,
00:06:10但他们还是没有修复它。
00:06:13这是 Tarik。
00:06:15他真的很棒。
00:06:16我爱死他了。
00:06:16他是他们的开发者关系负责人,主要活跃在 Twitter 上,人很棒。
00:06:17但有时他也会说些值得商榷的话,
00:06:21比如:“我们的终端用户界面现在是一个游戏引擎。”
00:06:24你要知道我有游戏开发背景。
00:06:27那是我的老本行。
00:06:30当我读到这样的话时,
00:06:31它真的让我有点受伤,
00:06:32因为那只是一个该死的终端界面,伙计。
00:06:34它不是游戏引擎。
00:06:37相信我。
00:06:38你之所以觉得它是游戏引擎,
00:06:39是因为你在终端界面里使用了 React,
00:06:41它需要花费大约 12 毫秒
00:06:44来重新布局你的整个用户界面图。
00:06:45别那样做,伙计。
00:06:49它不是游戏引擎,对吧?
00:06:51然后正在编写 Ghosty 的 Mitchell
00:06:54就说:“伙计,这很冒犯人。”
00:06:56“别甩锅给 Ghosty 或任何其他终端。”
00:06:59“是你的代码太烂了。”
00:07:02“终端的渲染频率可以达到每秒几百帧,”
00:07:04“每帧耗时不到 1 毫秒。”
00:07:05所以别那么说,对吧?
00:07:09后来他们终于修复了那个闪烁。
00:07:12但接着又发生了别的事。
00:07:15就像是他们完全沉溺于氛围编程(Vibe Coding)中了。
00:07:16你每天使用 Cloud Code 时都能感觉到。
00:07:20再次声明,我不想贬低他们的努力
00:07:23和成果。
00:07:27Cloud Code 仍然是该品类的领导者,这很有道理。
00:07:28他们发明了这玩意儿,而且做得很好。
00:07:30我个人只是一个年纪大了、
00:07:32喜欢可预测且简单工具的人。
00:07:34而这已经不再适合我的工作流和需求了。
00:07:37所以,是的。
00:07:41而且他们在后台做了很多事,
00:07:42在操纵你的上下文。
00:07:44我在 2025 年夏天开发了一堆工具,
00:07:46能让我拦截那些从 Cloud Code 发往
00:07:50他们后端的请求,去发现
00:07:52有哪些额外的小文本
00:07:55在你不知情的情况下被注入到了你的上下文中。
00:07:58这一切都非常有危害,
00:08:00而且一直在变。
00:08:01比如每天或隔天就会有一次新发布,
00:08:04改变了在什么时候注入什么内容,这基本上
00:08:06会有新的版本发布,改变了
00:08:08在什么位置注入内容,这基本上会搞乱
00:08:11你现有的工作流程。
00:08:13它根本不是一个稳定的工具。
00:08:14现在我能从他们的角度理解了。
00:08:16他们需要进行实验。
00:08:17而且他们拥有庞大的用户群。
00:08:18当你拥有庞大的用户群时,
00:08:19进行实验确实非常困难。
00:08:21但他们并不在乎。
00:08:23所以我们所有人都不得不承受这些。
00:08:25你在使用这个新工具。
00:08:27你试图创建可预测的工作流程。
00:08:31然后工具供应商在底层
00:08:35改变了一个微小的细节,导致大语言模型
00:08:36在你现有的流程中表现失常。
00:08:38这简直是不可持续的。
00:08:39我需要对此拥有控制权。
00:08:40我不能指望他们给我提供某种稳定的东西。
00:08:46所以我认为,作为 UI 设计的结果,
00:08:52他们需要减少你所拥有的可见度。
00:08:54我个人不太喜欢那样。
00:08:56但这只是个人偏好。
00:08:57我理解大多数人会对
00:08:58Cloud Code 呈现给你的
00:09:00信息量感到满意。
00:09:03显而易见,这里没有模型选择,
00:09:06因为可以这么说,它是 Anthropic 的原生工具。
00:09:09这不算缺点,因为 Claude 模型——
00:09:12我很喜欢它们。
00:09:13它们真的非常出色。
00:09:15而且几乎没有可扩展性。
00:09:17你可能会觉得这挺搞笑的,因为他们
00:09:19有这一整套钩子系统之类的东西。
00:09:21但如果将其与 Pi 允许你做的事情相比,
00:09:25它的集成度并不够深。
00:09:28它基本上是基于在
00:09:32钩子事件开始时运行一个进程,如果你
00:09:36必须一遍又一遍地启动该进程,那是很昂贵的。
00:09:40所以最终,我对 Cloud Code 失去了兴趣,
00:09:42并不是因为它很糟糕。
00:09:44只是它不再适合我了。
00:09:47在那段时期,它变得适合更多的人。
00:09:50所以显然,他们做对了,但对我来说不是,
00:09:54因为我老了。
00:09:56于是我开始寻找其他选择。
00:09:59有 Codex CLI,但我真的很不喜欢。
00:10:01起初无论是用户界面还是模型都不行,
00:10:05但这已经改变了,至少在模型方面是这样。
00:10:08Codex 现在真的相当不错了。
00:10:10然后是 AMP。
00:10:12其背后的团队以前在 Sourcegraph 工作。
00:10:15他们是从 Sourcegraph 剥离出来的。
00:10:20他们是非常出色的工程师。
00:10:21他们成功打造了一个商业编程框架,
00:10:25在其中他们删减功能,而不是增加功能。
00:10:28他们的绝大多数选择对我来说都非常有意义。
00:10:33所以,如果你正在寻找商业编程框架,
00:10:36我绝对会向你推荐 AMP,因为它真的很棒。
00:10:39Factory Troye,情况也差不多,同样非常优秀,
00:10:44尽管他们不像 AMP 那样具有实验性。
00:10:47然后是 OpenCode,这是很多人使用的
00:10:50开源编程框架。
00:10:53我个人有开源背景。
00:10:55我投身开源领域已经 17 年了。
00:11:00我管理过大大小小的开源项目。
00:11:04所以开源对我来说意义非凡。
00:11:05因此我想,我该试试 OpenCode,
00:11:08因为它更符合我的理念。
00:11:12除了 AMP 之外,他们拥有这个领域里
00:11:15最务实、最脚踏实地的团队之一。
00:11:16他们不会用你可能永远用不到的功能
00:11:18来对你进行天花乱坠的宣传。
00:11:20他们试图维护一条非常稳定的
00:11:23核心路径。
00:11:26而且他们对于编程智能体
00:11:27对我们这一职业意味着什么,也有非常深刻的见解,
00:11:29我个人对此深表认同。
00:11:32OpenCode 的问题在于,它也不太擅长
00:11:37管理你的上下文。
00:11:38例如,在每一轮对话中,它都会调用 sessionCompaction.prune,
00:11:44其作用如下:
00:11:46它会修剪掉最后 40,000 个 token 之前的所有结果。
00:11:52那么,这里有谁知道什么是 Prompt Caching(提示词缓存)吗?
00:11:56这对你的提示词缓存会有什么影响?
00:11:58所以 OpenCode 和 Entropic 之间有一段有趣的往事。
00:12:05最终,Entropic(在我看来,这是正确的)
00:12:11说道:“伙计们,那是不可能的。”
00:12:14这件事从来没有公开化。
00:12:17但 Tarek 在这里解释了这一点。
00:12:19如果你去健身房却不遵守规矩,滥用
00:12:22那里的基础设施,那你就会被禁止入内。
00:12:25而且我认为——
00:12:27虽然我没有任何证据,
00:12:28但我认为这就是为什么
00:12:30Entropic 和 OpenCode 之间存在这种敌意的原因。
00:12:33我完全同意,或者至少我
00:12:36认为 Entropic 在这里显然是占理的一方。
00:12:39不要乱搞基础设施。
00:12:42还有其他一些东西,比如 OpenCode
00:12:44OpenCode 带有 LSP,即语言服务器协议支持,
00:12:46开箱即用。
00:12:48回到上下文工程,
00:12:51假设你给你的智能体一个任务,
00:12:53修改一堆文件。
00:12:55这在实践中意味着什么?
00:12:57它会进行一系列编辑,一个接一个地
00:13:02对一堆文件进行操作。
00:13:03在 10 次编辑中,第一次编辑后
00:13:09代码能编译成功的概率有多大?
00:13:12如果你逐行修改代码会发生什么?
00:13:15它需要多长时间才能再次稳定
00:13:17并干净地编译?
00:13:19它不会。
00:13:20第一次编辑后它不会编译,可能
00:13:22第二次编辑后也不会,以此类推。
00:13:24所以如果你转头说:嘿,亲爱的 LSP 服务器,
00:13:28我刚刚在这个文件里改了一行。
00:13:30它坏了吗?
00:13:31然后 LSP 服务器会说:是的,真的坏了。
00:13:34这个功能的作用是,它随后
00:13:36直接在工具调用之后注入这个错误,
00:13:39作为给模型的一种反馈。
00:13:43“噢,你刚才做的是错的。”
00:13:45模型就会觉得:“搞什么鬼,老兄?”
00:13:47“我还没改完呢。”
00:13:49“你为什么要告诉我这些?”
00:13:50“显然它现在还没好。”
00:13:51但如果你经常这样做,模型就会直接放弃。
00:13:54这会导致非常糟糕的结果。
00:13:58所以我不喜欢 LSP。
00:13:59我认为启用它是一个非常糟糕的主意。
00:14:02有一些自然的同步点
00:14:03是你想要进行 Lint 检查、类型检查
00:14:06以及所有这些操作的时候。
00:14:07那就是当智能体认为它完成时,只有那时候。
00:14:10这种情况最近发生了变化。
00:14:14这是一个 OpenCode 的单次会话,其中每条消息
00:14:20都变成了一个单独的 JSON 文件。
00:14:22磁盘上的每一条消息都变成了一个单独的 JSON 文件。
00:14:26这向我表明,整个系统的架构
00:14:29并没有经过太多的思考。
00:14:31如果我失去了对它的信任,我
00:14:33就不想再使用那个工具了。
00:14:35再说一次,我认为那个团队其实非常出色。
00:14:37我认为他们迭代得非常快,
00:14:39并构建了一些对很多人非常有用的东西,
00:14:42显而易见。
00:14:43只是,同样的,有些决策我不会去做,
00:14:46这让我决定自己动手构建一个。
00:14:50还有这一点。
00:14:51Open code 默认自带一个服务器。
00:14:54所以它的核心架构是基于服务器的。
00:14:56客户端连接到该服务器。
00:14:57终端用户界面就是其中一个客户端。
00:15:00还有一个桌面界面。
00:15:01我也不太清楚。
00:15:03结果证明这成了一个安全漏洞,
00:15:05默认就内置了远程代码执行。
00:15:09而且——如果你对自己的服务器基础设施
00:15:12或服务器架构如此自豪,
00:15:15那么我会假设你们是成熟的工程师,
00:15:18也考虑过安全问题。
00:15:20但显然,事实并非如此。
00:15:21而且这个问题存在了很长时间。
00:15:23再次声明,我并不是在指责任何人。
00:15:25如果你在这样一个以惊人速度
00:15:27运作的行业中工作,
00:15:31这种事情确实会发生。
00:15:33只是如果存在这种问题,我就不想用那个工具。
00:15:36以上是我对现有编程工具
00:15:42参考资料的观察。
00:15:42AMP 和 Droid 本来是我可以使用的工具。
00:15:45但同样,没有控制权。
00:15:47以 AMP 为例,他们甚至决定你可以使用哪些模型。
00:15:50而且每种类型的任务只能使用单一模型。
00:15:53这不适合我。
00:15:55至于 Droid,我认为它稍微开放一点。
00:15:58但在我尝试它的时候,
00:16:00它只是没有——
00:16:02我没看到它比 Cloud Code 有多大优势。
00:16:07然后我因为完全不同的原因去查看基准测试,
00:16:10发现了 Terminal Bench。
00:16:12有谁知道 Terminal Bench 是什么吗?
00:16:15好,基本上它是一个编程或智能体评估
00:16:20测试框架,其中包含了一系列计算机使用和编程
00:16:24相关的——
00:16:24抱歉,因为照顾 4 岁的孩子,又老又累。
00:16:31它有一系列计算机使用和编程相关的任务,
00:16:35智能体或者智能体框架内部的 LLM
00:16:39需要去完成这些任务。
00:16:40我想大约有 82 个左右的任务。
00:16:43而且它们非常多样化。
00:16:44从修复我的窗口设置到编写一个蒙特卡洛
00:16:48模拟程序之类的。
00:16:51他们还有一个排行榜。
00:16:52在排行榜上,你可以看到编程智能体框架
00:16:54和模型的组合表现。
00:16:57他们有自己的编程智能体,叫做 Terminus。
00:17:03我觉得它非常出色,因为它是
00:17:06它是基准测试中性能最好的 harness 之一。
00:17:09稍后我们会看到它。
00:17:11它具体是做什么的?
00:17:12其实,模型得到的只是一个 TMUX 会话。
00:17:17它唯一能做的就是向其中发送按键,
00:17:19并读回发出的 VT 代码序列。
00:17:23所以,这就像是模型与计算机之间
00:17:27最微小、最精简的接口。
00:17:31而且这在整个排行榜中表现也是顶尖的。
00:17:36那么,这告诉了我们关于现有的编程智能体 harness 什么呢?
00:17:39为了让模型真正发挥性能,
00:17:41我们需要所有这些功能吗?
00:17:43对我个人而言,这不仅仅是关于模型
00:17:48本身是否优秀的问题。
00:17:49还关乎我作为用户、作为人类,
00:17:51有一种与我的智能体、与模型交互的方式。
00:17:54Terminus 显然不是我想要的
00:17:58用户体验或开发者体验。
00:18:00但它告诉我们,所有这些编程 harness
00:18:03拥有的功能,可能对于让智能体
00:18:08获得良好结果并非必要。
00:18:10所以不需要文件工具,不需要子智能体,不需要网络搜索,什么都不需要。
00:18:13基于所有这些发现,有两个论点。
00:18:16我们正处于“胡搞并发现”的阶段。
00:18:18没有人知道完美的编程智能体该是什么样,
00:18:21或者完美的编程 harness 该是什么样。
00:18:23我们既在尝试极简主义,也在尝试全副武装的
00:18:27智能体集群、团队,以及无控制、全自主
00:18:30之类的各种尝试。
00:18:31我认为这一切还没定论。
00:18:33我们还没回答理想状态下
00:18:35这应该是什么样子,以及什么将成为
00:18:37行业标准。
00:18:38第二点是,我们需要更好的方式
00:18:40来尝试这些编程智能体。
00:18:42也就是说,我们需要它们能够自我修改,
00:18:47并变得具有延展性。
00:18:48这样我们就能快速实验各种想法,
00:18:50看看这是否是我们可以打造成行业标准的东西,
00:18:53一个我们可能都会采用的新工作流。
00:18:58所以基本想法是——
00:18:59这非常简单,不是什么高深科技——
00:19:01剥离一切,构建一个极简的可扩展核心。
00:19:05它带有一些舒适配置。
00:19:06它不是一张白纸。
00:19:09这就是 Py。
00:19:10核心座右铭是:让编程智能体
00:19:13适应你的需求,而不是让你去适应它。
00:19:16它附带四个包,一个是 AI 包,基本上
00:19:21只是对多个供应商的简单抽象,
00:19:24因为它们都使用不同的传输协议。
00:19:27所以可以非常轻松地与所有供应商对话,
00:19:29并在同一上下文或会话中自由切换。
00:19:34还有智能体核心,它只是一个通用的
00:19:36带有工具定位、验证等的智能体循环,
00:19:38诸如此类。
00:19:39以及流媒体,一个终端用户界面,
00:19:42大约只有 600 行代码,且运行效果
00:19:47出奇得好,因为它不是由机器写的。
00:19:51还有编程智能体本身,它既是一个 SDK,
00:19:54你可以在无头模式下使用,
00:19:57也可以作为一个全功能的终端界面编程智能体。
00:20:02这就是全部的系统提示词。
00:20:05与其他编程智能体的系统提示词相比,
00:20:08这里没有多余的内容。
00:20:10这是以 token 计量的。
00:20:13事实证明,前沿模型经过大量的 RL 训练,
00:20:16已经知道编程智能体是什么了。
00:20:18那么为什么还要一直告诉它们,它们是编程智能体,
00:20:21以及应该如何完成编程任务呢?
00:20:27默认开启 YOLO 模式,这是为什么?
00:20:30目前大多数编程智能体 harness 都有两种模式。
00:20:33要么智能体可以随心所欲,
00:20:36要么智能体必须问你:
00:20:40“你真的想删除这个文件吗?”
00:20:41“你真的想列出这个目录下的文件吗?”
00:20:44等等。
00:20:44这中间有不同的程度。
00:20:47但归根结底,都要落实到用户
00:20:49需要批准智能体的某项操作。
00:20:52然后我们就觉得安全了。
00:20:53我认为这是错的,因为这会导致疲劳。
00:20:55人们要么完全关掉它,开启 YOLO 模式,
00:20:58要么就坐在那儿一直按回车,什么都不看。
00:21:01所以我不认为那是解决办法。
00:21:02容器化也不是解决办法,
00:21:04如果你担心数据泄露
00:21:06和提示词注入的话。
00:21:07但我认为这是你——
00:21:10我认为这是比审批或对话等
00:21:14护栏更好的基础。
00:21:17它只有四个工具:读取文件、写入文件、
00:21:19编辑文件和 Bash。
00:21:21Bash 就是你所需的全部。
00:21:22里面缺了什么?
00:21:23没有 MCP,没有子智能体,没有计划,没有后台,
00:21:25只有 Bash,没有内置的待办事项。
00:21:26以下是你可以替代的做法。
00:21:28对于 MCP,可以使用 CLI 工具加技能,
00:21:30或者构建一个扩展,我们稍后会看到。
00:21:34为什么没有子智能体?
00:21:35因为它们不可观察。
00:21:36相反,使用 tmux 并再次派生该智能体。
00:21:41你可以完全控制智能体的输出和输入,
00:21:44并且能看到子智能体中发生的一切。
00:21:48很有趣的是,Code Spawn 的
00:21:50团队模式现在基本上也是这么做的。
00:21:55没有计划模式,就写一个 plan.md 文件。
00:21:57这样你就拥有了一个持久的产出物,
00:21:59而不是某些根本无法适应
00:22:02终端视口的蹩脚 UI。
00:22:04而且你可以在多个会话中重复使用它。
00:22:07没有后台 Bash,也不需要,我们有 tmux。
00:22:09这是一回事。
00:22:11没有内置待办事项,就写个 todo.md。
00:22:13道理相同。
00:22:14或者按照你喜欢的方式亲自构建这一切。
00:22:17这就是 Py 通过超强的可扩展性赋予你的能力。
00:22:21所以你可以自定义扩展工具。
00:22:22你可以给 LLM 提供你定义的工具。
00:22:26我认为目前没有其他编程智能体 harness
00:22:28能提供这一点,除非你 fork 开放源代码。
00:22:31在这里你不需要那么做。
00:22:32你只需写一个简单的 TypeScript 文件,
00:22:34它就会被自动加载。
00:22:37你还可以编写自定义 UI。
00:22:39技能显然包含在它们的提示词模板和主题中。
00:22:43你可以把所有这些打包,放在 NPM 或 Git 上,
00:22:46然后用一条命令安装,这非常棒。
00:22:49而且所有内容都是热重载的。
00:22:51所以我会在 Py 的项目中
00:22:53开发针对特定项目或任务的自定义扩展。
00:22:59当智能体修改扩展时,我只需重新加载。
00:23:05它会立即更新所有运行的代码,
00:23:10这非常方便。
00:23:11在实践中,这意味着你可以做自定义压缩。
00:23:14我认为这是人们应该更多尝试的事情之一,
00:23:16因为目前所有的压缩实现
00:23:19都做得不够好。
00:23:21权限网关,你可以轻松地用 50 行代码
00:23:23实现它们,以此涵盖其他智能体 harness
00:23:24所做的那些功能,如果你想要的话。
00:23:27自定义供应商,注册自托管模型的代理。
00:23:31我并不在乎。
00:23:32你不需要让我来为你做这个。
00:23:33你可以自己做,实际上,你的机器也可以为你做。
00:23:37或者重写任何内置工具。
00:23:38修改 read, write, edit 和 bash 的工作方式。
00:23:41我不在意。
00:23:42我有一个版本的 read, write, edit 和 bash,
00:23:43它是通过 SSH 在远程机器上运行的。
00:23:47对我来说,只花了五分钟来实现,但它很有效。
00:23:51而且由于你拥有完整的 TUI 访问权,你实际上
00:23:54可以在编程智能体中编写完全自定义的 UI。
00:23:58Cloud Code 发布了,顺便说一下,有人只花了五分钟
00:24:02就在 Py 中复制了它,而且功能更多。
00:24:05PyMessenger,我不知道它是干什么的,
00:24:07但显然,它就像一个让多个 Py 智能体
00:24:10进行交流的聊天室,并且拥有自定义 UI。
00:24:13我们可以看看他们在做什么,是的,它就这么运行起来了。
00:24:18还有 PyMess,如果你无聊了,
00:24:23就在智能体运行时玩个游戏,对吧?
00:24:24你可以那样做。
00:24:25或者 PyAnnotate,打开你当前
00:24:28正在开发的网站,在前端进行标注,
00:24:31然后直接在线给智能体提供反馈。
00:24:35将其反馈回上下文中,让它进行修改。
00:24:39或者我会用到 File Switch It。
00:24:42我不想切换到 IDE 或编辑器。
00:24:43我只想快速查看被修改的文件。
00:24:46所以,所有这些都是扩展。
00:24:48这些都不是内置的,人们通常只需
00:24:50花上几分钟到一下午的时间,
00:24:52就能按照自己的意愿构建出这些。
00:24:56PyWavic 也是,不知道它是干嘛的。
00:25:00Py 还附带树状结构。
00:25:01我不打算解释那个。
00:25:03去 py.dev 看看就知道了。
00:25:04你的会话是一棵树,而不是线性的聊天列表。
00:25:07所以你基本上可以实现一些智能体,
00:25:09比如读取目录下的所有文件,
00:25:11对其进行总结,然后回到对话的根节点,
00:25:14带着摘要去执行实际的工作。
00:25:19没有任何东西是背着你偷偷注入的。
00:25:22智能体、技能、完整的成本追踪。
00:25:24很多 harness 在这里都不提供这个。
00:25:26开源代码做得并不好。
00:25:29HTML 导出、JSON 格式、无头 JSON 流等等。
00:25:33它真的有效吗?
00:25:34看看 Terminal Bench。
00:25:35让我放大一下。
00:25:36我放不了。
00:25:37这太神奇了。
00:25:38这是 Py,紧随使用 Claude Opus 4.5 的 Terminus 2 之后。
00:25:45那是十月份的事,当时 Py 甚至还没有压缩功能。
00:25:49演示环节,跳过,直接对抗那些破坏开源的机器。
00:25:51如果你与这家伙的项目有关联,
00:25:54就会有成百上千的人从 OpenClaw 跑来
00:25:56你的仓库,用机器垃圾、谩骂来刷屏。
00:26:02所以我不得不发明一些应对措施。
00:26:06我发明了“开源假期”。
00:26:09我直接关闭了几周的 issue 和 PR,
00:26:11自己一个人钻研。
00:26:14任何重要的事情以后总会有人再报告,
00:26:16或者在 Discord 里反映。
00:26:20然后我还实现了一种自定义访问机制,
00:26:21我在仓库里放了一个 markdown 文件。
00:26:26如果有人提交 PR,而他们的账号名
00:26:28不在那个 markdown 文件里,PR 就会被自动关闭。
00:26:32我不在乎。
00:26:34首先,请通过 issue 用人类的声音介绍你自己。
00:26:35写一个不长于屏幕显示的 issue,
00:26:39因为其他的很可能都是机器生成的垃圾。
00:26:42一旦你做到了这一点,我也很乐意通过你的请求。
00:26:45这样你就能进入那个文件,并可以向仓库
00:26:47提交 PR 了。
00:26:50我所要求的只是真人验证。
00:26:51Ghosty 的 Mitchell 随后采用了这一做法,并构建了
00:26:53一个名为 Vouch 的项目,它可以更轻松地应用到
00:26:57你自己的开源仓库中。
00:27:00这就是 Py。
00:27:02去尝试一下吧。
00:27:03我的分享就到这里。
00:27:05[掌声]
00:27:06[音乐播放]
00:27:07[音乐结束]

Key Takeaway

编程智能体正处于“尝试与发现”阶段,Pi 通过剥离冗余功能并提供基于 TypeScript 的热重载扩展机制,证明了极简、可观察且高度定制化的工具比功能堆砌的黑盒系统更有效。

Highlights

Cloud Code 在 2025 年 2 月至 3 月间因其原生的文件与 Bash 工具集成能力而开创了编程智能体的新品类。

过度增加的功能导致 Cloud Code 变成了只有 5% 功能被频繁使用的“宇宙飞船”,且其 90% 的后台逻辑对用户而言是不透明的。

OpenCode 采取每轮对话调用 sessionCompaction.prune 的机制,会强制修剪掉最后 40,000 个 token 之前的上下文,从而破坏了 Anthropic 的提示词缓存(Prompt Caching)效果。

Terminus 在 Terminal Bench 基准测试中名列前茅,证明仅通过向 TMUX 会话发送按键这一极简接口即可实现高性能,无需复杂的文件系统工具或子智能体。

Pi 核心代码量仅约 600 行,其系统提示词完全由 token 计量且去除了所有冗余,依靠前沿模型内置的编程能力而非重复指令工作。

为应对 AI 生成的垃圾 PR 攻击,开发者实施了“开源假期”制度,并要求所有贡献者必须先在 issue 中进行真人身份验证并加入白名单 markdown 文件。

Timeline

主流编程智能体的发展与功能过载现状

  • 编程辅助工具经历了从 ChatGPT 手动复制粘贴到 GitHub Copilot 自动补全,再到 Cloud Code 智能体驱动的演变。
  • Cloud Code 通过强化训练模型直接使用文件和 Bash 工具,实现了比手动编写代码更高的产出率。
  • 功能堆砌导致现代智能体工具变得臃肿且不可预测,用户往往只理解其中 10% 的运作方式。

2025 年初,编程智能体技术取得了突破性进展,尤其是 Cloud Code 引入的实时代码库探索功能。然而,随着开发者不断向系统添加各类功能,工具的简洁性消失了。用户现在面临的是一个类似“宇宙飞船”的复杂系统,其中大部分自动化逻辑就像“暗物质”一样难以观察和控制。

现有框架的技术缺陷与安全隐患

  • Cloud Code 后台频繁注入不可见的上下文信息,导致大语言模型的表现随版本更新而变得不稳定。
  • OpenCode 框架在处理上下文管理和 LSP 错误反馈时存在缺陷,可能导致模型因错误的反馈循环而提前放弃任务。
  • 部分开源编程框架默认开启的服务器架构存在远程代码执行(RCE)漏洞,暴露了快速迭代下的安全短板。

工具供应商在底层频繁微调上下文注入策略,破坏了用户建立的可预测工作流。在技术实现上,OpenCode 将每一条消息存为独立的 JSON 文件,这种架构缺乏深思熟虑。此外,将 LSP(语言服务器协议)错误直接实时反馈给尚未完成编辑的模型,会被证明是极具干扰性的设计决策。

基于基准测试的极简主义论证

  • Terminal Bench 的 82 个多样化任务测试表明,复杂的智能体集群和搜索功能并非获得高性能的必要条件。
  • Terminus 框架通过最精简的 VT 代码序列接口实现了顶级性能,揭示了模型本身已具备强大的计算使用能力。
  • 当前行业尚未就“理想编程智能体”的形态达成共识,行业标准仍处于动态演变中。

通过对 Terminal Bench 排行榜的分析发现,性能最好的工具往往不是功能最复杂的。Terminus 仅仅利用 TMUX 会话进行交互就击败了许多全副武装的智能体。这表明开发者需要的是具有延展性的工具,以便快速实验新的工作流程,而不是接受预设好的复杂框架。

Pi 的架构设计与高度可扩展性

  • Pi 由 AI 抽象层、智能体核心、600 行代码的 TUI 终端界面及编程 SDK 四个核心包组成。
  • 系统默认仅提供读取、写入、编辑和 Bash 四种基础工具,其余功能通过 TypeScript 扩展实现热重载加载。
  • Pi 弃用了线性的聊天列表,改用树状会话结构以支持摘要提取和任务并行探索。

Pi 的核心理念是让智能体适应用户需求。它移除了 MCP、子智能体和内置待办事项等冗余概念,转而利用 Bash、tmux 和 Markdown 文件实现相同甚至更好的效果。开发者可以编写自定义扩展并在几秒钟内更新运行中的代码,这种灵活性允许在终端内直接开发出标注工具或远程 SSH 执行插件。

开源治理与真人验证机制

  • 大规模的机器生成垃圾信息和谩骂正在破坏开源生态的协作环境。
  • 通过实施“开源假期”和自动化 PR 拦截机制,开发者可以强制要求人类贡献者进行身份核实。
  • Vouch 项目作为一种通用的开源验证方案,通过要求简单的真人互动来过滤 AI 噪音。

面对来自 AI 驱动的自动化攻击,单纯的开放政策已不再可行。通过在仓库中设置基于白名单的 markdown 文件,只有经过真人验证的账号才能提交 PR。这种做法虽然增加了门槛,但有效地保护了开发者的精力,确保了开源项目能由真实的人类开发者驱动。

Community Posts

View all posts