Skip to content

用融合与重排补足“单一路径”的盲点,提升相关性与稳定性。

🎯 文章目标

  • 介绍融合检索与重排的常见做法
  • 给出 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 重排

💭 总结

  • 在召回不稳或语料异构时,优先尝试“融合 + 重排”,并做好评估成本的权衡