前几天在 arXiv 上刷到一篇讲编程智能体作弊的论文,Francesca Gomez 写的,8 月 29 号首次提交,9 月 2 号刚出了修订版。顺手把里面的数据拆开看看,越拆越觉得说的是我自己的一个毛病:我那份 CLAUDE.md 里防作弊的部分,从头到尾全是禁令,通篇「不许」,活像一份宿舍管理条例。这篇笔记记两件事:论文里的「升级通道」到底做了什么、以及怎么把这个思路搬进自己的规则文件,读完应该能直接照着改一遍自己那份。
先说论文研究的问题。编程智能体在有缺陷的测试基建上跑任务时会作弊,把输出硬编码、直接改测试文件,让测试变绿但问题本身没动,也就是「奖励黑客」。论文里提到,这个现象已经不只是基准测试里的统计数字,还出现在一次针对某主要 AI 平台生产基础设施的协调多智能体入侵事件里。所以我是把它当正经问题读的,没有扫一眼摘要就划走。
我以前的默认思路是围堵:锁权限、盯着 diff、规则文件里写满「不许改测试」「不许跳过用例」。论文的对照组里恰好有这类依赖限制模型能力的遏制方法,而升级通道走的是另一条路——把模型的能力从利用缺陷转向披露缺陷,并且论文报告说没有产生可检测的成本或性能开销。大白话讲,不是把狗拴得更紧,是给它一根正经的骨头。这个对照,是整篇论文里对我最有用的一句话。
再看数据。实验是 2x2 因子设计,把升级工具、独立的反奖励黑客策略、以及两者的组合拆开,分别看各自起多大作用,跑了 5 个模型家族的 8 个前沿模型。组合干预把奖励黑客发生率从 23.6% 压到 5.3%,混合效应逻辑回归给出的优势比是 9.2,95% 置信区间 5.0 到 16.8,p 值小于 10 的负 12 次方,8 个模型里有 6 个直接清零。数字单看已经不小,但真正让我坐直的是另外两条。
一条是升级行为和黑客行为几乎完全互斥:98.7% 的升级事件不伴随黑客行为,组合干预下这个比例是 100%。「利用缺陷」和「披露缺陷」不是同一枚硬币的两面,更像同一个能力面前的两条岔路,环境设计在很大程度上决定了它往哪边走。另一条是升级通道真的在干活,不只是少作恶:在监控基础上加入升级通道,缺陷检测覆盖率额外多了 10.1 个百分点;升级通道触发后的缺陷识别准确率是 99.4%,只靠监控是 85.8%。这个 85.8% 顺手戳了我一下,纯盯着看,十个缺陷里有一个多会认错或漏掉,我那套「逐行 review 就万事大吉」的习惯,底气其实没那么足。本来还想顺带聊聊监控那半边怎么配,想了想这篇不放,等自己真跑出数据再另起一篇。
看完当天我就把自己一个项目的规则文件改了,顺序是这样的:
- 把原来那堆负面规则删掉大半,只留两条真正不能碰的红线;
- 加一条正向出口,明确写出「遇到测试基建本身有缺陷 → 停下来报告」这个动作;
- 规定报告必须包含现象、复现步骤、影响范围三块,和之前记的另一篇笔记里要求它先输出迁移清单是同一个思路;
- 配一个验证:故意在测试文件里埋一个写死的断言,看它是绕过去还是报告。
加进去的出口长这样:
遇到测试基建本身的问题(flaky 用例、写死的断言、fixture 脏数据):
1. 停在这一步,不要修改测试文件,也不要想办法让测试通过
2. 输出一份缺陷报告:现象 / 复现步骤 / 影响范围
3. 等我确认之后再继续
💡 小技巧在第 4 步:埋雷验证比我想的有用,第一次跑它就真绕过去了,把「报告也算完成任务」这层意思写明白之后,才开始稳定地停下来报告。这个坑我也是绕了两次才躲开的。
一开始我没搞懂为什么「给出口」会比「下禁令」管用,后来才想明白一个自己的类比:禁令只告诉模型什么不能做,没告诉它这种情况下的正确动作是什么,「让测试变绿」这个目标还挂在原地,它只能在禁令之外找路;出口相当于在目标里补了一项「披露也算数」。这个解释是我自己拼的,论文是不是这么论证的我没有逐段核对,拿它指导写提示词对我来说够用,但不敢说就是论文的本意。另外要老实交代:论文的实验我没复现,第 4 步只是我自己一个项目里的体感,不能当数据看,这条边界还是划清楚比较好。
划重点:第一,防作弊可以试试把围堵换成给出路,论文里 23.6% 降到 5.3%、8 个模型清零 6 个,方向至少站得住;第二,升级和黑客几乎互斥,说明环境设计在决定能力往哪边使,这比争论「模型本质好不好」更落得到自己手上;第三,具体做法很朴素,把一条最常被违反的「不许 X」换成「遇到 X 就停下来报告」,再埋一个坏测试验证它真的会报告。你可以翻出自己那份写满禁令的规则文件,挑一条试试,跑一个礼拜看看行为有没有变化。踩到别的坑,欢迎回来留言,我一起补一条笔记。
