您是否了解,“检索增强生成”(Retrieval-Augmented Generation,简称RAG)这一概念早在2020年便已诞生?当时,Meta在一项学术研究中首次提出了它。如今,RAG已成为提升大语言模型(LLM)表现的重要技术路径。

简单来说,RAG通过为基础模型注入大量外部数据,使大语言模型(LLM)的能力得到显著增强。这样一来,AI生成的回答不仅更可靠、更具个性化,可信度也大幅提升。
本质上,RAG是一个专门用于优化LLM性能的框架。别看它只是框架,短短三年间,在企业级LLM应用中的发展速度可谓惊人。
本文将深入解读RAG技术,并介绍几种进阶玩法,助您全面掌握这一前沿领域。
RAG 的工作原理
首先进入查询阶段:用户通过虚拟助手或常见的AI对话界面,将文字形式的问题输入RAG流程。
接着是文档搜索(检索)环节。LLM开始从外部资源(如数据库、文档甚至搜索引擎结果)中抓取相关信息。这一步骤的核心目标,是找到与用户输入问题高度匹配的文本片段或文档。
然后是增强(Augmentation)步骤。搜索阶段获取到的信息,会与原始输入或提示语融合在一起,借助提示工程技术,将它们转化为LLM能够理解并处理的格式,从而引导模型生成更优质的回复。
随后进入生成(Generation)阶段。LLM综合评估接收到的信息与原始输入,最终输出精准的文本。具体而言,RAG系统会将用户最初的问题、从向量数据库中检索到的文档,以及其他相关参数全部整合,确保LLM给出最准确、最贴切的答案。
最后一步是回答:LLM将最终结果返回给用户。
实际上,RAG在问答系统、对话生成、文本摘要等自然语言处理任务中均表现出色。由于能够整合外部信息,其回答相比仅依赖预训练数据的传统模型,准确性更高、信息量更丰富。
RAG 与传统方法的区别
传统自然语言模型通常走“分类”路线:用户输入一个查询,模型从一组预定义的回复中挑选最合适的。它相当于将输入文本与预设答案进行比对,选出最接近的选项。这类模型多采用监督学习算法或语义匹配方法,计算输入与标注响应之间的相似度,最终确定最佳匹配。在问答等任务中,由于答案往往基于固定类型,结构化查找较为容易,因此这种模型尚可适用。
但基于RAG的模型则截然不同。生成式AI是从零开始构建答案或内容,而非匹配现有素材。这些模型采用更复杂的算法(通常基于神经网络),能够生成更贴近人类表达的文本或回复。与旧有方法不同,它们无需与任何现成类别挂钩,因为它们是直接创造新内容。这带来了无监督学习的所有优势——模型能够预测下一个单词或一系列单词,边学习边生成新颖且上下文匹配的回答。
无监督学习是一种机器学习方法,与监督学习不同,它不依赖带标注的数据。相反,无监督学习算法通过分析和寻找数据中的模式、结构或关系,自动从无标签数据中学习。
RAG 的优势
RAG在需要访问外部信息与最新数据的场景中,优势尤为突出。
首先,上下文相关性显著增强。RAG系统能够生成更贴合场景、信息更丰富的回答。由于融合了外部来源的信息,生成的文本更能反映实际情况,答案的准确性自然更高。
其次,事实核查与验证变得更加便捷。RAG系统从可靠的外部来源获取信息,可在生成过程中进行事实核查与验证,有助于减少错误或误导性信息,确保内容准确。
第三,优化知识整合。RAG系统能够高效利用外部知识库或文档来优化回答。在问答任务中尤为有用,模型可从海量资源中搜索相关信息,给出见多识广且精准的答案。
第四,灵活性与适应性强。通过从多种资源或渠道获取信息,RAG系统变得更具灵活性与场景适应性。只要搜索机制设计得当,无需针对每个特定场景进行严格微调,即可处理各种主题和任务。
第五,处理分布外输入。传统文本生成模型在面对训练数据中未见过的不常见输入时,往往表现不佳。RAG系统则能依靠向量数据库中的文档堆栈,即使对陌生或不常见输入,也能找到相关参考信息。
分布外输入(Out-of-Distribution Input, OOD Input)通常指在训练过程中未曾出现、与训练数据分布不一致的数据。
第六,控制内容生成。RAG系统还可用于管控内容的生成方向。通过引导文档搜索过程并指定来源,开发人员能够控制模型用于生成响应信息的类型与质量。
第七,减少偏见。文档搜索机制有助于降低内容中的偏见。通过结合多种信息源,模型能够提供比传统模型更均衡的回答——传统模型容易受到训练数据中固有偏见的影响。
当然,尽管RAG优势明显,也须注意一些潜在挑战与考量,例如处理来自不同来源的复杂信息,以及在文档搜索结果的准确性与效率之间取得平衡。
再谈谈RAG与其他生成式AI的差异。核心区别在于数据的存储与利用方式。以公司数据为例:若采用微调(Fine-tuning),需用公司数据重新训练已有LLM,并调整模型配置以满足需求;而RAG则是从外部存储的公司文档中检索数据,提供给LLM以指导生成。微调既耗时又耗资源,不适合处理频繁更新的公司文档。
RAG 实施挑战
尽管RAG功能强大,但在实施与管理过程中仍会面临一些难题:
多渠道/来源整合。当外部数据源数量多、格式不统一时,复杂性会急剧上升。关键是要对这些数据进行预处理或检查,避免数据集之间出现重复。
数据质量。数据必须保持一致性,能够准确传达信息。如果数据本身质量欠佳,生成的回答自然不可靠。因此在整合数据源之前,务必确保数据质量达标。
可扩展性。随着数据量持续增长,管理RAG系统的性能会变得愈发困难。较为省心的做法是采用向量数据库等专用解决方案。
向量数据库是一种专门存储和处理向量(高维数据)的数据库。它能快速找到与某个向量最相似的其他向量,广泛应用于人工智能、图像搜索、推荐系统等需要高效相似度搜索的场景。简而言之,它帮助我们迅速定位“最相似”的数据。
搜索优化。为了让模型生成准确的输出,从向量数据库进行相似性搜索这一步必须具有足够高的性能,这是整个流程的第一步,也是关键一步。如果向量搜索的结果选取了缺失或不正确的内容,那么在接下来的增强阶段,就无法将其转换为适合LLM理解和处理的格式。
更复杂的 RAG 系统
下面介绍几种更复杂的RAG系统。
文档分块(Document Chunking)。在自然语言处理中,“分块”是指将文本切分为更小、更简明且有意义的部分。RAG系统在较小的文本片段中能够更快、更准地找到相关上下文。那么,如何确保选对正确的片段呢?分块策略的有效性很大程度上取决于这些片段的质量与结构。要确定最佳块大小,需要在捕获所有重要信息与保证处理速度之间找到平衡。大块能捕获更多上下文,但也会引入更多噪音,且处理时间更长、计算资源消耗更大。小块噪音少,但可能无法完整捕获所需的上下文。重叠部分(Overlap)就是一种平衡两者的方法。
噪音通常指与当前任务无关或不重要的信息,这些信息可能干扰模型的理解与处理,导致结果不准确或不相关。
通过重叠部分,一个查询很可能通过多个向量集检索到足够相关的数据,从而构建出正确关联的答案。不过,有一个限制:这种策略假设所有需要的信息都存在于单一文档中。如果所需上下文分散在多个不同文档中,则可能需要考虑文档层次结构或知识图谱等解决方案。
CRAG,其中C代表“Check”或“Cross-Check”。可将CRAG理解为验证或改进搜索结果的一种方式,这是RAG工作流程的第一步。RAG过程中常见问题是,在搜索阶段从文档堆栈中未能获得预期结果。如果未能获取最准确的文档,将导致发送给LLM的表达不完整,从而在最后一步误导语言模型。初始搜索就存在偏差,后续的结果差距与偏差只会愈发明显。因此,检查搜索结果是否真正生成了正确的文档至关重要。CRAG正是应对此类问题的方案。通过为所有搜索结果设置阈值上限与下限,将结果分为“正确”“错误”或“不确定”三类。如果至少有一个文档与查询的接近度超过上限阈值,则搜索过程被认为正确。如果所有文档得分均低于下限阈值,则视为搜索不正确。不确定状态则涵盖介于两者之间的情况。对于假设正确的文档,再进行分块,通过清理噪音文本和丰富内容来强化文档。对于结果不正确的,使用内容与查询进行网络搜索,从在线环境中获取更多详细信息,以修正分类错误的文档。对于不确定的情况,则同时重复正确与错误的处理过程。CRAG确保仅使用相关可靠的信息,将错误或误导性结果的风险降至最低,从而产生更准确可靠的回答。
RAG融合(RAG Fusion)。在传统搜索系统中,用户通常只输入一个查询来查找信息。这种方法虽然简单,但存在明显限制:单个查询可能无法覆盖用户兴趣主题的全部范围,或者过于狭窄,无法产生全面的结果。此时,从不同角度创建多个查询显得尤为重要。RAG Fusion通过创建多个查询并对结果重新排序,来解决RAG固有的局限性。它能够弥合用户实际提出的问题与真正想问的问题之间的差距。通过大量多样化的查询,提供对问题的最佳理解。简单来说,可以将RAG Fusion比作一个在做决定前坚持听取所有人意见的人。RAG Fusion利用互惠序列融合技术(Reciprocal Rank Fusion, RRF)提供强有力的支持。
互惠排名融合(Reciprocal Rank Fusion,RRF)是一种组合多个搜索结果列表的技术。它通过将不同搜索系统或算法产生的排名列表融合在一起,创建一个综合的排名列表,从而提供更可靠、更优质的搜索结果。
想想那些我们不知道自己确实需要的信息,直到遇见了才恍然大悟。通过使用更广泛的查询,系统能够发现那些虽然并非明确寻找但十分关键的信息。这正是RAG Fusion与其他传统搜索模型的不同之处。不过,RAG Fusion的深度有时也会导致信息过载。输出可能过于详细,使人不知所措。可以将RAG Fusion比作一个过度解释事情的信息伴侣,可能分散用户对原始意图的注意力。要减轻这个问题,可以在请求工程中指示模型给原始查询更多权重,加以控制。
HyDE。HyDE是一种在自然语言处理中使用的技术,其核心思想是通过生成临时的虚拟答案或文档,来帮助理解和处理输入问题。该方法特别适用于问题描述不清晰、细节不足或缺乏明显可识别元素的情况。例如,假设用户问了模糊的问题:“能拍出好照片的手机价格是多少?”这句话虽然是在问价格,但主体显然是手机。HyDE系统会生成一个虚拟文档,其中可能包含对能拍出好照片的手机的描述。随后,系统利用这个虚拟文档在数据库中查找相关信息,最终返回一个更相关的回答。不过,这种方法也有缺点:它并不总能保证好结果。如果讨论的话题完全超出语言模型的知识范围,这种方法就会失效,甚至可能增加错误信息。
层次索引(Hierarchical Indexing)。这是一种用于组织和管理文档或数据的结构化方法,通过将信息分层次分类,提高数据检索的效率和准确性。这种方法特别适用于需要处理大量文档或复杂数据集的场景。可以将文档层次结构看作RAG系统的目录。它以结构化的方式组织各部分内容,让RAG系统能够高效地检索和处理相关数据。那么,如果LLM能理解文档中的内容,为什么还需要文档层次结构?上文提到,可将文档层次结构视为目录或文件索引。尽管LLM可以从向量数据库中提取相关的文本片段,但使用文档层次结构作为预处理步骤,先找到最相关的文本片段,能提高搜索过程的速度和可靠性。这种策略可以减少由于片段提取问题引起的幻觉。
LLM的“幻觉”是指LLM在生成文本时,提供了看似合理但实际上错误、不准确或完全虚构的信息。这是当前自然语言处理技术中一个已知问题。
总结
本文探讨了更高级的RAG架构,并详细介绍了多种RAG技术,希望这些梳理能给您带来启发。RAG技术仍在飞速发展,挑战也层出不穷。近期微软发布了GraphRAG,将RAG的应用拓展到了图领域。可以预见,未来RAG的应用将越来越广泛,与LLM的结合将更加紧密,我们日常使用的AI功能也必将更加强大。
