RAG 相关技术的八个主题:https://pub.towardsai.net/a-taxonomy-of-retrieval-augmented-generation-a39eb2c4e2ab
增强生成 (RAG) 是塑造应用生成式 AI 格局的关键技术。Lewis 等人在其开创性论文中提出了一个新概念面向知识密集型 NLP 任务的检索增强生成之后,RAG 迅速成为基石,提高了大型语言模型 (LLM) 输出的可靠性和可信度。
2024 年,RAG 将成为生成式 AI 应用中最广泛使用的技术之一。
根据 Databricks 的数据,至少60% 的 LLM 应用程序采用某种形式的 RAG。
RAG 被接受的原因还在于其概念的简单性。简单来说,RAG 系统从知识库中搜索信息,并将其与查询一起发送给 LLM 以获得响应。
检索增强生成增强了 LLM 响应的可靠性和可信度
如今,RAG 涵盖了广泛的技术、模型和方法。对于新手来说,这可能会有点难以理解。随着 RAG 的不断发展,为研究人员、从业者、开发人员和业务领导者创建一个共享的语言框架至关重要。此分类法旨在阐明 RAG 的组成部分,作为理解关键构建块的指南,并提供一个路线图来引导人们探索这个有点复杂且不断发展的 RAG 生态系统。
接下来,我们会从八个主题入手,聊聊与 RAG 相关的层次结构和术语:
- RAG 基础知识:聊聊 LLM(大语言模型)的局限性,以及 RAG 是怎么解决这些问题的。
- 核心组件:看看索引和生成管道这些关键部分都涉及哪些术语。
- 评估:讨论一下在评估 RAG 时用到的各种指标、框架和标准。
- 管道设计:从简单的到高级的,再到模块化的 RAG 管道,都有哪些设计思路。
- 运营堆栈:了解一下新兴的 RAGOps 堆栈相关的术语。
- 新兴模式:多模态 RAG、代理 RAG、基于知识图谱的 RAG 这些新模式是怎么回事。
- 技术提供商:有哪些工具、解决方案和服务商可以帮助我们搭建 RAG 系统。
- 应用 RAG:看看 RAG 在实际场景中的应用方式、适用领域,以及目前面临的挑战。
RAG__32">1. RAG 基础知识
1. A——LLM 限制
知识截止日期:训练 LLM 是一个昂贵且耗时的过程。训练 LLM 需要大量数据,并且需要数周甚至数月的时间。因此,训练 LLM 所用的数据不是最新的。例如,GPT-4o 仅拥有截至 2023 年 10 月的知识。此知识截止日期之后发生的任何事件均不适用于模型。
训练数据限制:LLM 接受来自各种公共来源的大量数据的训练 — 例如Llama 3 接受的训练数据高达 15 万亿个 token(大约是 Llama 2 的 7 倍) — 但它们对非公开信息一无所知。公开的 LLM 尚未接受过公司内部文件、客户信息、产品文档等信息的训练。因此,不能指望 LLM 能够响应有关此类信息的查询。
幻觉:LLM 是下一个单词的预测者。他们没有接受过验证答案中事实的训练。因此,我们观察到 LLM 有时会提供与事实不符的答案,尽管这些答案不正确,但听起来非常自信和合法。这种“自信地撒谎”的特征被称为幻觉,已被证明是 LLM 最大的批评之一。
上下文窗口:根据架构的性质,每个 LLM 都可以处理最大数量的标记。此最大标记数称为模型的上下文窗口。如果提示比上下文窗口长,则提示超出限制的部分将被丢弃。
2024热门大模型 (LLM) 及其截止日期和背景窗口
RAG__46">1.B — RAG 概念
参数记忆:LLM 保留已训练信息的能力完全依赖于其参数。因此可以说,LLM 将事实信息存储在其参数中。LLM 内部存在的这种记忆可称为参数记忆。这种参数记忆是有限的。它取决于参数的数量,是 LLM 训练所用数据的一个因素。
非参数记忆:LLM 在其内部参数中没有但可以通过外部检索机制(如搜索引擎或数据库)访问的信息。RAG 为 LLM 提供了访问此非参数记忆的权限。
知识库:为 RAG 应用程序创建的非参数内存。它包含来自各种预定来源的信息,这些信息经过处理并存储在持久内存中
用户查询:用户(或系统)想要发送给 LLM 以寻求响应的提示
检索:从知识库中搜索并获取与用户查询相关的信息的过程。
增强:将检索到的信息添加到用户查询的过程。
生成:在提供增强提示时,LLM 生成结果的过程。
来源引文:RAG 系统能够指出知识库中用于生成响应的信息
无限内存:可以将任意数量的文档添加到 RAG 知识库
RAG的作用
2.核心组件
2.A — 索引
索引管道:用于为 RAG 应用程序创建知识库的一组流程。它是一个非实时管道,会定期更新知识库。
源系统:存储 RAG 应用程序所需数据的原始位置。这些可以是数据湖、文件系统、CMS、SQL 和 NoSQL 数据库、第三方数据存储等。
数据加载:索引管道的第一步,连接到源系统以提取和解析文件以获取 RAG 知识库中要使用的数据。
元数据:定义元数据的常见方式是“关于数据的数据”。元数据描述其他数据。它可以提供数据描述、创建时间、作者等信息。虽然元数据对于管理和组织数据很有用,但在 RAG 的背景下,元数据增强了数据的可搜索性。
数据屏蔽:对 PII 或机密数据等敏感信息进行混淆
分块:将长文本分解为较小的可管理大小或“块”的过程。分块对于高效创建 RAG 系统的知识库至关重要。分块增加了搜索的便利性并克服了 LLM 的上下文窗口限制。
迷失在中间问题(lost in middle):即使在那些具有较长上下文窗口的 LLM 中(Anthropic 的 Claude 3 具有最多 200,00 个标记的上下文窗口),也观察到准确读取信息的问题。已经注意到,如果相关信息位于提示的中间某处,准确性会急剧下降。可以通过仅将相关信息传递给 LLM 而不是整个文档来解决此问题。
固定大小分块:一种非常常见的方法是预先确定块的大小以及块之间的重叠量。有几种分块方法遵循固定大小的分块方法。块是根据固定数量的字符、标记、句子或段落创建的。
基于结构的分块:分块的目的是将有意义的数据放在一起。如果我们处理 HTML、Markdown、JSON 甚至计算机代码形式的数据,那么根据结构而不是固定大小来拆分数据更有意义。
上下文丰富的分块:此方法将较大文档的摘要添加到每个块中,以丰富较小块的上下文。这使 LLM 能够获得更多上下文,而不会增加太多噪音。它还可以提高检索准确性并保持块之间的语义一致性。这在更全面地了解信息至关重要的场景中特别有用。虽然这种方法增强了对更广泛上下文的理解,但它增加了一定程度的复杂性,并以更高的计算要求、增加的存储需求和可能的检索延迟为代价。
代理分块:在代理分块中,文本中的块是根据目标或任务创建的。考虑一个想要分析客户评论的电子商务平台。对评论进行分块的最佳方法是将与特定主题相关的评论放在同一个块中。同样,批评性评论和正面评论可以放在不同的块中。为了实现这种分块,我们需要进行情绪分析、实体提取和某种聚类。这可以通过多代理系统实现。代理分块仍然是一个活跃的研究和改进领域。
语义分块:这种方法考察句子之间的语义相似性(或意义的相似性),称为语义分块。它首先创建三个句子的组,然后合并意义相似的组。为了找出意义的相似性,该方法使用了嵌入。这仍然是一种实验性的分块技术。
从小到大分块:一种分层分块方法,首先将文本分解为非常小的单元(例如句子、段落),然后将小块合并为较大的块,直到达到块大小。滑动窗口分块使用块之间的重叠来保持跨块边界的上下文。
从小到大的分块
块大小:块的大小(以块中的标记数量来衡量)会对 RAG 系统的质量产生重大影响。虽然大尺寸的块可以提供更好的上下文,但它们也携带大量噪音。另一方面,较小的块具有精确的信息,但它们可能会错过重要信息。
元数据过滤:添加时间戳、作者、类别等元数据可以增强区块。在检索时,可以先根据相关元数据信息过滤区块,然后再进行相似性搜索。这可以提高检索效率并减少系统中的噪音。例如,使用时间戳过滤器可以帮助避免知识库中的信息过时。
元数据增强:可以通过诸如来源、时间戳、作者等标签推断出的元数据(例如块摘要、情感、类别等)可用于增强检索。
父子索引:一种按层次结构组织文档的文档结构。父文档包含总体主题或摘要,而子文档则深入探讨具体细节。在检索过程中,系统可以首先找到最相关的子文档,然后在需要时参考父文档以获取更多上下文。这种方法提高了检索的准确性,同时保持了更广泛的上下文。同时,这种层次结构在内存需求和计算负载方面可能带来挑战。
嵌入:计算机的核心是进行数学计算。数学计算是基于数字进行的。因此,计算机要处理任何类型的非数字数据(如文本或图像),必须先将其转换为数字形式。嵌入是一种对 RAG 非常有用的设计模式。嵌入是数据的矢量表示。一般来说,嵌入是已转换为 n 维矩阵的数据。词嵌入是单词的矢量表示。
嵌入是非结构化数据的矢量表示
余弦相似度:嵌入之所以流行是因为它们有助于建立单词、短语和文档之间的语义关系。余弦相似度计算为两个向量之间角度的余弦值。平行线的余弦,即角度=0 为 1,直角的余弦,即 90 为 0。另一方面,对边的余弦,即角度=180 为 -1。因此,余弦相似度介于 -1 和 1 之间,其中不相关的术语的值接近于 0,而相关术语的值接近于 1。
Word2Vec:Word2Vec 是 Google 研究人员开发的一种基于浅层神经网络的词嵌入学习模型。它是最早的词嵌入技术之一
GloVe:用于词语表示的全局向量是斯坦福大学研究人员开发的一种无监督学习技术
FastText:FastText 是 Facebook AI Research 开发的 Word2Vec 的扩展。它对于处理拼写错误和生僻词特别有用。
ELMo:语言模型的嵌入是由艾伦人工智能研究所的研究人员开发的。ELMo 嵌入已被证明可以提高问答和情感分析任务的性能。
BERT:Transformers 的双向编码器表示,由谷歌研究人员开发,是一种基于 Transformers 架构的模型。它通过考虑双向上下文来提供上下文化的词向量,在各种自然语言处理任务上实现了最佳性能。
预训练嵌入模型:在大量数据上训练的嵌入模型也可以很好地推广到许多任务和领域。有各种专有和开源的预训练嵌入模型可供使用。这也是嵌入在机器学习应用中使用率激增的原因之一。
矢量数据库:矢量数据库用于处理高维矢量(如嵌入)。这些数据库专门用于索引和存储矢量嵌入,以便进行快速语义搜索和检索。
向量索引:这些库专注于索引和搜索的核心功能。它们不支持数据管理、查询处理、接口等。它们可以被视为基本的向量数据库。向量索引的示例包括 Facebook AI 相似性搜索 (FAISS)、非度量空间库 (NMSLIB)、近似最近邻 Oh Yeah (ANNOY) 等。
2.B — 生成
生成管道:用于从知识库中搜索和检索信息以生成对用户查询的响应的一组流程。它促进与用户的实时交互。
信息检索:IR 是一门搜索科学。无论您是在文档中搜索信息,还是搜索文档本身,都属于信息检索的范围。
检索器:生成管道的组件,使用算法从知识库中搜索和检索相关信息。
布尔检索:一种基于关键字的简单搜索,其中使用布尔逻辑根据单词的出现或消失将文档与查询进行匹配。如果文档包含查询中的精确术语,则会被检索,通常与 AND、NOT 和 OR 运算符结合使用。
TF-IDF:词频-逆文档频率是一种统计方法,用于评估文档中单词相对于文档集合(语料库)的重要性。它为文档中出现频率高但在语料库中出现频率低的单词分配更高的权重。
BM25:Best Match 25 是一种高级概率模型,用于根据每篇文档中出现的查询词对文档进行排名。它属于概率信息检索模型系列,被认为是对经典 TF-IDF 模型的改进。BM25 带来的改进是它会根据文档的长度进行调整,这样较长的文档就不会不公平地获得更高的分数。
静态词嵌入:Word2Vec 和 GloVe 等静态嵌入将单词表示为连续向量空间中的密集向量,根据上下文捕获语义关系。例如,“国王” — “男人” + “女人”近似于“女王”。这些嵌入可以捕捉相似性和类比性等细微差别,而 BoW、TF-IDF 和 BM25 则无法捕捉这些细微差别。
上下文嵌入:上下文嵌入由 BERT 或 OpenAI 的文本嵌入等模型生成,可为查询和文档生成高维、上下文感知的表示。这些基于转换器的模型可捕获深层语义含义和关系。例如,关于“苹果”的查询将根据输入查询检索讨论苹果水果或苹果科技公司的文档。
静态嵌入与上下文嵌入
学习稀疏检索:使用神经网络生成稀疏、可解释的表示。示例:SPLADE、DeepCT、DocT5Query
密集检索:将查询和文档编码为密集向量以进行语义匹配。示例:DPR(密集段落检索器)、ANCE、RepBERT
混合检索:结合稀疏和密集方法,实现效率和效果的平衡。示例:ColBERT、COIL
跨编码器检索:使用转换器模型直接比较查询-文档对。示例:基于 BERT 的重新排序器
基于图的检索:利用图结构来模拟文档之间的关系。示例:用于 IR 的 TextGraphs、GraphNeural Networks
量子启发检索:将量子计算原理应用于信息检索。示例:量子语言模型 (QLM)
神经 IR 模型:涵盖各种基于神经网络的信息检索方法。示例:NPRF(神经 PRF)、KNRM(基于核的神经排序模型)
增强:将用户查询和从知识库检索到的文档相结合的过程。
提示工程:向 LLM 发出指令以实现期望结果的技术。提示工程的目标是构建提示,以实现 LLM 响应相对于期望结果的准确性和相关性。
上下文提示:添加类似“仅根据提供的上下文回答”的指令,以设置生成仅关注提供的信息,而不是来自 LLM 的内部知识(或参数知识)。
受控生成提示:添加一条指令,例如“如果根据提供的上下文无法回答问题,请说我不知道。”以确保模型的响应基于检索到的信息
少量提示:LLM 非常遵守提示中提供的示例。在提示中提供检索到的信息时,指定某些示例以帮助指导生成如何使用检索到的信息。
思路链提示:据观察,引入中间“推理”步骤可以提高 LLM 在需要复杂推理(如算术、常识和符号推理)的任务中的表现。
自我一致性:虽然 CoT 在思维链提示中使用单一推理链,但自我一致性旨在对多个不同的推理路径进行采样,并使用它们各自的生成来得出最一致的答案
生成的知识提示:该技术通过动态构建相关知识链,利用模型的潜在知识来加强推理,探索基于提示的知识生成的想法。
思维树提示:这种技术维护着一个可探索的树形结构,该结构由旨在解决问题的连贯的中间思维步骤组成。
自动推理和工具使用 (ART):ART 框架自动将模型生成与工具使用交错起来,以完成复杂的推理任务。ART 利用演示来分解问题并集成工具,而无需特定于任务的脚本。
自动提示工程师 (APE):APE 框架自动生成并选择最佳指令来指导模型。它利用大型语言模型根据输出演示为任务合成候选提示解决方案。
主动提示:主动提示通过涉及查询、不确定性分析、人工注释和增强推理的过程,动态地将语言模型适应于特定任务的提示,从而改进思路链方法。
ReAct 提示:ReAct 集成 LLM 以进行并发推理跟踪和特定于任务的操作,通过与外部工具交互进行信息检索来提高性能。与 CoT 结合使用时,它可以最佳地利用内部知识和外部信息,从而提高 LLM 的可解释性和可信度。
递归提示:递归提示将复杂问题分解为子问题,使用提示按顺序解决它们。这种方法有助于在数学问题或问答等任务中进行组合概括,模型建立在先前步骤的解决方案之上。
基础模型:预先训练的大型语言模型,这些模型已在海量数据上进行训练。一些 LLM 开发人员将模型权重公开,以促进协作和社区驱动的创新,而另一些开发人员则将模型保持封闭,以提供支持、托管服务和更好的用户体验
监督式微调 (SFT):监督式微调是一种用于调整预训练语言模型以适应特定任务或行为(如问答或聊天)的过程。它涉及在标记数据集上进一步训练预训练的基础模型,其中模型学习将输入映射到特定的期望输出。
LLM 的监督微调 (SFT)
小型语言模型 (SLM):参数大小为数百万或数十亿的小型模型具有以下优势:推理时间更快、资源使用率更低、更容易在边缘设备或资源受限的环境中部署
3.评估
3.A — 指标
评估指标:用于评估检索和生成以及整个 RAG 系统的性能的定量指标。
准确度:在所检查的案例总数中,正确预测(真阳性和真阴性)的比例。尽管准确度是一个简单、直观的指标,但它并不是检索的主要指标。在大型知识库中,大多数文档通常与任何给定查询无关,这可能导致误导性的高准确度分数。它不考虑检索结果的排名。
准确率:它衡量检索到的与用户查询相关的文档的比例。它回答了以下问题:“在检索到的所有文档中,有多少是真正相关的?”
精度@k:精度的一种变体,用于衡量前“k”个检索结果中相关文档的比例。它特别重要,因为它关注的是前几个结果,而不是所有检索到的文档。
召回率:它衡量从语料库中的所有相关文档中检索到的相关文档的比例。它回答了“在所有相关文档中,实际检索到多少?”的问题。与精确度一样,召回率也不考虑检索到的文档的排名。它也可能具有误导性,因为检索知识库中的所有文档将产生完美的召回率值。
F1 分数:准确率和召回率的调和平均值。它提供了一个平衡检索器质量和覆盖率的单一指标。
平均倒数排名 (MRR): 有助于评估相关文档的排名,它衡量结果列表中第一个相关文档的排名的倒数。MRR 是根据一组查询计算的。
平均准确率 (MAP):一种结合不同“k”截止水平(即最佳结果的截止数)的准确率和召回率的指标。它计算一个称为平均准确率的指标,然后在所有查询中取平均值。
归一化折现累积增益 (nDCG): 通过考虑相关文档在结果列表中的位置来评估排名质量,并为较早出现的相关文档分配更高的分数。这对于文档具有不同程度相关性的场景特别有效。
计算 nDCG
上下文相关性:评估检索到的文档与原始查询的关联程度。关键方面包括主题对齐、信息有用性和冗余度。检索到的上下文应仅包含与查询或提示相关的信息。对于上下文相关性,估计一个度量“S”。‘S’ 是检索到的上下文中与响应查询或提示相关的句子数。
答案忠实度: 衡量答案在检索到的上下文中事实依据的程度。忠实度确保答案中的事实不与上下文相矛盾,并且可以追溯到源头。它还确保 LLM 不会产生幻觉。忠实度首先确定答案中提出的“声明”的数量,然后计算这些“声明”在上下文中的比例。
幻觉率:计算响应中生成的声明在检索到的上下文中不存在的比例
覆盖率:衡量上下文中相关主张的数量,并计算生成的响应中相关主张的比例。这衡量了生成的答案中包含了多少从检索到的段落中获得的相关信息。
答案相关性:衡量答案与查询的相关程度。该指标侧重于系统理解查询的能力、答案与查询的相关性以及答案的完整性等关键方面。
基本事实:已知为真实或正确的信息。在 RAG 和一般的生成式 AI 领域中,基本事实是一组准备好的提示-上下文-响应或问题-上下文-响应示例,类似于监督机器学习术语中的标记数据。为您的知识库创建的基本事实数据可用于评估您的 RAG 系统。
人工评估:主题专家查看文档并确定输出的相关性和准确性。
抗噪性:假设 RAG 系统知识库中存储的信息经过精心设计,能够回答系统可能提出的问题,这是不切实际的。文档很可能与用户查询相关,但没有任何有意义的信息来回答查询。RAG 系统将这些嘈杂文档与相关文档分离的能力就是抗噪性。
负面拒绝:从本质上讲,大型语言模型总是生成文本。知识库中的文档中可能完全没有关于用户查询的信息。当没有相关信息时,RAG 系统不给出答案的能力就是负面拒绝。
信息集成:为了全面回答用户查询,很可能必须从多个文档中检索信息。系统从多个文档中吸收信息的能力就是信息集成。
反事实稳健性:有时知识库中的信息本身可能不准确。高质量的 RAG 系统应该能够解决这个问题,并拒绝检索到的信息中已知的不准确性。这种能力就是反事实稳健性
3.B — 框架
框架:旨在促进评估的工具,可实现评估过程和数据生成的自动化。它们用于通过提供结构化环境来测试 RAG 系统的不同方面,从而简化评估过程。它们非常灵活,可以适应不同的数据集和指标。
RAGAS:检索增强生成评估 (RAGA) 是由 Exploding Gradients 开发的一个框架,用于评估 RAG 系统的检索和生成组件,而无需依赖大量人工注释。RAGA 还有助于综合生成可用于评估 RAG 管道的测试数据集
合成测试数据集生成:使用 LLM 等模型从知识库中自动生成基本事实数据。
LLM 作为评判者:使用 LLM 来评估任务。
ARES:自动化 RAG 评估系统(简称 ARES)是由斯坦福大学和 Databricks 的研究人员开发的框架。与 RAGA 一样,ARES 使用 LLM 作为评估的评判方法。
3.C — 基准
基准:用于衡量 RAG 系统性能的标准化数据集及其评估指标。基准为比较不同的 RAG 方法提供了共同基础。基准通过考虑固定任务和评估标准来确保评估的一致性。
BEIR 或基准信息检索:基于 9 个 IR 任务和 19 个问答数据集的综合、异构基准。
BEIR——9 项任务和 18 个数据集(共 19 个)
检索增强生成基准 (RGB):于 2023 年 12 月推出,包含 600 个基本问题和 400 个附加问题,英语和中文各占一半。该基准侧重于 RAG 系统的四个关键能力——抗噪性、负面拒绝、信息集成和反事实鲁棒性。
Multihop RAG:由香港科技大学研究人员策划,Multihop RAG 包含 2556 个查询,每个查询的证据分布在 2 到 4 个文档中。查询还涉及文档元数据,反映了现实世界 RAG 应用中常见的复杂场景。
综合 RAG:由 Meta 和香港科技大学策划的 CRAG 是一个事实问答基准,包含 4,409 个问答对和模拟 API,用于模拟 Web 和知识图谱 (KG) 搜索。它包含 5 个领域的 8 种查询类型
4. 管道设计
RAG_312">4.A — 幼稚的 RAG
朴素 RAG:一种具有顺序索引、检索、增强和生成过程的基本线性方法。
检索-阅读:检索器读取信息,LLM 读取该信息以生成结果
RAG 故障点:如果检索器无法检索整个上下文或检索到不相关的上下文,则 RAG 系统可能会失败,尽管提供了上下文,LLM 也不会考虑它,而是从上下文中选择不相关的信息而不是回答查询。
脱节的上下文:当从不同的源文档检索信息时,两个块之间的转换变得突然。
过度依赖上下文:有时会发现,LLM 过度依赖检索到的上下文,而忘记从其自身的参数内存中提取信息。
RAG_324">4.B — 高级 RAG
高级 RAG:在检索前、检索和检索后阶段进行干预的管道,以克服朴素 RAG 的局限性。
重写-检索-重新排序-阅读:通过添加重写和重新排序组件,改进检索-阅读框架
高级 RAG 作为重写-检索-重新排序-读取模式
索引优化:索引优化用于索引流程,其目的是建立知识库以便更好地检索。
查询优化:查询优化的目标是调整输入的用户查询,使其更适合检索任务
查询扩展:丰富原始用户查询,以检索更多相关信息。这有助于提高系统的召回率,并克服不完整或非常简短的用户查询的挑战。
多查询扩展:在这种方法中,使用 LLM 生成原始查询的多个变体,并且每个变体查询用于从知识库中搜索和检索块。
子查询扩展:在这种方法中,复杂的查询被分解为更简单的子查询,而不是生成原始查询的变体。
后退扩展:该术语来自后退提示方法,其中原始查询被抽象为更高级别的概念查询。
查询转换:在查询转换中,检索不是使用原始用户查询,而是使用更适合检索者的转换查询
查询重写:查询是从输入中重写的。在相当多的实际应用中,输入可能不是直接查询或适合检索的查询。基于输入,可以训练语言模型将输入转换为可用于检索的查询。
假设文档嵌入:HyDE 是一种技术,其中语言模型首先生成针对用户查询的假设答案,而无需访问知识库。然后,使用生成的答案对知识库中的文档嵌入执行相似性搜索,从而有效地检索与假设答案(而非查询本身)相似的文档。
查询路由:根据意图、领域、语言、复杂性、信息来源等标准,将用户查询路由到适当的工作流,从而优化用户查询
混合检索:混合检索策略是生产级 RAG 系统的重要组成部分。它涉及结合检索方法以提高检索准确性。这可能意味着简单地使用基于关键字的搜索以及语义相似性。它还可以意味着结合所有稀疏嵌入、密集嵌入向量和基于知识图的搜索。
稀疏、密集和图形检索的混合
迭代检索:在这种方法中,检索发生“n”次,并且每次使用生成的响应来进一步检索文档。
递归检索:这种方法通过在每次生成之后转换检索查询来改进迭代方法。
自适应检索:这是一种更智能的方法,其中 LLM 可以确定最合适的时刻和最合适的检索内容。
上下文压缩:通过仅提取与查询相关且重要的部分来减少检索信息的长度。这对系统的成本和效率也有积极影响。
重新排序:从不同来源和技术检索到的信息可以进一步排序,以确定最相关的文档。重新排序,就像混合检索一样,在生产 RAG 系统中已成为必需品。为此,可以使用的常用重新排序器(如多向量、学习排序 (LTR)、基于 BERT 的重新排序器,甚至混合重新排序器)正在变得越来越突出。
RAG_372">4.D — 模块化 RAG
模块化 RAG:模块化 RAG 将传统的单片 RAG 结构分解为可互换的组件。这样可以根据特定用例定制系统。模块化方法为检索器、索引和生成等 RAG 组件带来了模块化,同时还添加了搜索、内存和融合等更多模块。
搜索模块:用于对不同的数据源进行搜索,针对不同的数据源进行定制。
RAG-Fusion:通过多查询方法克服传统搜索系统的局限性,从而改进传统搜索系统。
记忆模块:记忆模块利用 LLM 固有的“记忆”,即通过预训练在其参数内编码的知识。
路由:RAG 系统中的路由会浏览不同的数据源,为查询选择最佳路径,无论是涉及汇总、特定数据库搜索还是合并不同的信息流。
任务适配器:此模块使 RAG 能够适应各种下游任务,从而允许使用最少的示例开发特定于任务的端到端检索器,从而展示处理不同任务的灵活性。任务适配器模块允许对 RAG 系统进行微调,以适应摘要、翻译或情感分析等特定任务。
操作栈
5.A — 关键层
关键层:RAG 系统运行的基本组件。如果任何一层缺失或不完整,RAG 系统很可能会失败
数据层:数据层在创建和存储 RAG 知识库方面发挥着重要作用。它负责从源系统收集数据,将其转换为可用格式并存储起来,以便高效检索。
模型层:预测模型支持生成式 AI 应用。有些模型由第三方提供,有些则需要定制训练或微调。生成快速且经济高效的模型响应也是利用预测模型的一个重要方面。此层包含模型库、训练和微调以及推理优化组件。
RAGOps 栈的模型层
完全托管部署:由服务提供商提供的部署,其中模型部署、服务和扩展的所有基础设施均由这些提供商管理和优化
自托管部署:在这种情况下,模型部署在私有云或本地,基础架构由应用程序开发人员管理。Kubernetes 和 Docker 等工具广泛用于模型的容器化和编排,而 Nvidia Triton 推理服务器可以优化 Nvidia 硬件上的推理。
本地/边缘部署:在本地硬件或边缘设备上运行模型的优化版本,确保数据隐私、减少延迟和离线功能。
应用程序编排层:负责管理系统中其他层之间交互的层。它是一个中央协调器,可实现数据、检索系统、生成模型和其他服务之间的通信。
5.B — 基本层
基本层:重点关注系统的性能、可靠性和安全性的层。这些基本组件使系统达到为用户提供价值的标准。
提示层:管理增强和其他 LLM 提示。
评估层:管理对检索准确性、上下文相关性、忠实性和答案相关性的定期评估,以确保响应的质量。
监控层:持续监控可确保 RAG 系统的长期健康。了解系统行为并识别故障点、评估信息的相关性和充分性以及跟踪常规系统指标(如资源利用率、延迟和错误率)构成了监控层的一部分。
LLM 安全与隐私层:RAG 系统依赖于存储在矢量数据库中的大型知识库,这些知识库可能包含敏感信息。它们需要遵守所有数据隐私法规、数据保护策略(如匿名化、加密、差异隐私、查询验证和清理以及输出过滤),以协助防范攻击。实施护栏、访问控制、监控和审计也是安全和隐私层的组成部分。
缓存层:缓存正在成为任何基于 LLM 的应用程序的一个非常重要的组件。这是因为生成式 AI 模型的成本高且固有延迟。随着检索层的增加,RAG 系统的成本和延迟进一步增加。
RAGOps 栈包含关键层和必要层
5.C — 增强层
增强层:提高系统效率、可扩展性和可用性的层。这些组件用于改善 RAG 系统,并根据最终要求决定。
人机交互层:在需要人为判断的地方提供关键监督,特别是对于需要更高精度或道德考虑的用例。
成本优化层:帮助有效地管理资源,这对于大型系统尤为重要。
可解释性和可解释性层:为系统决策提供透明度,对于需要问责的领域尤其重要
协作和实验层:对于从事开发和实验的团队有用,但对于系统操作并不重要
6. 新兴模式
6.A —知识图谱
知识图谱驱动的 RAG:使用知识图谱结构不仅可以增加上下文理解,而且还可以为系统提供增强的推理能力和更好的可解释性。
知识图谱:知识图谱以结构化的方式将数据组织为实体和关系。
GraphRAG:微软开发的开源框架,有助于从源文档自动创建知识图谱,然后使用知识图谱进行检索。
图社区:将实体和关系分成几组。
社区摘要:LLM 为社区生成摘要,提供对主题结构和语义的见解
本地搜索:从知识图谱中识别一组与用户输入在语义上相关的实体
全局搜索:基于社区摘要的相似性搜索。
本体:知识的正式表示形式,即某个领域内的一组概念以及这些概念之间的关系。
6.B — 多式联运
多模态 RAG:在检索和生成过程中,除了文本之外,还使用图像、音频、视频等其他模态。
模态:特定类型的输入数据,例如文本、图像、视频或音频。多模态系统可以同时处理多种模态。
多模态嵌入:一种统一的向量表示,对多种数据类型(例如,文本和图像嵌入的组合)进行编码,以实现跨不同模态的检索。
CLIP(对比语言-图像预训练):OpenAI 开发的一种从自然语言监督中学习视觉概念的模型,常用于跨模态检索和生成
将不同模态的数据映射到共享嵌入空间
对比学习:一种通过使语义相似的数据点在共享嵌入空间中更接近来跨不同模态对齐数据的学习方法。
6.C — Agentic
Agentic RAG:利用基于 LLM 的代理来调整 RAG 工作流以适应查询类型和知识库中的文档类型。
自适应框架:根据不断变化的环境和数据调整检索和生成策略的动态系统,确保相关的响应。
路由代理:负责将用户查询引导至最合适的源或子系统以进行有效处理的代理。
查询规划代理:将复杂查询分解为子查询并管理其在不同检索管道中的执行的代理。
每个文档多个向量:为每个文档生成多个向量表示以捕获其内容的不同方面的技术。
7. 技术供应商
7.A — 模型访问、训练与微调
- OpenAI
- HuggingFace
- Google Vertex AI
- Anthropic
- AWS Bedrock
- AWS Sagemaker
- Cohere
- Azure Machine Learning
- IBM Watson AI
- Mistral AI
- Salesforce Einstein
- Databricks Dolly
- NVIDIA NeMo
7.B — 数据加载
- Snorkel AI
- LlamaIndex
- LangChain
- Scale AI
7.C — 向量数据库与索引
- Pinecone
- Milvus
- Chroma
- Weaviate
- Deep Lake
- Qdrant
- Elasticsearch
- Vespa
- Redis(支持向量搜索)
- Vald
- Zilliz
- Marqo
- PGVector(PostgreSQL 扩展)
- MongoDB(支持向量功能)
- SingleStore
7.D — 应用框架
- LangChain
- LlamaIndex
- Haystack
- CrewAI(智能体编排)
- AutoGen(智能体编排)
- LangGraph(智能体编排)
- Rasa(对话式 AI)
7.E — 提示工程
- W&B(Weights & Biases)
- PromptLayer
- TruEra
- PromptHero
- TextSynth
7.F — 部署框架
- Vllm
- TensorRT-LLM
- ONNX Runtime
- KubeFlow
- MLflow
- Triton Inference Server
7.G — 部署与推理
- AWS
- GCP
- OpenAI API
- Azure
- IBM Cloud
- Oracle Cloud Infrastructure
- Heroku
- DigitalOcean
- Vercel
7.H — 监控
- HoneyHive
- TruEra
- Fiddler AI
- Arize AI
- Aporia
- WhyLabs
- Evidently AI
- Superwise
- Monte Carlo
- Datadog
7.I — 专有大语言模型/视觉语言模型
- OpenAI 的 GPT 系列
- Google 的 Gemini 系列
- Anthropic 的 Claude 系列
- Cohere 的 Command 系列
- AI21 Labs 的 Jurassic
- Google 的 PalM
- Google 的 LaMDA
7.J — 开源大语言模型
- Meta 的 Llama 系列
- Mistral 的 Mixtral
- TII 的 Falcon
- LMSYS 的 Vicuna
- EleutherAI 的 GPT-NeoX
- EleutherAI 的 Pythia
- Databricks 的 Dolly 2.0
7.K — 小型语言模型
- Microsoft 的 Phi 系列
- Google AI 的 Gemma 系列
- EleutherAI 的 GPT-Neo
- HuggingFace 的 DistilBERT
- TinyBERT
- Google 的 ALBERT(轻量级 BERT)
- Microsoft 的 MiniLM
- HuggingFace 的 DistilGPT2
- Google 的 Reformer
- Google 的 T5-Base
RAG__599">7.L — 托管的 RAG 解决方案
- OpenAI 文件搜索
- Amazon Bedrock 知识库
- Azure AI 文件搜索
- Claude Projects
- Vectorize.io
7.M — 知识图谱与本体
- Neo4j
- Stardog
- TerminusDB
- TigerGraph
7.N — 安全与隐私
- Hazy
- Duality
- BigID
7.O — 合成数据
- Mostly AI
- Tonic.ai
- Synthesis AI
7.P — 其他
- Cohere 重排序器
- Unstructured.io
RAG_626">8. 应用 RAG
RAG__627">8.A — 其他 RAG 模式
纠正 RAG:在这种方法中,检索实时信息以检查 LLM 生成的答案的事实准确性. 在事实核查、医疗和法律领域特别有用。
对比 RAG:整合对比学习技术,通过区分相关和不相关文档来增强检索过程。https://arxiv.org/abs/2406.06577
选择性 RAG : 通过确定优化检索阶段何时检索外部信息是有益的。该方法旨在提高语言模型的整体性能,特别是在检索可能不会增加价值的情况下。
具有主动学习功能的 RAG:使用用户对生成内容的反馈来随着时间的推移微调或调整检索过程. 在持续改进系统中很有用,例如推荐引擎或教育辅导系统,其目标是通过每次交互来提高性能。
个性化 RAG:利用用户偏好、行为和历史互动来个性化检索过程. 它用于个性化程度较高的领域,如推荐引擎或客户服务,系统可以根据个人用户量身定制响应。
Self-RAG:一种自适应检索机制,选择性地决定何时检索知识根据查询的上下文。
RAFT:检索增强微调将检索机制与传统微调技术相结合,帮助模型在微调过程中动态地访问和利用外部知识。
RAPTOR:树状检索的递归抽象处理专注于从文档中创建递归的树状结构,以改进上下文感知信息检索。它对问答任务非常有用,尤其是在处理需要多步推理的大量文档或信息时。
8.B — 应用领域
搜索引擎: 传统的搜索结果以按相关性排序的页面链接列表显示。最近,Google Search、Perplexity 和 Google Search 都使用 RAG 以自然语言呈现连贯的文本,并附有来源引文。事实上,搜索引擎公司现在正在构建 LLM 优先搜索引擎,其中 RAG 是算法的基石。
个性化营销内容生成:LLM 最广泛的用途可能是内容生成。使用 RAG,内容可以根据读者进行个性化设置,融入实时趋势并符合语境。Yarnit、Jasper、Simplified 是一些协助生成营销内容的平台,例如博客、电子邮件、社交媒体内容、数字广告等。
个性化学习计划:在教育和学习与发展领域,RAG 被广泛用于根据过去趋势创建个性化学习路径并进行自动评估和反馈。
实时事件评论:想象一下体育赛事或新闻事件。检索器可以通过 API 连接到实时更新/数据,并将此信息传递给 LLM 以创建虚拟评论员。这些可以通过文本转语音模型进一步增强。IBM 在 2023 年美国网球公开赛期间利用该技术进行评论。
对话代理:LLM 可以使用 RAG 定制为产品/服务手册、领域知识、指南等,并充当解决用户投诉和问题的支持代理。这些代理还可以根据查询的性质将用户路由到更专业的代理。网站上或作为内部工具的几乎所有基于 LLM 的聊天机器人都使用 RAG。这些正在旅游和酒店业、金融科技和电子商务等行业中使用。
文档问答系统:通过访问专有文档,RAG 启用系统将成为可以回答有关组织的所有问题的智能 AI 系统。
虚拟助理:Siri、Alexa 等虚拟个人助理计划使用 LLM 来增强用户体验。再加上使用 RAG 获得更多有关用户行为的背景信息,这些助理将变得更加个性化。
RAG__661">8.C — 应用 RAG 挑战
相关性不匹配:由于排名或搜索机制不理想,难以从大型数据集中检索最相关的文档或段落。
过度检索:检索过多的文档,导致最终生成中出现不必要的噪音和不相关的内容。
稀疏与密集检索的权衡:在稀疏检索(TF-IDF、BM25)和密集检索(使用嵌入)之间取得平衡,以最大限度地提高相关性而不损失性能。
文档问答系统:通过访问专有文档,RAG 启用系统将成为可以回答有关组织的所有问题的智能 AI 系统。
延迟:从大型或分布式知识库进行检索可能会引入严重的延迟,从而影响实时应用程序。
存储成本:维护和管理用于密集检索的海量矢量数据库可能成本高昂且耗费资源。
狭窄的检索焦点:检索不同观点或来源的挑战,以确保能够出现多种观点或替代证据。
检索偏差:基于索引数据的结构或检索算法的检索结果偏差。
长查询中的上下文丢失:处理长而多轮的查询时会丢失上下文,导致答案脱节或不完整。
不连贯的摘要:从检索到的多个文档中生成不一致或脱节的摘要,导致糟糕的用户体验。
过度生成:根据检索到的数据生成过于冗长或冗余的响应,无法有效地浓缩关键点。
不一致的模态对齐:集成多模态数据的挑战是,跨不同模态检索到的内容可能无法正确对齐,从而影响生成的响应的质量。
数据孤岛:当知识分散在多个来源或平台上时,由于索引不一致或知识库之间缺乏互操作性,检索变得困难。
处理大规模数据:随着索引数据量的增长,难以维持高吞吐量和低延迟。
多代理协调:当使用多个代理进行任务编排(如代理 RAG)时,代理之间的协调会变得复杂且资源密集,从而影响系统效率。
查询路由效率低下:将查询路由到错误的源或检索管道会降低效率。
数据中毒攻击:可以操纵外部检索源,将有偏差或中毒的数据输入生成管道,从而导致输出受损。
对抗性攻击:安全漏洞,攻击者可能利用检索管道中的弱点来影响检索或生成结果。
知识库更新:维护最新的知识库同时保持检索过程的快速和准确性可能很困难,特别是在新闻或金融等动态领域。
记忆保留:确保系统可以在交互过程中存储和检索长期记忆,从而实现更加个性化和情境感知的响应。
RAG 是一种快速发展的技术,就像生成式 AI 领域中的许多技术一样,很容易被各种术语弄得不知所措。我希望这种分类法有助于分解 RAG 系统的组件,评估 RAG 系统中的各种方法,从而更轻松地设计、开发和优化 RAG 系统。
参考资料
- A Taxonomy of Retrieval Augmented Generation
- Beyond Naive RAG: Advanced Techniques for Building Smarter and Reliable AI Systems
- Stop Guessing and Measure Your RAG System to Drive Real Improvements
- Breaking It Down : Chunking Techniques for Better RAG
- Generative AI Terminology — An Evolving Taxonomy To Get You Started
- 7 Retrieval Metrics for Better RAG Systems