热门搜索:和平精英 原神 街篮2 

您的位置:首页 > > 教程攻略 > ai资讯 >检索增强生成(RAG)技术方法流程最佳实践实验探索

检索增强生成(RAG)技术方法流程最佳实践实验探索

来源:互联网 更新时间:2026-08-18 14:16

检索增强生成(RAG),说白了,就是用来给大语言模型“补课”的——补最新信息、补特定领域知识,还能顺便治治模型爱“编瞎话”的毛病。效果确实不错。但问题是,很多RAG方案搞得太复杂,响应时间也跟着拉长了。一个标准的RAG工作流往往要串起好几个处理环节,每个环节又有不同的实现方式。

这篇文章的核心任务,就是把现有的RAG方法以及它们可能的组合方式摸个底,看看哪些才是真正好用的。我们做了大量的实验,最终总结出几套部署策略,能在性能和效率之间找到平衡点。另外,我们还展示了多模态检索技术如何让模型更好地理解图片信息,以及如何用“检索即生成”的思路来加速多模态内容的产出。

检索增强生成(RAG)技术方法流程最佳实践实验探索

1 引言

大语言模型生成的内容,要么过时,要么干脆是凭空捏造的——即便它们通过强化学习或一些轻量级方案进行了对齐。RAG技术之所以能火,就是因为它把预训练和检索这两套思路的优势结合了起来,给模型搭了个更结实的框架。而且,RAG最大的好处是:不用重新训练模型参数,只要有相关的文档库,就能快速给特定组织或领域部署应用。

市面上已经有不少RAG方法了,它们通过依赖查询的检索来增强大模型的能力。一个典型的RAG工作流通常包含好几个环节:先得判断查询要不要检索(查询分类),然后去文档库里找(检索),把找出来的文档按相关性排个序(重排),再整理一下顺序(重新打包),最后摘出关键信息来生成回答(摘要)。此外,还要考虑怎么把文档切成合适的块、用什么嵌入模型来表示这些块、以及怎么微调大模型等问题。

难点在于,每个环节的实现方式都五花八门。比如检索这一步,你可以先改写查询再检索,也可以先生成一个伪答案再去查相似文档,或者直接用对比学习训练好的嵌入模型。不同的选择以及它们的组合方式,会极大地影响整个RAG系统的效率和效果。坦率地讲,目前还没有人系统性地研究过,到底怎么做才能把RAG的效果推到最优。

在这项研究中,我们希望通过大量的实验来找到RAG的最佳实践。因为把所有可能的组合都测一遍不现实,所以我们分了三步走:首先,每个环节选出最有代表性的几种方法(最多三种);然后,一次只换一个方法,固定其他模块,看它对整体性能的影响,同时考察它与其他模块的交互效果;最后,再针对不同的应用场景,找出那些既高效又好用的组合。基于这些发现,我们总结出了几套能在性能和效率之间取得平衡的部署策略。

这项研究的贡献主要有三点:

  • 通过大量实验,彻底调查了现有RAG方法及其组合,找出了最优实践。
  • 建立了一套综合评估指标和相应的数据集,能全面评估RAG模型在通用、专业和RAG相关能力上的表现。
  • 展示了多模态检索技术如何大幅提升对视觉输入的问答能力,并通过“检索即生成”策略加快多模态内容的生成速度。

2 相关工作

确保大语言模型输出的准确性是头等大事。但光靠把模型规模做大,解决不了根本问题,尤其是在知识密集型任务和专业领域。RAG通过从外部知识库检索相关文档,给模型提供了准确、实时、特定领域的上下文。之前的工作主要是通过查询和检索转换、增强检索器性能、以及微调检索器和生成器来优化RAG流程。

2.1 查询和检索转换

要检索效果好,查询本身得准确、清晰、详细。但即便转成了嵌入,查询和相关文档之间也可能存在语义上的偏差。之前的一些工作,比如Query2Doc和HyDE,通过从原始查询生成伪文档来增强检索;TOC则把查询拆成子查询,汇总检索结果。另一些研究则聚焦在转换检索源文档上。LlamaIndex提供了为检索文档生成伪查询的接口,提高了与真实查询的匹配度。对比学习也被用来把查询和文档的嵌入在语义空间中拉近。对检索到的文档做后处理也是一种增强思路,比如分层提示摘要、使用抽象式和提取式压缩器来减少上下文长度、消除冗余。

