用融合与重排补足“单一路径”的盲点,提升相关性与稳定性。
🎯 文章目标
- 介绍融合检索与重排的常见做法
- 给出 LLM 评分重排与 RRF 融合示例
- 明确取舍与评估维度
📚 背景/前置
- 融合:将 BM25/向量/语义/规则等多路召回结果融合
- 重排:对候选做二次排序,提高最终质量
🔧 核心内容
1) 融合检索(RRF)
- 公式:1/(k + rank)
- 做法:对多路召回结果按排名转分后求和,取 Top-K
2) LLM 评分重排
- prompt:给出问题与片段,让模型输出可比较的分数
- 代价:增加延迟与成本;可用小模型做预筛
💡 实战示例:Node.js RRF
javascript
function rrf(lists, k=60){
const score = new Map()
for (const list of lists){
list.forEach((id, i)=> score.set(id, (score.get(id)||0) + 1/(60 + i)))
}
return [...score.entries()].sort((a,b)=>b[1]-a[1]).map(([id])=>id)
}
📊 对比/取舍(速查)
- 融合:稳健,但实现更复杂
- 重排:效果提升明显,但成本上升
🧪 踩坑与经验
- 评分不一致:需要规范输出范围与格式
- 混合权重:需离线调参与在线 A/B
📎 参考与延伸
- RRF/Reciprocal Rank Fusion
- 交叉编码器/小模型预筛 + LLM 重排
💭 总结
- 在召回不稳或语料异构时,优先尝试“融合 + 重排”,并做好评估成本的权衡