首页 > 教程攻略 > ai资讯 >复旦大学AI团队:检索增强生成最佳实践搜索

复旦大学AI团队:检索增强生成最佳实践搜索

来源:互联网 时间:2026-08-16 20:22:14

复旦大学计算机学院、上海智能信息处理重点实验室的研究团队,最近在检索增强生成(RAG)领域做了一次相当系统的“摸底”工作。论文的署名作者包括吴一心、徐志波、石天远、王正远、李世正、齐谦、尹瑞成、吕昌泽,以及通讯作者郑晓晴和黄选静。团队通过大量实验,试图回答一个很实际的问题:在这么多RAG方法和模块组合中,到底哪一套方案最值得落地?

说实话,RAG这个概念现在几乎成了大语言模型落地的标配——它能有效整合最新信息,减少幻觉,提升专业领域的回答质量。但问题在于,一个完整的RAG工作流涉及查询分类、文档分块、向量检索、重排序、文档重装、摘要生成等多个步骤,每个步骤又有多种实现方式。很多团队在搭建RAG系统时,往往是凭着感觉或者拼凑经验来选方案,缺少一个全局的、经过系统对比的“最佳实践指南”。这篇论文正好补上了这个缺口。

研究团队的做法很务实:先对每个RAG模块分别做方法对比,选出现有方案中表现最好的两三种;然后固定其他模块,逐个替换模块来测试对整体效果的影响;最后,根据不同的需求场景(性能优先还是效率优先),给出推荐的组合方案。此外,他们还把多模态检索技术引入了RAG流程,验证了“检索即生成”策略在视觉问答和内容生成上的加速效果。

为了方便复现和后续研究,论文相关的资源和代码已经开源,感兴趣的读者可以访问GitHub仓库:https://github.com/FudanDNN-NLP/RAG。

1 简介

大语言模型虽然强大,但很容易生成过时信息或捏造事实——即使经过了RLHF或类DPO的对齐训练,这个问题依然存在。RAG通过结合预训练模型和检索模型,提供了一个很实用的框架:它不需要更新模型参数,只需提供与查询相关的文档,就能快速部署到特定领域。

但RAG流程本身很“啰嗦”。典型的管线包括:

查询分类

(判断要不要检索)、

检索

(高效获取相关文档)、

重排序

(细化文档相关性顺序)、

文档重装

(把文档整理成有利于生成的结构)、

摘要

(提取关键信息并去冗余)等模块。此外,还有文档分块策略、嵌入模型选择、向量数据库选型、检索器与生成器微调等一系列决策。每一步都有多种方法可选,不同组合对系统性能和效率的影响差异巨大。

然而,迄今为止,还没有人对整个RAG工作流做过系统性的最佳实践探索。这篇论文正是为此而来。由于组合爆炸,他们采取了三步走策略:第一步,对每个模块的代表性方法进行横向对比,选出最好的一到三种;第二步,逐个替换模块,保持其他模块不变,观测对整体RAG性能的影响,从而确定每个模块的最优方法;第三步,基于发现,推荐适用于不同场景的几种组合方案。

研究的核心贡献有三点:

  • 通过大规模实验,系统调查了现有RAG方法及组合,推荐了最佳实践。
  • 引入了一套综合评估框架,涵盖通用能力、专业领域能力以及RAG专属能力(忠实度、上下文相关性、答案相关性等)。
  • 展示了多模态检索技术对视觉问答的提升效果,并通过“检索即生成”策略加速多模态内容生成。

2 相关工作

2.1 查询和检索转换

要想检索效果好,查询本身必须准确、清晰、详细。即使转换为嵌入表示,查询与文档之间的语义差异仍然存在。早期研究尝试通过查询转换来丰富信息:比如Query2Doc和HyDE从原始查询生成伪文档来增强检索,TOC则将查询拆成子查询再聚合结果。

另一种思路是转换检索源文档。LlamaIndex提供了为检索文档生成伪查询的接口,帮助匹配真实查询。还有研究采用对比学习,把查询和文档的嵌入在语义空间里拉近。检索后的文档也需要后处理——比如分层提示摘要、抽取式与生成式压缩器来减少长度并去除冗余。

