AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


RAGOps 指南:构建和扩展检索增强生成系统
发布日期:2024-12-02 21:16:20 浏览次数: 1571 来源:大数据技术体系


RAGOps 指南:构建和扩展检索增强生成系统

有效实施 RAG 的架构、操作层和最佳实践

在生成式 AI 和大型语言模型驱动的应用中,检增强生成(RAG)技术被广泛应用,这一点并不让人感到惊讶。事实上,根据Databricks 的报告[1],超过 60% 的 LLM 驱动应用在某种程度上使用了 RAG。因此,在当前价值约 60 亿美元并以每年近 40% 速度增长的全球 LLM 市场中,RAG 无疑成为了必须掌握的关键技术之一。

如今,构建一个 RAG 概念验证(PoC)管道并不困难。市面上有许多现成的代码示例,可以利用 LangChain[2]LlamaIndex[3] 等框架,以及 RAGArch[4]HelloRAG[5] 等无代码/低代码平台。

与文档对话:释放 LLM 和 LangChain 的力量[6]

然而,一个生产级的 RAG 系统则由几个专门针对生成式 AI 应用的层次组成,补充了标准的软件架构。所有这些层次叠加在一起,并由技术基础设施支持,构成了一个强大的 RAG 系统设计。我们将其称为 RAG 的操作栈,或称为 RAGOps 栈。


在这篇博客中,我们将详细讨论 RAGOps 栈的组成部分。在深入了解栈的各个层次之前,我们会先通过快速介绍 RAG 和 RAG 系统的总体结构来建立背景知识。博客将包含以下几个部分:

  • 检索增强生成简介 - 此部分将介绍 RAG 的定义及其存在的意义,并结合一些实际应用案例。
  • RAG 系统结构 - 在这里,我们将探讨 RAG 管道的核心组件以及与 RAG 相关的一些挑战。
  • RAG Ops 栈:这一部分将介绍超越核心 RAG 管道的操作栈。
  • 关键层:本节将讨论生产级 RAG 系统的四个必备层次:数据层、模型层、部署层和应用编排层。
  • 重要层:本节涵盖提升 RAG 系统性能、可靠性和安全性的重要层次,包括提示层、缓存层、安全与隐私层,以及评估与监控层。
  • 增强层:本节涉及一些特定用例的层次,如人机协作、可解释性、个性化等,这些层次根据业务需求进行定制。
  • 最佳实践:最后的讨论将集中于某些挑战及克服这些挑战的最佳实践。

如果你已经熟悉 RAG 管道并对 RAGOps 栈更感兴趣,可以跳过前两节,从第三节开始阅读。希望你能像我在研究和撰写这篇文章时一样享受阅读,让我们开始吧。


检索增强生成简介

2022年11月30日,将被铭记为人工智能的分水岭时刻。OpenAI 发布了 ChatGPT,令世界为之惊叹。自那时以来快两年,生成式 AI、大型语言模型(LLMs)、Transformer 这些术语获得了前所未有的普及。这归功于 LLMs 在处理和生成自然语言(最初是文本,现在甚至包括图像和其他数据模态)的非凡能力。

LLMs 是利用称为 Transformer 架构的架构,在海量数据上训练的大型机器学习模型[7]。建议大家多了解 Transformer 和 LLMs。为了理解 RAG,重要的是要明白 LLMs 的设计目的是在给定一系列单词的情况下预测下一个单词。


LLMs 的使用量激增。用户可以写电子邮件、为他们的 Instagram 照片配上标题、与 ChatGPT 进行随意对话,甚至生成像这篇文章这样的博客。然而,随着使用量的增加,期望值也随之暴涨。总体而言,我们对任何 LLM 及其应用程序有三个期望。我们希望 LLMs 是全面的,即知道一切,是最新的,即掌握最新信息,并且每次都能准确无误。然而,LLMs 只是设计用来预测一系列单词中的下一个单词。以下是阻碍它们全面、最新和准确的三个主要限制:

  • 知识截止日期:训练一个 LLM 不仅昂贵且耗时。它需要大量的数据,并且需要数周甚至数月的时间来训练 LLM。因此,LLMs 训练的数据并不总是最新的[8]。任何在数据截止日期后发生的事件都不会出现在模型中。
  • 训练数据集限制:正如我们已经阅读过的,LLMs 已经在大量来自各种来源的数据上进行训练,包括开放互联网。它们没有任何关于非公开信息的知识。LLMs 并没有在非公开信息上进行训练,如公司内部文件、客户信息、产品文件等。
  • 幻觉:经常观察到 LLMs 提供的响应在事实上不准确。尽管在事实上不准确,LLM 的响应听起来非常自信和合法。这种"自信撒谎"的特性,被称为幻觉[9],已经成为对 LLMs 最大的批评之一。

