Lazy loaded image
人工智能
理解 RAG-1
字数 5069阅读时长 13 分钟
2025-9-9
2025-10-4
type
status
date
slug
summary
tags
category
icon
password
Description

为何需要它

自然语言处理(NLP)是人工智能(AI)的一个领域,旨在教会计算机理解书面和口头的人类语言,并通过使用这种语言与人类互动。虽然传统的 NLP 方法已经研究了几十年,但大型语言模(LLMs)的出现几乎主导了该领域的所有发展。通过将复杂的深度学习架构与能够分析语言中复杂模式和相互依赖关系的自注意力机制相结合,LLMs 彻底改变了 NLP 和整个 AI 领域,因为它们能够处理广泛的语言生成和语言理解任务,并且应用范围广泛:对话聊天机器人、深入文档分析、翻译等等。
Some of the tasks LLMs most frequently perform

LLM 的能力与局限性

由 OpenAI 的 ChatGPT 模型等主要人工智能公司推出的最大通用 LLMs 主要专注于语言生成 ,也就是说,给定一个提示——用户用人类语言提出的查询、问题或请求——LLM 必须对该提示生成自然语言响应,逐字生成。为了完成这项看似艰巨的任务,LLMs 在包含数百万到数十亿份文本文档的极其庞大的数据集上进行训练,这些文档涵盖了你能想象到的任何主题。通过这种方式,LLMs 全面学习人类语言的细微差别,模仿我们的沟通方式,并利用所学知识生成自己的“类人语言”,从而实现前所未有的人机流畅沟通。
毫无疑问,LLMs 是人工智能发展和视野中的一大进步,但它们也并非没有局限性。具体来说,如果用户要求 LLM 在特定上下文中(例如,最新新闻)提供精确答案,模型可能无法自行提供具体而准确的响应。原因在于:LLMs 对世界的了解仅限于它们接触过的数据,尤其是在训练阶段。除非 LLM 能够频繁地重新训练(我们不得不承认,这是一个极其昂贵的过程),否则它通常不会了解最新新闻。
更糟糕的是,当 LLMs 缺乏事实信息来提供准确、相关或真实的答案时,它们很有可能仍然生成看似令人信服的回复,即使这意味着完全基于虚构的信息来构建。LLMs 中这个常见的问题被称为幻觉 :生成不准确和无根据的文本,从而误导用户。

RAG 的出现原因

即使是市场上最大的 LLMs,在一定程度上也遭受了数据过时、再训练成本高昂以及幻觉等问题,科技巨头们深知当这些模型被全球数百万用户使用时所带来的风险和影响。例如,早期 ChatGPT 模型中幻觉的普遍性估计约为 15%,这对使用这些模型的组织的声誉产生了深远影响,并损害了整个 AI 系统的可靠性和信任度。
这就是 RAG(检索增强生成) 应运而生的原因。由于 RAG 在解决上述 LLM 局限性方面的方法卓有成效,它无疑是 LLMs 出现后最重要的 NLP 突破之一。RAG 的核心思想是将搜索引擎通常使用的信息检索技术的准确性和搜索能力 ,与 LLMs 深入的语言理解和生成能力相结合。
总的来说,RAG 系统通过在用户查询或提示中整合最新的、真实的上下文信息来增强 LLMs。这种上下文是在 LLM 主导的语言理解和后续响应生成过程之前,通过检索阶段获得的。
以下是 RAG 如何帮助解决传统 LLMs 中存在的上述问题:
  • 数据过时:RAG 可以通过从外部源检索和整合最新的信息来帮助克服数据过时问题,从而使响应能够反映最新的可用知识。
  • 重新训练成本: 通过动态检索相关信息,RAG 降低了频繁且昂贵的重新训练的必要性,使 LLMs 能够在不完全重新训练的情况下保持最新。
  • 幻觉:RAG 通过将响应与从真实文档中检索到的事实信息相结合,有助于减轻幻觉,从而最大限度地减少生成不真实或虚构的响应。
 

经典 RAG 工作流程

典型的 RAG 系统(如下图所示)处理三个关键的数据相关组件:
  1. 一个已经从其训练数据(通常是数百万到数十亿份文本文件)中获取了知识的 LLM
  1. 一个向量数据库 ,也称为知识库 ,用于存储文本文件。但为什么叫向量数据库呢?在 RAG 和整个自然语言处理 (NLP) 系统中,文本信息被转换为称为向量的数值表示,这些向量捕获了文本的语义含义。向量代表单词、句子或整个文档,并保留了原始文本的关键属性,使得两个相似的向量与具有相似语义的单词、句子或文本片段相关联。将文本存储为数值向量可以提高系统的效率,从而能够快速查找和检索相关文档。
  1. 用户以自然语言提出的查询或提示
