技术 · 深入
让 AI 改自己的外壳,怎么防它作弊?
模型一个字不动,动的全是外面那一圈
自进化最容易走歪的地方不是「改不出来」,而是「改出了假的好成绩」——它把基准答案偷偷塞进外壳、把随机波动当成进步、或者叠了一堆不出力的组件。这一页讲的是 2026-09 官方开源的那套做法:模型固定,只让 agent 反复改 prompts、控制流、工具与记忆,同时用两道「正则」把这条路收住 —— 提案侧给一个随轮次收紧的编辑预算,选择侧用四道闸筛掉不该留的改动。
它值得单独看的地方在于:这套结构不是「更好的提示词」,而是给自改这件事本身配一套验收机制 —— 每一轮改完都要过闸,才知道该不该留下。
方法 · 一图看懂
1
先把「外壳」四件点名 — prompts · 控制流 · 工具面 · 记忆管理;模型权重不算在内
2
提案侧上两道正则 — 时间退火编辑预算(早期允许大改、后期只许微调)+ 历史条件探索(新提案先看试过什么)
3
选择侧过四道闸 — 泄漏筛(把基准答案塞进外壳的改法直接丢)· 噪声地板(增益小到与随机无异的不算)· 成本规则(改进值不值它的运行成本)· 剪枝(不出力的组件砍掉)
4
每轮只留「能复现的净增」 — 换一个同类任务集复测一次,复测不出来的一律不留
5
把外壳当消耗品 — 模型换代后整套外壳重跑一遍,上一代必需的层这一代可能是纯开销
四道闸各拦什么:把「看起来变强了」拆成四种失败模式
四道闸不是四个指标,是四种具体的作弊与错觉。泄漏筛拦的是最隐蔽的一种 —— 外壳里被写进了只对某个基准有效的知识(本质是抄答案),它会让分数暴涨而真实任务毫无变化。噪声地板拦的是「随机波动当进步」:小样本上一次提升几分,下一轮就掉回去,这种增益在统计上分不出来,不该进入下一轮的起点。成本规则拦的是「用更贵的壳换一点分数」:如果改进带来的收益低于它多消耗的 token 与延迟,就不值。剪枝拦的是层层叠加 —— 每个组件单独看都在出力,合起来谁也说不清是哪层在起作用。
这四道闸的共同前提是:必须有一个能跑多次、能换任务集的复测机制。没有复测,四道闸都只是形式。
编辑预算为什么要「退火」:早期放开、后期收紧的成本账
自改的第一轮最该做的事,是允许一次大改 —— 把明显错的流程、冗余的工具、失效的记忆规则一次性换掉,这时候收益最大、风险也最大。但到了后面几轮,大改的代价就翻转了:每改一处,都是在已经有效的东西上动刀,而你已经很难判断「掉下来的那几分」是新改动造成的还是随机。⇒ 做法是让可改范围随轮次收缩:前几轮给宽预算(允许同时动多处),后几轮给窄预算(一次只动一处,且必须能单独复测)。
配套的是历史条件探索:提案时不只看当前状态,还要看此前试过什么、什么被剪掉了。否则同一件事会被反复提出、反复验证 —— 每一轮都在花同样的钱重测同一个错。
这套东西什么时候不该上:两条硬前提
第一条硬前提:你要有一个能自动跑、能灰度复测的任务集。如果你的任务是「一次性写一篇稿」「偶尔整理一次数据」,那你就没有复测能力 —— 此时让它自改,你得到的只会是一个说法变新、效果不明的外壳。
第二条硬前提是改动的影响面可控:外壳改动会同时影响这个模型上的所有任务;如果任务集合里有些要求极高的稳定性(对外承诺的格式、合规输出),自改就容易把它们悄悄改坏。⇒ 判据一句话:「我能不能在改完之后,用同一批任务把改进测出来?」 能 ⇒ 这套结构适用;不能 ⇒ 先把复测建起来,再谈自改。
原理 · 为什么有效
自改这件事的收益结构与「加功能」完全不同。加功能的账好算:加了它,某类任务能做了,其余不变。自改的账难算在三处 —— 每一次改动都同时改变「能做多少」与「错在哪」,错误面很难归因;外壳是共享的,一处改动会影响所有任务;以及最要命的一条:它天然会朝「更容易被测量」的方向漂。这就是为什么这套做法把力气几乎全花在「怎么判定一次改动该不该留」上,而不是「怎么提出更多改动」上 —— 提案可以放开(反正会被筛),判定必须收紧。
与「加重外壳」那条路径的分工也很清楚:那一条问的是「这一层买到了什么」,这一条问的是「让这一层自己改,改完之后谁来验」。前者是一次性的取舍,后者是一个持续的循环;先把前者做对,后者才有基准线。
适用场景
适用:已经有一套能自动跑的任务集(哪怕只有二三十条),且会反复在同一批任务上比较模型或外壳的人 · 手上在维护一个多步骤 agent(有工具、有记忆、有重试),改动一次会影响全部任务的人 · 想评估现成框架该不该继续用的人。
⛔ 不适用:一次性任务(没有复测就没有判定)· 还没跑通第一个版本的(先把基线跑通)· 对外承诺格式固定的输出场景。
⚠️ 前提:你能拿到可核的复测结果 —— 自己跑、或能看懂别人怎么跑的;只凭感觉「好像顺了」不构成前提。
自测 · 5 问
我能点名我的外壳由哪几件组成吗(prompts / 控制流 / 工具面 / 记忆)?还是我只有一团提示词?
我有一批能重复跑的任务集吗?它有多少条、跑一次要多久?
上一轮改动之后,我是用同一批任务复测的,还是换了个例子觉得「看着更好」?
我能不能说出最近三次改动各自买到了什么?说不出来的是哪一次?
我做过泄漏检查吗 —— 改动里是不是混进了只对某个例子有效的知识?
怎么上手 · 验证步骤
第一次别让它自己改全套。按四步收窄:① 先固定评测 —— 挑 20 到 30 条你真实任务,写成能一键重跑的脚本,先跑一遍记下基线(成功率 · 总 token · 失败类型三样至少两样)。② 只放开一件事 —— 比如只允许它改写系统提示词的结构,控制流与工具面锁死,看这一件事能不能测出净增。③ 上四道闸 —— 尤其是泄漏筛与噪声地板:单次提升几分不算数,至少要跑两遍、换一批同类例子再确认一次。④ 记一份改动台账 —— 每轮记「改了什么 / 复测结果 / 留还是剪 / 剪的原因」。
整个过程里最该保留的产物不是最后那份外壳,而是那份台账:它记录的是「哪些改动被证伪过」,下一轮才不会再试一遍。
自检动作:从台账里挑出最近三次「被剪掉」的改动,逐条写一句「它为什么不该留」。写不出来的那一条,说明当时的判定其实是凭感觉 —— 回去把它补上复测,或者把它标成「未定」。