RAG 服务每轮检索后对 50 条候选做重排,日均 1.2 万次问答,月度账单里重排模型占 62%,而加了重排的答案采纳率只比对照组高 3 个百分点。

一开始怀疑是「同一问题的重排结果没有缓存,重复付费」,查了一圈,方向不对。

真正麻烦的地方在于,几个原因的现象几乎一样。重排对全量候选调用,向量阶段的低分结果也一起送。也可能是短问题与闲聊也走重排,没有按意图分流。

不容易想到的是,候选数固定 50,和召回质量没有关系。

上来先跑一次带重排与不带的对照实验

python ab_test.py --with-rerank --sample 500 --metric hit

然后把候选从 50 降到 15 再重排

python retrieve.py --topk 15 --rerank

接着按问题指纹缓存重排结果

python -c "import hashlib;print(hashlib.md5('q'.encode()).hexdigest())"

剩下的就是按天统计重排花费占比

python cost_report.py --days 7 --by rerank

恢复的判定其实很直接。重排调用量下降六成以上,答案命中率下降不超过 1 个百分点,成本占比回到 30% 以下,缓存命中率稳定在四成。

这里还有个坑。重排收益随候选质量变化,候选只有十几条时提升有限,先做 A/B 再动参数,别一次全关。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189