检索增强生成 (RAG) 是生成式 AI 和大型语言模型驱动应用程序领域应用最广泛的技术之一,这一点并不令人意外。事实上,根据 Databricks 的一份报告,超过 60% 的 LLM 驱动应用程序以某种形式使用 RAG。因此,在目前价值约 60 亿美元且年增长率接近 40% 的全球 LLM 市场中,RAG 无疑成为掌握的关键技术之一。
如今,构建 PoC RAG 管道并不太难。有很多现成的代码利用框架示例,例如LangChain或LlamaIndex以及无代码/低代码平台,例如RAGArch、HelloRAG等。
另一方面,生产级 RAG 系统由几个专门用于生成式 AI 应用的层组成,这些层是对标准软件架构的补充。所有这些层堆叠在一起并由技术基础设施支持,构成了强大的 RAG 系统设计。我们将其称为 RAG 的操作堆栈或RAGOps 堆栈。
在在本篇博文中,我们将详细讨论 RAGOps 堆栈的组件。在深入讨论堆栈的各层之前,我们将构建一个上下文,简要介绍 RAG 和 RAG 系统的总体结构。本博文将包括以下部分:
如果您已经熟悉 RAG 管道并且对 RAGOps 堆栈更感兴趣,则可以跳过前两节并从第 3 节开始阅读。我希望您觉得这篇文章和我研究和撰写这篇文章一样有趣。让我们开始吧。
2022 年 11 月 23 日将被铭记为人工智能的分水岭。OpenAI 发布了 ChatGPT,全世界为之着迷。自那以后,我们已经快两年了,生成式人工智能、大型语言模型 (LLM)、Transformer 等术语获得了前所未有的普及。这要归功于 LLM 处理和生成自然语言(最初是文本,但现在甚至是图像和其他数据模式)的非凡能力。
LLM 是大型机器学习模型,利用一种称为 transformers 架构的架构对大量数据进行训练。我们鼓励您阅读更多有关 transformers 和 LLM 的信息。为了理解 RAG,重要的是要理解 LLM 旨在根据一系列单词预测下一个单词。
LLM 的使用量激增。用户可以撰写电子邮件、为 Instagram 照片添加标题、使用 ChatGPT 进行随意交谈,甚至可以生成类似这样的博客。然而,随着使用量的增加,期望值也激增。从高层次来看,对任何 LLM 及其构建的应用程序都有三个期望。我们希望 LLM 是全面的,即了解一切;是最新的,即掌握最新信息,并且每次都是事实正确的。另一方面,LLM 的设计只是为了预测序列中的下一个单词。有三个主要限制阻碍了它们的全面性、时效性和准确性——
这是否意味着这项技术没有用?绝对不是——现在炒作已经平息了。由于LLM具有强大的语言理解能力,因此可以极其高效地获取和处理信息。如果你可以将LLM指向信息源,它就可以处理该信息以生成基于该源的准确结果。此信息源可以是你的公司文档、第三方数据库,甚至是互联网。
这是检索增强生成背后的主要思想,并且在 2024 年,它将成为生成式 AI 应用中最广泛使用的技术之一。
简而言之,检索增强生成是一种技术,它为 LLM 提供 LLM 可能没有的信息,而这些信息对于响应用户的查询(或我们在生成式 AI 术语中称之为提示)是必要的。为了理解 RAG,让我们先了解“记忆”的两个概念——
通过提供对外部非参数信息源的访问来美化 LLM 的参数 记忆,从而使 LLM 能够对用户查询生成准确的响应的技术称为检索增强生成。
在某种程度上,RAG 可以用无限的外部非参数记忆补充 LLM 的内部知识。可以引用来自外部来源的数据以增加信任度和可靠性。事实证明,RAG 系统不太容易产生幻觉。让我们继续在此基础上进行构建,看看 RAG 是如何工作的。
系统的核心仍然是 LLM(LLM 可以是大型的也可以是小型的、开源的也可以是专有的、基础的也可以是微调的)。我们都知道,当我们提示 LLM 时,它会生成响应。但我们一直在说,这些响应可能不是最优的,也不准确。如果我们能找到一种方法来搜索信息存储或知识库以获取准确的信息源,然后将此信息添加到提示中并将其传递给 LLM,我们可以期望 LLM 生成准确且植根于可验证来源的响应。
为了实现这种信息搜索和检索,系统引入了一个检索器组件。因此,现在该过程的三个步骤变为:
RAG 不仅仅是一种理论练习。如今,RAG 系统为搜索引擎(例如 Perplexity、Google 和 Bing)、高级问答系统和对话代理(例如客户支持机器人)等应用程序提供支持。RAG 还支持 AI 生成内容的个性化,并用于教育工具和法律研究等领域。
RAG 系统在生产中的一些用例包括:
那么,如何构建一个呢?
要构建支持 RAG 的系统,需要组装多个组件。这包括为系统创建和维护非参数内存或知识库。另一个必需的过程是通过向 LLM 发送提示并接受其响应来促进实时交互,中间有检索和增强步骤。评估是另一个关键组件,可确保系统的有效性。系统的所有这些组件都需要由强大的服务基础设施支持。
检索、增强和生成组件构成了用户实时交互的生成管道。生成管道从知识库中检索信息。因此,建立一个可以创建和维护知识库的流程至关重要。这是通过另一个称为索引管道的管道完成的。
索引管道
用于为 RAG 应用程序创建知识库的一组流程构成了索引管道。它是一个非实时管道,定期更新知识库。索引管道可以概括为五个步骤 -
步骤 1:连接到先前确定的外部源
第 2 步:提取文档并从这些文档中解析文本
步骤 3:将长文本分解为较小的可管理部分
步骤 4:将这些小块转换成合适的格式
步骤 5:存储此信息
生成管道
用于从知识库中搜索和检索信息以生成对用户查询的响应的一组流程构成了生成管道。它促进了与用户的实时交互。这也可以归纳为五个步骤。
步骤 1:用户向我们的系统提出问题
第 2 步:系统搜索与输入问题相关的信息
步骤 3:获取或检索与输入问题相关的信息,并将其添加到输入问题中
步骤 4:此问题 + 信息将传递给 LLM
第 5 步:LLM 给出上下文答案
下图说明了两个管道如何结合在一起形成 RAG 系统的核心。
除了这两条管道之外,我们还可以考虑 RAG 系统中所需的其他某些组件。
RAG 系统的主要组件包括 -
上述四个组件构成了索引管道
这三个组件构成了生成流程
其他组件包括缓存(有助于存储先前生成的响应以加快对类似查询的检索)、护栏(确保遵守政策、法规和社会责任)以及安全性(保护 LLM 免受诸如提示注入、数据中毒等漏洞的侵害)。
这种高级剖析是 RAG 强大运营堆栈背后的直觉。现在让我们更深入地研究 RAGOps 堆栈。
标准软件应用程序堆栈可能包括数据库、运行时、前端框架、操作系统、中间件等层。RAG 系统包括其他组件。这些可能是向量存储和嵌入模型,它们是索引管道的基本组件。知识图谱正日益成为流行的索引结构。生成组件可以具有不同类型的语言模型。提示管理变得越来越复杂。
RAG 和 LLM 应用程序的生产生态系统仍在不断发展。早期的工具和设计模式已经出现。RAGOps(RAG 操作)是指在生产环境中部署、维护和优化 RAG 系统所涉及的操作实践、工具和流程
注意:RAG 与一般的生成式 AI 一样,是一项不断发展的技术,因此操作堆栈也在不断发展。您可能会发现不同的定义和结构。
RAGOps 堆栈可以分为三类:
现在让我们逐一讨论这些层。
关键层支持 RAG 系统的两个核心管道——索引管道和生成管道。有四个层对堆栈至关重要。
数据层负责从源系统收集数据,将其转换为可用格式并存储以供高效检索。它可以包含三个组件 -
强大的数据层是高效 RAG 系统的基础。当需要对模型进行微调时,数据层也会派上用场。
LLM、嵌入等基础模型支持生成式 AI 应用。这些模型可以是服务提供商提供的开源或专有模型。有些模型可以进行定制训练或微调。模型层的组件包括:
模型层:模型库是应用程序选择的所有模型的存储,模型训练和微调与数据层交互以获取训练数据和训练自定义模型,而推理优化组件负责高效地提供模型(来源:作者提供的图片)
模型部署负责使 RAG 系统可供应用层使用。它处理模型的基础架构。模型部署主要有四种方法 -
有了数据层和模型层,RAG 系统的大部分基本组件就位了。现在我们需要一个层来管理数据和模型之间的协调。这是应用程序编排层的职责。
应用程序编排层就像一个音乐指挥家,带领着管弦乐队中的一群音乐家。它负责管理系统中其他层之间的交互。编排层的主要组件是 -
编排框架和工具:LangChain 和 LlamaIndex。微软的 AutoGen 和 CrewAI 是即将推出的多代理编排框架。Apache Airflow 和 Dagster 是用于工作流自动化的流行工具。
这四个关键层构成了核心 RAG 系统。该核心系统可以与终端软件应用层交互,后者充当 RAG 系统与用户之间的接口。应用层可以定制构建,也可以利用 Streamlit、Vercel 和 Heroku 等托管平台。
核心 RAGOps 堆栈,其中数据、模型、模型部署和应用程序编排层与源系统和托管服务提供商交互,并与应用程序层协调以与用户交互(来源:作者提供的图片)
下一组层可提高 RAG 系统的可靠性、性能和可用性
关键层不会评估或监控系统。Web 应用程序也容易受到网络攻击。延迟和成本是生成 AI 领域日益关注的问题。为了应对这些挑战并使 RAG 系统可行,关键层会有所帮助。
关键的应用程序编排层负责协调 RAG 系统的各个组件,还负责管理作为输入发送到 LLM 的提示(或指令)。虽然在小规模系统中,编排层可以独立管理这些提示,但在更复杂的系统中,提示的数量可能达到数百甚至数千。提示不当会导致幻觉和不完美的反应。因此,单独的层对于制作和管理提示至关重要。Azure Prompt Flow、LangChain Expression Language (LCEL)、Weights & Biases prompts、PromptLayer 等工具非常有用。
定期评估系统的检索准确性、上下文相关性、忠实度和答案相关性对于确保响应质量至关重要。TruLens by TruEra、Ragas、Weights & Biases 是常用的评估平台和框架。ARISE、RAGAS、ARES 是流行的评估框架。
虽然评估在系统开发过程中很有用,但持续监控可确保系统的长期健康。观察处理链的执行对于了解系统行为和识别故障点至关重要。除了常规系统指标跟踪(如资源利用率、延迟和错误率)之外,监控层还会对进入语言模型的信息进行评估。ARISE、RAGAS、ARES 是也用于监控的评估框架。TraceLoop、TruLens 和 Galileo 是提供监控服务的提供商的例子。
软件安全是一个独立且广泛的领域。在 RAG 的背景下,会出现一些额外的考虑因素。RAG 系统需要遵守所有数据隐私法规。AI 模型容易受到操纵和毒害。提示注入是通过提示进行的恶意攻击,目的是检索敏感信息。应采用匿名化、加密、差异隐私等数据保护策略。这在安全和隐私层中维护。Lakera、OWASP、Lasso Security 等是可以利用的工具。
生成式 AI 模型成本高昂,且存在固有延迟。语义缓存常见查询可在一定程度上控制此问题,因此是 RAGOps 堆栈的重要组成部分。
这些基本层与关键层堆叠在一起,创建了一个强大、准确且高性能的 RAG 系统。
有了关键层和必要层,RAG 系统就可以运行了。但是,根据正在开发的应用程序的要求,可能还需要一些其他组件。
增强层是 RAGOps 堆栈的一部分,是可选的,但根据用例环境,可以带来显著的收益。这些重点是系统的效率和可用性。
提供关键监督以减少偏见和模拟幻觉。这在需要近乎完美准确性的用例中变得至关重要。
该层有助于有效地管理资源,这对于大型系统尤为重要。
这一层有助于为系统决策提供透明度,这对于需要问责的领域尤其重要。
这一层可提高生产力和迭代改进。Weights and Biases 是一个帮助跟踪实验的流行平台。
RAG 应用程序不再仅限于文本。其他模态数据(尤其是图像)现在已成为 RAG 应用程序的常规功能。此层管理适配器,以将多模态数据整合到 RAG 系统中。
可以有更多这样的层来满足反馈、个性化、扩展等需求。这个想法是堆栈应该是模块化和可扩展的。
了解了关键层、基本层和增强层后,您应该准备好组合技术堆栈来构建您的 RAG 系统。
在开发 RAG 系统时,您可以使用多种服务提供商、工具和技术。在上面的讨论中,我们列出了这些示例。但如何评估选择哪种工具?根据您的要求,您应该考虑七个因素。
在开发或部署过程中,甚至部署后,不可避免地会出现一些问题。尽管 RAG 仍处于起步阶段,但一些常见失误和最佳实践的早期趋势已经出现。
由于预检索、检索、重新排序等,RAG 系统增加了 LLM 固有的延迟。查询分类、混合检索过滤、限制相似性搜索和缓存有助于管理此延迟。
尽管 RAG 旨在减少幻觉,但幻觉永远无法完全消除。对于高风险应用,可能需要添加生成后验证和人工验证。
随着用户数量和知识库数据的增长,RAG 系统可能会面临可扩展性问题。如果预计使用量会快速增长,则应采用自动扩展矢量数据库和云解决方案。
LLM 可能会暴露敏感数据和 PII。PII 屏蔽、数据编辑、隐私过滤器已开始在 RAGOps 堆栈中发挥重要作用。
整体 RAGOps 堆栈支持构建生产级 RAG 系统。从 RAG 简介开始,我们深入研究了 RAG 系统的结构,然后详细讨论了 RAGOps 堆栈的各层。该领域发展迅速,每周都会推出新技术和用例。挑战也是如此。因此,RAGOps 堆栈必将不断发展。