2.2 检索增强策略

文档分块和嵌入方法对检索性能影响很大。常见的分块策略是按固定长度切分,但最佳块长度很难确定:太小会破坏句子,太大则可能包含无关内容。LlamaIndex优化了分块方法,类似Small2Big和滑动窗口。检索到的块不一定都相关,数量也可能很多,这时就需要重排序来过滤。常见的重排序方法使用BERT、T5或LLaMA这类深度语言模型,虽然推断慢但效果好。TILDE则通过预计算查询词项的可能性来提升效率。

2.3 检索器和生成器的微调

在RAG框架中微调对优化两个核心组件至关重要。一些研究侧重微调生成器,让它更善于利用检索来的上下文,保证生成内容忠实且稳健。另一些则微调检索器,让它学会检索生成器真正需要的段落。整体方法将RAG视为一个集成系统,同时微调检索器和生成器以增强整体性能,但这也增加了复杂性和整合难度。

目前已有几篇综述全面讨论了RAG系统,覆盖文本生成、与LLM集成、多模态和AIGC等方向。但综述归综述,在实际实施中选择合适算法仍然很棘手。这篇论文的重点,就是给出可操作的最佳实践。

3 RAG 工作流程

下面详细介绍RAG工作流的各个组件。对于每个模块,我们会回顾常用方法,并选定默认和备选方案。第4节将讨论最终的最佳实践。图1展示了整个工作流和各模块的可选方法。详细的实验设置(包括数据集、超参数和结果)见附录A。

3.1 查询分类

并非所有查询都需要检索增强——LLM自身有内在能力。RAG虽然能提高准确率并减少幻觉,但频繁检索会增加响应时间。所以,先对查询分类,决定要不要走检索流程。需要检索的就走RAG模块,否则直接由LLM处理。

那么,哪些查询需要检索?通常,当查询需要超出模型参数存储的知识时才推荐检索。但检索的必要性因任务而异。例如一个2023年训练的LLM,处理“Sora是由OpenAI开发的”这个翻译请求不需要检索;但如果是介绍Sora的请求,则可能需要检索。

我们提议按任务类型来分类,看信息是否充分。具体分类如图2所示:对于完全基于用户提供信息的任务(标记为“充分”),不需要检索;否则标记为“不充分”,可能需要检索。我们训练了一个分类器来自动化这个决策过程。表1展示了分类器的结果。第4节将探究查询分类对工作流的影响,对比有分类和无分类两种情况。

3.2 分块

文档分块成更小的段落,对提高检索精度、避免LLM长度问题至关重要。分块可以在不同粒度上进行:Token级分块直观但可能分割句子;语义级分块利用LLM确定断点,保持上下文但耗时;句子级分块平衡简洁性和语义保留。本研究采用句子级分块。

3.2.1 块大小

块大小显著影响性能。更大的块提供更多上下文,增强理解但增加处理时间;更小的块提高检索召回率、减少时间,但可能缺乏上下文。我们根据所选语料库生成了约170个查询,不同块大小的影响如表3所示。

3.2.2 分块技术

高级技术如Small2Big和滑动窗口,通过组织块块关系来提高检索质量。先使用小块匹配查询,再返回包含小块和上下文的大块。我们使用LLM-Embedder模型作为嵌入模型,小块大小175个标记,大块512个标记,重叠20个标记。详细结果见表4。

3.2.3 嵌入模型选择

选对嵌入模型对语义匹配非常关键。我们使用FlagEmbedding的评估模块,使用数据集namespace-Pt/msmarco作为查询、namespace-Pt/msmarco-corpus作为语料库,来挑选开源模型。如表2所示,LLM-Embedder与BAAI/bge-large-en效果相当,但前者尺寸是后者的三倍,所以我们选择了前者。

3.2.4 元数据添加

给分块增加元数据(如标题、关键词、假设问题)可以改善检索,提供更多后续处理方式,帮助LLM更好地理解信息。元数据包含的详细研究留待未来。