2.2 检索器增强策略

文档怎么切块、用什么嵌入,这两件事对检索性能影响很大。常见的切块策略是把文档切成小块,但怎么确定最佳的长度确实有点棘手——太小了会切碎句子,太大了又会带进不相关的上下文。LlamaIndex优化了诸如Small2Big和滑动窗口这些切块方法。检索回来的块可能不相关,数量也可能太多,所以需要重新排序来过滤掉不相关的。一种常见的重排方法是直接用BERT、T5或LLaMA这样的深度语言模型来做,效果更好,但推理速度慢。TILDE则通过预先计算和存储查询项的可能性来提高效率,根据它们的总和对文档排序。

2.3 检索器和生成器微调

在RAG框架内进行微调,对优化检索器和生成器都至关重要。一些研究专注于微调生成器,让它更好地利用检索来的上下文;另一些则微调检索器,让它学会检索对生成器更有用的段落;整体方法则将RAG看作一个集成系统,同时微调检索器和生成器来提升整体性能,不过这会增加复杂度和集成难度。

几篇综述文章已经广泛讨论过当前的RAG系统,但选择可用的算法仍然是个挑战。在这篇文章里,我们聚焦于应用RAG方法的最佳实践,目标是推进对RAG的理解和应用。

3 RAG工作流程

这一节详细介绍RAG工作流的各个组成部分。对每个模块,我们回顾了常用的方法,并为最终的流程选定了默认和备选方案。第4节会讨论最佳实践。

3.1 查询分类

并不是所有查询都需要检索增强。RAG虽然能提升信息准确性、减少幻觉,但频繁检索会增加响应时间。所以,先对查询进行分类,判断是否需要检索。需要检索的走RAG流程,其他的直接由大模型处理就好。

通常,当任务需要模型参数之外的知识时才需要检索。但检索的必要性因任务而异。比如,一个训练数据截止到2023年的模型,处理“Sora由OpenAI开发”这样的翻译请求就用不着检索;但如果是介绍Sora,那就得检索才能提供相关信息。

因此,我们提出按任务类型来分类,决定是否需要检索。根据任务是否完全依赖用户提供的信息,我们把15个任务分成了“足够”和“不足”两类(见图2)。我们训练了一个分类器来自动化这个决策过程。第4节会探讨查询分类对工作流的影响,比较有分类和无分类两种场景。

3.2 分块

把文档切成小块对于提高检索精度、避免大模型处理长文本时出问题很有必要。切块可以在不同的粒度上进行,比如标记级、句子级和语义级。

  • 标记级最简单,但可能会拆分句子,影响检索质量。
  • 语义级用大模型来定断点,保住了上下文,但太耗时。
  • 句子级在保留语义和简单高效之间取得了平衡。

在这项研究中,我们用了句子级分块,平衡了简单性和语义保留。我们从四个维度来审视分块。

3.2.1 分块大小

分块大小对性能影响很大。块越大,上下文越丰富,理解越到位,但处理时间也越长。块越小,检索召回率更高、时间更短,但可能上下文不足。最佳分块大小需要在忠实度和相关性这些指标之间找平衡。

3.2.2 分块技术

像“小到大”和“小滑动窗口”这些高级技术,通过组织块与块之间的关系来提升检索质量。具体来说,是先用小块去匹配查询,然后返回包含小块及上下文信息的大块。我们用LLM-Embedder模型做了实验,小块设为175个标记,大块512个标记,重叠20个标记。这些技术通过保留上下文、确保检索到相关信息,确实提升了效果。

3.2.3 嵌入模型选择

选择合适的嵌入模型,对实现查询和块之间的有效语义匹配至关重要。我们用了FlagEmbedding的评估模块来挑选合适的开源嵌入模型。结果表明,LLM-Embedder与BAAI/bge-large-en成绩相当,但前者大小是后者的三倍。所以我们选了LLM-Embedder,因为它性能和体积都还行。

3.2.4 元数据添加

通过给块添加标题、关键词和假设问题这类元数据,可以改善检索,提供更多的后处理方式,并帮助大模型更好地理解检索到的信息。关于元数据的详细研究,留到以后再做。

3.3 向量数据库

