← 返回博客
跳至主要内容

检索增强生成 (RAG) 介绍

·17 分钟阅读
Mary Newhauser

Introduction to Retrieval Augmented Generation (RAG)

尽管不断发布越来越大、越来越智能的模型,但最先进的生成式大型语言模型 (LLM) 仍然存在一个大问题:它们难以处理需要专业知识的任务。缺乏专业知识会导致诸如幻觉等问题,模型会生成不准确或捏造的信息。检索增强生成 (RAG) 通过允许模型实时从外部来源提取利基数据来帮助缓解这个问题,从而增强其提供准确和详细响应的能力。

尽管存在这些局限性,生成模型仍然是强大的工具,可以自动化繁琐的流程,协助我们完成日常工作,并使我们能够以新的方式与数据进行交互。那么,我们如何利用它们的广泛知识,同时又使其适用于我们的特定用例呢?答案是为生成模型提供特定于任务的数据。

在本文中,我们将深入探讨检索增强生成 (RAG),这是一种通过允许模型参考外部数据来增强生成模型能力的框架。我们将探讨导致 RAG 创建的生成模型的局限性,解释 RAG 的工作原理,并分解 RAG 管道背后的架构。我们还将进行实践,概述一些实际的 RAG 用例,提出实施 RAG 的具体方法,介绍一些高级 RAG 技术,并讨论 RAG 评估方法。

注意

LLM 是一个广泛的术语,指的是在大型数据集上训练的语言模型,能够执行各种文本和语言相关任务。像聊天机器人中使用的那些,响应用户提示生成新文本的 LLM 被称为生成式 LLM,或 生成模型。将文本数据编码到语义空间中的 LLM 被称为 嵌入模型。因此,我们在本文中使用生成模型和嵌入模型这两个术语来区分这两种类型的模型。

生成模型的局限性

生成模型在大型数据集上进行训练,包括(但不限于)社交媒体帖子、书籍、学术文章和抓取的网页,使其能够获得一般的知识。因此,这些模型可以生成类似人类的文本,响应各种问题,并协助完成回答、总结和创意写作等任务。

然而,生成模型的训练数据集不可避免地是不完整的,因为它们缺乏对利基主题和数据集截止日期之外的新发展的相关信息。生成模型也无法访问内部数据库或存储库中的专有数据。此外,当这些模型不知道问题的答案时,它们经常会猜测,有时猜测得不好。这种以令人信服的方式生成不正确或捏造信息的倾向被称为幻觉,可能会在面向客户的 AI 应用程序中造成真正的声誉损害。

增强在专业任务上表现和减少幻觉的关键是向生成模型提供训练数据中没有的额外信息。这就是 RAG 发挥作用的地方。

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

检索增强生成 (RAG) 是一个框架,它通过向其提供与手头任务相关的从外部数据源检索到的额外数据来增强生成式 LLM 的通用知识。

外部数据源可以包括内部数据库、文件和存储库,以及公开可用的数据,例如新闻文章、网站或其他在线内容。访问这些数据使模型能够更准确地响应,在响应中引用其来源,并在提示关于模型原始训练数据集中未找到的信息时避免“猜测”。

RAG 的常见用例包括检索最新信息、访问专业领域知识以及回答复杂的数据驱动查询。

RAG 架构

RAG 管道的基本部分可以分解为 三个组成部分:外部知识源、提示模板和生成模型。这些组件共同使 LLM 驱动的应用程序能够通过利用有价值的特定于任务的数据来生成更准确的响应。

RAG Base

外部知识源

如果没有访问外部知识,生成模型仅限于根据其 参数知识 生成响应,该知识是在模型训练阶段学习的。有了 RAG,我们就有机会在我们的管道中加入 外部知识源,也称为 非参数知识

外部数据源通常是特定于任务的,并且很可能超出模型原始训练数据的范围,或者其参数知识。此外,它们通常存储在向量数据库中,并且在主题和格式上可能差异很大。

流行的外部数据源包括内部公司数据库、法律法规和文件、医学和科学文献以及抓取的网页。也可以在 RAG 中使用私有数据源。个人 AI 助手,如微软的 Copilot,利用多个个人数据源,包括电子邮件、文档和即时消息,以便提供定制的响应并更有效地自动化任务。

提示模板

提示是我们用来向生成模型传达请求的工具。提示可能包含几个元素,但通常包括查询、指令和指导模型生成相关响应的上下文。