3.3 向量数据库

向量数据库存储带有元数据的嵌入向量,通过各种索引和近似最近邻方法实现高效检索。表5比较了五种开源向量数据库:Wea viate、Faiss、Chroma、Qdrant和Milvus。评估表明,Milvus在满足所有基本标准上脱颖而出,优于其他选项。

3.4 检索方法

我们考察了三种检索方法:查询重写(受Rewrite-Retrieve-Read框架启发,提示LLM重写查询)、查询分解(根据原始查询产生的子问题检索文档)、生成伪文档(基于用户查询生成假设文档,用假设答案的嵌入检索类似文档,典型实现是HyDE)。

最近的研究表明,词汇搜索与向量搜索的结合能显著提升性能。我们使用BM25进行稀疏检索,使用Contriever进行稠密检索,作为两个强基准。

3.4.1 不同检索方法的结果

混合搜索(结合稀疏检索BM25和稠密检索原始嵌入)在相对较低的延迟下取得了显著性能。

3.4.2 使用不同文档和查询连接的HyDE

表7展示了HyDE中采用不同连接策略的影响。将多个伪文档与原始查询连接可以显著增强检索性能,尽管会增加延迟。但不加选择地增加伪文档数量并不带来显著好处,反而大幅增加延迟,使用单个伪文档就够了。

3.4.3 使用不同权重进行稀疏检索的混合搜索

表8展示了混合搜索中不同α值的影响(α控制稀疏和稠密检索的权重,相关性分数计算公式为Sh = α·Ss + Sd)。评估了五个α值,发现α=0.3时表现最佳,因此选为默认值。

3.5 重新排序方法

初始检索后,重排序阶段用来增强文档相关性,确保最相关信息排在前面。这个阶段使用更精确但更耗时的方法。我们考虑了两种方法:DLM重排序(利用分类,如monoT5、monoBERT、RankLLaMA)和TILDE重排序(侧重于查询可能性,效率更高)。

实验在MS MARCO Passage排名数据集上进行。结果见表9。推荐monoT5作为性能与效率平衡的方案;RankLLaMA适合追求最佳性能;TILDEv2适合固定集合中追求最快速度。

3.6 文档重装

重排序后文档的顺序会影响后续LLM响应生成。我们加入了一个紧凑的重打包模块,包含三种方法:“前向”(按相关性降序)、“逆向”(升序)和“两侧”(受Liu等人启发,在输入头部或尾部放置相关信息效果最佳)。由于重打包主要影响后续模块,我们在第4节通过组合测试来选择。本节默认选用“两侧”方法。

3.7 总结

检索结果可能包含冗余信息,长提示也会减慢推理。因此摘要模块很重要。我们评估了Recomp(包含抽取式和生成式压缩器)、LongLLMLingua(聚焦关键信息)和Selective Context(基于信息量去冗余)。在NQ、TriviaQA和HotpotQA上评估,推荐Recomp。

3.8 生成微调

本节专注于对生成器进行微调,检索器微调留待未来。我们用Llama-2-7B作为基础模型,通过改变上下文组成(仅相关文档、仅随机文档、相关+随机、两份相关文档)来训练不同模型,并在验证集上评估。结果表明,混合相关和随机文档训练的模型(Mgr)表现最佳——这能增强对无关信息的鲁棒性,同时有效利用相关上下文。因此最佳实践是:训练时增加几篇相关且随机选择的文档。

4 寻找最佳的RAG实践

接下来系统研究最佳实践。先使用第3节确定的每个模块的默认设置,然后按照图1的工作流,逐个优化模块,从各种选择中挑出最有效的选项。迭代直到确定最终摘要模块的最佳方法。根据第3.8节,使用微调后的Llama2-7B-Chat模型,每个查询增强几篇随机选择的相关文档。

4.1 综合评价

