ragas 0.2 算 context_precision,200 条样本全是 1.0,人工抽查发现一半检索结果并不相关,dataset 里只放了 question 和 contexts 两个字段。
一开始怀疑是「judge 返回解析失败时默认给了 1」,查了一圈,方向不对。
把日志和配置对完,能解释这个现象的基本就这几处。没有提供 ground_truth,指标退化。还有一种是走了不需要 LLM 的简化版本。
少数情况下是字段名不匹配,指标读到了空值。
上来先检查 dataset 的字段名和缺失率
python -c "import pandas as pd;d=pd.read_json('ds.json');print(d.columns, d.isna().mean())"
补上 ground_truth 并改用 LLM 版本指标
python ragas_eval.py --metric context_precision --llm gpt-4o-mini
再往下打印 judge 的原始输出确认解析正常
python ragas_eval.py --debug-judge --limit 5
剩下的就是抽 30 条人工标注做一致性对照
python compare_eval.py --sample 30 --human labels.csv
别只看报错消失,验证要多做一步。同一条样本的分数不再恒为 1,人工标注与自动打分的相关系数明显上升,缺失字段会直接报错。
提醒一点。检索类指标对输入字段很敏感,缺字段时很多实现会静默退化,评测前先做一次字段和缺失率检查,比看总分有用。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。