General scheme of a basic RAG system
基本 RAG 系统的通用方案
简而言之,当用户以自然语言向配备了 RAG 引擎的 LLM 助手提问时,在发送问题和接收答案之间会经历三个阶段:
  1. 检索 :一个名为检索器的组件访问向量数据库,以查找并检索与用户查询相关的文档。
  1. 增强 :通过整合检索到的文档中的上下文知识来增强原始用户查询。
  1. 生成 :LLM——从 RAG 的角度来看,也常被称为生成器 ——接收经过相关上下文信息增强的用户查询,并生成更精确、更真实的文本响应。

检索器内部

检索器是 RAG 系统中用于查找相关信息以增强稍后由 LLM 生成的最终输出的组件。你可以将其想象成一个增强的搜索引擎,它不仅仅是将用户查询中的关键词与存储的文档进行匹配,而是理解查询背后的含义。
检索器会扫描与查询相关的海量领域知识,这些知识以向量格式(文本的数值表示)存储,并提取最相关的文本片段,围绕这些片段构建上下文,然后将其附加到原始用户查询中。识别相关知识的一种常用技术是相似性搜索,其中用户查询被编码为向量表示,然后将此向量与存储的向量数据进行比较。通过这种方式,检测与用户查询最相关的知识片段,归结为迭代执行一些数学计算,以识别与该查询的向量表示最接近(最相似)的向量。因此,检索器不仅能高效地提取准确的、上下文感知的,而且还能准确地提取信息。

生成器内部

RAG 中的生成器通常是一个复杂的语言模型,通常是基于Transformer 架构的 LLM,它接收来自检索器的增强输入,并生成准确、上下文感知且通常是真实的响应。通过整合相关的外部信息,这一结果通常会超越独立 LLM 的质量。
在模型内部,生成过程涉及文本的理解和生成,由编码增强输入并逐字生成输出文本的组件来管理。每个单词的预测都基于前面的单词:这项任务在 LLM 内部作为最后阶段执行,被称为下一个单词预测问题:预测最有可能的下一个单词,以保持生成消息的连贯性和相关性。

融合检索与重排

融合检索方法涉及在RAG系统检索阶段融合或聚合多个信息流。回想一下,在检索阶段,检索器——一个信息检索引擎——接收LLM的原始用户查询,将其编码成向量数值表示,并用它在庞大的知识库中搜索与查询高度匹配的文档。之后,通过添加从检索到的文档中获得的额外上下文信息来增强原始查询,最后将增强后的输入发送给生成响应的LLM。
通过在检索阶段应用融合方案,添加到原始查询之上的上下文可以变得更加连贯和上下文相关,从而进一步改善LLM生成的最终响应。融合检索利用从多个提取的文档(搜索结果)中获取的知识,并将其组合成一个更有意义和准确的上下文。然而,我们已经熟悉的基本RAG方案也可以从知识库中检索多个文档,不一定只有一个。那么,这两种方法之间有什么区别呢?
经典RAG与融合检索之间的主要区别在于如何处理多个检索到的文档并将其整合到最终响应中。在经典RAG中,检索到的文档内容被简单地拼接起来,或者最多进行抽取式摘要,然后作为额外上下文输入到大型语言模型(LLM)中以生成响应。没有应用先进的融合技术。同时,在融合检索中,采用更专业的机制来整合多个文档中的相关信息。这种融合过程可以发生在增强阶段(检索阶段),甚至在生成阶段。
  • 在增强阶段的融合包括在将多个文档传递给生成器之前,应用技术对它们进行重新排序、筛选或组合。其中两个例子是重新排序和聚合。重新排序是指在将文档与用户提示一起输入模型之前,根据相关性对文档进行评分和排序。聚合是指将每个文档中最相关的信息片段合并到单个上下文中。聚合通过经典信息检索方法(如TF-IDF(词频-逆文档频率)、嵌入操作等)来实现。
  • 生成阶段的融合包括大型语言模型(生成器)独立处理每个检索到的文档(包括用户提示),并在生成最终响应时融合多个处理任务的信息。广义上讲,RAG 中的增强阶段成为生成阶段的一部分。这类方法中常见的一种是解码器内融合(FiD),它允许大型语言模型单独处理每个检索到的文档,然后在生成最终响应时结合它们的见解。
重排序是最简单但也最有效的融合方法之一,能够有意义地结合来自多个检索源的信息。下一节将简要解释其工作原理:

重排的工作原理

在重新排序过程中,检索器获取的初始文档集会被重新排序,以提高与用户查询的相关性,从而更好地满足用户需求并提升整体输出质量。检索器将获取的文档传递给一个名为排序器的算法组件,该组件根据学习到的用户偏好等标准重新评估检索结果,并对文档进行排序,旨在最大化呈现给特定用户的结果的相关性。加权平均或其他形式的评分等机制用于组合和优先处理排名靠前的文档,使得来自排名靠前的文档的内容比来自排名靠后的文档的内容更有可能成为最终组合上下文的一部分。
下图说明了重排序机制:
The reranking process
 
