BLOGAnnounced at MongoDB.local NYC 2024: A recap of all announcements and updates — Learn more >

什么是检索增强生成 (RAG)?

为生成式人工智能提供支持的大型语言模型 (LLM) 是令人惊叹的工程和科学杰作,在创造或生成新事物的同时具有推理能力。 不过,要使 LLM 对您的特定生成式人工智能应用或项目发挥作用,您需要确保向它提供您自己的相关数据。 虽然 LLM 令人印象深刻,但每个人都有访问权限。 因此,您的超能力差异化来自于向他们提供您的数据 - 这就是检索增强生成 (RAG) 让我们具备这样的能力。

目录:

大型语言模型或基础模型是无所不知的通用模型,但是对专有的最新信息缺乏了解。

大型语言模型 (LLM) 和基础模型是一种人工智能 (AI),可以生成和理解多模态数据(即文本、代码、图像、视频、音频、表格)。 它们接受过海量数据集的训练,可用于各种任务,包括翻译、编写不同类型的创意内容、创作视频和音乐、以翔实的方式回答您的问题等等。

尽管 LLM 似乎提供了获得所有世界知识的机会,但它们有一些局限性。 其中一个局限性是它们生成的输出并不总是准确或最新的。 这是因为 LLM 接受的数据培训已经过时、不完整或缺乏有关特定使用案例或领域的专有知识。此外,LLM 有时会产生有偏见或令人反感的输出。LLM 的另一个局限性是它们难以从现实世界中获取和操纵知识。 这是因为 LLM 通常使用合成或基于文本的数据进行训练。 因此,LLM 可能不太了解世界是如何运作的,也不知道如何将所学知识应用于现实世界的问题。

该图显示了一个不使用 RAG 的 LLM 驱动型应用程序的示例。
检索增强生成提供上下文的最新数据,使 LLM 发挥作用。

检索增强生成是一种技术,通过让 LLM 获取上下文最新数据来解决 LLM 的局限性。 RAG 实施(有时称为 RAG 模型或模式)通过将预先训练的 LLM 与可随时获取的信息检索系统相结合而发挥作用。 检索系统负责从知识库(例如数据库)中查找相关信息。 RAG 模型使 LLM 或基础模型能够根据手头任务的最新相关背景生成更准确的答案。

RAG 模型经证明对各种知识密集型任务有效,包括:

  • 语言生成任务,例如以全面和翔实的方式回答问题,或生成不同的创意文本格式的文本内容,例如诗歌、剧本、音乐作品、电子邮件、信件等。
  • NLP 任务,例如提供对话摘要、录音和视频通话。
  • 需要分类的任务,如网络安全和合规,或推理任务,如业务规划

RAG 还可用于让生成式人工智能应用观察某些背景状态,并据此调整其生成。 例如,可以根据用户正在编写的代码来写入代码。 其他例子包括:

  • 应用程序上下文。 假设您正在构建一个由人工智能驱动的 Excel 助手——如果它知道您的工作表名称、文件名、选定的单元格区域等信息,就会有所帮助。RAG 会将这些“背景活动信息”输入到提示符中,这样 LLM 就能为您的工作表提供量身定制的帮助。
  • 个人数据(例如 代理协助聊天机器人)。 假设您正在制作一个客户支持机器人。 该机器人可以提取该特定客户以前的对话和 CRM 历史记录,以帮助定制对话(不仅是问候,还包括自定义选项等)。 没有这些历史记录,LLM 将无法有效地进行个性化设置或帮助解决现有问题。
  • 原始数字、指标、表格数据(例如 CSV、Parquet、JSON 等)。 RAG 不仅限于处理文本上下文,还包括定量信息。 Business Intelligence (BI) 聊天机器人肯定会对原始表格数据进行破坏。
  • 其他多模态数据类型,如图像、视频和音频。 许多模型,例如 DALL-E 2,都可以利用文本来创建或增强图像。 相反,它们可以将图像或视频合成自然语言。 通过为某些图像提供上下文或设计外形规格,RAG 可以使 GenAI-apps 在创建营销资产或从包含内容非常具体、信息密集的视频中生成摘要和翻译时变得更加强大。

检索增强生成对于无法合并为训练数据的数据也很有用

  • 高波动性/时效性数据:股市新闻等数据很快就会过时。 因此,更有意义的做法是仅使用最新信息来增强 LLM,最好是在推理过程中每次请求时都使用最新信息,而不是尝试使用该语料库来重新训练 LLM。
  • 敏感数据:许多表现最佳的 LLM(例如 OpenAI 的 GPT 或 Anthropic 的 Claude)都按使用量付费,归这些公司所有。 在训练数据时使用个人敏感信息来微调这些 LLMS 可能会导致私人数据泄露,并且具有潜在危险。 因此,有时 RAG 是唯一安全的选择。
