过去三周,我花了大部分时间构建 RAG 系统的离线评测流水线。这不是一个光鲜的工作——没有 demo,没有掌声,只有数字和置信区间。但它是必要的。
为什么离线评测这么难
RAG 系统的评测本质上是一个多目标优化问题:召回率、精确率、延迟、成本,还有那个最难以捉摸的——答案质量。线上 A/B 测试太慢,用户反馈太稀疏,人工标注太贵。离线评测是唯一的出路,但陷阱无处不在。
数据集的构建
我从生产日志中抽取了 2,400 条真实问答对,去重、脱敏、过滤掉太简单或太模糊的样本。然后让三个标注者独立打分,取多数意见。一致性 kappa 系数 0.78——不算完美,但可用。
关键洞察:真实查询的分布和人工构造的查询完全不同。真实用户会问"那个东西怎么弄",而不是"请解释向量数据库的工作原理"。你的评测集必须反映这种混乱。
指标的选择
- Recall@10:检索阶段的核心指标
- nDCG:排序质量的衡量
- Faithfulness:生成答案与检索内容的一致性
- Answer Relevance:答案与问题的相关性
我最终选择了 Recall@10 作为北极星指标,因为它简单、可解释、且与端到端效果高度相关(r=0.82)。
统计显著性
这是大多数评测流水线缺失的一环。两个系统的 Recall@10 分别是 0.847 和 0.841,差异显著吗?答案是:取决于你的样本量和方差。
我使用了 paired bootstrap 检验,10,000 次重采样,p<0.05 才认为差异真实存在。这个门槛过滤掉了很多"看起来更好"的虚假改进。
当前状态
Version 2 的 rerank 策略目前领先 baseline 6.4 个百分点,但还在验证期。如果下周数据保持,我会把它推到线上。