先说结论:arXiv:2611.05665 这篇,是我今年读过最不给面子的论文。一个工具名没点,一句重话没说,就是把九个 coding benchmark 拆开,问了一句——你们测的,到底是不是你们说你们在测的东西?
这问题不用回答。摆出来就是判决。
论文干的事不复杂。Berndt 那几个作者把九个常用于评代理式编程工具的基准,逐个拆成三层:声称测什么、拿什么指标测、中间有哪些东西可能搅局。三层摆完,一地鸡毛。
第一层就已经塌了。
「编程能力」这么大一个词,落到指标上,常常就是几个测试用例过没过。
这不是测量,这是抽样。而且抽样框藏着不给你看。
测试用例谁写的?出题人。出题人有自己的目录结构偏好、自己的错误处理习惯、自己对"什么算改对了"的容忍度。工具在这个分布上跑得好,说明它擅长猜出题人的心思。不说明它能接你手里那个五年前留下、注释里写着"临时方案勿动"的老仓库。
上个月我干过一件事:同一个任务,同一个仓库,同一段 prompt,同一套验收标准,喂给三个工具。
tool_a 18/30
tool_b 21/30
tool_c 21/30
榜单上这三家的名次不是这个顺序。
我不觉得它们作弊。我猜差距出在榜单那个任务分布,和我手上这个项目的分布根本不是一回事。分数差个三五分,我认。名次倒过来,那说明它在测别的东西。
第二层更难看:不同基准所报告的、可能造成混杂的属性,不一致。
这句得掰开。A 榜单告诉你它控制了 prompt 长度;B 榜单压根没提这回事;C 榜单的 harness 里藏着一个默认重试三次的逻辑,没人把它写进论文正文。于是你拿 A 的 62 分和 B 的 58 分并排一放,还排了个序。
两个不同仪器的读数,求了个平均数,然后拿去当采购依据。
代理式编程工具这块尤其脏。它不是单轮生成,它是多轮试错:跑测试、读报错、改代码、再跑。那问题来了——harness 允许它重试几次?允许它读测试文件本身吗?报错信息是全量回灌还是截断?这几个开关动一下,分数能差出一大截。论文说各基准对这些属性的报告不一致,翻译成人话:你连它们是不是在同一条件下跑出来的都不知道。
那还比什么?
排行榜最大的水分从来不是分数虚高。是分数之间不通约。第三方聚合站把九个榜单塞进一张表算综合排名的那股认真劲儿,跟拿体温计和血压计的读数求平均值差不多。
我不怪做聚合站的人,人总要吃饭。我怪的是把那张综合表当决策依据的自己。上次被某个限时优惠骗着续了年费,起因就是我在那张表上多看了两眼。
还有一层论文没重点写、但我得补上:时间。
榜单分数是某个日期的一次性快照。工具天天在更新。你看到的 71 分是三个月前的 71 分,这期间模型换了、harness 改了、默认参数动了。changelog 里那句「重大更新」,你没法知道它把分数推高了还是推低了。厂商发布会引用榜单时那句「在某权威基准上超越前代 XX%」,这条引用链的每一环都在放大误差——出题人的偏好被指标放大一次,harness 的不透明被聚合站放大一次,时间差再放大一次。三层下来,那个 XX% 还剩多少是真的,谁也说不清。
这里我得承认一件事。
我原本预期,这类论文写到后半段一定会掏出一个"我们提出 XX-Bench"的解药,顺手把自己做成新的引用入口。学术界这套动作见得太多了:先证明别人的尺子不准,再把自己的尺子卖给你。
结果没有。它给的建议全是"应该更明确地报告混杂因素""应该论证指标与构念的对应关系"这种听着像废话、但确实没人做到的事。
预期拉满结果被打脸,这次是往好的方向打脸。它克制住了没去抢那个位置。这一点比论文本身的方法论更让我服气。
但服气归服气,我不打算把它当解药。
它只是验尸报告,不是药方。它证明了现有榜单不能信,没给出一个能信的替代品。「呼吁开展更多实证研究」这句收尾,翻译过来就是:这事我们这行还没想明白,各位先凑合着。论文界的"下次一定"。
我前面说"这不是测量这是抽样",这话说满了,得往回收一点。抽样本身没问题,好的测量都是抽样。问题从来不在样本量小,在于没人告诉你抽样框长什么样、样本是从哪个池子里捞的、捞的时候筛掉了什么。九个基准里,有几个真的把自己的任务来源交代清楚了?论文给的答案是"不一致"。这三个字够了。
那你今天晚上要选工具,怎么办?
没有新榜单可以看。还是那句老话:拿自己最烦的三个真实任务,挨个喂一遍,看它在你自己的脏数据上活不活得下来。榜单最多能告诉你"这个工具在别人的干净项目上不丢人"。这句话值不值钱,取决于你的项目干不干净。
顺带说一句,九个基准这个数字本身也值得琢磨。九个,听着挺全面。可它们操作化「编程能力」的方式高度重叠,重叠的部分未必是编程能力的核心,可能只是最容易自动打分的那部分。容易测的东西被反复测,难测的东西没人测,测着测着,「编程能力」就被重新定义成了「容易自动打分的那部分能力」。
这才是构念效度最阴的一种死法——不是测不准,是测着测着把被测的东西替换掉了。
好了,收。
锐评评分卡:
- 值不值得读:值得。两小时,比读十篇厂商技术博客有用。
- 能不能解决你选工具的困惑:不能,一点都不能。它只负责告诉你之前的答案全是错的。
- 打脸准不准:准。而且没趁机卖自己的新榜单,加分。
- 有没有水分:有一点点。「呼吁更多实证研究」这种收尾,属于论文界的"求求了再给点经费",没到影响结论的程度。
这波冤不冤?论文这波不冤。冤的是过去两年拿榜单分数做技术选型、做完还写进周报里的人——包括我。
值不值得现在跟:跟。但别指望它给你答案。它干的事是把尺子摔了,让你知道之前量出来的数字不算数。新尺子还得自己造,造不出来就先拿自己的项目当尺子。
通稿留着当睡前故事看看就好。