这是否意味着这种技术没有用?绝对不是——如果是这样,炒作早已消退。由于 LLMs 出色的语言理解能力,它们可以极高效地消化和处理信息。如果你能为 LLM 指向一个信息源,它就可以处理该信息,生成准确的结果,并根植于该来源。这个信息源可以是你的公司文件、第三方数据库,甚至是互联网。


这正是检索增强生成背后的主要理念。到2024年,它已经成为生成式 AI 应用中最常用的技术之一。

什么是 RAG?

一句话概括,检索增强生成(Retrieval Augmented Generation,简称 RAG)是一种技术,通过向大型语言模型(LLM)提供它可能缺乏但回应用户查询(或在生成式人工智能领域中称为“提示”)所需的信息。为了理解 RAG,我们首先来了解“记忆”的两个概念:

  • 参数记忆[10]:大家可能知道,LLM 本身就是惊人的知识储存库。基于它们的训练数据,LLM 存储了大量的事实信息。这种内在于 LLM 的存储概念被称为“参数记忆”,即存储在模型参数中的记忆。然而,我们一直在讨论,这种参数记忆存在三个局限性,因此并不足够。
  • 非参数记忆[11]:为了让 LLM 更加实用,它还需要一些不在其参数记忆中的信息。这可以被视为“非参数记忆”,即不存储在模型参数中的记忆。

通过提供对外部非参数信息源的访问,增强 LLM 的参数记忆,从而使得 LLM 能够生成针对用户查询的准确回应的技术被称为检索增强生成

情境是关键:RAG 在语言模型中的重要性[12]

某种程度上,RAG 可以通过无限的外部非参数记忆来补充 LLM 的内部知识。来自外部来源的数据可以被引用以提高信任度和可靠性。实验证明,RAG 系统较少出现幻觉现象。让我们继续探讨 RAG 的工作原理。


它是如何工作的?

系统的核心仍然是一个大型语言模型(这个模型可以是大或小,开源或专有,基础或微调的)。我们都知道,当我们给 LLM 提示时,它会生成一个响应。但我们一直在说,这些响应可能是不理想的和不准确的。如果我们能找到一种方法,通过信息库或知识库搜索并获取准确的信息源,再将这些信息添加到提示中并传递给 LLM,我们可以期望 LLM 生成的响应是准确且基于可验证的来源的。

为了实现信息的搜索和检索,系统中引入了一个检索器组件。因此,整个过程的三个步骤变为:

  • • 检索准确的信息,
  • • 用检索到的信息增强用户提示,
  • • 最后,使用 LLM 生成准确且具情境的响应。

RAG 的实际应用

RAG 不仅仅是理论上的练习。如今,RAG 系统为搜索引擎(如 Perplexity、Google 和 Bing)、高级问答系统以及客户支持聊天机器人等对话代理提供支持。RAG 还在 AI 生成内容的个性化、教育工具和法律研究等领域得到应用。

