概述
什么是检索增强生成?
RAG 可以用您选择的外部知识源(例如数据存储库、文本集合和既有文档)来补充大语言模型中的数据。这种方法会先把这些资源切分成较小的片段,再在向量数据库中为其添加索引,然后将其用作参考资料以提供更准确的回答。
RAG 的实用之处在于它指示大语言模型从您选择的一个或多个事实来源中检索特定的实时信息。RAG 可通过提供定制体验来节省成本,不会产生模型训练和微调费用。它还可以在查询大语言模型时仅发送最相关的信息(而非整篇冗长的文档),从而节省资源。
红帽资源
RAG 与常规大语言模型输出的对比
大语言模型利用机器学习和自然语言处理(NLP)技术来理解和生成人类语言,以实现 AI 推理。AI 推理是 AI 的运行阶段,在这一阶段,模型能够将其在训练过程中所学到的内容应用于现实场景中。
大语言模型在通信和数据处理方面极具价值,但也有一些缺点:
- 大语言模型是通过常规可用的数据进行的训练,但其中可能不包括您希望其引用的特定信息,例如您的企业组织的内部数据集。
- 大语言模型也有知识截止日期,这意味着模型的训练数据只包含在特定日期之前的数据和内容。因此,这些来源材料可能会变得过时,不再适用于当前的需求。
- 大语言模型往往被设计为尽力满足用户的需求,这意味着它们有时会提供虚假或过时的信息,又称“幻觉”。
在基于大语言模型的问答系统中实施 RAG 架构,可以让大语言模型利用外部知识源来获取更广泛、更准确的信息,并将这些信息整合到其回答中,从而提升问答系统的质量和准确性。大语言模型能够交叉引用和补充其内部知识,从而为用户提供更可靠、更准确的查询结果。
RAG 的优势有哪些?
RAG 架构由于有内置检索机制,因而能够利用大语言模型常规训练之外的额外数据源。通过 RAG 将大语言模型建立在外部的一系列可验证的事实上,可实现以下几个有益目标:
准确性
RAG 为大语言模型提供了引用来源,因此,用户可以加以验证。您还可以将 RAG 架构设计为在问题超出其知识范围时将“我不知道”作为回答。总体而言,RAG 可以减少大语言模型在输出结果中分享错误或误导性信息的几率,进而可能会提高用户的信任度。
成本效益
对大语言模型进行重新训练和微调既昂贵又耗时,就像从头开始创建一个基础模型(例如构建一个聊天机器人)并添加特定领域的信息一样。借助 RAG,用户可以将新数据引入大语言模型,还可以通过上传文档或文件来轻松替换或更新信息源。
RAG 还可以降低推理成本。大语言模型查询的成本很高,如果您在本地运行模型,您自己的硬件需要能够满足需求,如果您通过应用编程接口(API)使用外部服务,则会产生计费账单。RAG 可以只发送参考资料中最相关的部分,而非一次将整个参考文档发给 LLM,因此,可减小查询规模并提高效率。
开发人员控制
与传统的微调方法相比,RAG 提供了一种更方便、更直接的方式来获取反馈、进行故障排除以及修复应用。对开发人员而言,RAG 架构的最大优势在于他们可以利用特定域的最新信息流。
数据主权和隐私
之前,使用机密信息对大语言模型工具进行微调一直有风险,因为大语言模型可能会泄露训练数据中的信息。而 RAG 允许将敏感数据保留在本地,同时继续将其用于向本地或值得信赖的外部大语言模型提供信息,为这类隐私问题提供了解决方案。RAG 架构还可以设置为将敏感信息检索限制在不同的授权级别上,即,某些用户可以基于其安全许可级别访问特定信息。
RAG 的工作原理是什么?
RAG 架构的工作原理是从外部来源检索数据,将其处理到大语言模型的语境中,然后基于组合来源生成回答。该过程包括三个主要阶段:数据准备、检索和生成。
第 1 步:数据准备(用于检索)
- 源文档和加载文档:识别并获取要与大语言模型共享的源文档,并确保这些文档采用大语言模型能够理解的格式,通常是文本文件、数据库表或 PDF 格式。无论源格式如何,在嵌入向量数据库之前,每份文档都需要转换为文本文件。该过程也称为 ETL 阶段:提取(Extract)、转换(Transform)和加载(Load)。ETL 可确保对原始数据进行清理和整理,使数据为存储、分析和机器学习做好准备。
转换:进行“文本分割”或“分块”,使文档为检索做好准备。这意味着对更新后的文档进行解析,然后根据不同的特征以目录的形式将其编入相关的“块”。例如,按段落编排的文档可能比按表格和图表编排的文档更易于模型搜索和检索。
分块可以基于语义、句子、标记、格式、HTML 字符或代码类型等因素。许多开源框架都可以协助进行文档注入,其中包括 LlamaIndex 和 LangChain。
嵌入:嵌入使用专门的机器学习模型(向量嵌入模型)将数据转换为数值向量,使您能够应用数学运算来评估数据之间的相似性和差异性。借助嵌入功能,您可以将文本(或图像)转换为向量,从而捕获内容的核心含义,同时丢弃不相关的细节。嵌入过程可为数据块分配一个数值(例如 [1.2,-0.9,0.3]),并在向量数据库这种更大的系统中为其添加索引。
在向量数据库中,此数值帮助 RAG 架构指示内容块之间的关联,并对数据进行整理以优化检索。这种索引方式旨在对向量进行结构化处理,从而将相似的概念存储在相邻的坐标中。例如,“咖啡”和“茶”的位置会离得很近。“热饮”也会离它们很近。“手机”、“电视”等不相关概念的位置则会离它们很远。两个向量点之间的距离或接近程度有助于模型确定对哪些信息进行检索并使其包含在用户查询的输出中。
- 存储:来自多个来源(您选择的外部文档及大语言模型)的组合数据会被存储在中央存储库中。
第 2 步:检索
将数据编入向量数据库后,算法便会搜索并检索与用户提示词和查询相关的信息片段。LangChain 等框架支持许多不同的检索算法,其中包括基于语义、元数据和父文档等数据相似性的检索。
在开放域使用者设置中,信息检索来自互联网上已添加索引的文档,通过信息源的 API 对这些文档进行访问。在封闭域的企业设置中,信息需要保持私密性且不受外部来源的影响,通过 RAG 架构进行检索可以保持本地状态并提高安全性。
最后,将检索到的数据注入提示符中并发送给大语言模型进行处理。
第 3 步:生成
- 输出:将响应呈现给用户。如果 RAG 方法按预期发挥作用,用户就会获得基于所提供的源知识的准确回答。
RAG 最佳实践和注意事项
构建机器学习模型时,寻找优质的源文档非常重要,因为输出结果的质量取决于输入的数据。对于使用 AI 的任何企业组织而言,如果系统生成的结果出现扭曲或存在偏见,便是一个严重问题。因此,请注意确保您的源文档不含存在偏见的信息(即,使优势群体处于优势地位,而使弱势群体处于劣势地位的这种偏见),这一点对于减少输出中的偏见至关重要。
在为 RAG 架构确定源数据时,请确保准确引用源文档中的数据且这些数据是最新数据。此外,在将模型面向更广泛的受众进行部署之前,人类专家应该帮助评估输出结果,而且在将模型部署到生产环境中之后,还应继续评估结果的质量。
RAG 与其他数据训练和处理方法有何不同?
了解数据训练方法与 RAG 架构之间的差异有助于您做出战略决策,从而根据需求确定部署哪项 AI 资源,您可能会同时使用多种方法。接下来我们将介绍一些常见的数据处理方法和流程,并将它们与 RAG 进行比较。
RAG 与提示词工程的对比
提示词工程是与大语言模型交互的最基本且技术含量最低的方式。提示词工程需要编写模型需遵循的一系列指令,以便在用户进行查询时生成预期输出。与 RAG 相比,提示词工程所需的数据较少(只有对模型进行预训练时使用的数据),且成本较低(仅使用现有工具和模型),但无法基于最新信息或不断变化的信息生成输出。此外,输出的质量取决于提示词的措辞,这意味着响应内容可能会不一致。
如果您想寻找一种简便易用且具有成本效益的方法来提取与一般主题相关的信息,且不需要很多细节,则可以选择使用提示词工程,而非 RAG。
RAG 与语义搜索的对比
语义研究的是词语的含义。语义搜索是一种通过考虑搜索查询背后的意图和语境来解析数据的技术。
语义搜索利用 NLP 和机器学习来解读查询,并查找可提供比简单的关键词匹配更有意义且更准确的响应的数据。换句话说,语义搜索有助于缩小用户输入的查询内容与用于生成结果的数据之间的差距。
例如,如果您输入一个关于 “梦想假期 ”的查询,语义搜索可帮助模型理解您最有可能想了解的是与“理想”假期相关的信息。模型会提供与您的意图更相关的回答(例如海滨度假套餐),而非提供与梦想相关的回答。
语义搜索是 RAG 的一个元素,RAG 在检索向量数据库的步骤中利用语义搜索来生成符合语境且最新的结果。
RAG 与预训练的对比
预训练是训练大语言模型的初始阶段,旨在通过从大型数据集进行学习来获得对语言的广泛理解。与人脑在学习过程中建立神经通路的方式类似,预训练是在大语言模型中利用训练数据建立神经网络。
与 RAG 相比,对大语言模型进行预训练的成本较高,且可能需要较长的时间以及较多的计算资源(例如数千个 GPU)。如果您可以访问范围广泛的数据集(足以对训练的模型产生重大影响),且希望让大语言模型对某些主题或概念有初步的、基础性的理解,则可以选择使用预训练,而非 RAG。
RAG 与微调的对比
如果说 RAG 架构定义了大语言模型需要知道的内容,那么微调则定义了模型的行为方式。微调是指利用更小、更具针对性的数据集对经过预先训练的大语言模型进一步训练的过程。模型可从中学习不会随时间发生变化的常见模式。
从表面上看,RAG 和微调似乎很相似,但二者存在区别。例如,微调需要大量数据和计算资源来创建模型,除非使用参数高效微调(PEFT)技术。
RAG 则可以从单个文档中检索信息,相比之下,所需的计算资源要少得多。此外,RAG 已被证明可以有效减少幻觉,但对大语言模型进行微调以减少幻觉则是一个更为耗时且困难的过程。
通常情况下,模型可以同时受益于微调和 RAG 架构。但是,如果您已经可以访问大量数据和资源,而且这些数据相对不变,或者如果您正在执行一项专业任务,需要比 RAG 所擅长的问答格式更个性化的分析,则可以选择使用微调,而非 RAG。
RAG 用例
RAG 架构具有许多潜在用例。以下是最流行的几种用途:
客户服务:对聊天机器人进行编程,让其通过对特定文档的深入了解来回答客户的咨询,从而缩短问题解决时间,使客户支持系统更高效。
生成洞察:RAG 可以帮助您从已有文档中查询。通过 RAG 架构将大语言模型与年度报告、营销文档、社交媒体评论、客户评价、调查结果、研究文档或其他材料联系起来,查找有助于您更好地了解资源的回答。请注意,您可以通过 RAG 直接连接到实时数据源(例如社交媒体动态、网站或其他经常更新的来源),以便生成实时且实用的回答。
医疗信息系统:RAG 架构可改善提供医疗信息或建议的系统。RAG 支持查看个人病史等因素、预约挂号以及查看最新医学研究和指南,帮助患者获得所需的支持和服务。
红帽能如何提供帮助
红帽® AI 是我们专门针对企业组织需求而构建的 AI 产品组合,它筑基于深受客户信赖的红帽解决方案。有了这种稳健的基础,我们的产品就始终可靠、灵活且可扩展。
红帽 AI 可以帮助企业组织做到以下几点:
- 快速采用 AI 并进行创新。
- 拆解交付 AI 解决方案的复杂流程。
- 随时随地部署。
开发人员协作和控制
红帽 AI 解决方案通过提供底层工作负载基础架构,使企业组织能够在其 LLMOps 流程中实施 RAG 架构。
具体而言,红帽® OpenShift® AI 是一个灵活且可扩展的 MLOps 平台,为开发人员提供了可用于构建、部署和管理依托 AI 技术的应用。它提供了底层工作负载基础架构,用于支持向量数据库、创建嵌入、查询大语言模型和使用生成输出所需的检索机制。
红帽 AI 还提供了额外的模型对齐机制,以改进您的大语言模型。这个解决方案称为 InstructLab。它采用了一种开源社区驱动的方法,以增强大语言模型功能。
通过受支持的持续协作,您能够以快速便捷的方式针对企业用例自定义 AI 模型应用。
解决方案模式:利用红帽技术和 NVIDIA AI Enterprise 构建 AI 应用
创建 RAG 应用
红帽 OpenShift AI 是一个用于构建数据科学项目并为依托 AI 的应用提供服务的平台。您可以集成支持检索增强生成(RAG)所需的所有工具,这是一种从自己的参考文档中获取 AI 答案的方法。将 OpenShift AI 与 NVIDIA AI Enterprise 关联后,您可以尝试各种大语言模型(LLM),以找到适用于您应用的最佳模型。
构建文档处理管道
要使用 RAG,需要先将文档导入向量数据库。在示例应用中,我们将一组产品文档嵌入了 Redis 数据库。由于这些文档经常更改,我们可以为此过程创建一个管道并定期运行,以确保始终拥有最新版本的文档。
浏览大语言模型目录
NVIDIA AI Enterprise 支持访问不同大语言模型的目录,因此您可以尝试不同的选择,并选取能够提供最佳效果的模型。这些模型托管在 NVIDIA API 目录中。设置 API 令牌后,您就可以直接从 OpenShift AI 使用 NVIDIA NIM 模型服务平台来部署模型。
选择合适的模型
在测试不同的大语言模型时,您可以让用户对每个生成的响应进行评分。您还可以设置一个 Grafana 监控面板,用于比较各个模型的评分、延迟和响应时间。然后,您就可以根据这些数据来选择最适合在生产环境中使用的大语言模型。

红帽官方博客
获取有关我们的客户、合作伙伴和社区生态系统的最新信息。