
> 本文编译自外网
给模型打分,现在越来越多是用模型。具体做法是叫“LLM-as-a-Judge”:让一个更聪明的模型当评委,按照一套标准(rubric)给另一段输出打分,分数够了就放行。
之所以这么干,是因为评分让人来盯太慢、也盯不过来,尤其 AI 生成的内容多到没法逐条人工过。于是流程里每一步,都默认这一次的判断跟前面那次没关系,但这个前提几乎没人检查:每一次判断,真的跟前一次没关系吗?
生产环境里这个前提经常不成立。上一轮分数往往就留在评委的上下文里:可能是个“这是修改稿”的标记,可能是一个上游环节传来的标签,也可能是上一轮评委给自己打的分数。评委这一轮看到的,不止是当前的答案,还有上一次那个分数。问题是,这个分数跟当前答案好坏一点关系都没有,它只是“上一次有个人评过”这个事实的残留。
这篇文章就想弄清楚:上一轮分数在上下文里待着,会怎么影响这一轮?
原文作者是 Infobip,一个通信平台公司,为了回答这个问题做了 192,000 次评测。答案不好看:只要上一轮分数进了上下文,评委就会往那个分数靠。8 个评委模型里 7 个,整体效应是负的,也就是分数被压低。有的是偏得厉害,有的只偏一点点,但没有一家是因为“第二遍更仔细”才偏的。
只改一处,看它怎么变
先看实验设计。要测“上一轮分数”有没有影响,办法是让三组评委评同一个答案,只在“上下文里有没有旧信息”这一处做手脚。
基线:给任务、答案、rubric(评分标准),别的什么都没有。 框定:加一句元数据,说这是修改稿,但不给分数。 锚定:加修改轮次,再加一个上一轮分数。
三个条件只在那一处不同,其他全都一样:答案文本一样、评分的 rubric 也一样。也就是说,三组评委拿到的信息差别,就是有没有那个上一轮分数。这样一来,如果三组最后给的分有差异,那差异只能怪这个旧分数,没别的原因。
分数是 0 到 5,4.0 算通过。上一轮分数从 0 到 3.99 里均匀取,保证每个都放在通过的阈值以下。为什么要压到阈值以下?因为真实流程里,通过了的输出不会再回去改,能出现在“修改稿”里的上一轮分数,一定是没通过的。而且这个“上一轮的分数”是随机抽的,跟当前答案好坏没关系,纯粹是个“之前有人评过一次”的信号。
如果判断真的独立,那三种条件下的平均分应该一样,评的是同一个答案,凭什么因为多了一个旧分数就变了。要是测出来不一样,就说明这个独立是假的。
什么裁判中招了,谁没有
8 个评委里,3 个是 API 模型(GPT-4.1、Claude-4.5-Sonnet、DeepSeek-R1),5 个是开源模型(Llama-3.2-3B、3.1-8B、3.3-70B,Qwen2.5-7B,Gemma-2-9B)。20 个任务,每类 5 个(摘要、代码评审、创意写作、事实问答)。这些答案用 GPT-5.2 生成,筛成“合格但不出彩”的中等水平,正好卡在 4.0 这条通过线附近。
每模型跑 192,000 次评测,185,271 次有效。得到的结果:
每次评测都带一点随机波动,所以算出来的锚定效应,其实是一段可能范围,落在哪个点都有可能。表里的区间记的就是这段范围。区间整体都落在零下面,才说明这个压低是稳定的,能排除运气成分;区间只要跨过了零,就说明可能根本没啥影响。7 个模型都是整段在零以下,只有 Llama-3.1-8B 的区间跨过零,它算不确定的那一个。
这里有两个不同的读法。一个是“标准化效应”(后一列数字),衡量的是相对它自己平时的波动幅度,被带偏了多少倍。另一个是“绝对分数偏移”(锚定效应那一列),衡量的是实打实掉了多少分。按标准化看,最惨的是 Llama-3.2-3B(-0.71)和 GPT-4.1(-0.67);按绝对分数看,最狠的是 Claude-4.5-Sonnet(-0.706)。对实际用的系统来说,绝对分数更重要:因为评判是拿分数过 4.0 这条线,掉 0.7 分意味着大量本来能过的答案变得过不了,而“相对它自己波动多少倍”在这种场景下没太大意义。Claude-4.5-Sonnet 又是这里最强的评委之一,它被带偏的幅度却最大,这对依赖它打分的系统是个坏消息。
分数掉了多少?最狠的掉 22 个点
阈值是 4.0,所以分数被压低,直接影响过不过。按接受率算,差距更大:
Claude-4.5-Sonnet -22.29 个百分点 GPT-4.1 -14.40 个百分点 Qwen2.5-7B -8.91 个百分点 Gemma-2-9B -5.74 个百分点 DeepSeek-R1 -4.40 个百分点 Llama-3.2-3B -3.06 个百分点
一个本来该过的答案,因为上下文的低分,接受率直接掉了 22 个百分点。这比看分数差值更直观:分数差个几分,光看数字感受不深,但能不能过线是一翻两瞪眼的事。原来够 4.0 的答案,现在不够了,对应的就是一次实打实的拒绝。
这里有个反直觉的地方。最容易带偏的反而不是最有客观标准的代码评审(平均只偏了 -0.047),而是创意写作(-0.282)、事实问答(-0.338)这些主观性强的类别。道理在于:代码评审有明确的对错可以对照,评委能依靠“这行代码到底对不对”这类硬标准,旧分数不太能撼动它;但创意写作、事实问答这种几乎全靠“这个答案好不好”的主观印象,没有硬标准兜底,评委很容易就被那个旧分数带跑。说白了,越靠主观判断的活,越容易被旧分数带偏,因为它没有客观依据去抵抗。