向量数据库用来存储嵌入向量及其元数据,通过各种索引和近似最近邻方法,实现对查询相关文档的高效检索。为了选出合适的向量数据库,我们根据四个关键标准评估了几个选项:多种索引类型、十亿规模向量支持、混合搜索和云原生能力。表5详细对比了Wea viate、Faiss、Chroma、Qdrant和Milvus这五个开源向量数据库。我们的评估表明,Milvus在各方面都最为全面。

3.4 检索方法

给定用户查询,检索模块根据查询和文档之间的相似度,从预构建的语料库中选出前k个相关文档。然后生成模型用这些文档来制定响应。但原始查询往往表达不好、缺乏语义信息,会负面影响检索过程。为了解决这些问题,我们用LLM-Embedder作为查询和文档编码器,评估了三种查询转换方法:查询重写、查询分解和伪文档生成(HyDE)。

近期研究表明,把词汇搜索和向量搜索结合起来可以显著提升性能。在这项研究中,我们用了BM25做稀疏检索,Contriever做密集检索。表6的结果显示,监督方法明显优于无监督方法。结合HyDE和混合搜索,LLM-Embedder取得了最高分。不过,查询重写和查询分解并没有带来预期的提升。综合考虑最佳性能和可接受的延迟,我们推荐把HyDE与混合搜索作为默认检索方法。如果更看重效率,混合搜索已经结合了稀疏检索(BM25)和密集检索(原始嵌入),延迟相对较低,性能也不错。

3.4.1 不同检索方法的结果

我们在TREC DL 2019和2020段落排名数据集上评估了不同搜索方法的性能。表6的结果显示,监督方法显著优于无监督方法。结合HyDE和混合搜索,LLM-Embedder取得了最高分。但查询重写和查询分解并没有像预期那样增强检索性能。考虑到最佳性能和可接受的延迟,我们推荐将HyDE与混合搜索作为默认检索方法。如果更看重效率,混合搜索结合了稀疏检索(BM25)和密集检索(原始嵌入),延迟较低,性能也不错。

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

表7显示了使用HyDE时,假设文档和查询的不同连接策略的影响。把多个伪文档与原始查询连接起来可以显著提高检索性能,虽然延迟会增加,这体现了一种权衡。但无限制地增加假设文档数量并不会带来显著好处,反而大幅提高延迟,这说明一个假设文档就够了。

3.4.3 混合搜索中稀疏检索的不同权重

表8展示了混合搜索中不同α值的影响,α控制稀疏和密集检索之间的权重。我们评估了五种α值,结果表明α=0.3时性能最佳,说明适当调整α可以在一定程度上优化检索效果。因此我们选择α=0.3。

3.5 重新排序方法

初始检索后,需要重新排序来增强检索文档的相关性,确保最相关的内容排在前面。这个阶段用更精确但耗时的方法来重新排序。我们考虑了两类方法:DLM重排(利用分类)和TILDE重排(侧重于查询可能性)。

  • DLM重排:利用深度语言模型,微调后把文档与查询的相关性分成“真”或“假”,推理时按“真”的概率排名。
  • TILDE重排:通过预测每个查询项的可能性来打分,允许快速重排。

我们在MS MARCO段落排名数据集上做了实验,使用了monoT5、monoBERT、RankLLaMA和TILDEv2模型。表9的结果表明,monoT5在性能和效率之间平衡得不错。RankLLaMA追求最佳性能,TILDEv2则适合在固定集合上快速上手。

3.6 文档重新打包

文档提供的顺序会影响后续的生成效果。我们在重排后加入重新打包模块,有三种方法:“向前”(按相关性降序)、“向后”(升序)和“两边”(最佳信息放在头部或尾部)。由于重新打包主要影响后续模块,我们在第4节通过与其他模块结合测试来确定最佳方法。这里我们默认选择“两边”。

3.7 摘要

检索结果里可能包含冗余或不必要的信息,会妨碍模型生成准确的响应。此外,过长的提示会拖慢推理速度。因此,对检索文档进行有效摘要非常关键。摘要可以是提取式(从文本中选取重要句子)或抽象式(综合信息生成连贯摘要)。在这篇文章里,我们只关注基于查询的方法,测试了Recomp、LongLLMLingua和选择性上下文。

表10的结果显示,Recomp表现最好。LongLLMLingua效果稍差,但泛化能力更好,因为它没有在这些实验数据集上训练过。所以我们把它作为备选。

3.8 生成器微调

