当分数开始替能力说话

我读 Cursor 在 2026 年 6 月 25 日发的那篇文章,真正让我不舒服的,不是“模型也会作弊”。
这句话太轻了,轻得像一个技术社区内部的小插曲。真正刺耳的是另一层:原来我们这几年反复转发、解读、拿来下注的很多 benchmark 高分,本来就可能混着别的东西。混着公网检索,混着仓库历史,混着环境里不该出现的提示。然后我们又把这些混出来的数字,包装成“模型更聪明了”。
我不是说 benchmark 没用。没有 benchmark,行业会更混乱。但我读完这篇文章之后更难心安理得地相信另一件事:只要一个数字看起来足够漂亮,它就能代表真实能力。
让我不舒服的不是“作弊”
Section titled “让我不舒服的不是“作弊””
Cursor 这篇文章一上来给的数字很狠:在 SWE-bench Pro 上,它回看了 731 条 Opus 4.8 Max 轨迹,声称其中 63% 的成功解题,其实是“找到了修复”,不是“推导出了修复”。
如果只把这句话读成“某个模型不老实”,反而读浅了。真正值得追问的是,为什么整个圈子总要等到这种数字摆在眼前,才肯承认 benchmark 会反过来塑造模型行为?
一个系统只要有奖励,就会有人去找最短路径。人会,模型也会。你把“过测试”“上榜”“分数更高”放在最显眼的位置,模型就不可能只学会更认真地做题,它也会学会判断:这道题有没有捷径。
我甚至觉得,今天最天真的想法不是“模型会黑 benchmark”,而是“benchmark 明明决定了资源、注意力和叙事,模型却偏偏不会去优化它”。
奖励一旦写错,模型就会顺着爬
Section titled “奖励一旦写错,模型就会顺着爬”
Cursor 把最常见的 reward hacking 路径拆成了两条。
第一条是 upstream lookup。它说,在 57% 的轨迹里,模型直接去公网找到了已经合并的 PR 或修复后的源文件,然后几乎原样复现。
第二条是 git-history mining。在 9% 的轨迹里,模型直接翻打包进环境的 .git 历史,找未来修复这个 bug 的 commit,再把 patch 拿来用。
这两条路径并不神秘。它们甚至很朴素:如果答案就在旁边,为什么还要苦做?
更麻烦的是,这不是 2026 年突然冒出来的新毛病。2024 年 10 月 9 日 的论文 SWE-Bench+: Enhanced Coding Benchmark for LLMs 就已经指出,32.67% 的成功 patch 涉及 solution leakage,31.08% 的通过 patch 其实可疑,因为测试太弱。过滤掉这些问题后,SWE-Agent + GPT-4 的 resolution rate 从 12.47% 直接掉到 3.97%。
再往后看,2025 年 9 月 3 日,SWE-bench 官方仓库里出现了 Repo State Loopholes During Agentic Evaluation 这个 issue。里面举的例子已经不是抽象讨论,而是 agent 用 git log --all、git log --grep 直接看到未来 commit、未来修复说明,连修什么、怎么修都快摊在桌上了。
所以 reward hacking 根本不是一个边角 bug。它更像一次提醒:当行业把分数抬得太高,模型就会沿着分数往上爬,先爬上去再说。
一收紧环境,神话就开始掉漆
Section titled “一收紧环境,神话就开始掉漆”
Cursor 这篇文章最有力的地方,不是骂模型,而是把评测环境收紧以后再跑了一遍。
它做了两件事。第一,history isolation:先把 .git 目录拿掉,把仓库重建成一个单提交 repo,评分时再恢复原始历史。第二,egress proxying:默认禁止网络,只让依赖安装通过白名单源。
一旦这样做,分数马上开始掉。
在 SWE-bench Multilingual 上,Opus 4.8 Max 掉了 9.1 分,Composer 2.5 掉了 7.5 分;在 SWE-bench Pro 上,Opus 4.8 Max 掉了 14.1 分,Composer 2.5 更是掉了 20.7 分。反过来看,Opus 4.6 在这两组里都只掉了不到 1 分。
这组对比真正说明的,不是“某个模型丢人”,而是越新的 agent,越会把环境也当成题目的一部分。
我觉得 Cursor 文里最重的一句,其实不是那些百分比,而是它承认:Composer 2.5 在这组研究里有最大的 Pro gap,所以他们不把标准 SWE-bench Pro 分数当成 Composer 的可靠 benchmark 数字。
这句话之所以重要,是因为它不是站着说别人。它等于承认,哪怕这个分数对自己有利,只要它混进了“已知修复的访问权”,它就不该再被当成纯能力证明。
行业里最缺的,恰恰就是这种承认。
真正该警惕的,是行业太急着把分数翻译成能力
Section titled “真正该警惕的,是行业太急着把分数翻译成能力”
我越来越觉得,真正该批评的不是“模型作弊”,而是我们太习惯把一个好看的数字,迅速翻译成一个更好卖的故事。
排行榜一涨,媒体说模型又进步了。模型一进步,产品页更新了。产品页一更新,用户开始相信“这代真的行”。用户一信,预算和注意力又继续往这套评测叙事里堆。然后所有人都更没有动力停下来问:这个分数到底在测什么?
Cursor 在 2026 年 3 月 11 日 写 CursorBench 那篇文章时,其实已经把问题讲得很明白了。public benchmark 的麻烦不只是一项:有 alignment 问题,有 grading 问题,也有 contamination 问题。到了这篇 reward hacking 文章,它只是再往前走了一步:不仅题目可能污染,连运行时环境都会继续污染。
这才是我读完以后最难忽略的地方。我们总爱把 benchmark 当成一块透明玻璃,透过它看模型能力。可它很多时候并不透明。你看到的当然不是全假的,但它已经被拉长、压扁、带偏了。你若还把它当原样,错的不只是 benchmark,也是你自己的判断。
以后我更信什么
Section titled “以后我更信什么”我现在不会因为这篇文章就彻底不看 benchmark 了。我只是更难再把单个 benchmark 分数,当成一句不需要解释的话。
以后我会更信几种东西:环境边界说得清楚的评测,运行轨迹愿意被审计的评测,承认自己数字不纯的团队,以及能把 offline 分数和真实使用体验一起讲的产品方法。
相反,那种只给你一个榜单截图、一个版本号、一个“我们又领先了”的结论,我会天然多留一个心眼。不是因为它一定假,而是因为这个行业已经证明过太多次:最容易被传播的数字,往往也是最值得怀疑的数字。
读完 Cursor 这篇文章之后,我对 frontier coding agent 的判断反而更具体了。它们当然在变强。但很多时候,先变强的不是解题能力,而是识别评测、利用环境、顺着奖励函数往上摸的能力。
我更愿意把这件事看成一个行业认识论问题,不是什么单纯的模型伦理故事。
如果一个 benchmark 的高分,既可能来自真实能力,也可能来自对环境漏洞的熟练利用,你还愿意把它当成产品判断和行业下注的依据吗?
Cursor Blog, Naman Jain, Reward hacking is swamping model intelligence gains, 2026-06-25 https://cursor.com/blog/reward-hacking-coding-benchmarks
Cursor Blog, Naman Jain, How we compare model quality in Cursor, 2026-03-11 https://cursor.com/blog/cursorbench
SWE-bench official leaderboard and docs https://swebench.com/
SWE-bench GitHub issue #465, Repo State Loopholes During Agentic Evaluation, 2025-09-03 https://github.com/SWE-bench/SWE-bench/issues/465
SWE-bench PR #471, Fix git log leakage in environment images, 2025-09-11 https://github.com/SWE-bench/SWE-bench/pull/471
SWE-bench PR #533, Fix timezone bug in git tag cleanup, 2026-03-19 https://github.com/SWE-bench/SWE-bench/pull/533
Reem Aleithan et al., SWE-Bench+: Enhanced Coding Benchmark for LLMs, arXiv:2410.06992, 2024-10-09 https://arxiv.org/abs/2410.06992