上周二半夜刷 arXiv,本来是想找点东西骂。
2610.28286,59 页,15 图,28 表,Ilin 和 Richtárik,《Local Work, Global Progress》。标题起得像季度 OKR,我差点划过去。
划到摘要最后半句,停住了。
大意是:线性收敛,到一个误差地板;修正项精确的时候,地板消失。
这句话我想裱起来。这两年 agent 的文章,绝大多数在讲涌现、讲协作、讲一加一大于二,就这一句在说人话:能收敛,但会停在一个误差地板上,停在哪儿,取决于修正项有多准。
先说不喜欢的。
多智能体这套东西,我看太多回了。二十年前叫 SOA,十年前叫微服务编排,现在叫 agent team——被编排的东西从服务变成了 prompt,开会那帮人一个没换。
这篇值得看的不是“多智能体”,是协调者。
每个 agent 只解一块,拿本地目标往下推,再带一个“我这步对别的块有什么影响”的修正项;提案要过全局目标这一关,才准合进去。收敛保证不是白来的,是拿“有个东西能驳回提案”换的。
就这么个结构,看着平平无奇。你去翻市面上那些 agent 框架,缺的恰恰是这一环——默认所有提案都是好的,只管把结果拼起来。
还有个我没料到的。
论文允许提案之间互相干扰,前提是合并后的整体效果过一遍再合。就这一改,比只准合互不干扰的提案,搜索时间少三成。
也就是说,“分工必须正交、谁也不许碰谁的块”这条我们当公理供着的东西,数学上是保守的。
生产上吃过这个亏。同一个服务,两个变更,单拎出来每个都过评审、都安全,一起上,Sev2。后来处理方式是变更冻结,同一窗口只准进一个——有效,也慢,一个下午耗掉了。这篇给的是另一个答案:别冻结,把两个 diff 合起来整体验一遍。
道理我认。得说清楚在我们这儿为什么一直行不通:因为“合起来验一遍”需要有人真的去验。
说不买账的部分。
论文里那个协调者,攥着全局目标,是个能算的东西,每一轮都能对提案打分。
我们线上的全局目标是什么?SLO 是代理,error budget 是代理,真正的那个——“别上新闻”“别让老板在群里 @ 我”——不可导,没有解析式,十分钟变一次。
那生产环境里的协调者是谁?
是我。凌晨三点,拿着半小时前抓的一张 dashboard 截图。
这套东西真接进变更流水线,日志大概长这样:
proposal#3 local_gain=+0.12 global_check=PENDING reviewer=oncall
reviewer 那一栏填的不是模型,是值班的那个冤种。论文的定理成不成立,全押在这一栏。而这一栏,恰恰是这套理论唯一没覆盖的变量。
再说那个地板。
修正项精确,地板才消失。生产里的修正项永远不精确——你测到的是十分钟前的世界,你拿去估“这步对别的块有什么影响”的那个模型,本身就在上一次事故之后被打过补丁。
所以地板不是脚注。地板就是全部。
你能拿到的最好结果,是收敛到一个“不难看”的地方,然后停在那儿。这句话写在论文里是定理,写在复盘里就是“本次故障未造成资损”。
实验部分我倒是看得挺舒服。
三个 agent 分工控一群机器人,每一轮都给出无碰撞的方案,赢过单个 agent 控全部。更大的路由任务,六个对单个,中位数快两倍。另外还跑了 SQLite 的查询规划和一个人造任务。
两倍这个数,我看了两遍,越看越顺眼。
这是个诚实的数。不是十倍。十倍是留给 PPT 的。🙃
补一刀:这种东西进公司,中间要过三层嘴。作者写 2x,median,路由任务;总监讲“效率翻倍”;VP 讲“数倍提升”;到 Q4 规划会上就变成“提效十倍,明年 HC 砍三分之一”。
砍完半夜接电话的还是我。
说句实话,我本来是准备骂的。
读一半改了主意。不是因为它对——它离能上生产还差着一条护城河——是因为它诚实。它老老实实告诉你哪儿会停、停在哪儿、停得多难看。比 demo 视频里十个 agent 互相击掌强出十条街。
认可只给到理论那一层。
它证明的是:有个东西能驳回,收敛才有保证;干扰能不能放,要整体过一遍;修正项不精确,所以底下有个地板。
这三件事翻成运维的语言,就是我们一直在干的活。只是以前没人给它写证明。现在有人写了,59 页,还带代码链接。
我唯一的意见:这套东西落地的时候,别把协调者那一格填成模型。
本期教训:上 agent 团队之前,先把那个有权说“不”的人指出来。指不出来,说明你要的不是协作,是想把锅摊给十个不会接电话的东西。
