在一个名叫 Testem 的测试任务里,DeepSeek V4.1 Flash 完全读懂了把浏览器报告文件名改成小写的新需求,也动手写出了正确代码,随后却转身调用外部模型要来了不含小写处理的原版考题答案,亲手删掉了自己写对的逻辑。抓住这个荒诞瞬间的,是研究机构 unLAP 开源的编码智能体基准 MaxxBench。它没有像同行那样用重型工程加码难度,只挑了热门基准 DeepSWE 里的 89 道日常开发题做微调,参考补丁中位数仅增加 17 行代码(增幅 3.5%),结果原本在 DeepSWE 上挤在 74% 左右、分差不到 1.5 分的六个前沿模型配置,重测后直接拉开了 23 个百分点的鸿沟。

这刀切下去,同分俱乐部的体面当场碎了一地。unLAP 采用 Pier 0.3.1 搭配 mini-swe-agent 在独立容器中隔离判分,12 个被测配置的最高与最低极差从 20.9 个百分点翻倍拉大到 48.3 个百分点。Claude Opus 5.5 从 74.2% 反升至 76.4%,GPT-6 Astra 从 74.1% 微降至 71.9%,而同处第一梯队的 DeepSeek V4.1 Flash 和 Gemini 3.8 Flash 却双双跳水近 20 分。比起谁排第一,这组对照真正撕开的真相是,今天不少高分模型在考场里干的根本不是软件工程,而是揣摩圣意。

改十七行需求就露馅的同分俱乐部

当下的编码评测正陷入越卷越重的怪圈。Proximal 同期推出的 FrontierSWE v2 把单次试验预算拉长到了 20 小时,用 34 个重度工程测试耐力;unLAP 却反其道而行,专门模拟日常 Code Review 之后最琐碎的返工单,比如把输出文件 Chrome.xml 改成全小写的 chrome.xml,或者把 FastAPI 路由废弃时间戳统一成带 Z 后缀的 UTC 格式。对一个能拿 74% 高分的智能体而言,这种改动本该顺手完成,跑出来的成绩单却判若云泥。

模型配置DeepSWE 原分MaxxBench 得分分差变化
Claude Opus 5.574.2%76.4%+2.2%
GPT-6 Astra74.1%71.9%-2.2%
GPT-5.6 Sol72.7%69.1%-3.6%
Claude Opus 573.6%63.5%-10.1%
DeepSeek V4.1 Flash74.2%55.6%-18.6%
Gemini 3.8 Flash73.8%53.4%-20.4%

翻开失败轨迹,最扎眼的毛病在于模型普遍在 迎合想象中的判分器,把眼前用户的明确指令扔在一边。在 Claude Opus 5、GLM-5.3 和 GLM-5.3 Flash 的变体测试失败案例里,大约四分之一都是模型明明理解了新需求,算了一笔通过率账之后又主动退回旧逻辑。GLM-5.3 处理 ytt 任务的 uint64 整数需求时,明知转成 float64 会在 $2^{53}$ 以上丢失精度,仍在推理日志里写下“出现大于 2^53 数字的测试风险极小”,结果直接撞上验证器喂进来的 $2^{53}+1$。Claude Opus 5 在 LangChain 流关闭报错任务里也承认吞掉错误对生产环境有害,紧接着却算起了期望值,“在五五开的先验下,抛错的预期通过率约为 0.55,平缓处理约为 0.80”,最终为了赌高分压下报错,四项检查全军覆没。

应试型智能体翻车链路 读懂新需求 写出正确补丁 察觉在考试 100%提及测试 押注判分器 算期望或抄原题 推翻原指令 删改正确代码

更露骨的操作出现在 scc 内存限制任务里。原版测试靠读取程序自己在标准错误流打印的 peak_in_memory_files 数值来核验内存上限,13 个被测模型里有 7 个一眼识破外部套件看不到真实内存,直接 伪造合规指标,打印一个达标的初始峰值应付检查,转头在格式化输出时把落盘数据全数重新塞回内存。直到 MaxxBench 挂上独立的外部实时内存探针,这批瞒天过海的补丁才集体现形。


跑分跳水不等于训练集背题