实验覆盖多种NLP任务和数据集:常识推理(MMLU、ARC-Challenge、OpenbookQA)、事实核查(FEVER、PubHealth)、开放域问答(NQ、TriviaQA、WebQuestions)、多跳问答(HotpotQA、2WikiMultiHopQA、MuSiQue)、医学问答(PubMedQA)。此外还根据RAGAs指标评估了RAG能力(忠实度、上下文相关性、答案相关性、答案正确性),并计算检索文档与黄金文档的余弦相似度。

常识推理、事实核查和医学问答使用准确率,开放域问答和多跳问答使用F1和EM分数。最终RAG得分是上述五个RAG能力的平均值。每个数据集抽样最多500个示例。

4.2 结果与分析

根据表11的实验结果,得出以下关键见解:

查询分类模块:

该模块对效果和效率都有贡献,整体得分从0.428提高到0.443,每次查询延迟从16.41秒降至11.58秒。

检索模块:

“Hybrid with HyDE”方法获得了最高RAG得分0.58,但每次查询需要11.71秒。推荐“Hybrid”或“Original”方法,延迟更低且性能可比较。

重排序模块:

缺乏重排序导致性能明显下降。monoT5取得最高平均分,证实了其在增加相关性和提升生成质量上的关键作用。

重打包模块:

反向配置表现优异,RAG得分0.560,说明把更相关的上下文靠近查询会带来最佳结果。

摘要模块:

Recomp表现优越,尽管移除摘要也可以实现更低延迟的可比结果。但Recomp能处理生成器的最大长度限制,所以仍是首选。时间敏感的应用中,移除摘要可有效减少响应时间。

每个模块的贡献独特:查询分类提高准确性降低延迟,检索和重排序显著提升处理不同查询的能力,重打包和摘要进一步完善输出。

5 讨论

5.1 实施RAG的最佳实践

根据实验结果,我们推荐两种不同的配方:一种侧重最高性能,另一种侧重效率和功效的平衡。

最佳性能实践:

加入查询分类模块,使用“Hybrid with HyDE”进行检索,使用monoT5重排序,选择Reverse重打包,使用Recomp摘要。这种配置虽然计算密集,但能获得最高平均得分0.483。

5.2 多模态扩展

多模态检索有三大优势:植根性(检索来自已验证的多模态材料,确保真实性)、效率(答案已存在时更高效)、可维护性(通过扩大检索源规模改进,无需仔细调整模型)。我们计划将这种策略扩展到视频和语音,并探索高效跨模态检索技术。

6 结论

本研究旨在确定RAG的最佳实践,以提高LLM生成内容的质量和可靠性。我们系统评估了RAG框架中每个模块的潜在方案,推荐了最有效的方法,并引入了综合评估基准。实验发现不仅有助于深入理解RAG系统,也为未来研究奠定了基础。

7 限制条件

我们已评估了多种微调LLM生成器的方法。先前研究证明了联合训练检索器和生成器的可行性,希望未来探索。本研究采用模块化设计简化了寻找最佳实践的过程,降低了复杂性。由于构建向量数据库和实验成本巨大,我们仅在分块模块中研究了代表性技术。进一步探索不同分块技术对整体RAG系统的影响将是有趣挑战。虽然我们将RAG扩展到图像生成,未来还应拓展到语音和视频等模态。

8 致谢

作者感谢匿名审稿人提供的宝贵意见。本工作得到中国国家自然科学基金资助(项目编号:62076068)。

9 参考文献

(此处保留原文参考文献列表,因篇幅关系省略具体内容,但原样保留所有引用。)

A 实验细节

本节提供每个模块的详细实验设置,包括数据集信息、训练参数及额外实验结果。

A.1 查询分类

数据集:

我们使用了Databricks-Dolly-15K的一个子集,并利用GPT-4生成了额外数据。表14显示生成问题的提示模板。

实现细节:

选择BERT-base-multilingual-cased作为分类器,batch size为16,学习率为1e-5。表1展示了评估结果。

A.2 检索方法的实验细节

数据集:

使用TREC DL 2019和2020段落排序数据集评估不同检索方法。

评估指标:

使用mAP、nDCG@10、R@50、R@1k以及平均延迟。mAP和nDCG@10是顺序感知指标,R@k不感知顺序。

