RAG 101:检索增强型生成问题

这篇文章最初发表在 NVIDIA 技术博客上。

在设计和部署 RAG 工作流时,数据科学家、AI 工程师、MLOps 工程师和 IT 基础架构专业人员必须考虑各种因素:从 LLM 等核心组件到评估方法,不一而足。

关键在于,RAG 是一个系统,而不仅仅是一个模型或一组模型。该系统由几个阶段组成,在 RAG 101:揭秘检索增强生成流程 中有详细解释。所有这些阶段都提供了根据您的需求做出设计决策的机会。

以下是热门问题和答案的列表。

何时应微调 LLM 与使用 RAG?

在 LLM 领域中,在微调、高效参数微调 (PEFT)、提示工程和检索增强生成 (RAG) 之间进行选择取决于应用程序的特定需求和限制。

  • 微调通过使用特定领域的数据集更新其大部分或全部参数,为特定领域定制预训练 LLM。这种方法需要大量资源,但对于专业用例而言,准确度很高。
  • PEFT 通过更少的参数更新来修改预训练的 LLM,专注于模型的子集。它在准确性和资源使用之间取得了平衡,并在满足可管理的数据和计算需求的提示工程方面取得了改进。
  • 提示工程操作 LLM 的输入以控制其输出,而无需更改模型的参数。这是资源密集型最少的方法,适用于数据和计算资源有限的应用程序。
  • RAG 借助来自外部数据库的信息增强 LLM 提示,有效地实现了一种复杂的提示工程形式。

这并不是说使用一种或另一种技术。事实上,这些技术可以同时使用。例如,PEFT 可能会集成到 RAG 系统中,以进一步优化 LLM 或嵌入模型。最佳方法取决于应用程序的特定要求,以及在准确性、资源可用性和计算限制之间取得平衡。

如需详细了解可用于提高特定领域准确性的自定义技术,请参阅 选择大型语言模型自定义技术

使用 LLM 构建应用程序时,首先要实施 RAG,以利用外部信息增强模型的响应。这种方法可以快速提高相关性和深度。

稍后,如果您需要更多领域特定的准确性,则可以使用前面概述的模型自定义技术。这两步流程平衡了 RAG 的快速部署和有针对性的改进,通过模型自定义实现高效开发和持续增强策略。

如何在不微调的情况下提高 RAG 精度?

这个问题不仅值得发表自己的文章,还值得发表多篇文章。简而言之,在利用 RAG 的企业解决方案中获得准确性至关重要,而微调只是可能(也可能不会)提高 RAG 系统准确性的一种技术。

首先,您需要找到一种方法来测量 RAG 的准确性。如果您不知道从何入手,就无法知道如何进行改进。有几个框架可以用来评估 RAG 系统,例如RagasARES以及Bench

完成一些准确性评估后,有许多地方可以提高准确性,而无需微调。

尽管这听起来有点小题大做,但请首先检查以确保您的数据已被正确解析和加载。例如,如果文档包含表格甚至图像,某些数据加载程序可能会漏掉文档中的信息。

提取数据后,.这是将文本分割为片段的过程。一个数据块可以是固定的字符长度,但也有各种分块方法,例如句子分割和递归分块。文本的分块方式决定了如何将其存储在嵌入向量中以便检索。

除此之外,还有许多索引和相关检索模式。例如,可以为各种用户问题构建多个索引,并且可以根据 LLM 将用户查询路由到适当的索引。

还有各种检索策略。最基本的策略是将余弦相似性与索引结合使用,但 BM25、自定义检索器或知识图也可以改进检索。

根据独特的要求,对检索器的结果进行重新排序还可以提高灵活性和准确性。查询转换可以很好地分解更复杂的问题。即使更改 LLM 的系统提示也会大幅改变准确性。

归根结底,花时间进行实验并测量各种方法带来的准确性变化非常重要。

请记住,LLM 或嵌入模型等模型只是 改进 RAG 系统的方法有很多,无需进行任何微调即可实现高精度。

如何将 LLM 连接到数据源?

