先把当时的情况摆出来。同一版提示词连跑两次回归,第一次 84.2 分,第二次 78.5 分,团队按第二次的结论回滚了一个本来没问题的改动。
排查方向其实有限,先把可能性排一排。解码没有固定 seed,采样结果每次不同。另一种情况是评测集每次随机打乱顺序,长尾样本位置变化。
还有一种情况,并发执行导致同一样本拿到的上下文不同。另外,没有记录每条的原始输出,无法复核。
动手时先确认评测是否传了固定 seed
python -c "print({'seed':42,'temperature':0.2})"
固定顺序与 seed 后连跑三次
for i in 1..3; do python eval_run.py --set golden_500 --seed 42 --out run_$i.json; done
随后对比三次逐条结果的差异条数
python diff_runs.py --a run_1.json --b run_2.json --c run_3.json
末了把固定项写进评测脚本默认参数
python -c "print('defaults: seed=42, shuffle=false')"
恢复的判定其实很直接。三次跑分的极差控制在 0.8 分以内,逐条结果差异条数低于 3%,任何一版改动的效果都能被稳定复现。
评测的随机性要压到比待测改动更小,seed、顺序、并发都得固定;跑一次就下结论的回归,等于在噪声里做决策。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。