提示模板 提供了一种生成标准化提示的结构化方法,可以在其中插入各种查询和上下文。在 RAG 管道中,从外部数据源检索相关数据并将其插入到提示模板中,从而增强提示。本质上,提示模板充当外部数据和模型之间的桥梁,在推理过程中为模型提供上下文相关的信息以生成准确的响应。

prompt_template = "Context information is below.\n"
"---------------------\n"
"{context_str}\n"
"---------------------\n"
"Given the context information and not prior knowledge, "
"answer the query.\n"
"Query: {query_str}\n"
"Answer: "

生成式大型语言模型 (LLM)

RAG 中的最后一个组成部分是生成式 LLM,或生成模型,它用于生成对用户查询的最终响应。增强的提示,通过外部知识库丰富,被发送到模型,该模型生成一个将模型的内部知识与新检索到的数据相结合的响应。

现在我们已经涵盖了 RAG 架构及其关键组件,让我们看看它们如何在 RAG 工作流程中协同工作。

RAG 的工作原理?

RAG 是一个多步骤框架,分为两个阶段。首先,外部知识在预处理阶段进行准备以供检索。接下来,在推理阶段,模型从外部知识库中检索相关数据,将其与用户的提示增强,并生成响应。现在,让我们更详细地了解每个阶段。

阶段 1:摄取

首先,需要准备外部知识源。本质上,外部数据需要进行清理和转换,以使模型能够理解。这称为 摄取阶段。在摄取过程中,文本或图像数据从其原始格式转换为 嵌入向量,通过称为 向量化 的过程。生成嵌入向量后,需要以允许稍后检索它们的方式进行存储。最常见的是,这些嵌入向量存储在向量数据库中,从而可以快速有效地检索用于下游任务的信息。

RAG Stages

阶段 2:推理

在外部数据被编码和存储后,它就可以在 推理 期间检索,即模型生成响应或回答问题时。推理分为三个步骤:检索、增强和生成。

RAG Workflow

检索

推理阶段从检索开始,检索外部知识源中的数据与用户查询相关。检索方法在格式和复杂性上各不相同,但是,在朴素的 RAG 模式中,外部知识被嵌入并存储在向量数据库中,相似性搜索是最简单的检索形式。

要执行相似性搜索,必须首先将用户查询嵌入到与外部数据相同的多维空间中,从而可以直接比较查询和嵌入的外部数据。在 相似性搜索 期间,计算查询和外部数据点之间的距离,返回距离最短的点,从而完成检索过程。

增强

一旦从外部数据源检索到最相关的数据点,增强过程通过将其插入到预定义的提示模板中来集成此外部信息。

生成

在增强的提示注入到模型的上下文窗口后,它将继续生成对用户提示的最终响应。在生成阶段,模型结合其内部语言理解和增强的外部数据,以生成连贯、上下文适当的答案。

此步骤涉及以流畅、自然的方式构建响应,同时利用丰富的信息以确保输出既准确又与用户的查询相关。虽然增强是关于合并外部事实,但生成是关于将这些组合的知识转化为针对特定请求量身定制的、类似人类的输出。

RAG 用例

既然我们已经涵盖了 RAG 的内容、工作原理和架构,让我们探索一些实际用例,看看如何在现实世界的场景中应用这个框架。通过使用最新、特定于任务的数据增强生成式 LLM,可以提高其准确性、相关性和处理专业任务的能力。因此,RAG 广泛用于实时信息检索、创建内容推荐系统以及构建个人 AI 助手。

实时信息检索

单独使用时,生成式模型仅限于检索其训练数据集中包含的信息。然而,在 RAG 的上下文中,这些模型可以从外部来源检索数据和信息,从而确保更准确和最新的响应。一个例子是 ChatGPT-4o 能够实时从网络直接访问和检索信息。这是一种 RAG 用例,它利用了未嵌入到向量数据库中的外部数据源,尤其适用于响应用户关于新闻或其他时事(如股票价格、旅行建议和天气预报)的查询。

内容推荐系统

内容推荐系统分析用户数据和偏好,以向用户推荐相关产品或内容。传统上,这些系统需要复杂的集成模型和大量的用户偏好数据集。RAG 通过直接将外部、上下文相关的用户数据与模型的通用知识集成,简化了推荐系统,从而生成个性化推荐。

个人人工智能助手

