什么是检索增强生成?
检索增强生成(RAG)是一种能够提高生成式 AI 应用所生成答案的质量和相关性的技术。它的工作原理是将大语言模型(LLM)的预训练知识与外部资源关联起来。具体而言,这些外部资源经过分段处理,在向量数据库中建立索引,并作为参考资料供大语言模型提取信息,从而生成更精准的回答。
RAG 非常有用,它能够指示大语言模型从您选择的一个或多个事实来源中检索特定的最新信息。这些来源可以包括数据存储库、文本集合以及现有文档。
采用 RAG 可节省成本,因为它能够提供定制体验,而不会产生模型训练和微调费用。它还可以在查询大语言模型时仅发送最相关的信息(而非冗长的文档),从而有效节省资源。
RAG 与常规大语言模型输出的对比
大语言模型利用机器学习和自然语言处理(NLP)技术来理解和生成人类语言,以实现 AI 推理。AI 推理是 AI 的运行阶段,在这一阶段,模型能够将其在训练过程中所学到的内容应用于现实场景中。
大语言模型在通信和数据处理方面极具价值,但也存在一些缺点:
- 大语言模型使用常规可用的数据进行训练,可能无法涵盖您希望其引用的特定信息,例如您企业组织的内部数据集。
- 大语言模型也存在知识截止日期限制,这意味着模型训练所依据的信息不会持续更新。因此,这些来源资料可能会变得过时,且不再具有相关性。
- 大语言模型往往被设计为尽力满足用户的需求,这意味着它们有时会提供虚假或过时的信息,即所谓的“幻觉”现象。
在基于大语言模型的问答系统中实施 RAG 架构,相当于在 LLM 和您选择的其他知识源之间提供沟通渠道。大语言模型能够交叉引用和补充其内部知识,从而为进行查询的用户提供更可靠和准确的输出结果。
红帽资源
RAG 有哪些优势?
RAG 架构内置检索机制,因而能够利用大语言模型常规训练之外的额外数据源。通过 RAG 将大语言模型建立在一组可验证的外部事实之上,有助于实现以下几个有益目标:
准确性
RAG 为大语言模型提供了可引用的来源,用户可据此验证信息可信度。您还可以将 RAG 架构设计为当问题超出其知识范围时回答“我不知道”。总体而言,RAG 可以减少大语言模型在输出结果中分享错误或误导性信息的几率,进而可能会提高用户的信任度。
成本效益
对大语言模型进行重新训练和微调既昂贵又耗时,使用特定领域信息从头开始创建基础模型(例如构建一个聊天机器人)也是如此。借助 RAG,用户可以将新数据引入大语言模型,还可以通过上传文档或文件来轻松替换或更新信息来源。
RAG 还可以降低推理成本。大语言模型查询的成本很高,如果您在本地运行模型,您自己的硬件需要能够满足需求,如果您通过应用编程接口(API)使用外部服务,则会产生计费账单。RAG 可以只发送参考资料中最相关的部分,而非一次将整个参考文档发给大语言模型,从而缩小查询规模并提高效率。
开发人员控制台
与传统的微调方法相比,RAG 提供了一种更便捷、更直接的方式来获取反馈、进行故障排除和修复应用。对开发人员而言,RAG 架构的最大优势在于他们可以利用特定域的最新信息流。
数据主权和隐私
使用机密信息来微调 LLM 工具一直存在风险,因为大语言模型可能会泄露其训练数据中的信息。而 RAG 允许将敏感数据保留在本地,同时继续将其用于向本地大语言模型或值得信赖的外部大语言模型提供信息,从而为这类隐私问题提供了解决方案。RAG 架构还可以设置为将敏感信息检索限制在不同的授权级别,即某些用户可以基于其安全许可级别访问特定信息。
RAG 的工作原理是什么?
RAG 架构的工作原理是从外部来源检索数据,将其处理到大语言模型的语境中,然后基于组合来源生成回答。该过程包括三个主要阶段:数据准备、检索和生成。
第 1 步:数据准备(用于检索)
- 源文档和加载文档:识别并获取要与大语言模型共享的源文档,并确保这些文档采用大语言模型能够理解的格式,通常是文本文件、数据库表或 PDF 格式。无论源格式如何,每个文档都需要先转换为文本文件,然后才能嵌入到向量数据库中。此过程也称为 ETL 阶段,即提取、转换和加载。ETL 可确保对原始数据进行清理和整理,使其为存储、分析和机器学习做好准备。
转换:通过“文本分割”或“分块”处理文档,以便模型进行检索。这意味着对更新后的文档进行解析,然后根据不同的特征以目录的形式将其编入相关的“块”。例如,按段落编排的文档可能比按表格和图表编排的文档更便于模型进行搜索和检索。
您可以基于语义、句子、词元、格式、HTML 字符或代码类型等因素进行分块。许多开源框架都可以协助进行文档注入,其中包括 LlamaIndex 和 LangChain。
嵌入:嵌入技术使用专门的机器学习模型(向量嵌入模型),将数据转换为数值向量,使您能够运用数学运算来评估数据片段之间的相似性和差异性。借助嵌入技术,您可以将文本(或图像)转换为向量,从而捕获内容的核心含义,同时剔除不相关的细节。嵌入过程可能会为数据块分配数值(例如 [1.2,-0.9,0.3]),并在向量数据库这种更大的系统中为其添加索引。
在向量数据库中,此数值可帮助 RAG 架构指示内容块之间的关联,并对数据进行整理以优化检索。这种索引方式旨在对向量进行结构化处理,从而将相似的概念存储在相邻的坐标中。例如,“咖啡”和“茶”将会置于临近位置,“热饮”也会被置于较近位置。而“手机”和“电视”等不相关概念则会放置到较远位置。两个向量点之间的距离或接近程度,有助于模型判断应检索哪些信息,并将这些信息纳入用户查询的输出结果中。
- 存储:来自多个来源(您选择的外部文档及大语言模型)的组合数据会被存储在中央存储库中。
第 2 步:检索
将数据编入向量数据库后,算法便会搜索并检索与用户提示词和查询相关的信息片段。LangChain 等框架支持许多不同的检索算法,其中包括基于语义、元数据和父文档等数据相似性的检索。
在开放域使用者设置中,信息检索来自互联网上已添加索引的文档,可通过信息源的 API 对这些文档进行访问。在封闭域的企业设置中,信息需要保持私密性且不受外部来源的影响,通过 RAG 架构进行检索,这可以保持本地状态并提高安全性。
最后,将检索到的数据注入提示词中并发送给大语言模型进行处理。
第 3 步:生成
- 输出:向用户呈现响应内容。如果 RAG 方法按预期发挥作用,用户就会获得基于所提供的源知识的准确回答。
RAG 最佳实践和注意事项
要使 RAG 发挥最佳效用,效率和标准化是关键。
vLLM 是一种推理服务器和引擎,可帮助大语言模型更有效地大规模执行计算。vLLM 使用一种称为分页注意力机制的技术来管理内存,有效降低最终响应的延迟时间。凭借速度与效率优势,vLLM 非常适合用于检索增强生成系统的“生成”部分,以确保用户尽快获得回答。
要在 RAG 管道中实现数据标准化,可考虑使用模型上下文协议(MCP)。MCP 使 RAG 系统能够访问多样化的外部数据源,无需创建个性化的复杂集成方案。通过 MCP 创建标准化接口,可使 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 技术的应用。它提供了底层工作负载基础架构,用于支持向量数据库、创建嵌入、查询 LLM 和使用生成输出所需的检索机制。
通过受支持的持续协作,您能够以快速便捷的方式针对企业用例自定义 AI 模型应用。
解决方案模式:利用红帽技术和 NVIDIA AI Enterprise 构建 AI 应用
创建 RAG 应用
红帽 OpenShift AI 是一个用于构建数据科学项目并为依托 AI 的应用提供服务的平台。您可以集成支持检索增强生成(RAG)所需的所有工具,这是一种从自己的参考文档中获取 AI 答案的方法。将 OpenShift AI 与 NVIDIA AI Enterprise 关联后,您可以尝试各种大语言模型(LLM),以找到适用于您应用的最佳模型。
构建文档管道
要使用 RAG,需要先将文档导入向量数据库。在示例应用中,我们将一组产品文档嵌入了 Redis 数据库。由于这些文档经常更改,我们可以为此过程创建一个管道并定期运行,以确保始终拥有最新版本的文档。
浏览 LLM 目录
NVIDIA AI Enterprise 支持访问不同大语言模型的目录,因此您可以尝试不同的选择,并选择能够提供最佳结果的模型。这些模型托管在 NVIDIA API 目录中。设置 API 令牌后,您就可以直接从 OpenShift AI 使用 NVIDIA NIM 模型服务平台来部署模型。
选择合适的模型
在测试不同的大语言模型时,您可以对生成的每个回答进行评分。您还可以设置一个 Grafana 监控面板,用于比较各个模型的评分、延迟和响应时间。然后,您就可以根据这些数据来选择最适合在生产环境中使用的大语言模型。

开启企业 AI 之旅:新手指南
此新手指南介绍了红帽 OpenShift AI 和红帽企业 Linux AI 如何加快您的 AI 采用之旅。