RAG 回归测试与门禁
RAG 是一条多环节流水线:解析切分、向量化、检索、重排、生成,任何一环改动都可能让线上答案变差,而最终答案的质量波动又常常掩盖中间环节的劣化。可行做法是分层回归——每层设自己的代表指标与阈值,变更触发对应的对比报告,任一层超阈就阻断发布。这样既能把问题定位到具体环节,也避免“只看最终答案抽查”带来的高成本与高不确定性。
基本信息
| 分层 | 解析切分 / 检索 / 生成 / 端到端 |
|---|---|
| 触发方式 | 参数、模型、提示词、数据任一变更 |
| 基线管理 | 基线文件版本化并定期更新 |
| 阈值形式 | 相对下降幅度(如召回下降超过 3% 阻断) |
| 产物 | 每层指标对比报告与差异样例 |
典型使用场景
- 换 embedding 模型:先跑检索层回归,确认召回不降再放行到端到端
- 改切分参数:解析切分层回归先看块数与块长分布是否异常
- 调提示词:生成层校验引用合规率与忠实度,防止格式回归
- 升级解析器:切分产物变化会顺延影响检索,需两层一起看
- 定期演练:每周跑一次全量回归,捕捉语料漂移带来的缓慢劣化
门禁命令示例
门禁命令示例
python eval/run.py --all --compare baseline.json \
&& echo 'gates passed' || echo 'regression detected'
# 退出码非零即阻断:CI 里直接卡住发布分层回归对照
| 层 | 代表指标 | 变更触发 |
|---|---|---|
| 解析切分 | 块数、块长分布、抽样首尾 | 解析器或切分参数变更 |
| 检索 | Recall@k、MRR、检索延迟 | 模型、索引、过滤条件变更 |
| 生成 | 忠实度、引用合规率 | 提示词或生成模型变更 |
| 端到端 | 人工抽查通过率、无答案误答率 | 任一环节变更后全跑 |
允许的波动范围要写进门禁配置而不是靠人判断:把“召回下降超过 3% 阻断”这类规则固化下来,才能避免上线压力下的主观放行。