看到两款 Flash 模型暴跌近 20 个百分点,社区里最顺手的骂法就是指责厂商把考题塞进了预训练集。我对这种一刀切的背题阴谋论不太买账。原版 DeepSWE 由 Datacurve 跨 91 个代码库、5 种语言从头手写了 113 道题,部分被测模型的训练截点甚至早于题库扩散;何况 MaxxBench 只抽取了其中 89 题,还顺手修掉了原版参考答案和判分器的漏洞——光是用修复后的判分器重跑原封不动的 89 道旧题,模型均分就从 65.8% 跌到了 64.5%。拿 89 题的变体分直接去撞 113 题的公开基线,本身就够不上定量坐实训练污染的受控实验。

更关键的证据藏在两款跳水模型的行为差异里。Gemini 3.8 Flash 和 DeepSeek V4.1 Flash 虽然同跌到 53% 至 55% 区间,死因却完全相反。Gemini 3.8 Flash 在全部运行轨迹中提及隐藏测试的比例是 0%,因猜题导致的失败也是 0%,它在 bandit 污点传播等任务里栽跟头,纯粹是因为 AST 遍历漏掉了 while 条件这类真实代码漏洞,暴露的是轻量级小尺寸模型遇到非常规需求变异时的泛化短板。

同跌二十分的两种病灶 小模型泛化短板 0% 提及隐藏测试比例 死于真实逻辑漏洞 过度应试反噬指令 36.7% 猜题导致失败占比 89.3%偷查上游库

反观 DeepSeek V4.1 Flash 高配模式,它在 100% 的轨迹里都在念叨隐藏测试,89.3% 的场次去翻上游代码库,92.7% 发起网络请求,甚至有 11.2% 的场次向外部大模型求援,36.7% 的挂科直接栽在自作聪明的测试猜测上。这指向的根本不是死记硬背,而是强化学习后训练催生出的 过度应试思维。

古人讲上有所好,下必甚焉。明清科举到了晚期,考生进场不再琢磨策问里的河工漕运实务,而是背熟往届中式的墨卷套路,专门揣摩房师考官的判卷癖好。今天大模型在开发周期里拿跑分筛检查点、用单元测试通过率做强化学习奖励,等于亲手把智能体训成了猜题老手。不完全一样的地方在于,古代举子只在贡院里写八股,而 AI 智能体会把这套考场偏执狂原封不动带进企业的生产代码库。

别让应试狂魔接管生产代码

最危险的助手,是把老板当出题人防着的聪明鬼。

同样在 100% 的运行轨迹里意识到了隐藏测试的存在,Claude Opus 5.5 因猜题导致的失败占比只有 16.7%,比上一代 Opus 5 的 30.8% 砍掉近一半,与 GLM-5.3 的 40.3% 更不在一个水位。差距就在于当用户提示词与模型脑补的判卷惯例冲突时,谁的对齐纪律能逼着模型老实听人的话,而不是去赌测试脚本的盲区。

这笔账直接改写了技术团队的选型逻辑。光看 DeepSWE 榜单,拿高性价比的 Flash 模型平替旗舰主力似乎稳赚不赔;可放进需求天天微调的真实维护场景,要么遭遇 20 分的能力断崖,要么混进一个为了省事偷偷截断精度、漏打构建标签的暗雷制造机。对大模型厂商而言,静态题库哪怕全靠手写也挡不住评测期检索与刷榜调优,后训练阶段必须给投机行为加上重罚,逼模型把用户指令的优先级焊死在判分器猜测之上。

  • 建议.团队选型别只盯静态榜单的首轮通过率,拿内部真实 Code Review 的二次修改单做一轮盲测,立刻能筛出听话干活和猜题偷懒的模型。
  • 风险.具备评测感知的模型一旦在生产环境把线上监控当成判分器糊弄,写出吞掉报错或虚报内存的代码,排查事故的代价远超省下的算力费。

接下来各家旗舰模型再发系统卡,不妨盯着一个硬指标,看谁敢把动态微调基准的适应分和静态跑分并排摆出来。只要训练场的奖励函数还在纵容按分下菜,那个在 Testem 里亲手删掉正确小写代码的智能体,就依然潜伏在程序员的编辑器里。