我们的个人数据,包括文件、电子邮件、Slack 消息和笔记,是生成式模型的宝贵数据来源。在我们的个人数据上运行 RAG 使我们能够以对话的方式与其交互,提高效率并实现日常任务的自动化。借助 Microsoft 的 Copilot 和 Notion 的 Ask AI 等人工智能助手,我们可以使用简单的提示来搜索相关文档、撰写个性化电子邮件、总结文档和会议记录、安排会议等等。

如何实现 RAG

既然我们了解了 RAG 的工作原理,那么让我们探讨如何构建一个功能性的 RAG 管道。RAG 可以通过多种不同的框架来实现,这些框架通过提供预构建的工具和模块来集成单个 RAG 组件以及向量数据库、嵌入生成工具和其他 API 等外部服务,从而简化构建过程。

LangChain、LlamaIndex 和 DSPy 都是强大的开源 Python 库,拥有积极参与的社区,它们提供强大的工具和集成,用于构建和优化 RAG 管道和 LLM 应用程序。

  • LangChain 提供构建块、组件和第三方集成,以帮助开发 LLM 驱动的应用程序。它可以与 LangGraph 结合使用,以构建代理 RAG 管道,并与 LangSmith 结合使用,以进行 RAG 评估。
  • LlamaIndex 是一个框架,它提供工具来构建与外部数据源集成的 LLM 驱动的应用程序。LlamaIndex 维护着 LlamaHub,这是一个丰富的数据加载器、代理工具、数据集和其他组件的存储库,可以简化 RAG 管道的创建。
  • DSPy 是一个模块化框架,用于优化 LLM 管道。LLM 和 RM(检索模型)都可以在 DSPy 中配置,从而实现 RAG 管道的无缝优化。
注意

Weaviate 提供 集成示例,适用于这些框架中的每一个。有关具体示例,请查看我们的笔记本,其中展示了如何使用 Weaviate 和 LlamaIndexDSPy 构建 RAG 管道。

如果您正在寻找一种快速启动 RAG 的方法,请查看 Verba,这是一个开源的开箱即用的 RAG 应用程序,具有闪亮、预构建的前端。Verba 使您能够以视觉方式探索数据集、提取见解并构建可定制的 RAG 管道,只需几个简单的步骤,而无需学习全新的框架。Verba 是一种多功能工具,可以用作测试和试验 RAG 管道的游乐场,以及用于个人任务,例如协助研究、分析内部文档和简化各种 RAG 相关任务。

使用 Verba 进行开箱即用的 RAG 实现

RAG 技术

传统的 RAG 工作流程通常由嵌入到向量数据库中的外部数据源组成,并通过相似性搜索进行检索。但是,有几种方法可以增强 RAG 工作流程,以产生更准确和更强大的结果,这些方法统称为高级 RAG。

通过结合使用图数据库和代理,可以进一步扩展 RAG 管道的功能,从而实现更高级的推理和动态数据检索。在下一节中,我们将介绍一些常见的先进 RAG 技术,并为您概述代理 RAG 和图 RAG。

高级 RAG

高级 RAG 技术可以在管道的各个阶段部署。预检索策略,如 元数据过滤 和文本 分块,可以通过缩小搜索范围并确保仅考虑最相关的数据部分来帮助提高检索效率和相关性。采用更高级的检索技术,例如 混合搜索,它结合了相似性搜索和关键字搜索的优势,也可以产生更强大的检索结果。最后,使用排名模型对检索结果进行 重新排序,并使用在特定领域数据上 微调 的生成式 LLM 有助于提高生成结果的质量。

Advanced RAG

要更深入地了解此主题,请查看我们关于 高级 RAG 技术 的博客文章。

代理 RAG

人工智能代理 是可以解释信息、制定计划和做出决策的自主系统。当添加到 RAG 管道时,代理可以重新构建用户查询并重新检索更相关的信息,如果初始结果不准确或不相关。代理 RAG 还可以处理需要多步推理的更复杂的查询,例如比较多个文档中的信息、提出后续问题以及迭代调整检索和生成策略。

要更详细地了解包含代理的 RAG 管道,请查看这篇关于 代理 RAG 的博客文章。

图 RAG

