先看现象。评测跑 1200 条,有 43 条因为上游超时被脚本记成 0 分,整版均分从 86 掉到 79,回滚之后同样位置还是低,才发现是计分逻辑的问题。

把日志和配置对完,能解释这个现象的基本就这几处。超时和内容错误混在同一个分数桶里。还有一种是重试只做了一次,没区分暂时性超时。

还有一种情况,失败样本没有单独统计,直接进了均值。

另外,评测并发开太高,把上游打到限流。

第一件事是按错误类型拆开失败样本

python eval_report.py --file run.json --by error

随后把超时样本重跑而不是记 0

python eval_rerun.py --file run.json --only timeout --retries 3

接着统计有效样本数与均分口径

python -c "import json;d=json.load(open('run.json'));print(len(d))"

降并发到 4 重跑全量确认稳定

python eval_run.py --set golden_500 --concurrency 4

恢复的判定其实很直接。超时样本重跑后全部拿到分数,有效样本 1200 条,均分回到 86,重跑前后同一批样本的分数差在 1 分以内。

补一句。评测里的失败不是 0 分,是缺失数据;把超时单独剔除或重跑,否则一次网络抖动就能得出错误的回滚结论。报错文案容易误导,真正的原因往往在相邻那一层的日志里。

作者 9823189