一个Agent进程崩了,重启之后还能从刚才停下的地方接着跑,工具结果和流式输出一样不丢。Pi coding agent作者Mario Zechner和Flask作者、Earendil联合创始人Armin Ronacher在一场对谈里,把这件事的做法讲透了。
他们的方案叫Pi Durable,核心思路是把Agent调用模型、执行工具拆成一层「副作用三明治」。
先记意图,再执行,最后存结果
具体拆成三段。执行前,先在存储里记录这次操作的意图与参数;执行中,借助幂等性保证可以重试,比如给GitHub Actions传一个运行ID;执行后,把结果持久化下来。
因为每一步都可恢复,重启后Agent不会丢失工具结果与助手流式输出。放到Slack机器人场景里,也能保留全部历史,而不必把所有内容都发给模型。
应用状态则用带版本的文档存储保存,可以回到对话的任意时间点,配合JSON patch式的局部更新与代理对象。Mario的说法很直接:想要的是重启进程后,agent能从刚才停下的地方接着运行,这就是持久性。
小Bug可以放手,架构不行
对谈前半段聊的是AI编程的边界。Mario认为小问题可以放心交给Agent,但涉及设计或架构时,Agent只会在代码库某个局部打补丁,让整体更糟。
修Bug往往导致代码量净增,长期会累积bug与错误、损害用户体验。他的判断是:它肯定能解决问题,但几乎不可能在不加代码的情况下把问题修好。
只有终端组件、Docker容器这类「跑通就行、不在乎架构」的层,才适合放手让模型生成。
为什么架构是短板?两人给出的解释是数据问题。网络安全、前端、有现成参照物且能判定对错的任务都容易准备训练数据,但为软件搭架构的讨论几乎不会以文字形式留存。在编程里给一个东西搭架构的过程,是唯一通常不会以文字形式记录下来、让模型从中学习的部分。
结果就是,即使新模型发布、自主权更大,两人对架构产出的满意度反而下降。他们提出的办法是,把架构讨论的交互记录给予更高权重。
有对错判断依据,Agent表现惊人
反过来,只要任务结果只有完成与未完成两种状态,模型能力就显著提升。两人举了一批亲身经历:
- 逆向分析Java虚拟机原生内存结构
- 破解国产CarPlay适配器,约500美元后掌控设备
- 从零写出任天堂DS模拟器
- 把INI、TOML、CBOR、MessagePack、JSON示例文件交给模型实现序列化库,再做模糊测试,成批暴露问题
Mario把这条经验总结成一句话:如果你有一个能告诉LM他做的对不对的判断依据,那你基本上就赢了。
安全与易用,难以兼得
后半段转向个人Agent的安全与多用户协作。Mario的Agent曾把整个文件系统暴露到公网约一天;多人共享会话还要防范网页界面里的跨站脚本攻击,导致cookie被窃。
内嵌框架等隔离方案会损害体验,服务器端Docker沙箱反而是容易的部分。而跨设备共享状态、信任某个人连接环境等问题,仍无通用解法。真要做一个既能扩展又安全的网页界面,比看起来难得多。
对谈还涉及多人协作与跨设备同步、Agent框架生态比较、PI Mobile与网页插件系统,并批评了AI炒作,以及「把聊天框一放就祝你好运」的用户上手现状。
热门跟贴