LLM-as-Judge 的 6 种偏置与防御

用 LLM 当判官评估另一个 LLM 的输出,是 prompt 工程的常用做法。但判官本身有 6 种偏置,不防御就会得到假数据。


一句话讲清楚

LLM-as-Judge 不可靠的根本原因,是判官模型的 6 种系统性偏置。识别 + 防御 > 换更强的判官模型。


6 种偏置速查表

偏置表现一句话防御
位置偏置第一个答案总得分高跑两次交换顺序
长度偏置长答案总得分高控制长度 / 加长度惩罚
自我偏置GPT-4 评 GPT-4 给高分换不同模型当判官
风格偏置流畅 > 准确隐藏作者信息盲评
锚定偏置第一个 token 影响后续让判官先生成理由再打分
复杂性偏置复杂答案看起来更专业强制简洁答案加分

每种偏置详解 + 防御代码

1. 位置偏置

表现:把同一对答案交换位置,A/B 评分可能差 20%。

原因:模型对"第一个出现的答案"有注意力优势。

防御

defposition_bias_defense(judge_llm,question,answer_a,answer_b):# 跑两次,交换顺序score_1=judge(judge_llm,question,answer_a,answer_b)score_2=judge(judge_llm,question,answer_b,answer_a)# 取平均,且两次胜者一致才算有效ifscore_1.winner==score_2.winner:returnscore_1.winnerreturn"TIE"# 两次不一致则平局

成本:2x 推理。


2. 长度偏置

表现:长答案(即使废话多)总得分高。

数据:研究显示,长度偏置在 LLM-as-Judge 中可使评分偏差 15-30%。

防御

deflength_bias_defense(judge_prompt):returnjudge_prompt+""" 【长度规则】 - 不要因为答案长就加分 - 信息密度比长度重要 - 如果答案简洁且完整,应给高分 """

或在评分公式里加惩罚:

deflength_penalty_score(answer,base_score,ideal_length=200):length=len(answer)penalty=max(0,(length-ideal_length)/ideal_length*0.2)returnbase_score*(1-penalty)

3. 自我偏置

表现:GPT-4 评 GPT-4 答案,平均比评 Claude 答案高 10-15%。

数据:GPT-4 vs Claude 的对比实验中,GPT-4 评 GPT-4 胜率 65%,但人类评审胜率只有 50%。

防御

# 选判官的核心原则:判官 ≠ 生成# GPT-4 生成 → Claude 评# Claude 生成 → GPT-4 评# 或者多判官投票judges=["gpt-4","claude-opus","gemini-pro"]results=[judge(j,sample)forjinjudges]final_score=majority_vote(results)

反直觉:用最强的模型当判官,反而会放大自我偏置。不如用 3 个中等模型投票


4. 风格偏置

表现:模型偏好"看起来像专业人士写"的答案,但这个答案可能是错的。

防御

defstyle_bias_defense(judge_prompt):returnjudge_prompt+""" 【风格规则】 - 不要被写作风格、修辞、文采影响 - 重点评估:事实准确性 > 逻辑严谨性 > 完整性 - 即使答案粗糙,只要事实正确也应给高分 """

实战技巧:让两个答案去掉格式(去掉 bullet、加粗等)后再评分,屏蔽风格影响。


5. 锚定偏置

表现:判官看了第一个 token 后,后续评分被"锚定"。

数据:实验显示,判官先看到"这个答案是对的"再评分,比先看到"这个答案是错的"再评分,分数高 25%。

防御

# ❌ 错的:先打分再写理由prompt_bad="给答案打分:{score}/10,然后解释"# ✅ 对的:先生成理由再打分prompt_good="""先分析这个答案的优点和缺点(3-5 条),然后基于分析给出分数。 {question} {answer} # 输出格式 优点:<1-3 条> 缺点:<1-3 条> 分数:<0-10> """

机制:先评估内容再打分,避免"快速打分"被首印象锚定。


6. 复杂性偏置

表现:答案里包含复杂句式、专业术语、长推理,看起来更专业 → 得分高。

数据:包含 “however”、“furthermore”、“consequently” 等词的答案,平均得分比简单句高 12%。

防御

defcomplexity_bias_defense(judge_prompt):returnjudge_prompt+""" 【反复杂性偏置规则】 - 用复杂词汇 ≠ 答案更好 - 简单清晰的答案应被鼓励 - 如果答案简洁且完整,应给予额外加分 """

一份生产可用的判官 Prompt

JUDGE_PROMPT="""你是评估助手。你的任务是评估两个答案的质量。 【问题】 {question} 【答案 A】 {answer_a} 【答案 B】 {answer_b} 【评估维度】(按重要性排序) 1. 事实准确性(最重要) 2. 完整性 3. 简洁性 4. 风格 【严格规则】 - 不要被答案长度影响(反长度偏置) - 不要偏向第一个或第二个答案(反位置偏置) - 不要被写作风格、文采影响(反风格偏置) - 不要因为答案复杂就加分(反复杂性偏置) 【输出格式】 优点: - A: <1-3 条> - B: <1-3 条> 缺点: - A: <1-3 条> - B: <1-3 条> 分数:A=X/10, B=Y/10 胜者:A / B / TIE """

关键点:把"反偏置规则"直接写进 prompt。


进阶:多判官投票 + 反偏置组合拳

classRobustJudge:def__init__(self):self.judges=["gpt-4","claude-opus","gemini-pro"]defjudge(self,question,answer_a,answer_b):votes=[]forjudge_modelinself.judges:# 1. 反位置偏置:交换顺序跑两次score_1=self.single_judge(judge_model,question,answer_a,answer_b)score_2=self.single_judge(judge_model,question,answer_b,answer_a)# 2. 取两次一致的结果ifscore_1.winner==score_2.winner:votes.append(score_1.winner)else:votes.append("TIE")# 3. 多判官投票returnmajority_vote(votes)

什么时候 LLM-as-Judge 不够用?

直接换人工

  • 评估维度是主观体验(用户满意度、文案美感)
  • 答案需要领域专家才能判断(医学、法律、金融)
  • 评估用于合规审计(不能错)

判官 + 人工结合

小规模 + 高价值 = 人工 大规模 + 低价值 = LLM-as-Judge 判官有歧义时 = 转人工

一句话总结

LLM-as-Judge 的可靠性 = 反偏置设计 × 多判官投票 × 人工校准

把反偏置规则写进 prompt,比换更强的判官模型有效 10 倍。