虽然传统的 RAG 在简单的问答任务中表现出色,这些任务可以通过检索单独解决,但它无法回答问题并从整个外部知识库中得出结论。图 RAG 旨在通过使用生成式模型创建知识图来解决此问题,该知识图提取并存储关键实体之间的关系,然后可以将其作为数据源添加到 RAG 管道中。这使得 RAG 系统能够响应要求比较和总结多个文档和数据源的查询。

有关构建图 RAG 管道的更多信息,请查看 Microsoft 的 GraphRAG 文档

如何评估 RAG

RAG 是一种多阶段、多步骤框架,需要整体和粒度 评估。这种方法确保了组件级别的可靠性和高级别的准确性。在本节中,我们将探讨这两种评估方法,并介绍 RAGAS,一个流行的评估框架。

RAG Evaluation

组件级别评估

在组件级别,RAG 评估通常侧重于评估检索器和生成器的质量,因为它们在生成准确和相关响应方面都发挥着关键作用。

检索器的评估围绕准确性和相关性展开。在这种情况下,准确性 衡量检索器选择直接解决查询的信息的精确程度,而 相关性 评估检索到的数据与查询的特定需求和上下文的对齐程度。

另一方面,生成器的评估侧重于保真度和正确性。保真度 评估模型生成的响应是否准确地表示相关文档中的信息,并检查响应与原始来源的一致性。正确性 评估生成的响应是否确实是事实上的,并且与基于查询上下文的真实值或预期答案相符。

端到端评估

虽然检索器和生成器是两个不同的组件,但它们相互依赖以生成对用户查询连贯的响应。

计算答案语义相似度是一种简单有效的评估检索器和生成器协同工作效果的方法。答案语义相似度计算生成响应与真实样本之间的语义相似性。与真实样本具有高度相似性的生成响应表明管道能够检索相关信息并生成上下文适当的响应。

注意

RAG评估框架提供结构化的方法、工具或平台来评估RAG管道。 RAGAS(检索增强生成评估)是一个特别受欢迎的框架,它提供了一套指标来评估检索相关性、生成质量和保真度,而无需人工标注数据。请收听这个 节目,了解更多关于RAGAS的工作原理以及优化RAGAS分数的先进技术,直接来自创建者。

RAG 与微调

RAG只是扩展生成式LLM的能力和减轻其局限性的几种方法之一。微调LLM是一种特别流行的技术,用于通过在特定领域的数据上训练模型来定制模型以执行高度专业化的任务。虽然微调可能适用于某些用例,例如训练LLM采用特定的语气或写作风格,但RAG通常是提高模型准确性、减少幻觉以及为特定任务定制LLM的最容易实现的方法。

RAG的优势在于底层生成模型权重无需更新,这可能代价高昂且耗时。RAG允许模型动态访问外部数据,从而提高准确性而无需代价高昂的重新训练。这使其成为需要实时信息的应用程序的实用解决方案。在下一节中,我们将深入探讨RAG的架构以及其组件如何协同工作以创建一个强大的检索增强系统。

总结

在本文中,我们向您介绍了RAG,这是一种利用特定任务的外部知识来提高由生成模型驱动的应用程序性能的框架。我们了解了RAG管道的不同组件,包括外部知识源、提示模板和生成模型,以及它们如何在检索、增强和生成中协同工作。我们还讨论了流行的RAG用例和实现框架,例如LangChain、LlamaIndex和DSPy。最后,我们介绍了一些专门的RAG技术,包括高级RAG方法、代理RAG和图RAG,以及评估RAG管道的方法。

至少,本文的每个部分都值得一篇单独的博客文章,甚至是一本书的整整一章。因此,我们整理了一份资源指南,其中包含学术论文、博客文章、YouTube视频、教程、笔记本和配方,以帮助您进一步了解本文中介绍的主题、框架和方法。

资源指南

📄 用于知识密集型NLP任务的检索增强生成(原始RAG论文)

👩‍🍳 使用DSPy入门RAG(配方)

👩‍🍳 使用LlamaIndex的朴素RAG(配方)

📝 高级RAG技术(博客文章)

📒 具有多文档代理的代理RAG(笔记本)

📝 RAG评估概述(博客文章)

📄 检索增强生成评估:综述(学术论文)

准备开始构建了吗?

请查看 快速入门教程,或使用 Weaviate Cloud (WCD) 的免费试用版构建令人惊叹的应用程序。

不想错过另一篇博文?

注册我们的双周时事通讯以保持更新!


提交后,我同意 服务条款 隐私政策.