有各种用于将 LLM 连接到数据源的框架,例如 LangChain 和 Llamaindex.这些框架提供了各种功能,例如评估库、文档加载器和查询方法。新的解决方案也在不断涌现。我们建议阅读各种框架,并选择对您的应用程序最有意义的软件和组件。

RAG 能否引用检索数据的引用?

确实如此。实际上,如果您能够引用检索数据的来源,这将提升用户体验。在 AI 聊天机器人 RAG 工作流程的示例中,我们在 NVIDIA/GenerativeAIExamples GitHub 库中展示了如何链接回原始文档。

RAG 需要什么类型的数据?如何保护数据?

目前,RAG 已很好地支持文本数据。随着对多模态用例的更多研究进展,RAG 系统对其他形式的数据(如图像和表格)的支持也在不断改进。您可能需要根据数据及其所在位置编写额外的数据预处理工具。RAG 系统提供了多种数据加载器,有关使用 LlamaHubLangChain 构建增强型工作流的更多信息,请参阅 针对提示注入的安全 LLM 系统

确保数据安全(尤其是对于企业而言)至关重要。例如,某些索引数据可能仅面向特定的一组用户。基于角色的访问控制 (RBAC) 根据角色限制对系统的访问,可以提供数据访问控制。例如,可以在向向量数据库的请求中使用用户会话令牌,以便不会返回超出该用户权限范围的信息。

在环境中保护模型的许多术语与保护数据库或其他关键资产的术语相同。思考一下您的系统将如何记录生产流程的结果活动(提示输入、输出和错误结果)。这些活动可能为产品训练和改进提供了丰富的数据集,但也会产生数据泄露源(如 PII),就像您管理模型流程一样,必须仔细管理这些泄露源。

AI 模型在云部署方面有许多常见模式。您应该充分利用这些环境中常见的 RBAC(基于角色的访问控制)、速率限制和其他控制工具,以使您的 AI 部署更加稳健。模型只是这些强大流程的一部分。有关更多信息,请参阅 保护支持 LLM 的应用程序的最佳实践

在任何 LLM 部署中,一个重要方面是与最终用户交互的本质。许多 RAG 流程都以自然语言的输入和输出为中心。考虑如何通过输入/输出调节来确保体验满足一致的期望。

用户可以通过许多不同的方式提出问题。您可以使用以下工具来辅助 LLM:NeMo 护栏,它可以对输入和输出进行二次检查,确保您的系统以最佳状态运行,解决它专门设计解决的问题,并在其他方面为用户提供有用的指导,以解决 LLM 应用程序无法处理的问题。

如何加速 RAG 工作流?

RAG 系统由许多组件组成,因此有大量机会加速 RAG 工作流:

  • 数据预处理
  • 索引和检索
  • LLM 推理

数据预处理

重复数据删除是识别和删除重复数据的过程。在 RAG 数据预处理的背景下,重复数据删除可用于减少必须为检索索引的相同文档的数量。

NVIDIA NeMo Data Curator 利用 NVIDIA GPU 通过并行执行最小散列、Jaccard 相似度计算和连通组件分析来加速重复数据的删除。这可以显著减少处理大型数据集所需的时间。

另一个机会是分块。必须将大型文本语料库划分为更小、更易于管理的分块,因为下游嵌入模型只能对低于最大长度的句子进行编码。OpenAI 等热门嵌入模型可以对多达 1536 个令牌进行编码。如果文本具有更多令牌,则会被截断。

NVIDIA cuDF 可用于通过在 GPU 上执行并行数据帧操作来加速数据分块。这可以显著减少处理大型语料库所需的时间。

最后,您可以在 GPU 上加速分词器。分词器负责将文本转换为整数分词,然后由嵌入模型使用。文本分词过程的计算成本可能很高,对于大型数据集来说尤其如此。

索引和检索

生成嵌入通常是一个循环过程,因为 RAG(检索增强生成)非常适合频繁更新的知识库。检索在推理时完成,因此要求低延迟。这些过程可以通过 NVIDIA NeMo Retriever 来加速。NeMo Retriever 旨在提供先进的商业模型和微服务,并针对低延迟和高吞吐量进行了优化。