RAG 的主要使用案例。

基于以上所述,RAG 最合适的使用案例包括:

  • 针对任何外部领域知识进行问题解答,例如公司特定的文档和知识库、实时操作系统、后台系统等:顾名思义,使用 LLM 处理 LLM 知识范围之外的任何数据都需要 RAG。 此外,在高度时间敏感且瞬息万变的环境中提问和回答,数据很快就会过时,因此无法通过微调将其集成到 LLM 中。
  • 减少幻觉,提高事实准确性:一般来说,即使在回答有关 LLM 训练语料库中信息的问题时,RAG 也能提高事实准确性。 这是因为 RAG 将问答任务变成“开卷测验”任务,这比无限制的问答任务更容易。
  • 个性化是 RAG 的典型用例。 在这种情况下,提示符会增加用户数据。 可以选择在插入提示符之前对任何 PII 数据进行擦除。
  • 提供上下文答案(在 Co-Pilot 内部)。 正如 Github co-pilot 所示,基于应用程序状态(当前文档、整个项目元数据、当前正在访问哪个 URL 或页面等),LLM 各代可能会更具相关性
  • 任何适用于高度特定领域上下文的 GenAI-app。 示例包括医疗保健、金融服务、法律调查以及科学和工程。 在这些领域中,训练数据通常很稀少,因此 RAG 对于构建有用的 GenAI 应用程序至关重要。
为什么要使用检索增强生成? 在构建生成式人工智能应用程序时,有哪些方法可以替代 RAG。
在构建生成式人工智能应用程序时,有许多方法可以替代 RAG。 一些最受欢迎的替代方案包括:
  • 训练您自己的 LLM:虽然可能有理由训练您自己的 LLM,但要用现有的许多商用(OpenAI GPT)和开源模型(Meta 的 LLaMa)来创造任何具有竞争力的东西,可能过于昂贵和耗时。
  • 对现有 LLM 进行微调:这是一种在较小的特定任务数据集上重新训练预训练 LLM 的技术。 微调可以有效地提高 LLM 在特定任务上的性能,但也可能既耗时又昂贵。 微调永无止境——随着新数据的出现,必须再次对模型进行微调。 当您的 GenAI 应用程序需要访问实时运营数据时,微调将无法满足您的需求。
为什么要通过微调 LLM 来检索增强生成?
  • 微调是使用“自定义数据”的 LLM 的另一种方法,但与 RAG 不同的是,RAG 就像是给 LLM 做开卷测验,而微调就像是赋予它全新记忆或做脑叶切除术。 微调可以量身定制模型,这样您就可以改变其性能、行为、成本分布等。这需要大量的时间和资源,通常无法将 LLM 建立在特定的环境中,尤其不适合企业的实时运营数据。
基本 RAG 架构的核心构建块。
一个基本的检索增强生成架构由三个主要组件组成:
  • 经过预训练的 LLM:LLM 负责生成文本、图像、音频和视频。
  • 矢量搜索(或语义搜索):检索系统负责从 LLM 外部的知识库中查找相关信息。 有多种通用数据库或单一用途矢量数据库可供选择,它们可以存储矢量嵌入并针对它们运行近似的最近邻搜索查询。 矢量搜索是能够精确增强提供给通用 LLM 的专有知识的核心。
  • 矢量嵌入:有时简称为“矢量”或“嵌入”,矢量嵌入本质上是捕获一段数据的语义或根本含义的数字表示。 一般来说,它们是一个浮点数组,其中每个浮点数代表数值表示形式的一个维度。
  • 编排:融合机制负责将 LLM 的输出与来自检索系统的信息相结合,以生成最终输出。

下图显示了基本的 RAG 架构,其零售示例与之前相同:

利用检索增强生成功能,在生成式人工智能应用中使用大型语言模型。
作为缺少特定域上下文的解决方法,检索增强生成按如下方式执行:
  • 我们从包含最新产品目录的数据库(通常是带有矢量搜索的数据库)中获取最相关的产品描述
  • 然后,我们将这些描述插入(增强)到 LLM 提示符中
  • 最后,我们指示 LLM 在回答问题时“参考”这些最新的产品信息
