来源:互联网 更新时间:2026-08-18 14:16
检索增强生成(RAG),说白了,就是用来给大语言模型“补课”的——补最新信息、补特定领域知识,还能顺便治治模型爱“编瞎话”的毛病。效果确实不错。但问题是,很多RAG方案搞得太复杂,响应时间也跟着拉长了。一个标准的RAG工作流往往要串起好几个处理环节,每个环节又有不同的实现方式。
这篇文章的核心任务,就是把现有的RAG方法以及它们可能的组合方式摸个底,看看哪些才是真正好用的。我们做了大量的实验,最终总结出几套部署策略,能在性能和效率之间找到平衡点。另外,我们还展示了多模态检索技术如何让模型更好地理解图片信息,以及如何用“检索即生成”的思路来加速多模态内容的产出。

大语言模型生成的内容,要么过时,要么干脆是凭空捏造的——即便它们通过强化学习或一些轻量级方案进行了对齐。RAG技术之所以能火,就是因为它把预训练和检索这两套思路的优势结合了起来,给模型搭了个更结实的框架。而且,RAG最大的好处是:不用重新训练模型参数,只要有相关的文档库,就能快速给特定组织或领域部署应用。
市面上已经有不少RAG方法了,它们通过依赖查询的检索来增强大模型的能力。一个典型的RAG工作流通常包含好几个环节:先得判断查询要不要检索(查询分类),然后去文档库里找(检索),把找出来的文档按相关性排个序(重排),再整理一下顺序(重新打包),最后摘出关键信息来生成回答(摘要)。此外,还要考虑怎么把文档切成合适的块、用什么嵌入模型来表示这些块、以及怎么微调大模型等问题。
难点在于,每个环节的实现方式都五花八门。比如检索这一步,你可以先改写查询再检索,也可以先生成一个伪答案再去查相似文档,或者直接用对比学习训练好的嵌入模型。不同的选择以及它们的组合方式,会极大地影响整个RAG系统的效率和效果。坦率地讲,目前还没有人系统性地研究过,到底怎么做才能把RAG的效果推到最优。
在这项研究中,我们希望通过大量的实验来找到RAG的最佳实践。因为把所有可能的组合都测一遍不现实,所以我们分了三步走:首先,每个环节选出最有代表性的几种方法(最多三种);然后,一次只换一个方法,固定其他模块,看它对整体性能的影响,同时考察它与其他模块的交互效果;最后,再针对不同的应用场景,找出那些既高效又好用的组合。基于这些发现,我们总结出了几套能在性能和效率之间取得平衡的部署策略。
这项研究的贡献主要有三点:
确保大语言模型输出的准确性是头等大事。但光靠把模型规模做大,解决不了根本问题,尤其是在知识密集型任务和专业领域。RAG通过从外部知识库检索相关文档,给模型提供了准确、实时、特定领域的上下文。之前的工作主要是通过查询和检索转换、增强检索器性能、以及微调检索器和生成器来优化RAG流程。
要检索效果好,查询本身得准确、清晰、详细。但即便转成了嵌入,查询和相关文档之间也可能存在语义上的偏差。之前的一些工作,比如Query2Doc和HyDE,通过从原始查询生成伪文档来增强检索;TOC则把查询拆成子查询,汇总检索结果。另一些研究则聚焦在转换检索源文档上。LlamaIndex提供了为检索文档生成伪查询的接口,提高了与真实查询的匹配度。对比学习也被用来把查询和文档的嵌入在语义空间中拉近。对检索到的文档做后处理也是一种增强思路,比如分层提示摘要、使用抽象式和提取式压缩器来减少上下文长度、消除冗余。
文档怎么切块、用什么嵌入,这两件事对检索性能影响很大。常见的切块策略是把文档切成小块,但怎么确定最佳的长度确实有点棘手——太小了会切碎句子,太大了又会带进不相关的上下文。LlamaIndex优化了诸如Small2Big和滑动窗口这些切块方法。检索回来的块可能不相关,数量也可能太多,所以需要重新排序来过滤掉不相关的。一种常见的重排方法是直接用BERT、T5或LLaMA这样的深度语言模型来做,效果更好,但推理速度慢。TILDE则通过预先计算和存储查询项的可能性来提高效率,根据它们的总和对文档排序。
在RAG框架内进行微调,对优化检索器和生成器都至关重要。一些研究专注于微调生成器,让它更好地利用检索来的上下文;另一些则微调检索器,让它学会检索对生成器更有用的段落;整体方法则将RAG看作一个集成系统,同时微调检索器和生成器来提升整体性能,不过这会增加复杂度和集成难度。
几篇综述文章已经广泛讨论过当前的RAG系统,但选择可用的算法仍然是个挑战。在这篇文章里,我们聚焦于应用RAG方法的最佳实践,目标是推进对RAG的理解和应用。
这一节详细介绍RAG工作流的各个组成部分。对每个模块,我们回顾了常用的方法,并为最终的流程选定了默认和备选方案。第4节会讨论最佳实践。
并不是所有查询都需要检索增强。RAG虽然能提升信息准确性、减少幻觉,但频繁检索会增加响应时间。所以,先对查询进行分类,判断是否需要检索。需要检索的走RAG流程,其他的直接由大模型处理就好。
通常,当任务需要模型参数之外的知识时才需要检索。但检索的必要性因任务而异。比如,一个训练数据截止到2023年的模型,处理“Sora由OpenAI开发”这样的翻译请求就用不着检索;但如果是介绍Sora,那就得检索才能提供相关信息。
因此,我们提出按任务类型来分类,决定是否需要检索。根据任务是否完全依赖用户提供的信息,我们把15个任务分成了“足够”和“不足”两类(见图2)。我们训练了一个分类器来自动化这个决策过程。第4节会探讨查询分类对工作流的影响,比较有分类和无分类两种场景。
把文档切成小块对于提高检索精度、避免大模型处理长文本时出问题很有必要。切块可以在不同的粒度上进行,比如标记级、句子级和语义级。
在这项研究中,我们用了句子级分块,平衡了简单性和语义保留。我们从四个维度来审视分块。
分块大小对性能影响很大。块越大,上下文越丰富,理解越到位,但处理时间也越长。块越小,检索召回率更高、时间更短,但可能上下文不足。最佳分块大小需要在忠实度和相关性这些指标之间找平衡。
像“小到大”和“小滑动窗口”这些高级技术,通过组织块与块之间的关系来提升检索质量。具体来说,是先用小块去匹配查询,然后返回包含小块及上下文信息的大块。我们用LLM-Embedder模型做了实验,小块设为175个标记,大块512个标记,重叠20个标记。这些技术通过保留上下文、确保检索到相关信息,确实提升了效果。
选择合适的嵌入模型,对实现查询和块之间的有效语义匹配至关重要。我们用了FlagEmbedding的评估模块来挑选合适的开源嵌入模型。结果表明,LLM-Embedder与BAAI/bge-large-en成绩相当,但前者大小是后者的三倍。所以我们选了LLM-Embedder,因为它性能和体积都还行。
通过给块添加标题、关键词和假设问题这类元数据,可以改善检索,提供更多的后处理方式,并帮助大模型更好地理解检索到的信息。关于元数据的详细研究,留到以后再做。
向量数据库用来存储嵌入向量及其元数据,通过各种索引和近似最近邻方法,实现对查询相关文档的高效检索。为了选出合适的向量数据库,我们根据四个关键标准评估了几个选项:多种索引类型、十亿规模向量支持、混合搜索和云原生能力。表5详细对比了Wea viate、Faiss、Chroma、Qdrant和Milvus这五个开源向量数据库。我们的评估表明,Milvus在各方面都最为全面。
给定用户查询,检索模块根据查询和文档之间的相似度,从预构建的语料库中选出前k个相关文档。然后生成模型用这些文档来制定响应。但原始查询往往表达不好、缺乏语义信息,会负面影响检索过程。为了解决这些问题,我们用LLM-Embedder作为查询和文档编码器,评估了三种查询转换方法:查询重写、查询分解和伪文档生成(HyDE)。
近期研究表明,把词汇搜索和向量搜索结合起来可以显著提升性能。在这项研究中,我们用了BM25做稀疏检索,Contriever做密集检索。表6的结果显示,监督方法明显优于无监督方法。结合HyDE和混合搜索,LLM-Embedder取得了最高分。不过,查询重写和查询分解并没有带来预期的提升。综合考虑最佳性能和可接受的延迟,我们推荐把HyDE与混合搜索作为默认检索方法。如果更看重效率,混合搜索已经结合了稀疏检索(BM25)和密集检索(原始嵌入),延迟相对较低,性能也不错。
我们在TREC DL 2019和2020段落排名数据集上评估了不同搜索方法的性能。表6的结果显示,监督方法显著优于无监督方法。结合HyDE和混合搜索,LLM-Embedder取得了最高分。但查询重写和查询分解并没有像预期那样增强检索性能。考虑到最佳性能和可接受的延迟,我们推荐将HyDE与混合搜索作为默认检索方法。如果更看重效率,混合搜索结合了稀疏检索(BM25)和密集检索(原始嵌入),延迟较低,性能也不错。
表7显示了使用HyDE时,假设文档和查询的不同连接策略的影响。把多个伪文档与原始查询连接起来可以显著提高检索性能,虽然延迟会增加,这体现了一种权衡。但无限制地增加假设文档数量并不会带来显著好处,反而大幅提高延迟,这说明一个假设文档就够了。
表8展示了混合搜索中不同α值的影响,α控制稀疏和密集检索之间的权重。我们评估了五种α值,结果表明α=0.3时性能最佳,说明适当调整α可以在一定程度上优化检索效果。因此我们选择α=0.3。
初始检索后,需要重新排序来增强检索文档的相关性,确保最相关的内容排在前面。这个阶段用更精确但耗时的方法来重新排序。我们考虑了两类方法:DLM重排(利用分类)和TILDE重排(侧重于查询可能性)。
我们在MS MARCO段落排名数据集上做了实验,使用了monoT5、monoBERT、RankLLaMA和TILDEv2模型。表9的结果表明,monoT5在性能和效率之间平衡得不错。RankLLaMA追求最佳性能,TILDEv2则适合在固定集合上快速上手。
文档提供的顺序会影响后续的生成效果。我们在重排后加入重新打包模块,有三种方法:“向前”(按相关性降序)、“向后”(升序)和“两边”(最佳信息放在头部或尾部)。由于重新打包主要影响后续模块,我们在第4节通过与其他模块结合测试来确定最佳方法。这里我们默认选择“两边”。
检索结果里可能包含冗余或不必要的信息,会妨碍模型生成准确的响应。此外,过长的提示会拖慢推理速度。因此,对检索文档进行有效摘要非常关键。摘要可以是提取式(从文本中选取重要句子)或抽象式(综合信息生成连贯摘要)。在这篇文章里,我们只关注基于查询的方法,测试了Recomp、LongLLMLingua和选择性上下文。
表10的结果显示,Recomp表现最好。LongLLMLingua效果稍差,但泛化能力更好,因为它没有在这些实验数据集上训练过。所以我们把它作为备选。
这一节聚焦在保持检索器不变的情况下微调生成器,特别研究了相关或不相关上下文对生成器性能的影响。我们定义了相关上下文(dgold)和随机上下文(drandom),并训练了不同组合下的模型。结果显示,在训练时混合使用相关和随机文档的模型(Mgr),在提供相关或混合上下文时表现最佳。这说明混合训练可以增强生成器对不相关信息的鲁棒性,同时确保有效利用相关上下文。因此,我们确定在训练时加入一些相关和随机选择的文档是最佳方案。
接下来,我们探索实现RAG的最优方案。先采用第3节确定的每个模块的默认实践,然后按照图1的工作流,依次替换模块,选出最有效的选项,直到最终确定摘要模块的最佳方法。
我们进行了广泛的实验,涵盖常识推理、事实核查、开放领域QA、多跳QA和医学QA等多种任务。同时,使用RAGAs推荐的指标评估了忠实度、上下文相关性、答案相关性和答案正确性,还计算了检索相似度。
基于表11的结果,关键发现如下:
实验结果表明,每个模块都对RAG系统的整体性能有独特贡献。
根据实验发现,我们推荐两种不同的方案:一种追求最高性能,另一种在效率和效果之间找平衡。
我们将RAG扩展到了多模态应用,集成了text2image和image2text检索能力,使用大量的成对图像和文本描述作为检索源。图4展示了这一点:当用户查询与存储图像的文本描述高度匹配时,text2image功能可以加速图像生成;image2text功能则能处理用户提供的图像并进行对话。
这些多模态RAG能力提供了几个优势:
我们计划将这种策略扩展到视频、语音等其他模态,同时探索更有效、更高效的跨模态检索技术。
这项研究的目标是找到实施检索增强生成的最佳实践,以提升大语言模型生成内容的质量和可靠性。我们系统评估了RAG框架内每个模块的潜在解决方案,并为每个模块推荐了最有效的方法。同时,我们引入了一套全面的RAG系统评估基准,并通过大量实验确定了各种方案中的最佳实践。这些发现不仅有助于更深入地理解RAG系统,也为未来的研究打下了基础。
腾讯ima怎么把微信内容一键导入知识库?
黄金价格不断创新高!黄金稳定币XAU、PAXG市值达11亿美元
CC币价格预测(2026-2035):Canton币今日价格走势+长期价格预测
新浪互联网热点小时报丨2026年07月26日16时_今日实时互联网热点速递
2026鸣潮账号交易安全指南:五大交易平台对比与风险避坑分析
腾讯ima怎么创建共享知识库?
新浪机器学习热点小时报丨2026年07月25日18时_今日实时机器学习热点速递
今日比特币暴涨分析:Metaplanet的比特币BTC投资推动股价上涨17%
新浪人工智能热点小时报丨2026年07月30日18时_今日实时人工智能热点速递
蚂蚁庄园今日答案7月21日(今日已更新) 蚂蚁庄园今天正确答案是什么呢
2026年三角洲行动账号交易指南:5大交易平台对比与安全选购建议
比特币(BTC)核心周期指标复刻历史走势 价格或跌破5.8万美元关键支撑位
Celestia价格预测2026-2032:TIA币能否引领山寨币上涨行情?历史价格回顾
抖音怎么取消申请退货退款?抖音上取消退货怎么操作
Windy卫星云图怎么看?云层变化识别技巧
结婚家电首选:Leader懒人三筒Ultra热泵洗烘一体
短剧《史上最强洪荒修为》剧情介绍
kimi提示词专家使用方法新手指南
网络热词我黑切呢是什么意思
五菱星光L六座新能源SUV上市:三版可选,中配12.28
手机号码测吉凶
本站所有软件,都由网友上传,如有侵犯你的版权,请发邮件haolingcc@hotmail.com 联系删除。 版权所有 Copyright@2012-2013 haoling.cc