Raudaschl/rag-fusion

RAG-Fusion: multi-query generation + Reciprocal Rank Fusion for better retrieval-augmented generation. Includes evaluation harness with NFCorpus/BEIR.

RAG-Fusion:快速入门指南

它是什么 – RAG-Fusion 是一种研究级的搜索管线,建立在检索增强生成 (RAG) 之上。它试图通过以下方式克服经典的“词汇不匹配”问题:

  1. 生成替代查询:使用小型 LLM(每个用户问题生成四个改写)。
  2. 执行每个查询两次:一次使用关键字 BM25 索引,另一次使用稠密向量索引。
  3. 合并十个结果列表:使用 Reciprocal Rank Fusion (RRF),奖励在多个列表中排名靠前的文档。
  4. 可选的重排序:使用交叉编码器或决策模型(例如 Jev, OpenAI Decisions API)对合并后的候选池进行重新评分,随后将前 5-10 个结果提供给生成式回答模型。

为什么重要 – 额外的改写与混合 BM25 + 向量搜索仅增加了适度的延迟(改写调用约 ≈1.5 秒)与极小的 API 成本(每 1,000 次查询约 ≈$0.06)。在作者针对医学领域 NFCorpus 基准测试的实验中,完整的 Hybrid + Diverse + Rerank 配置将 NDCG@10 提升了约 +0.05(比单纯向量基准提升约 19%),MRR 提升了 +0.09。当以下情况发生时,增益最为显著:

  • 用户的措辞与语料库术语不同,
  • 召回率比精确度更重要,以及
  • 下游系统可以处理简短的检索段落列表(例如合成 LLM 或显示多个候选结果的 UI)。

何时跳过 – 如果您需要亚秒级延迟、拥有严格策划的 FAQ 风格知识库,或是正在搜索代码/标识符(精确匹配占主导地位),额外的计算通常不划算。

如何尝试 – 克隆 repo,安装 Python 依赖项,添加 OpenAI 密钥(可选添加 Jev 密钥),然后执行:

python main.py          # demo end-to-end
python evaluate.py      # run the quantitative benchmark

eval/ 文件夹包含完整的评估工具(数据集加载器、IR 指标、检索变体、重排序器、延迟/成本基准测试以及自助法置信区间工具)。experiments/ 子文件夹包含各种重排序器(Jev, OpenAI Decisions, Microsoft-Decision-1)的详细报告与原始结果,以及 arXiv 论文的复现。

总结 – RAG-Fusion 是一个具体且可重现的方案,用于在低至中等吞吐量、知识密集型的搜索场景中提升检索质量。它证明了廉价的 LLM 驱动查询扩展步骤,结合免费的 BM25 + 向量混合搜索与适度的重排序器,可以在标准 RAG 管线上实现统计学上的显著提升。

相关

  • 项目
  • 项目
  • Dispatch
  • 项目
  • 项目