以上需要考虑的三件事:
  • 检索增强生成是一种纯粹的推理时间(无需重新训练)技术。 上述第 1-3 步都在推理时间内完成。无需对模型进行任何更改(例如 修改模型权重)。
  • 检索增强生成非常适合 LLM 生成的实时自定义。 由于不涉及重新训练,并且一切都是通过上下文学习完成的,因此基于 RAG 的推理速度很快(低于 100 毫秒的延迟),并且非常适合在实时操作应用程序中使用。
  • 检索增强生成使 LLM 生成更加准确和有用。 每次上下文更改时,LLM 都会生成不同的响应。 因此,RAG 使得 LLM 生成取决于检索到的任何上下文。
保持 RAG 的简单性,将其复杂性降到最低,但又能在一定规模上可靠地执行。

要实现高性能且复杂性最低的 RAG 架构,首先要选择正确的系统。 在为 RAG 实施选择系统或技术时,选择能够实现以下目标的多个系统或一个系统非常重要:

  • 支持新的矢量数据需求,而不会给您的 IT 运营带来巨大的无序扩张、成本和复杂性。
  • 确保构建的生成式人工智能体验能够以最低延迟访问实时数据。
  • 能够灵活地适应新的数据和应用程序要求,并允许开发团队在此过程中保持敏捷。
  • 最好让开发团队将整个人工智能生态系统与他们的数据结合起来,而不是相反。

选项范围从单一用途矢量数据库到具有本机矢量功能的文档和关系数据库,以及数据仓库和 Lakehouse。 但是,单一用途的矢量数据库将立即增加扩展性和复杂性。 数据仓库和 Lakehouse 本质上是为对历史数据进行长时间运行的分析类型查询而设计的,而不是 RAG 支持的 GenAI 应用程序的高容量、低延迟和新鲜数据要求。 此外,relational database 带来了严格的模式,限制了轻松添加新数据和应用程序需求的灵活性。 这使得文档数据库具有原生或内置的矢量功能。 特别是,MongoDB 建立在灵活的文档模型之上,并具有本机矢量搜索,使其成为 RAG 的矢量数据库以及适用于任何现代应用程序的行业领先数据库。

通过 RAG 实施中的附加功能,将法学硕士的力量提升到一个新的水平。

除了核心组件外,还可以在RAG实现中添加许多其他功能,以将LLM的强大功能提升到一个新的水平。 其中一些附加功能包括:

  • 多模态:多模态 RAG 模型可以生成基于文本和非文本数据的文本,例如图像、视频和音频。 将这种多模态数据与实时操作数据并排存储使得 RAG 实施更易于设计和管理。
  • 在矢量搜索查询中定义附加过滤器:在同一矢量查询中添加关键字搜索、地理空间搜索以及点和范围过滤器的功能,可提高向 LLM 提供的上下文的准确性和速度。
  • 特定域:特定域的 RAG 模型可根据特定域(如医疗保健或金融)的数据进行训练。 这样,RAG 模型就能为该领域生成更准确、更相关的文本。
在进行全球化时,确保您的生成式人工智能应用程序安全、高效、可靠、可扩展。

在进行全球化时,可以采取多种措施来确保使用 RAG 构建的 GenAI 应用程序安全、高性能、可靠且可扩展。 其中包括:

  • 使用安全且具有适当数据治理功能的平台:数据治理是一个广义的术语,包括为确保数据安全、私密、准确、可获取和可用所做的一切。 这包括围绕数据生命周期的流程、策略、措施、技术、工具和控制。 因此,平台默认情况下应是安全的,具有端到端加密功能,并达到最高级别的合规性。
  • 使用基于云的平台:除了基于云的平台提供的安全性和可扩展性功能之外,主要的云提供商也是人工智能基础架构的一些领先创新者。 选择与云无关的平台使团队能够在任何地方利用人工智能创新。
  • 使用可以将矢量工作负载基础架构与其他数据库基础架构隔离的平台:重要的是,常规 OLTP 工作负载和矢量工作负载不共享基础架构,以便这两个工作负载可以在针对各自优化的硬件上运行,并且不会争用资源,同时仍然能够利用相同的数据。
  • 使用经过规模验证的平台:提供商声称自己可以扩展是一回事,但它是否有与全球企业客户合作的历史和跟踪记录? 它是否具有关键任务容错能力和水平扩展能力,能否用客户实例来证明?

遵循这些提示,就有可能利用 RAG 架构构建安全、高性能、可靠和可扩展的、由 GenAI 驱动的应用程序。

随着Atlas Vector Search的引入,MongoDB 领先的开发者数据平台为团队提供了矢量数据库,支持构建可大规模执行的复杂、高性能 RAG 架构。 所有这一切同时保持最高水平的安全性和云不可知论,最重要的是,不会增加复杂性和不必要的成本。

开始使用 MongoDB Atlas

免费试用