先看现象。评测跑 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 分,是缺失数据;把超时单独剔除或重跑,否则一次网络抖动就能得出错误的回滚结论。报错文案容易误导,真正的原因往往在相邻那一层的日志里。