以下是一些 RAG 系统在实际生产中的应用案例:

  1. 1. 搜索引擎体验:传统搜索结果以相关性排序的网页链接列表展示。最近,Google 搜索[13]Perplexity[14]You.com[15] 已经开始使用 RAG,以自然语言展示连贯的文本,并附带来源引用。实际上,搜索引擎公司正在构建以 LLM 为核心的搜索引擎,而 RAG 是算法的基石。甚至 ChatGPT 现在也有了网页搜索模式[16]
  2. 2. 对话代理:通过 RAG,LLM 可以根据产品/服务手册、领域知识、指南等进行定制。代理还可以根据用户查询将其引导至更专业的代理。SearchUnify 为其用户提供了一个 LLM+RAG 驱动的对话代理[17]
  3. 3. 实时事件评论:想象一下体育赛事或新闻事件。检索器可以通过 API 连接到实时更新/数据,并将此信息传递给 LLM 以创建虚拟评论员。这些还可以与文本转语音模型结合使用。IBM 在 2023 年美国公开赛期间利用该技术进行评论[18]
  4. 4. 内容生成:LLM 最广泛的应用可能就在于内容生成。使用 RAG,生成的内容可以个性化读者,融入实时趋势,并符合情境。Yarnit 是一个基于 AI 的内容营销平台,使用 RAG 执行多个任务。[19]
  5. 5. 个性化推荐:推荐引擎在数字经济中具有变革性。LLM 能够推动内容推荐的下一次演变。可以查看 Aman 的博客[20] 来了解 LLM 在推荐系统中的实用性。
  6. 6. 虚拟助手: 像 Siri、Alexa[21] 等虚拟个人助手现在正在使用 LLM 来增强体验。结合用户行为的更多背景信息,这些助手可以变得高度个性化。

创造影响:6 个实用的检索增强生成用例聚焦[22]

那么,如何构建一个这样的系统呢?


RAG 系统的结构

要构建一个支持 RAG 的系统,需要组装多个组件。其中包括为系统创建和维护非参数记忆或知识库。另一个必要的过程是通过发送提示和接受 LLM 的响应来促进实时交互,中间包含检索和增强步骤。评估也是一个关键组件,确保系统的有效性。所有这些系统组件都需要强大的服务基础设施来支持。

RAG 管道概览

检索、增强和生成组件构成了用户实时交互的生成管道。生成管道从知识库中检索信息。因此,建立一个可以创建和维护知识库的过程至关重要。这是通过另一个被称为索引管道的流程来实现的。

索引管道

用于为 RAG 应用创建知识库的流程集即为_索引管道_。它是一个非实时管道,在定期更新知识库。索引管道可以总结为以下五个步骤:

步骤 1: 连接到先前识别的外部来源

步骤 2: 从这些文档中提取文档并解析文本

步骤 3: 将长文本分解为较小的可管理段落

步骤 4: 将这些小段落转换为合适的格式

步骤 5: 存储这些信息

阅读以下博客以了解更多关于索引管道的信息:

情境是关键:RAG 在语言模型中的重要性[23]

分解技术:提升 RAG 的分块技术[24]

生成管道

用于从知识库中搜索和检索信息以生成用户查询响应的流程集即为_生成管道_。它促进了与用户的实时交互。该过程同样可以被简化为五个步骤。

步骤 1:用户向系统提出问题

步骤 2:系统搜索与输入问题相关的信息

步骤 3:检索并将相关信息添加到输入问题中

步骤 4:将问题加信息传递给 LLM

步骤 5:LLM 以情境化的答案回应

提升 RAG 系统的 7 个检索指标[25]

RAG 价值链:信息增强的大型语言模型检索策略[26]

下图展示了两个管道结合在一起,形成 RAG 系统的核心。


RAG系统的关键组成部分

除了上文提到的两个管道外,RAG系统还需要一些其他重要的组成部分。

RAG系统的主要组成部分包括:

  • 数据加载组件:负责连接外部来源,提取和解析数据。
  • 数据拆分组件:将大段文本分解成较小的可管理部分。
  • 数据转换组件:将文本数据转换为更适合的格式。
  • 存储组件:用于存储数据,以便为系统创建一个知识库。

上述四个组件构成了索引管道的核心部分。

  • 信息检索器:负责从存储中搜索和提取信息。
  • 大型语言模型(LLM)设置:负责为输入生成响应。
  • 提示管理:使得检索到的信息可以增强原始输入。

这三个组件完成了生成管道。

  • 评估组件:用于在部署前后测量系统的准确性和可靠性。
  • 监控:跟踪RAG系统的性能,帮助检测故障。
  • 服务基础设施:除了促进部署和维护外,还确保各种系统组件的无缝集成,以实现最佳性能。

其他组成部分还包括缓存,帮助存储先前生成的响应,以加快类似查询的检索速度,安全护栏,确保遵循政策、法规和社会责任,以及安全性,保护LLMs免受如提示注入、数据污染等攻击。