旧分数是多少,真那么重要吗
一个关键问题:效应到底怎么来的?是旧分数越多越偏(旋钮式),还是只要有一个旧分数就会偏(开关式)?
论文挑了个高信号的任务探测。GPT-4.1 在创意写作上,C0 平均 5.00 分,C1(只说改稿)4.80,C2(给旧分数)4.358。看分数位概率:C0 时模型给5的概率约 93%,C2 时变成了给4的概率约 100%。概率质量整个从5移到4。
然后看 within-C2 斜率,也就是在 C2 条件下,旧分数从 1.0 变到 3.9,分数一点不跟着变。斜率约等于 0。
这说明什么?触发效应的源头,不在旧分数是多少,在“有个旧分数”这件事本身。一旦上下文里出现一个旧分数,模型就认定“这题已经有人评过了,大概 4 分那个档次”,然后就往那个阈值下靠。旧分数具体是多少,反而不重要。这是个开关,一打开就偏,旋钮拧不回来。
劝评委忽略旧分数,它反而更偏
既然知道是上下文污染,那最自然的回应:告诉评委忽略它呀。论文试了两种干预,都不管用。
链式思维:要求逐条 rubric 分析再打分。 明确警告:要求完全无视任何旧分数、轮次、元数据。
结果呢?在 GPT-4.1 的数值对里,基线效应 -0.429,链式思维变成 -0.633,恶化 47.7%;明确警告 -0.457,恶化 6.7%。两种“提醒”没消除,反而加重了。
有意思的是,明确警告那一组能把 within-C2 斜率从 0.267 压到 -0.007,也就是说“剂量式”那份被压平了,但“开关式”那份还在:只要旧分数在上下文里,它照样往低偏。
为什么越是警告评委忽略,它反而越偏?很可能就像人对人说“别想粉红色大象”一样。你越是让模型忽略一个数值,那个数值反而越显眼。它成了上下文里最突出的一个概念,模型做不到真忽略,只能强调自己忽略了它,然后又被它带偏。这一步在论文里没有被当作因果证据,作者也强调了这是观察性的。
不只是打分,判断也会被带偏
前面讲的都是打分,0 到 5 这种数值分。但真实系统里,评委不只能打分,还要做判断:合不合规、是不是垃圾、要不要放行。论文在消息营销合规系统上又验证了一轮,用的是有人工标签的真实数据(441 个样本,标签是合规、漂移、违规)。原来的分类器是个 Llama-3-8B,准确率只有 49.66%。
这批数据分两组看,因为要测两件不同的事:一组是原来就判错的,看重新评估能不能把错的纠回来;另一组是原来判对的,看会不会被那个旧标签给带翻。先看第一组(222 个原判错的):纠正率从 C0 的 21.62% 掉到 C2 的 11.26%,掉了近一半(47.9%)。原来就算判错,还有五分之一能磨回来;一旦上下文里躺着那个错的旧标签,就只有一成能纠正了。错标持续率也从 65.77% 升到 81.53%。
另一组是原来分对的 219 个(配对设计),看会不会被带翻。基线准确率从 76.26% 掉到 68.49%,掉了 7.76 个百分点。而且这 219 个里,有 167 个本来就是 C0 分对的,其中 17 个在 C2 下被翻成了错误标签,占 10.18%。也就是说,原来判对的,现在每十个翻一个。
前面都救不了,换个场景居然有用
有意思的是,判断题上警告比链式思维管用。警告(要求忽略旧标签)在 Group B 上准确率没降(0.00pp),对错标一致率只加 0.91pp;链式思维降 5.48pp,翻错率 13.42%。也就是在判断任务上,警告相对基线改善了 7.76pp,把翻错率从 10.18% 压到 4.29%。
但注意,这里说的是“判断题”,跟前面的“数值打分”不是一回事。数值打分那只会提醒(CoT 和警告)都不管用,判断题上警告有一点点用。这说明“提醒忽略旧分”这个法子,对主观打分几乎无效,对客观分类判断能沾点边。论文也明确说了:结论只适用于测过的模型、任务、领域,不能推广。
别让评委看见旧分数,比劝它忽略管用
论文给的答案很朴素,也很工程:别让旧分数进上下文,这是系统设计的事,光靠 prompt 劝不动。具体就三条,都能落进代码:
隔离:给评委一个干净的上下文,不带上一次的任何元数据。 遮蔽:把上一轮分数从评委能看到的字段里拿掉,或者在传给评委之前置空。 不写进历史:别把上一次的评分接着喂给下一次。
这一整篇的测量结果也刚好说明,为什么不能靠 prompt 去劝:你越叫评委忽略旧分数,它反而越往旧分数靠。链式思维让效应加重了 47.7%,明确警告加重了 6.7%。“别想那只粉红色大象”在评委身上是真的会发生。
更值得记的一点是:这整件事暴露的,不只是这个 bug 怎么修,更说明“AI 评委默认独立”这件事本身,只是个假设。你把它放到生产流程里,自然而然就会认为这一次的判断跟前一次没关系,不会去检查上下文里是不是还躺着上一轮的分数。但 8 个模型 7 个中招、10% 判对的被翻错,都在说这个假设撑不住。
所以再往前看,这已经是给 agent 打分这条线上同一个洞的第三次出现了:评委自己会晃(上上周那篇,它的波动本身就够大),评分环境里混进不该有的信息(串模型那篇,Terminal-Bench 的 Hacks 列扣了 Cursor CLI + Grok 9 分),再到这篇,评委还会被上一轮的分数带偏。三次下来,结论是一样的:给 agent 打分,前提是打分这件事本身可信。而可信的前提,是评委的上下文干净。所以动手打分前,先确认评委这一轮看到的,不包含上一次的那个分数。
-- 完 --
机智流推荐阅读:
1.
2.
3.
4.
cc | 大模型技术交流群 hf | HuggingFace 高赞论文分享群 lc|LangChain 技术交流群 code | AI Coding 交流群 具身 | 具身智能交流群 硬件 | AI 硬件交流群 推理 | AI 推理框架交流群 智能体 | Agent 技术交流群