这一节聚焦在保持检索器不变的情况下微调生成器,特别研究了相关或不相关上下文对生成器性能的影响。我们定义了相关上下文(dgold)和随机上下文(drandom),并训练了不同组合下的模型。结果显示,在训练时混合使用相关和随机文档的模型(Mgr),在提供相关或混合上下文时表现最佳。这说明混合训练可以增强生成器对不相关信息的鲁棒性,同时确保有效利用相关上下文。因此,我们确定在训练时加入一些相关和随机选择的文档是最佳方案。

4 寻找最佳RAG实践

接下来,我们探索实现RAG的最优方案。先采用第3节确定的每个模块的默认实践,然后按照图1的工作流,依次替换模块,选出最有效的选项,直到最终确定摘要模块的最佳方法。

4.1 全面评估

我们进行了广泛的实验,涵盖常识推理、事实核查、开放领域QA、多跳QA和医学QA等多种任务。同时,使用RAGAs推荐的指标评估了忠实度、上下文相关性、答案相关性和答案正确性,还计算了检索相似度。

4.2 结果与分析

基于表11的结果,关键发现如下:

  • 查询分类模块:既提升了有效性,也降低了延迟(整体得分从0.428提高到0.443,每个查询延迟从16.41秒降到11.58秒)。
  • 检索模块:“Hybrid with HyDE”得分最高(0.58),但计算成本高,每个查询需11.71秒。推荐使用“Hybrid”或“Original”方法,它们在减少延迟的同时保持了可比的性能。
  • 重新排序模块:缺少重排会导致性能明显下降,说明它必不可少。MonoT5实现了最高平均得分,证实了其在增强检索文档相关性方面的有效性。
  • 重新打包模块:“Reverse”配置表现更好,RAG得分为0.560,说明将更相关的上下文放在靠近查询的位置能带来最佳结果。
  • 摘要模块:Recomp表现出色,虽然去掉摘要也能用较低延迟取得可比结果。但Recomp仍是首选,因为它能解决生成器的最大长度限制问题。在时间敏感的应用里,去掉摘要可以缩短响应时间。

实验结果表明,每个模块都对RAG系统的整体性能有独特贡献。

5 讨论

5.1 实施RAG的最佳实践

根据实验发现,我们推荐两种不同的方案:一种追求最高性能,另一种在效率和效果之间找平衡。

  • 最佳性能实践:加入查询分类、用“Hybrid with HyDE”检索、monoT5重排、选择“Reverse”重新打包、使用Recomp摘要。这种配置取得了最高平均得分0.483,但计算强度大。
  • 平衡效率实践:加入查询分类、用Hybrid方法检索、TILDEv2重排、选择“Reverse”重新打包、使用Recomp摘要。由于检索模块最耗时,换成Hybrid方法能大幅降低延迟,同时保持可比的性能。

5.2 多模态扩展

我们将RAG扩展到了多模态应用,集成了text2image和image2text检索能力,使用大量的成对图像和文本描述作为检索源。图4展示了这一点:当用户查询与存储图像的文本描述高度匹配时,text2image功能可以加速图像生成;image2text功能则能处理用户提供的图像并进行对话。

这些多模态RAG能力提供了几个优势:

  • 基础性:检索方法提供来自经过验证的材料,确保真实性和特异性。
  • 效率:当答案已经存在于存储材料中时,检索比生成更高效。
  • 可维护性:生成模型需要仔细微调以适应新应用,而基于检索的方法只需扩大检索源规模、提高检索质量即可满足新需求。

我们计划将这种策略扩展到视频、语音等其他模态,同时探索更有效、更高效的跨模态检索技术。

6 结论

这项研究的目标是找到实施检索增强生成的最佳实践,以提升大语言模型生成内容的质量和可靠性。我们系统评估了RAG框架内每个模块的潜在解决方案,并为每个模块推荐了最有效的方法。同时,我们引入了一套全面的RAG系统评估基准,并通过大量实验确定了各种方案中的最佳实践。这些发现不仅有助于更深入地理解RAG系统,也为未来的研究打下了基础。

关于宇宙的好的网名有哪些
关于宇宙的好的网名有哪些

类型:角色扮演

大小:1

语言:简体中文

平台:互联网

游戏下载

热门手游

手机号码测吉凶
本站所有软件,都由网友上传,如有侵犯你的版权,请发邮件haolingcc@hotmail.com 联系删除。 版权所有 Copyright@2012-2013 haoling.cc