先把当时的情况摆出来。重排接口按传入文档条数计费,为了提召回把 top_k 从 20 提到 60,rerank 费用从每月 900 涨到 2700,人工评估的答案质量只涨了 2 个点。

把日志和配置对完,能解释这个现象的基本就这几处。计费按传入文档数线性增长。也可能是召回扩大直接抬高了每次请求的成本。

另外,没有先做粗排截断。少数情况下是同一批文档被重复送去重排。

上来先统计每次请求实际传入的文档数

python -c "import json;rows=[json.loads(l) for l in open('rerank.jsonl')];print(sum(len(r['docs']) for r in rows))"

接着用向量粗排截到 30 条再重排

python -c "print({'stage1':60,'stage2':30})"

再往下对比 top20 与 top60 的答案质量差异

python eval_quality.py --a top20.json --b top60.json

等前面都确认过,再按每千条文档的单价比对月度成本

python -c "print(2700/900, 2.0)"

别只看报错消失,验证要多做一步。月度重排费用回到 1100 左右,答案质量指标与 top60 相差不到 0.5 个点。

重排越贵越要控制候选数量,粗排多花的那点向量检索成本,远低于无脑扩大 top_k 的重排账单。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。

作者 9823189