这种高级结构是构建稳健RAG操作栈的直觉基础。接下来,让我们深入探讨RAGOps栈。


如果你对使用LangChain在Python中编写简单的RAG管道感兴趣,可以查看以下仓库:

GitHub - abhinav-kimothi/A-Simple-Guide-to-RAG:这是示例的源代码...[27]


RAGOps 栈

标准的软件应用栈可能包括数据库、运行时、前端框架、操作系统、中间件等层。而一个RAG系统则包含额外的组件,比如向量存储和嵌入模型,这些都是索引管道的基本组成部分。知识图谱[28]越来越受欢迎,成为常用的索引结构。生成组件中可以使用不同种类的语言模型,而提示管理正变得愈发复杂。

RAG和大型语言模型(LLM)应用的生产生态系统仍在不断发展。初期的工具和设计模式已经出现。RAGOps(RAG操作)指的是在生产环境中部署、维护和优化RAG系统所涉及的操作实践、工具和流程。

注意:RAG和生成式AI一样,是一种不断发展的技术,因此其操作栈也在持续演变。你可能会看到不同的定义和结构。

RAGOps栈可以被视作分为三类的层次结构:

  1. 1. 关键层:对RAG系统的运行至关重要。如果缺少或不完整,系统可能会失败。
  2. 2. 必要层:对系统的性能、可靠性和安全性非常重要。这些必要组件将系统提升到为用户提供价值的标准。
  3. 3. 增强层:提高系统的效率、可扩展性和可用性。这些组件根据最终需求来决定,以改进RAG系统。

接下来,我们逐一讨论这些层次。

RAGOps 栈:关键层

关键层支持RAG系统的两个核心管道——索引管道和生成管道。RAGOps栈的关键层有以下四个:

数据层

数据层负责从源系统收集数据,将其为可用格式,并存储以便高效检索。它可以包括以下三个组件:

  1. 1. 数据摄取组件:从数据库、内容管理系统、文件系统、API、设备甚至互联网等源系统收集数据。 数据摄取工具: Glue、Azure Data Factory、Google Cloud Dataflow、Fivetran、Apache NiFi、Apache Kafka、Airbyte等。对于快速原型和概念验证(PoC),LangChain和LlamaIndex等框架自带一些功能,能够协助连接到某些来源并提取信息。
  2. 2. 数据转换组件:将收集到的数据从原始形式转换为可用形式。该层负责分块、嵌入、清理、元数据创建等过程。 数据转换工具:AWS Glue、Azure Data Factory、Google Cloud Dataflow、Fivetran、Apache NiFi、Apache Kafka、Airbyte、Apache Spark、dbt、Unstructured.io等。
  3. 3. 数据存储组件:以允许快速高效检索的方式存储转换后的数据。这包括文档存储、向量存储和图存储。 数据存储工具:Pinecone是一个完全托管的云原生服务向量数据库服务。Milvus、Qdrant和Chroma是一些开源向量数据库。文档存储如redis、S3等可以用于存储原始文件。Neo4j是领先的图数据存储。

坚实的数据层是高效RAG系统的基础。当需要对模型进行微调时,数据层也会派上用场。


模型层

基础模型,如大型语言模型(LLM)、嵌入等,支持生成式AI应用。这些模型可以是开源或由服务提供商提供的专有模型,有些可以进行定制训练或微调。模型层的组件包括:

  1. 1. 模型库:包含为应用选择的模型列表。可以包含预训练的LLM(基础模型)、微调模型、嵌入模型和任务特定模型。 模型:OpenAI、Google的Gemini、Voyage AI、Cohere等提供多种嵌入模型选择,也可以通过HuggingFace Transformers使用大量开源嵌入模型。OpenAI的GPT系列、Google的Gemini系列、Anthropic的Claude系列,以及Cohere的Command R系列是流行的专有LLM。Meta的Llama系列和Mistral是备受欢迎的开源模型。
  2. 2. 模型训练和微调组件:负责构建制模型和在定制数据上微调基础模型。通常应用于任务特定模型和领域适应。 模型训练和微调工具:HugginFace、AWS SageMaker、Azure ML等。
  3. 3. 推理优化组件:负责快速且经济地生成响应。 推理优化工具:ONNX和NVIDIA TensorRT-LLM是优化推理的热门框架。