让我们以东亚旅游为例,更好地理解重排。想象一位旅行者向RAG系统查询“亚洲自然爱好者最佳目的地”。初始检索系统可能会返回一系列文档,包括一般旅游指南、关于亚洲热门城市的文章以及自然公园的推荐。然而,重排模型可能会利用额外的旅行者特定偏好和上下文数据(如偏好的活动、之前喜欢的活动或之前的目的地),重新排序这些文档,以优先显示与该用户最相关的内容。它可能会突出宁静的国家公园、鲜为人知的远足小径和环保旅行,这些可能不会在所有人的建议列表中名列前茅,从而为像我们目标用户那样热爱自然的游客提供“直击要点”的结果。
总之,重新排序是根据额外的用户相关性标准,对检索到的多个文档进行重新组织,以便将内容提取过程集中在排名靠前的文档中,从而提高后续生成响应的相关性。
 

RAGAs 及其他评估框架

检索增强生成 (RAG) 在拓展独立大语言模型 (LLMs) 的能力边界和克服其诸多局限性方面发挥了关键作用。通过引入检索器,RAG 能够提高响应的相关性和事实准确性:它只需实时利用向量文档库等外部知识源,并在将原始用户查询或提示传递给 LLM 进行输出生成过程之前,为其添加相关的上下文信息。
对于那些深入研究 RAG 领域的人来说,一个自然而然的问题出现了:我们该如何评估这些远非简单的系统呢?
为此存在几种框架,例如 DeepEval,它提供超过 14 项评估指标来评估幻觉和忠实度等标准;MLflow LLM Evaluate,以其模块化和简洁性而闻名,可在自定义管道中进行评估;以及 RAGAs,它专注于定义 RAG 管道,提供忠实度和上下文相关性等指标来计算全面的 RAGAs 质量分数。
以下是这三个框架的总结:
RAG evaluation frameworks
RAG 评估框架
让我们进一步研究后者:RAGAs。

理解 RAGAs

RAGAs 检索增强生成评估的缩写)被认为是评估 LLM 应用的最佳工具包之一。它通过最简单的方法,成功地评估了 RAG 系统组件 ——即检索器和生成器——的性能,无论是单独评估还是作为一个整体管道联合评估。
RAGAs 的核心要素是其指标驱动开发 (MDD)方法,该方法依赖数据来做出明智的系统决策。MDD 需要持续监控关键指标随时间的变化,从而清晰地了解应用程序的性能。除了允许开发人员评估其 LLM/RAG 应用程序并进行指标辅助实验外,MDD 方法还与应用程序的可重现性高度一致。

RAGAs 组件

  • Prompt 对象 :一个定义用于引发语言模型生成响应的提示的结构和内容的组件。通过遵循一致且清晰的提示,可以促进准确的评估。
  • 评估样本 :一个单独的数据实例,它封装了用户查询、生成的响应以及参考响应或地面真实(类似于 ROUGE、BLEU 和 METEOR 等 LLM 指标)。它作为评估 RAG 系统性能的基本单位。
  • 评估数据集: 一组评估样本,用于根据各种指标更系统地评估 RAG 系统的整体性能。它旨在全面评估系统的有效性和可靠性。

RAGAs 指标

RAGAs 提供了配置 RAG 系统指标的能力,通过定义检索器和生成器的具体指标,并将它们融合为整体的 RAGAs 分数,如下图所示:
RAGAs score
RAGAs 分数 | 图片来源:RAGAs 文档
让我们来了解一下检索和生成方面一些最常见的指标。
检索性能指标:
  • 上下文召回率: 召回率衡量从知识库中检索到的相关文档占真实前 k 个结果的比例,即,有多少最相关的文档被检索出来以回答提示?计算方法是用检索到的相关文档数量除以相关文档总数。
  • 上下文精确率: 在检索到的文档中,有多少与提示相关,而不是噪声?这就是上下文精确率所回答的问题,其计算方法是用检索到的相关文档数量除以检索到的文档总数。
生成性能指标:
  • 忠实度:评估生成响应是否与检索到的证据一致,换句话说,就是响应的事实准确性。这通常通过比较响应和检索到的文档来完成。
  • 上下文相关性: 此指标用于确定生成响应与查询的相关程度。通常基于人工判断或通过自动语义相似度评分(例如,余弦相似度)来计算。
作为衡量 RAG 系统检索和生成两个方面的示例指标,我们有:
  • 上下文利用率: 此项评估 RAG 系统在生成响应时有效利用检索到的上下文的程度。即使检索器获取了优秀的上下文(高精确率和召回率),生成器性能不佳也可能导致无法有效利用,上下文利用率的提出旨在捕捉这种细微差别。
在 RAGAs 框架中,各个指标被组合起来计算一个整体 RAGAs 分数 ,该分数全面量化了 RAG 系统的性能 。计算此分数的流程包括选择相关指标并计算它们,将它们标准化到相同的范围(通常是 0-1),然后计算指标的加权平均值。权重的分配取决于每个用例的优先级,例如,对于需要高度事实准确性的系统,您可能希望优先考虑忠实度而非召回率。
有关 RAGAs 指标及其通过 Python 示例计算的更多信息,请在此处 查找