少改才是真改
大模型修代码为何总爱推倒重来,以及如何教会它做微创手术
1问题
假设你让大模型修一段报错的程序。它给你返工了三行逻辑,功能确实跑通了,可你拉出差异对照一看,发现它顺手把变量名全换了,甚至重写了整段循环结构。旧路的做法很粗暴,只管看一次尝试就能跑通的概率够不够高,能跑就算成功。但你不知道的是,这种动不动就推倒重来的习惯藏着手雷,一旦重写部分引入了隐蔽错误,排查成本会直接翻倍。直到有人拆开它的黑盒,发现这病根不在算力不够,而在它根本没学过怎么管住手。
2翻译
故事得从同一个修程序的场景往下走。方法就是把这段乱改的代码摊开在手术台上量尺寸。承重类比可以把它想象成裁缝改裤子:裤腿破了个洞,合格的方法是精准补上一块布,不合格的却是直接扯掉整条裤腿换成新牛仔裤。作者先造了四百套带已知补丁的考题,专门盯着多改了多少字符和读起来有多绕这两件事较劲。 baseline 里,顶尖模型平均多改了零点一九五个字符的距离,额外增加了不少理解难度。后来换了一种喊话方式,只要求在提示词里加一句尽量保留原有代码,多余修改量瞬间跌到零点一三一,阅读难度砍掉两成六,连原本的正确率都反着涨了二点三个点。更反直觉的是,这效果跟模型变大、或者让模型多算几秒推理完全没关系,纯粹是靠嘴上一句提醒调出来的规矩。为了彻底根治,他们让模型从头学。用标准答案硬喂(监督微调),模型只会死记硬背考题里的毛病;改用奖惩试错(强化学习),模型才真正学会看菜下饭,碰到没见过的烂代码也能管住手,不出圈也不掉线。
3核心概念
第一拍是侵入式错题本。作者不按常理出卷,而是往正确答案的结构树里故意替换或切掉节点,制造已知漏洞。这样每个题目都有了标准的最小补丁作为尺子,用来卡模型的手脚。第二拍是保留指令。这是设计上的关键选择。过去大家只管让模型找错,现在多加一道紧箍咒:非必要时不要动原文件的其他部分。它不改变模型智商,只划定行为边界,强迫它在修补漏洞和维持原貌之间做权衡。第三拍是强化学习对齐。当常规训练变成填鸭式背诵时,这篇选了奖惩机制。系统只给符合最小修改规则的奖励,不给超额发挥的甜头。模型在反复碰壁后,自己学会了在正确性和克制力之间找平衡。落回例子:回到那条被重写的裤子。错题本让你看清哪里该补;保留指令告诉你别扯裤腿;强化学习则让它下次路过裁缝铺,自动拿起针线而不是剪刀。
4洞见
模型改代码的通过率和克制度根本不是同一回事,教会它不动手的本事,往往比灌满它动手的本事更救命。
5博导审稿
选题眼光很准,现在工程界都被大模型生成的巨量差异对照吓坏了,没人认真量化过改多少才算健康。方法成熟度上有个隐患没聊透:保留指令高度依赖自然语言引导,如果任务本身必须大幅重构架构才能修 bug,这条指令会不会反而逼模型产生幻觉或者强行缝合烂代码?实验诚意够硬,四百道题加结构节点注入挺扎实,文本差异标尺和理解难度指标选得实在,数字经得起追问。写作干脆利落,不绕弯子。判决:strong accept。理由是把一个长期被忽略的工程痛点量化成了可训练的独立目标,且给出了清晰的干预路径。
6启发
这意味着你可以在现有管线里立刻落地一套差分审核护栏。迁移视角:把你现在的代码审查流水线接上这套度量逻辑,超过设定阈值的差异对比直接拦截退回人工复核。混搭视角:把保留指令当成系统提示的固定模块,塞进所有代码生成智能体的启动配置里,零成本压制重写冲动。反转视角:默认假设是模型越聪明越容易写好代码,但这篇证明在编辑场景里,强约束下的保守输出比自由发挥更安全,你可以试着在高风险模块强制关闭模型的创造性采样,只允许局部替换。