模型部署

模型部署负责将RAG系统提供给应用层,并管理模型的基础设施。模型部署主要有四种方法:

  1. 1. 完全托管部署:由专有模型提供商提供,所有的模型部署、服务和扩展基础设施都由这些提供商管理和优化。 完全托管服务提供商:OpenAI、Google、Anthropic、Cohere、AWS SageMaker、Google Vertex AI、Azure Machine Learning、HuggingFace、Amazon Bedrock。
  2. 2. 自托管部署:通过云VM提供商实现。模型部署在私有云或本地,由应用开发人员管理基础设施。 自托管解决方案:AWS、GCP、Azure等VM提供商,以及Nvidia等硬件提供商,Kubernetes和Docker用于容器化,Nvidia Triton Inference Server用于推理优化。
  3. 3. 本地/边缘部署:在本地硬件或边缘设备上运行优化版本的模型,确保数据隐私、降低延迟和离线功能。 本地/边缘部署解决方案:ONNX、TensorFlow Lite、PyTorch Mobile、GGML、NVIDIA TensorRT、GPT4All。

拥有数据层和模型层后,RAG系统的大部分基本组件已经就位。接下来需要一个管理数据与模型之间协调的层,这就是应用协调层的责任。


应用协调层

应用协调层就像乐团中的指挥,负责管理系统中其他层之间的交互。协调层的主要组件包括:

  1. 1. 查询协调组件:负责接收和协调用户查询。所有预检索查询优化步骤,如查询分类、查询扩展、查询重写等都由该组件协调。
  2. 2. 检索协调组件:托管各种检索逻辑。根据查询协调模块的输入选择合适的检索方法(如密集检索或混合检索等)并与数据层交互。
  3. 3. 生成协调组件:接收查询和上下文,并协调所有检索后的步骤。其主要功能是与模型层交互并提示LLM生成输出。
  4. 4. 多代理协调组件:用于多代理RAG,多个代理处理特定任务。
  5. 5. 工作流自动化组件:有时用于管理不同组件之间的数据流和移动。

协调框架和工具:LangChain和LlamaIndex。微软的AutoGen和CrewAI是即将推出的多代理协调框架。Apache Airflow和Dagster是常用的工作流自动化工具。


这四个关键层完整地构建了核心RAG系统。该核心系统可以与终端软件应用层交互,后者充当RAG系统与用户之间的接口。应用层可以定制构建或利用Streamlit、Vercel和Heroku等托管平台。


接下来的层次将提高RAG系统的可靠性、性能和可用性。


RAGOps 栈:必要层

关键层并不负责评估或监控系统,而网络应用也容易受到网络攻击。在生成式AI领域,延迟和成本成为日益关注的问题。为了解决这些挑战并使RAG系统更具可行性,必要层提供了帮助。

提示工程

关键的应用协调层不仅负责RAG系统组件之间的协调,还管理发送给LLM的提示(或指令)。在小规模系统中,这可以由协调层独立管理,但在更复杂的系统中,提示的数量可能达到数百甚至数千。糟糕的提示会导致幻觉和不完美的响应。因此,一个单独的层对提示的设计和管理至关重要。Azure Prompt Flow、LangChain Expression Language(LCEL)、Weights & Biases prompts、PromptLayer等工具非常有用。


评估层

定期评估系统的检索准确性、上下文相关性、可信度和答案相关性是确保响应质量所必需的。TruEra的TruLens、Ragas、Weights & Biases是常用的平台和框架。ARISE、RAGAS、ARES是流行的评估框架。

之前的一篇博客详细讨论了评估。如果你感兴趣,请阅读。

停止猜测,测量你的RAG系统以推动真正的改进[29]


监控层

评估在系统开发过程中非常有用,而持续监控则确保系统的长期健康。观察处理链的执行对于理解系统行为和识别故障点至关重要。监控层除了进行常规的系统指标跟踪(如资源利用率、延迟和错误率)外,还负责评估传递给语言模型的信息。ARISE、RAGAS、ARES是同时用于评估和监控的框架。TraceLoop、TruLens和Galileo是提供监控服务的例子。

