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) 之上。它试图通过以下方式克服经典的“词汇不匹配”问题:
- 生成替代查询:使用小型 LLM(每个用户问题生成四个改写)。
- 执行每个查询两次:一次使用关键字 BM25 索引,另一次使用稠密向量索引。
- 合并十个结果列表:使用 Reciprocal Rank Fusion (RRF),奖励在多个列表中排名靠前的文档。
- 可选的重排序:使用交叉编码器或决策模型(例如 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
- 项目
- 项目