这类问题我又碰上了一次。RAG 问答上线前评测集 200 条全部通过,上线三天差评率从 4% 涨到 9%。抽查差评发现集中在多轮追问和表格类问题,而评测集几乎全是单轮事实问答,其中 60 条还是从训练语料里挑的。评测脚本用 ragas 0.2,相似度阈值固定 0.8。

第一反应是「只有单轮样本,多轮改写和追问链路没测到」,验证下来不成立。

把日志和配置对完,能解释这个现象的基本就这几处。评测集分布和线上真实流量偏离,长尾问题没覆盖;样本取自模型见过的语料,指标天然偏高;阈值一刀切,长答案和短答案用同一把尺子。

从线上日志按问题类型分层抽样

python sample_logs.py --file logs/qa.jsonl --n 300 --stratify intent --out eval_new.jsonl

然后把差评会话整理成回归用例

python build_cases.py --bad feedback.csv --out cases_bad.jsonl

新旧两版在同一用例集上配对跑分

python eval_run.py --cases eval_new.jsonl --out run_v2.jsonl

剩下的就是按问题类型分别设阈值而不是统一 0.8

python eval_report.py --by intent --thresholds thresholds.yml

恢复的判定其实很直接。新评测集对差评样本的失败召回率超过 80%,两版对比结论与线上差评方向一致,重复跑两次结果稳定。

补一句。评测集要跟着线上流量更新,单轮全绿说明不了多轮和长文档;样本一旦进了训练数据就得换一批。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。

作者 9823189