跳到主要内容
两个都对,合起来是错的

两个都对,合起来是错的

今天也没搞懂
今天也没搞懂

· 阅读约 5 分钟

上周三晚上我干了件现在想起来还有点脸红的事。

开两个终端,两个 agent,改同一份代码里不同的地方。当时心里冒出来一句「又不冲突,各改各的,最后 merge 一下不就完了」。

merge 完,测试红了一片。

我干的第一件事是挨个审它们,问“你刚才动了什么”,想把出错的那个揪出来。问了一圈——两个都没错。单独拿出来看,两个改动都是实打实的改进。合在一起,整个东西反而退步了。

我当时盯着那一片红,第一反应是「不可能啊」。

那晚我以为是自己运气背。今天再想,我当时的排查方向从根上就是错的。我在找“哪个 agent 有问题”。问题不在任何一个 agent 身上。


前几天看到一篇论文,标题我念了两遍没念顺:Parallel AI Agent Collaboration as Graph-Structured Distributed Block Optimization。10 月 21 号挂到 arXiv 上的,2610.30074,主分类 cs.MA,24 页 8 幅图。三个作者我一个都不认识,Hanmin Li、Yury Demidovich、Peter Richtárik——名字照着抄的,怕打错。

读懂大概三分之一。剩下的是同桌一段一段给我翻的,翻完还是夹生。有些句子他翻完我点头,过两分钟自己再想一遍,又不知道刚才点在哪儿。

但那个它要解决的问题,我一眼就认出来了:多个 agent 并行,各自产出局部修改,每一条单独看都有用,合起来可能让共享的那个解变差。

这不就是我上周三晚上。

论文把这东西当离散块优化来处理,前提是依赖图已知、目标能精确评估。它认定“互相兼容”的方式是独立集——跟当前这个解比,能被精确相加的那些改进才放在一起。两个 agent 动同一个函数,那就不叫独立集,加起来的和压根没有意义。

看到这儿我有点坐不住。因为我从来没在“提案”这个阶段想过兼容性。我想的全是事后:先让它们写,写完我挑。挑的时候凭感觉,谁看着顺眼留谁。

分数着色那个结论,把我这一整套做法直接判了。最优的合并方案能保住总改进的 1/chi_f(G),chi_f 是分数色数。这个符号我认识,念不出来,定义背了两遍还是背不下来,到现在是夹生的。

但那个“1/几”的意思我听懂了:就算你把合并这一步做到最好,也只能保住一个比例,保不全。而且论文说,这个比例在“只从同一批提案里挑子集”的所有方案里已经是最优的——我再怎么在事后精挑细选,天花板就在那儿杵着。

我手动 merge 那一套,不是不够努力,是层级就不对。兼容性得在改动发生之前就构造出来,不是事后在一堆已经互相打架的结果里当和事佬。

顺带说一句,我最近越来越觉得,选工具的时候纠结 Claude Code 还是 Cursor,纠结错地方了。真的并行跑起来几个 agent,瓶颈压根不在哪个更聪明,在你怎么合。


论文里还有一段我读完不太舒服。在规模更大的无冲突任务上,并行 agent 缩短了建模的完成时间,但把成本抬上去了,按输入 token 的等价量算。

我一直觉得自己并行跑是白捡的效率。原来不是白捡,是买来的。而且如果任务本身有冲突,我这么干就是两头都亏:钱花了,合并还烂。

代码修复那部分,实验结论是说,经过验证的合并能解决那些“各自有用、但朴素合并会失败”的冲突。我看到「经过验证的合并」这几个字的时候,盯着屏幕愣了一会儿。我没有这个东西。我的合并从来没被验证过,最多是跑一遍测试,绿的算过,红了手动调,调完再跑,绿了继续。至于“我为了让它是绿的,是不是顺手删掉了本来有用的改进”,我从来没查过。

道路网络那边还有两组数字:90 组配对运行保留了 922 个单位的已验证图割改进;路线搜索那块,12 组配对运行把实测墙钟时间中位数降了 15%,但路线成本的变化在不同运行之间不一致。

15% 看着挺好,可后半句我读不太懂。不一致是什么意思,是有时候反而更差吗?这个我到现在也没搞明白,先记下来。


所以我这几天实际做的事特别小:不再让两个 agent 同时碰同一个文件。

听着像废话?我之前真就这么干,因为心里觉得“它自己能协调”。现在动手之前会多问自己一句:这两个改动挨着同一个函数吗。挨着,就排队,一个一个来。

三周前的我根本不会问这句话。那时候的我会开两个窗口,然后祈祷。

写到这里我又有点犹豫。因为这招在改 bug 这种任务上还行,真碰上那种大范围重构,改动天然就交织在一起,排队排到天荒地老也不现实。所以它只是个临时的打法,谈不上什么方法,我也不知道能撑多久。我又不想因为这个就彻底不并行了——并行确实快,快得有点让我上瘾,这点我得承认。


分数色数那块我还是夹生的。独立集我勉强能在脑子里画出来,分数色数就完全不行,同桌换着法子讲了两遍,我每次都是“哦哦懂了”,然后合上就说不出来。

评论区蹲一个大佬,谁碰过这方面的东西,或者谁能用一句人话告诉我它到底在度量什么,求教教我。

进度条:读懂了大概三分之一,但至少知道上周三那晚我该先做什么了。