问题出现得很突然,日志倒是留得挺全。inspect-ai 0.3 里自定义 scorer,函数返回 {'accuracy': 0.8},跑 eval 时报返回值类型错误,一条样本都没跑完,改成返回 float 就正常。

刚开始盯着「异步 scorer 返回了协程但没有 await」,折腾了半个多小时,排掉了。

真正麻烦的地方在于,几个原因的现象几乎一样。scorer 需要返回 Score 对象而不是裸 dict。少数情况下是旧版示例里的 value 字段在新版已经改了语义。

少数情况下是多指标时键名与注册的 metric 名不一致。

第一件事是打印返回值的实际类型

python -c "print(type(0.8), type({'accuracy':0.8}))"

然后改用 Score 对象返回

python -c "from inspect_ai.scorer import Score;print(Score(value=0.8))"

注册指标名后重跑单条样本

python -m inspect_ai eval task.py --limit 1

异步 scorer 补上 await 再验证

python -m inspect_ai eval task.py --limit 5

这类改动我都写进变更记录,过两周再出问题时能对上号。

别只看报错消失,验证要多做一步。eval 正常结束,指标名出现在结果表里,分数与手工计算一致。

补一句。评测框架对返回值类型卡得严,升级后先跑 limit 1,比整批跑完再排错快得多。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。

作者 9823189