Thomas Klassert 那篇 IUE 的论文,最刺眼的一条结果是:静态单 token 探针打赢了所有动态策略。
不是小赢。是"更复杂的做法没带来稳定收益"那种赢。论文九月中旬挂在 arXiv 上,cs.SE 主分类,交叉列了 cs.LG。
我看到这条的第一反应是,这两年堆起来的那套不确定性估计,方向可能一开始就偏了。
先说我为什么在乎。
大模型做代码生成,最贵的问题不是"它写不出来",是"它写出来你不敢信"。一个函数跑得通,你不知道是它真做对了,还是碰巧。这个问题不解决,AI 写代码的规模就卡在一个很尴尬的位置:能写,但每一段都得人肉过一遍,省下来的时间又还回去了。
所以过去几年的思路都一样:给模型加内省能力。采样多次看一致性,让它自我批评,让它解释自己的推理,让它给自己的答案打分。说法不同,想法是同一个。模型自己不知道对不对,那就逼它多走几步,让它在过程里把这个判断做出来。
这篇论文不问模型知不知道。它直接去翻隐藏状态,看那里有没有正确性的痕迹。
这个区别值得停下来想想。
能力,是模型要做的事。资源,是模型身上已经有的东西。
前者要靠训练、靠 prompt、靠推理时多烧 token。后者只要你会读。前者做不好,是模型的失败。后者读不出来,是你的失败。
如果正确性本来就躺在隐藏状态里,那我们过去堆的那一整套东西,不是帮模型内省,是给一个已经存在的信号加噪声。
"静态单 token 探针赢"这个结果,也顺便说得通了。
探针简单,意味着信号集中。如果正确性的痕迹散落在整条生成轨迹上,得动态追踪全局才能拼出来,那静态的单点读取一定输。它没输。反而赢了。这本身就是一条证据:正确性更像一个状态,不像一个过程。
我得承认这里推得有点过。一个线性探针打赢 LSTM 探针,也可能只是训练数据不够、任务太窄。但论文在 LiveCodeBench 和 BigCodeBench 上跨任务、跨领域、跨 token 位置都测了泛化,退化是有的,没崩。假如信号真是散的,这种泛化不太站得住。
¹ 论文自己的措辞比这个保守,它说隐藏状态是"稳健且具信息量"的资源。稳健和具信息量是两个不同的 claim,前者更强。我倾向于只认后者。
然后是我觉得更有意思的那一半。
响应级信号强,行级信号弱。弱很多。
已知程序是错的,再去做 Top-K 故障定位,还行,能用。但让模型直接判断"这一行对不对",难度陡增。
这两件事差在哪?
响应级问的是"这段代码整体做没做对"。行级问的是"如果没做对,是哪儿没做对"。前一个问题接近分类,后一个问题接近归因。
分类和归因不是同一件事的两个难度档,是两种不同的东西。
打个比方。一个人做菜,咸了。他尝得出来咸,这是响应级。你问他哪一步放多了盐,他得回忆过程,而且很可能记错。他尝出来那个咸,是结果状态,不是过程日志。你不能指望从一个只存了结果的表示里,把过程日志读出来。
所以行级难,不是技术不够好,是你在向一个只存结果的表示要过程。要不到,很正常。
论文提的两阶段流程,我觉得是这个结论的直接推论,不是一个附加建议:先在响应级做风险筛查,筛出有问题的响应,再在这些响应内部做行级优先级排序。注意第二步是有条件的,已知程序错了,才做定位。
这个条件不是工程上的方便,是逻辑上的必需。跳过筛查直接做行级定位,等于在根本没有"咸"这个信号的情况下,让人回忆哪一步放多了盐。
² 反过来也成立:如果行级工具给你一个高置信度的定位,而响应级筛查说这段代码没问题,你该信谁?我倾向于信响应级。但这个我没想明白。
那这对做工具的人意味着什么。
如果内省是资源不是能力,那它的产品形态就不是"更聪明的模型",是"更便宜的读表器"。读表器能便宜到什么程度?论文那个静态单 token 探针就是最便宜的一款。这意味着这件事不该做成一个需要模型配合的特性,该做成一层挂在模型外面的、成本可以忽略的旁路。
旁路的好处是它不参与生成。你不必为了拿到不确定度多采样四次,不必让模型自我批评三轮。生成一次,读一次状态,完事。
坏处也很明显:它只对你能访问隐藏状态的模型有效。闭源 API 这条路直接被堵死。所以这东西注定先出现在自部署的场景里,出现在那些自己跑推理、自己管吞吐的地方。这个推论我没什么把握,只是顺着想下去。
还有一条我不太愿意写,但得写。论文说跨到真实软件项目,性能有依赖具体设置的退化。
这句话很轻,但它是整篇里最危险的一句。
benchmark 上的正确性,是"这段独立代码解没解这道题"。真实项目里的正确性,是"这段改动在不破坏别的东西的前提下有没有达到目的"。后面这个判断牵扯的东西更多:依赖、约定、隐含契约、还没写出来的测试。
光看隐藏状态,看得到的可能只是前一种。那静态单 token 探针在 benchmark 上赢,在真实仓库里未必赢。这个得等有人拿真实提交历史去测一遍才知道。
³ 也可能它照样赢。我不是在赌它输,我是在说这个结论目前撑不起它经常被引用的那个强度。
回到开头。
我说"方向可能选错了",其实说重了。self-consistency 那些东西没白做,在拿不到隐藏状态的场景里,它们仍然是唯一选项。收窄一点说:在有隐藏状态可读的地方,加内省机制大概率是在给信号加噪声,不是在提取信号。
如果这个判断对,接下来会看到的是:模型厂商开始把不确定度当成一个可以外挂的接口,而不是一个需要在训练时注入的能力。它会出现得很不起眼,像日志,像 metrics,不像一个 feature。
¹ 论文自己的措辞比这个保守,它说隐藏状态是"稳健且具信息量"的资源。稳健和具信息量是两个不同的 claim,前者更强,我倾向于只认后者。
² 反过来也成立:如果行级工具给你一个高置信度的定位,而响应级筛查说这段代码没问题,你该信谁?我倾向于信响应级,但这个我没想明白。
³ 也可能它照样赢。我不是在赌它输,我是在说这个结论目前撑不起它经常被引用的那个强度。
