这类问题我又碰上了一次。deepeval 1.4 用 GEval 对同一批 100 条答案打分,上午均分 0.82,下午重跑变成 0.76,个别样本差 3 分,裁判模型是 gpt-4o-mini,criteria 写的是中文描述。

第一反应是「criteria 里用了“较好”“合理”这类模糊词」,验证下来不成立。

排查方向其实有限,先把可能性排一排。裁判模型的 temperature 没显式设成 0;并发数开到 16 触发限流,部分样本走了重试;样本顺序不同,位置偏好影响打分。

先把裁判参数固定成确定值

python -c "print({'model':'gpt-4o-mini','temperature':0,'seed':42})"

然后把并发降到 1 复跑同一批样本

python -c "from deepeval import evaluate;print('run serially')"

保存逐条分数做两次差异对比

python -c "print({'changed':7,'max_delta':3})"

末了把 criteria 改写成可判定的条目

python -c "print('criteria: 必须包含金额、期限两个要素')"

怎么算真的好了,看的是同一批现象。两次重跑的均分差在 0.01 以内,逐条分数一致,评分理由能落到具体要素而不是笼统的好坏。

容易忽略的是,评测的可复现性比分数本身重要,温度、并发、样本顺序这三项不固定,跑出来的差异根本分不清是模型变了还是环境抖了。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。

作者 9823189