LLM 推理

LLM 至少用于生成完全形成的响应。LLM 还可用于查询分解和路由等任务。

在多次调用 LLM 时,LLM 的低延迟至关重要。NVIDIA NeMo 包括 TensorRT-LLM 用于模型部署,从而优化 LLM,实现突破性的推理加速和 GPU 效率。

NVIDIA Triton 推理服务器 还支持部署优化过的 LLM(大型语言模型),以实现高性能、成本效益高且低延迟的推理。

什么是降低聊天机器人延迟的解决方案?

除了使用建议来加速 RAG 工作流(例如 NeMo Retriever 和带有 Triton 推理服务器和 TensorRT-LLM 的 NeMo 推理容器)之外,重要的是考虑使用流式传输来提高聊天机器人的感知延迟。由于响应时间较长,流式传输 UI 在部分响应可用时显示这些响应,可以减轻感知延迟。

也许值得考虑使用针对您的用例进行微调的较小 LLM.通常情况下,较小的 LLM 的延迟远低于较大的 LLM.

一些经过微调的 70 亿参数模型已经演示在特定任务(例如 SQL 生成)上超越了 GPT-4 的准确性。例如,ChipNeMo TensorRT-LLM 是专为 NVIDIA 内部使用而构建的定制 LLM,它可以帮助工程师生成和优化用于芯片设计的软件。该 LLM 使用的是 130 亿参数的微调模型,而不是 70 亿参数模型。TensorRT-LLM 提供了模型优化技术,如 FlashAttention、PagedAttention、Distillation 和 Quantization,使得在本地运行较小的微调模型成为可能,从而减少了 LLM 对内存的占用。

LLM 响应的延迟是第一个令牌 (TTFT) 的时间和每个输出令牌 (TPOT) 的时间的函数。

对于较小的 LLM,TTFT 和 TPOT 都将更低。

开始在企业中构建 RAG

通过使用 RAG,您可以轻松为 LLM 提供最新的专有信息,并构建一个能够提高用户信任度、改善用户体验和减少幻觉的系统。

探索 NVIDIA AI 聊天机器人 RAG 工作流程,开始构建能够利用最新信息,以自然语言准确回答特定领域问题的聊天机器人。

阅读原文

相关推荐
算家云2 天前
moffee模型部署教程
人工智能·python·github·markdown·nvidia·ppt·幻灯片制作
坐望云起14 天前
Ubuntu20.04 更新Nvidia驱动 + 安装CUDA12.1 + cudnn8.9.7
linux·ubuntu·nvidia·cuda·onnx·1024程序员节
RZer18 天前
NVIDIA 发布适用于网络安全的 NIM Blueprint
安全·web安全·nvidia
LifeBackwards25 天前
Ubuntu安装nvidia显卡驱动
ubuntu·显卡·nvidia
great-wind1 个月前
麒麟系统离线安装英伟达驱动
nvidia
utmhikari1 个月前
【DIY小记】新手小白超频i9-12900kf和3070ti经验分享
cpu·显卡·nvidia·超频·微星
学森杰登1 个月前
大模型生成PPT大纲优化方案:基于 nVidia NIM 平台的递归结构化生成
人工智能·python·自然语言处理·chatgpt·powerpoint·nvidia
DogDaoDao1 个月前
Windows 环境搭建 CUDA 和 cuDNN 详细教程
人工智能·windows·python·深度学习·nvidia·cuda·cudnn
IC拓荒者1 个月前
英伟达NVIDIA数字IC后端笔试真题(ASIC Physical Design Engineer)
nvidia·数字ic后端·ic后端实现·ic秋招笔试·ic秋招·ic笔试真题·physical design
读书,代码与猫2 个月前
【裸机装机系列】10.kali(ubuntu)-安装nvidia独立显卡步骤
ubuntu·kali·nvidia·linux安装nvidia显卡·ubuntu安装nvidia·裸机安装linux