用 gpt-4o 做 LLM-as-judge 给三百条回答打一到五分,同一批样本连跑两次,41 条分差达到 2 分,一份报告说新版本更好另一份说更差,裁判提示词里 temperature 没设,评分标准只有一句话,评测结论完全没法用。
把日志和配置对完,能解释这个现象的基本就这几处。裁判调用没设 temperature 默认采样带来随机性;评分标准没有锚点 一分和三分的边界模糊;A 与 B 固定顺序 位置偏好影响判断;每条只打一次分 方差直接进了结论。
上来先把同一批样本跑两遍看分差分布
python judge.py --cases eval.jsonl --model gpt-4o --repeat 2 --out judge2.json
裁判调用固定 temperature 0 并给评分锚点
python judge.py --cases eval.jsonl --temperature 0 --rubric rubric.md
交换 A 和 B 的顺序各打一次再取平均
python judge.py --cases eval.jsonl --swap --out judge_swap.json
剩下的就是统计分差大于一分的比例再决定是否采信
python judge_report.py --input judge_swap.json --max-gap 1
恢复的判定其实很直接。两次打分分差超过一分的比例降到 5% 以下,交换顺序后 A 与 B 的结论保持一致。
提醒一点。裁判也是模型,先固定温度和评分标准再谈分数,否则测到的是采样噪声。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。