LLM安全和隐私

软件安全是一个独立且广泛的领域。在RAG的背景下,还需要考虑一些额外的因素。RAG系统需要遵循所有的数据隐私法规。AI模型容易受到操控和中毒的影响。提示注入是一种通过提示进行的恶意攻击,旨在检索敏感信息。应采用匿名化、加密、差分隐私等数据保护策略。这些策略在安全和隐私层中得以维护。Lakera、OWASP、Lasso Security等工具可以利用。

缓存层

生成式AI模型具有高成本和固有的延迟。语义缓存常见查询在一定程度上控制了这一点,因此是RAGOps栈的重要组成部分。


这些必要层与关键层结合在一起,打造出一个稳健、准确且高性能的RAG系统。


有了关键层和必要层,RAG系统已经可以投入使用。但根据开发应用的需求,可能还需要一些其他组件。


通过可选层增强RAG系统

增强层是RAGOps栈中可选的部分,但根据具体的应用环境,它们可以带来显著的收益。这些层的重点是提高系统的效率和可用性。

人类在环

提供关键的监督以减少偏见和模型幻觉。这在需要近乎完美准确性的用例中显得尤为重要。

成本优化

该层帮助高效管理资源,这对于大规模系统尤其重要。

可解释性和可解读性

该层帮助为系统决策提供透明度,特别是在需要问责制的领域中尤为重要。

协作与实验

该层增强了生产力和迭代改进。Weights and Biases是一个流行的平台,帮助跟踪实验。

多模态层

RAG应用不再仅限于文本。其他模态的数据,特别是图像,现在是RAG应用的常见特性。该层管理适配器以将多模态数据整合到RAG系统中。

还可以有更多此类层来满足反馈、个性化、扩展等需求。栈的设计理念是模块化和可扩展的。


了解了关键层、必要层和增强层后,你应该已经准备好搭建一个技术栈来构建你的RAG系统。


影响工具选择的因素

在RAG的开发中,你可以使用多种服务提供商、工具技术。在上面的讨论中,我们列举了一些示例。但如何评估选择哪个工具呢?根据你的需求,你应该考虑以下七个因素。

  1. 1. 可扩展性和性能要求: 预估的容量和可接受的延迟水平应决定自动扩展、向量数据库和推理优化工具的选择。
  2. 2. 与现有栈的集成: 如果你的系统已经在AWS、GCP或Azure上运行,使用与这些平台良好集成的服务可以简化开发和维护。
  3. 3. 成本效益: 即使是按需付费模式,成本也可能随着规模迅速上升。选择模型和部署策略时应考虑这一点。
  4. 4. 领域适应: 系统开发所针对的领域特性将对嵌入和语言模型的选择产生重大影响。这也决定是否需要定制训练或微调。
  5. 5. 供应商锁定限制: 生成式AI是一个不断发展的领域,目前还没有明确的赢家。在可能的情况下,使用可互操作的技术。这有助于保持灵活性。
  6. 6. 社区支持: 获得资源、教程、问题解决和定期更新可以加速开发并减少调试时间。像HuggingFace、LangChain等拥有活跃社区的工具更有可能提供频繁更新、插件和第三方集成。

生产中的最佳实践

在开发、部署甚至部署后,难免会出现一些问题。尽管RAG仍处于初期阶段,但一些常见问题和最佳实践的早期趋势已经显现。

解决延迟问题

由于预检索、检索、重新排序等,RAG系统增加了LLM固有的延迟。查询分类、混合检索过滤、限制相似性搜索和缓存有助于管理这种延迟。

减少幻觉

尽管RAG旨在减少幻觉,但无法完全消除。在高风险应用中,可能需要添加生成后验证和人工审核。

可扩展性策略

随着用户数量和知识库数据的增长,RAG系统可能会面临可扩展性问题。如果预计使用量会迅速增长,应采用自动扩展的向量数据库和云解决方案。

处理隐私和安全

LLM会暴露敏感数据和个人识别信息(PII)。PII屏蔽、数据编辑、隐私过滤器开始在RAGOps栈中扮演重要角色。


53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询