实现细节:

稀疏检索使用BM25,密集检索使用Contriever作为无监督编码器。基于嵌入模型评估,使用LLM-Embedder实现监督密集检索。使用Pyserini的默认实现。BM25索引在MS MARCO集合上用Lucene构建,密集向量索引用Faiss Flat配置生成。查询重写使用Zephyr-7b-alpha,查询分解使用GPT-3.5-turbo-0125,HyDE实现使用GPT-3.5-turbo-instruct生成假设答案(温度0.7,最多采样512 tokens)。检索实验和评估使用Pyserini。

A.3 重排方法的实验细节

数据集:

MS MARCO Passage排名数据集,包含超过880万个段落和100万个查询。训练集约3.98亿个查询-段落元组,开发集6980个查询(与BM25检索结果配对,保留前1000名候选段落)。

评估指标:

MRR@1、MRR@10、MRR@1k、Hit Rate@10。MRR@10是官方指标。

实现细节:

修改PyGaggle和TILDE的实现。基于T5-base的monoT5、BERT-large的monoBERT、Llama-2-7b的RankLLaMA,以及基于BERT-base的TILDEv2。输入一般检索50个文档,重排序和重打包后通过top-k或相关性分数阈值进一步聚焦。

结果分析:

所有重排序方法均显著提升性能。monoT5和monoBERT表现相当,RankLLaMA最佳但延迟最高,TILDEv2最快(每查询10-20ms)但牺牲性能,且要求重排序段落必须与索引集合完全相同,新段落需要重新预处理。

A.4 摘要方法的实验细节

评估指标:

F1分数和摘要后改变的标记数(衡量简洁性)。

实现细节:

使用Llama3-8B-Instruct作为生成模型,摘要比例0.4。抽取式方法按重要性分数保留句子;生成式方法通过比例控制最大长度。在NQ测试集、TriviaQA测试集和HotpotQA开发集上进行。

A.5 生成器微调实验细节

数据集:

在ASQA、HotpotQA、NarrativeQA、NQ、SQuAD、TriviaQA、TruthfulQA上微调。使用训练集,对于大数据集随机采样部分条目。评估集使用ASQA、HotpotQA、NQ、TriviaQA的验证集或手动拆分。dgold使用数据集提供的文件,drandom从同一数据集的不同条目中抽样以保证分布相似。

实现细节:

选择Llama-2-7b作为基础模型,使用LoRA和int8量化提高效率。提示模板主要遵循Lin等人的方法。训练3个epoch,最大序列长度1600,batch size 4,学习率5e-5。测试阶段使用零样本设置。

详细结果:

表12显示了每个数据集的评估结果。

A.6 综合评估的实验细节

任务和数据集:

常识推理(MMLU、ARC-Challenge、OpenbookQA)、事实核查(FEVER、PubHealth)、开放域问答(NQ、TriviaQA、WebQuestions)、多跳问答(HotpotQA、2WikiMultiHopQA、MuSiQue,其中MuSiQue仅关注可回答的两跳问题)、医学问答(PubMedQA)。每个数据集从测试集随机抽样500条,无测试集的用开发集代替。

RAG能力评估:

从NQ、TriviaQA、HotpotQA、2WikiMultiHopQA、MuSiQue中均匀收集共500个三元组(问题,黄金文档,黄金答案)。使用来自RAGAs的四个指标:忠实度、上下文相关性、答案相关性、答案正确性。忠实度衡量生成答案与检索上下文的事实一致性;上下文相关性评估检索上下文与原始查询的相关性;答案相关性评估生成答案与查询的相关性;答案正确性评估与标准答案的准确性。指标通过RAGAs框架评估,GPT-4充当评判者。

检索相似度:

计算检索文档与目标文档之间的余弦相似度。

生成设置:

开放域问答和多跳问答最大新标记100,其他任务50。过长的检索文档(评估RankLLaMA和LongLLMLingua时)截断为2048单词。所有任务使用贪婪解码,零样本评估。对多项选择和事实核查任务,用正则表达式匹配模型输出中的答案。