admin管理员组

文章数量:1444235

什么是检索增强生成(又名 RAG

检索增强生成是一种利用来自特定相关数据源的信息来增强生成式 AI 模型的准确性和可靠性的技术。

2025年1 月 31 日 里克·梅里特

NVIDIA 艺术家对检索增强生成(又称 RAG)的概念

编者注:本文最初发表于 2023 年 11 月 15 日,现已更新。

要了解生成式人工智能的最新进展,可以想象一下法庭。

法官根据对法律的一般理解来审理和判决案件。有时,医疗事故诉讼或劳动纠纷等案件需要特殊的专业知识,因此法官会派法院书记员去法律图书馆寻找可以引用的先例和具体案例。

就像一位优秀的法官一样,大型语言模型 ( LLM ) 可以回答各种各样的人类问题。但要提供权威的答案(基于特定的法庭诉讼或类似的诉讼),模型需要获得这些信息。

人工智能的法庭书记员是一个称为检索增强生成(retrieval-augmentedgeneration,简称RAG)的过程。

“RAG” 的由来

帕特里克·刘易斯 (Patrick Lewis) 是2020 年创造该术语的论文的主要作者,他为这个不讨人喜欢的缩写词道歉,该缩写词现在描述了数百篇论文和数十种商业服务中日益壮大的方法系列,他认为这些方法代表了生成式人工智能的未来。

RAG 论文第一作者 Patrick Lewis 的照片

帕特里克·刘易斯

刘易斯在新加坡与数据库开发人员区域会议分享他的想法时接受采访时表示:“如果我们知道我们的工作会得到如此广泛的传播,我们肯定会对名字进行更多的思考。”

“我们一直计划取一个听起来更好听的名字,但到了写论文的时候,没有人有更好的主意,”现在领导人工智能初创公司 Cohere 的 RAG 团队的刘易斯说。

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

检索增强生成是一种利用从特定相关数据源获取的信息来增强生成式 AI 模型的准确性和可靠性的技术

换句话说,它填补了 LLM 工作原理的空白。从本质上讲,LLM 是神经网络,通常通过其包含的参数数量来衡量。LLM 的参数本质上代表了人类使用单词组成句子的一般模式

这种深刻理解有时被称为参数化知识,使 LLM 能够很好地应对一般性问题。然而,它并不适合那些想要深入了解特定类型信息的用户。

整合内外部资源

刘易斯和同事开发了检索增强生成技术,将生成性人工智能服务与外部资源联系起来,尤其是那些富含最新技术细节的资源。

该论文的共同作者来自前 Facebook 人工智能研究中心(现为 Meta AI)、伦敦大学学院和纽约大学,他们将 RAG 称为“一种通用的微调方案”,因为几乎任何 LLM 都可以使用它来连接几乎任何外部资源。

建立用户信任

检索增强生成为模型提供了可以引用的来源,例如研究论文中的脚注,因此用户可以检查任何声明。这建立了信任。

此外,该技术还能帮助模型消除用户查询中的歧义。它还能降低模型给出看似合理但实际错误的答案的可能性,这种现象被称为幻觉。

RAG 的另一大优势是它相对简单。Lewis和该论文的三位合著者在博客中表示,开发人员只需五行代码即可实现该过程。

这使得该方法比使用额外数据集重新训练模型更快、更便宜。并且它允许用户即时热插拔新源。

人们如何使用 RAG

借助检索增强生成,用户实际上可以与数据存储库进行对话,从而开启新的体验。这意味着 RAG 的应用范围可能是可用数据集数量的数倍。

例如,生成式人工智能模型加上医疗指数,可以成为医生或护士的得力助手。金融分析师将受益于与市场数据相关的助手。

事实上,几乎任何企业都可以将其技术或政策手册、视频或日志转化为可增强 LLM 的资源(称为知识库)。这些资源可以实现客户或现场支持、员工培训和开发人员生产力等用例。

巨大的潜力是AWS、IBM、Glean、Google、Microsoft、NVIDIA、Oracle和Pinecone等公司采用 RAG 的原因。

开始使用检索增强生成

NVIDIA AI Blueprint for RAG可帮助开发人员构建管道,使用行业领先的技术将其 AI 应用程序连接到企业数据。此参考架构为开发人员提供了构建可扩展和可定制检索管道的基础,可提供高精度和高吞吐量。

该蓝图可直接使用,也可与其他NVIDIA 蓝图结合使用,用于数字人类和AI 助手等高级用例。例如,AI 助手蓝图使组织能够构建 AI 代理,从而利用生成式 AI 和 RAG 快速扩展其客户服务运营。

此外,开发人员和 IT 团队可以免费尝试NVIDIA LaunchPad 实验室,使用 RAG 构建 AI 聊天机器人,从而实现对企业数据的快速准确响应。

所有这些资源都使用NVIDIA NeMo Retriever,它提供领先的大规模检索精度和NVIDIA NIM微服务,可简化跨云、数据中心和工作站的安全、高性能 AI 部署。这些都是作为NVIDIA AI Enterprise软件平台的一部分提供的,用于加速 AI 的开发和部署。

要使 RAG 工作流获得最佳性能,需要大量内存和计算来移动和处理数据。NVIDIA GH200 Grace Hopper 超级芯片配备 288GB 快速 HBM3e 内存和 8 petaflops 计算能力,堪称理想之选 — 与使用 CPU 相比,它可以将速度提高 150 倍。

一旦公司熟悉了 RAG,他们就可以将各种现成的或定制的 LLM 与内部或外部知识库相结合,以创建各种助手来帮助他们的员工和客户。

RAG 不需要数据中心。得益于 NVIDIA 软件, LLM 首次亮相于 Windows PC,该软件使用户即使在笔记本电脑上也能访问各种应用程序。

图表显示了在 PC 上运行 RAG

PC 上 RAG 的示例应用程序。

配备 NVIDIA RTX GPU 的 PC 现在可以在本地运行一些 AI 模型。通过在 PC 上使用 RAG,用户可以链接到私人知识源(无论是电子邮件、笔记还是文章)以改进响应。然后,用户可以放心,他们的数据源、提示和响应都保持私密和安全。

最近的一篇博客提供了使用 TensorRT-LLM 加速 Windows 的 RAG 示例,以快速获得更好的结果。

RAG 的历史

该技术的根源至少可以追溯到 20 世纪 70 年代初期。当时,信息检索研究人员制作了所谓的问答系统原型,这些应用程序使用自然语言处理 ( NLP ) 来访问文本,最初涉及棒球等狭义的话题。

多年来,这种文本挖掘背后的概念一直保持不变。但驱动它们的机器学习引擎已显著发展,提高了它们的实用性和受欢迎程度。

20 世纪 90 年代中期,Ask Jeeves 服务(现为 Ask)以其衣着考究的男仆形象让问答系统流行起来。2011 年,IBM 的 Watson 在《危险边缘!》游戏节目中轻松击败两位人类冠军,一举成为电视名人。

Ask Jeeves 的图片,这是早期的类似 RAG 的 Web 服务

如今,法学硕士正在将问答系统提升到一个全新的水平。

来自伦敦实验室的见解

这篇开创性的 2020 年论文发表时,刘易斯正在伦敦大学学院攻读 NLP 博士学位,并在伦敦一家新的人工智能实验室为 Meta 工作。该团队正在寻找将更多知识融入法学硕士参数的方法,并使用其开发的基准来衡量其进展。

在早期方法的基础上,并受到谷歌研究人员的一篇论文的启发,该团队“提出了一个令人信服的愿景,即建立一个经过训练的系统,该系统中间有一个检索索引,因此它可以学习并生成你想要的任何文本输出,”刘易斯回忆道。

IBM Watson 在电视节目“Jeopardy”上获胜的图片,推广了类似 RAG 的 AI 服务

IBM Watson 问答系统在电视游戏节目《危险边缘!》(Jeopardy!)中大获全胜后成为了名人。

当刘易斯将另一个 Meta 团队开发的很有前景的检索系统融入到正在进行的工作中时,第一批结果出乎意料地令人印象深刻。

“我把这个方案给我的主管看了,他说,‘哇,赢了。这种事情并不常见,’因为这些工作流程第一次设置时可能很难正确完成,”他说。

刘易斯还对团队成员伊桑·佩雷斯 (Ethan Perez) 和杜韦·基拉 (Douwe Kiela) 做出的巨大贡献表示赞赏,他们当时分别就职于纽约大学和 Facebook 人工智能研究中心。

这项工作在 NVIDIA GPU 集群上运行,完成后,展示了如何使生成式 AI 模型更加权威和可信。此后,数百篇论文引用了该论文,扩大和扩展了这一概念,而这一研究领域仍然活跃。

检索增强生成的工作原理

从高层次来看,检索增强生成的工作方式如下。

当用户向 LLM 提出问题时,AI 模型会将查询发送给另一个模型,该模型将其转换为数字格式,以便机器可以读取。查询的数字版本有时称为嵌入或向量(embedding or a vector)

img

在检索增强生成中,LLM 通过嵌入和重新排序模型得到增强,将知识存储在向量数据库中以进行精确的查询检索。

然后,嵌入模型将这些数值与可用知识库的机器可读索引中的向量进行比较。当它找到一个或多个匹配项时,它会检索相关数据,将其转换为人类可读的文字并将其传回 LLM。

最后,LLM 将检索到的单词和它自己对查询的响应组合成呈现给用户的最终答案,并可能引用嵌入模型找到的来源。

保持资源最新

在后台,嵌入模型不断为新的和更新的知识库创建和更新机器可读的索引(有时称为矢量/向量数据库)。

LangChain 描述的 RAG 流程图

检索增强生成将 LLM 与嵌入模型和向量数据库相结合。

许多开发人员发现,开源库 LangChain 在将 LLM、嵌入模型和知识库链接在一起方面特别有用。NVIDIA 在其参考架构中使用 LangChain 进行检索增强生成。

LangChain 社区提供了自己的RAG 流程描述。

生成式人工智能的未来在于代理式人工智能——其中 LLM 和知识库被动态编排以创建自主助手。这些人工智能驱动的代理可以增强决策能力,适应复杂的任务并为用户提供权威、可验证的结果。

类别:深度学习|解释器|生成式人工智能

标签:人工智能|事件|推理|机器学习|新的 GPU 用途| NVIDIA 蓝图| NVIDIA NeMo | TensorRT |值得信赖的 AI

其他

使用 NVIDIA GeForce RTX 50 系列 AI PC 加速 DeepSeek 推理模型

2025年1 月 31 日 安纳马莱·乔卡林加姆的分享: 最近发布的 DeepSeek-R1 模型系列为 AI 社区带来了新一轮的热潮,让爱好者和开发人员可以在本地 PC 的私密环境下运行具有解决问题、数学和代码功能的最先进的推理模型。 NVIDIA GeForce RTX 50 系列 GPU拥有高达每秒 3,352 万亿次运算的 AI 马力,可以比 PC 市场上的任何产品更快地运行 DeepSeek 系列精简模型。 一类新的推理模型 推理模型是一类新型的大型语言模型(LLM),它花费更多时间“思考”和“反思”来解决复杂问题,同时描述解决任务所需的步骤。 基本原则是,任何问题都可以通过深入思考、推理和时间来解决,就像人类解决问题一样。通过花更多时间(从而计算)解决一个问题,LLM 可以产生更好的结果。这种现象被称为测试时间扩展(test-time scaling),即模型在推理过程中动态分配计算资源以解决问题。 推理模型可以深入了解用户的需求,代表用户采取行动并允许用户对模型的思维过程提供反馈,从而增强 PC 上的用户体验,解锁代理工作流程以解决复杂的多步骤任务,例如分析市场研究、执行复杂的数学问题、调试代码等。 DeepSeek 的不同之处 DeepSeek-R1 系列精简模型基于一个拥有 6710 亿个参数的大型专家混合 (MoE) 模型。MoE 模型由多个较小的专家模型组成,用于解决复杂问题。DeepSeek 模型进一步划分工作并将子任务分配给较小的专家组。 DeepSeek 采用一种称为蒸馏的技术,从大型 DeepSeek 6710 亿参数模型构建了六个较小的学生模型系列,参数范围从 15 亿到 700 亿不等。大型 DeepSeek-R1 6710 亿参数模型的推理能力被传授给较小的 Llama 和 Qwen 学生模型,从而产生了功能强大、较小的推理模型,这些模型可以在 RTX AI PC 上本地运行,性能极佳。 RTX 上的峰值性能 推理速度对于这类新型推理模型至关重要。GeForce RTX 50 系列 GPU 采用专用的第五代 Tensor Core 构建,基于相同的 NVIDIA Blackwell GPU 架构,该架构为数据中心的世界领先 AI 创新提供了动力。RTX 可全面加速 DeepSeek,在 PC 上提供最大的推理性能。 Deepseek-R1 精简模型系列在 PC 上各个 GPU 的吞吐量性能。 在热门工具中体验 RTX 上的 DeepSeek NVIDIA 的RTX AI 平台提供了最广泛的 AI 工具、软件开发套件和模型选择,使全球超过 1 亿台 NVIDIA RTX AI PC(包括搭载 GeForce RTX 50 系列 GPU 的 PC)能够使用 DeepSeek-R1 的功能。 高性能 RTX GPU 使 AI 功能始终可用——即使没有互联网连接——并且提供低延迟和更高的隐私性,因为用户不必上传敏感材料或将他们的查询公开给在线服务。 通过庞大的软件生态系统(包括Llama.cpp、Ollama、LM Studio、AnythingLLM、Jan.AI、GPT4All 和 OpenWebUI)体验 DeepSeek-R1 和 RTX AI PC 的强大功能,进行推理。此外,还可以使用Unsloth通过自定义数据微调模型。 类别:生成式人工智能 标签:人工智能| NVIDIA RTX

教程:通过您的数据进行 ChatGPT

阅读时间:6分钟2023 年 2 月 5 日

*注意:请参阅此处此博文的 GitHub repo 。*

ChatGPT 风靡全球。数以百万计的人正在使用它。但是,虽然它对于通用知识非常有用,但它只知道它所训练过的信息,即 2021 年之前普遍可用的互联网数据。它不知道你的私人数据,也不知道最近的数据源。

如果真的有的话不是很有用吗?

这篇博文是关于如何在特定数据语料库上设置自己的 ChatGPT 版本的教程。有一个附带的 GitHub repo,其中包含本文引用的相关代码。具体来说,这处理文本数据。有关如何使用自然语言层与其他数据源交互,请参阅以下教程:

  • SQL 数据库
  • 蜜蜂

高级演练 (High Level Walkthrough)

从高层次来看,在您自己的数据上设置 ChatGPT 有两个组成部分:(1) 数据提取,(2) 数据聊天机器人。以下是从高层次上介绍每个步骤的:

数据采集

img

摄取过程图

这可以分为几个子步骤。所有这些步骤都是高度模块化的,作为本教程的一部分,我们将介绍如何替换步骤。步骤如下:

  1. 将数据源加载到文本:这涉及将来自任意源的数据加载到文本中,以便下游使用。我们希望社区能够在这方面提供帮助!
  2. 文本块:这涉及将加载的文本分成更小的块。这是必要的,因为语言模型通常对它们能够处理的文本量有限制,因此创建尽可能小的文本块是必要的。
  3. 嵌入文本:这涉及为每个文本块创建数字嵌入。这是必要的,因为我们只想为给定的问题选择最相关的文本块,我们将通过在嵌入空间中找到最相似的块来实现这一点。
  4. 将嵌入加载到 vectorstore:这涉及将嵌入和文档放入 vectorstore。Vecstorstore 可帮助我们快速高效地找到嵌入空间中最相似的块。

数据查询

img

查询流程图

这也可以分为几个步骤。同样,这些步骤是高度模块化的,并且主要依赖于可以替换的提示。步骤如下:

  1. 将聊天记录和新问题合并为一个独立问题。这是必要的,因为我们希望能够提出后续问题(这是重要的用户体验考虑因素)。
  2. 查找相关文档。使用摄取过程中创建的嵌入和向量存储,我们可以查找相关文档以找到答案
  3. 生成响应。给定独立问题和相关文档,我们可以使用语言模型来生成响应

我们还将简要介绍该聊天机器人的部署,但不会花太多时间(未来的帖子!)

数据采集

本节将详细介绍获取数据所需的步骤。

img

摄取过程图

加载数据

首先,我们需要将数据加载为标准格式。同样,由于本教程重点介绍文本数据,因此通用格式将是 LangChain Document 对象。此对象非常简单,由 (1) 文本本身、(2) 与该文本相关的任何元数据(文本来源等)组成。

由于加载数据的潜在位置非常多,我们希望社区能够大力推动这一领域。至少,我们希望获得大量关于如何从源加载数据的示例笔记本。理想情况下,我们会将加载逻辑添加到核心库中。请参阅此处了解现有示例笔记本,并参阅此处了解底层代码。如果您想做出贡献,请直接打开 PR 或打开 GitHub 问题并附上您的工作片段。

下面这行代码负责加载相关文档。如果您想更改文档加载的逻辑,则应该更改这一行代码。

代码语言:javascript代码运行次数:0运行复制
loader = UnstructuredFileLoader("state_of_the_union.txt")
raw_documents = loader.load()

拆分文本

除了加载文本之外,我们还需要确保将其分成小块。这是必要的,以确保我们只将最小、最相关的文本片段传递给语言模型。为了分割文本,我们需要初始化一个文本分割器,然后在原始文档上调用它。

下面几行代码负责这个。如果你想改变文本的分割方式,你应该改变这些行

代码语言:javascript代码运行次数:0运行复制
text_splitter = RecursiveCharacterTextSplitter()
documents = text_splitter.split_documents(raw_documents)

创建嵌入并存储在 vectorstore 中

接下来,既然我们有了小段文本,我们需要为每段文本创建嵌入并将它们存储在矢量存储中。这样做是为了让我们能够使用嵌入来找到最相关的文本片段,并将其发送到语言模型。

这是通过以下几行完成的。这里我们使用 OpenAI 的嵌入和 FAISS 矢量存储。如果我们想更改使用的嵌入或使用的矢量存储,我们可以在这里进行更改。

代码语言:javascript代码运行次数:0运行复制
embeddings = OpenAIEmbeddings()
vectorstore = FAISS.from_documents(documents, embeddings)

最后,我们保存创建的 vectorstore,以便以后使用。这样,我们只需要运行一次此 ingest 脚本。

代码语言:javascript代码运行次数:0运行复制
with open("vectorstore.pkl", "wb") as f:
  pickle.dump(vectorstore, f)

这是完整的摄取脚本!根据您的喜好修改后,您可以运行“python ingest_data.py”来运行脚本。这将生成一个“vectorstore.pkl”文件。

查询数据

现在我们已经获取了数据,现在可以在聊天机器人界面中使用它了。为此,我们将使用ChatVectorDBChain。为了定制此链,我们可以进行一些更改。

img

ChatVectorDBChain 图

精简问题提示

我们能控制的第一件事是提示,它接收聊天记录和新问题并产生一个独立问题。这是必要的,因为这个独立问题随后会用于查找相关文档。

这是一个非常重要的步骤。如果你只是用新问题来查找相关文档,你的聊天机器人就无法很好地回答后续问题(因为之前的交流中可能包含查找相关文档所需的信息)。如果你将整个聊天记录与新问题一起嵌入以查找相关文档,你可能会拉入与对话不再相关的文档(如果新问题根本不相关)。因此,将聊天记录和新问题压缩为独立问题这一步非常重要。

这个提示是文件中的 CONDENSE_QUESTION_PROMPT query_data.py

问答提示

您可以使用的另一个杠杆是接收文档的提示和用于回答问题的独立问题。这可以自定义,让您的聊天机器人具有特定的对话风格。

query_data.py此提示是文件中的 QA_PROMPT

注意:在使用 GitHub 存储库时,您必须更改此提示。其中的当前提示指定他们只应回答有关国情咨文的问题,这适用于虚拟示例,但可能不适合您的用例。

语言模型

最后要考虑的因素是你使用什么语言模型来驱动你的聊天机器人。在我们的示例中,我们使用 OpenAI LLM,但它可以轻松替换为 LangChain 支持的其他语言模型,或者你甚至可以编写自己的包装器。

综合起来

完成所有必要的定制并运行后python ingest_data.py,您如何与这个聊天机器人互动?

我们展示了一个非常简单的界面,您可以通过它来执行操作。您只需运行即可访问它python cli_app.py,这将在终端中打开一种方式来提问并得到答案。试试看吧!

img

我们还有一个通过 Gradio 部署此应用程序的示例!您可以通过运行来执行此操作python app.py。这也可以轻松部署到 Hugging Face 空间 - 请参阅此处的示例空间。

img

标签

作者:LangChain

参考

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

通过你的数据进行ChatGPT: /tutorial-chatgpt-over-your-data/

惊人的性能:借助适用于 Windows 的 TensorRT-LLM,大型语言模型在 RTX 上的运行速度最高可提高 4 倍: /

本文标签: 什么是检索增强生成(又名 RAG