Sägetstrasse 18, 3123 Belp, Switzerland +41 79 173 36 84 info@ict.technology

    检索增强生成 (RAG) 入门指南 - 第二部分

    本系列的第一部分中,我们了解了Retrieval-Augmented Generation (RAG)的基本概念,并了解了这个框架如何像数字图书馆一样运作。我们详细研究了三个主要组件 - Retriever、Ranker和Generator,并理解它们如何协同工作以生成准确和与上下文相关的回答。

    在第二部分中,我们将深入探讨RAG的技术层面。我们将研究RAG在实践中如何实施,有哪些不同的模型类型,以及RAG增强系统与传统Large Language Models (LLMs)有何不同。

    两种RAG模型类型:Sequence和Token

    在实施RAG时,有两种基本方法:RAG-Sequence和RAG-Token。每种方法都有其特定的优势,适用于不同的应用场景。

    RAG-Sequence:整体方法

    RAG-Sequence的工作方式类似于一位细心的作者,首先研究所有相关资料,然后撰写连贯的文本。这种方法的数学优雅性体现在其整体观察方式上:

    pRAG-Sequence(y|x) ≈ Summe( pη(z|x) * pθ(y|x,z) )                    = Summe( pη(z|x) * Produkt( pθ(yi|x, z, y1:i-1) )

    或简化表述:p(答案 | 问题) = 所有文档的总和( p(文档 | 问题) × p(答案 | 问题, 文档) )

    用简单的话来说,这意味着:

    1. 系统为每个潜在相关文档计算两个值:
      • 该文档与问题相关的可能性有多大?
      • 该文档能引导出正确答案的可能性有多大?
    2. 这些概率相乘并对所有文档求和,以找出最佳答案。

    技术流程如下:

    1. 系统从数百万文档的索引中选择与查询最相关的前K个文档
    2. Generator为每个文档创建一个完整的潜在答案
    3. 这些答案根据其计算出的概率进行合并

    研究表明,这种方法在创建连贯、结构良好的答案方面特别有效。研究中的一个有趣细节是:随着相关文档数量的增加,答案质量会持续提高。

    研究结果表明,RAG-Sequence在需要一致性和连贯性输出的任务中表现特别出色。与其他方法相比,答案通常更加多样化且细致入微。

    这种方法特别适用于:

    • 长文本摘要
    • 报告生成
    • 需要全面理解的复杂问题答复
    • 需要整体主题一致性的任务

    RAG-Token:精细方法

    RAG-Token的工作方式类似于一位认真的记者,为每个句子和每个词都寻找最佳的信息来源。这种方法的数学表达反映了这种严谨性:

    pRAG-Token(y|x) ≈ Produkt( Summe( pη(z|x) * pθ(yi|x, z, y1:i-1) ) )

    p(答案 | 问题) = 每个词的乘积( 所有文档的总和( p(文档 | 问题) × p(词 | 问题, 文档, 前面的词) ) )

    在实践中,这意味着:

    1. 对于答案中的每个词:
      • 重新评估最相关的文档
      • 计算每个可能的下一个词的概率
      • 基于所有可用信息选择最可能的词
    2. 这个过程逐词重复,每个新词受以下因素影响:
      • 已写出的词
      • 原始问题
      • 当前最相关的文档

    研究表明,这种方法在涉及事实准确性时能产生特别精确的结果。有趣的是,考虑文档数量有一个最佳"甜点":每个Token约10个文档能产生最佳结果。更多文档不一定能带来更好的答案,但会显著增加处理时间。

    研究表明,RAG-Token在需要详细、基于事实的答案的任务中特别有效。根据最佳点,检索文档的最佳数量通常在约10个文档左右 - 因为更多文档不一定能改善结果,但会增加成本。

    这种方法最适合:

    • 详细的技术解释
    • 基于事实的回答
    • 需要高度具体信息的情况
    • 答案不同部分需要不同来源的情况

    技术实现:RAG管道

    RAG系统的实际实现分为三个主要阶段:摄入、检索和生成。每个阶段对最终结果的质量都起着决定性作用。

    1. 摄入阶段

    在这第一阶段,文档被输入系统并为后续使用做准备。最初的RAG实现使用了包含2100万文档的Wikipedia数据,每个文档被分割成100个词的块。过程如下:

    RAG Ingestion

    1. 文档准备
      • 文档被分割成较小的、可管理的块
      • 块大小根据应用场景进行优化
    2. Embedding生成
      • 每个块通过基于BERT的文档编码器转换为数学多维向量(通常最多1024维)
      • 这些向量捕获文本的语义,即不是字面意思,而是含义(关于向量的更多内容将在未来关于向量数据库的文章中讨论)
    3. 索引
      • Embeddings存储在向量数据库中
      • 为高效搜索创建MIPS索引(Maximum Inner Product Search)
      • 像FAISS这样的技术能够在亚线性时间内进行快速、近似搜索

    这个过程对系统后续的效率至关重要。技巧在于如何分割文档,既不破坏相关信息的连贯性,又保持块的大小足够小以提供精确结果。

    2. 检索阶段RAG Retrieval Synthesis

    当收到查询时,检索阶段开始:

    1. 查询处理:查询也被转换为向量。这个查询被Retriever既存储在向量数据库中,又直接发送到Generator进行答案合成
    2. 相似度搜索:系统在向量数据库(索引)中搜索与发送到数据库的向量相似的文档。这里比较查询向量与索引文档的向量
    3. Top-K选择:选择最相关的文档

    选择的文档数量(Top-K)是一个重要参数,它影响完整性和处理效率之间的平衡。

     

    3. 生成阶段 (Synthesis)

    在最后阶段,找到的信息被处理成答案:

    1. 上下文整合:选定的Top-K文档与原始查询结合
    2. 答案生成:LLM创建一个连贯的答案
    3. 质量保证:答案经过一致性和相关性检查后输出

     一个易懂的例子

    步骤1:创建提示(Query)

    想象一个员工走到你的办公桌前向你提问:

    "我们有一个项目想法。我们想做xyz。这方面的法律规定是什么?"

    这个查询就是一个Prompt

    现在设身处地为人工智能着想。问题清晰直接。但要回答它,你还需要更多上下文。所以你搜索所有与这位员工之前的对话记忆,从而建立更好的主题联系,这将导致对问题更好和更全面的理解。

    所有找到的信息就是上下文。Prompt现在通过上下文得到扩展 - 历史信息被附加到员工的实际问题上。Prompt现在变成了所谓的Enhanced Prompt

    此外,作为主管,你还会思考项目想法究竟如何帮助你的公司。你自己还会思考一下,可能会再次询问,并用发现的见解进一步补充Enhanced Prompt。这样,Query逐渐完善。

    步骤2:Embedding

    下一步,你将Query输入Embedding Model,它将其转换为1024维向量。这不仅仅是三维,而是对普通人来说难以想象的维度。通过这1024个维度,就可以相当准确地捕捉Query的含义。不是单个词,而是意义。Embedding Model现在将这个向量存储在向量数据库中。

    现在,向量数据库对Query的向量进行相似度搜索。找到文档的相似性意味着该文档被标记。在搜索结束时,选择最佳结果并引用相应的文档、数据库条目等。

    这些找到的文档和其他信息现在被附加到Query上。想象一下,就像你在一封写好的电子邮件上附加文档。这样,Enhanced Prompt变成了Augmented Prompt

     步骤3:生成答案

    这个Augmented Prompt现在与原始Query一起发送给Generator,更具体地说是发送给涉及的LLM。LLM现在从原始查询和所有找到的附加信息中合成答案。这个Response然后返回给员工,希望他对内容满意。

      

    RAG Triad:质量评估

    即使LLM通过RAG能够访问信息池中最新的信息并能给出非常准确的答案,这也不能消除幻觉的风险。这有几个原因:

    1. Retriever简单地没有收集到足够的上下文(数量上),或者收集了错误的信息(质量上)。
    2. 可能答案并不完全由收集的上下文支持,而是受到了LLM和训练数据的过度影响。
    3. RAG可能收集了相关信息并建立了基本正确的答案,但答案可能与实际问题不符。

      为了避免这种情况,开发了RAG Triad

      RAG Triad

      为了评估RAG系统的质量,我们考虑三个核心方面:

      1. Context Relevance(上下文相关性)

      • 检索到的文档与查询的匹配程度如何?
      • 是否找到了正确的上下文?
      • 信息是否最新和适当?

      2. Groundedness(基础性)

      • 答案是否真正基于检索到的文档?
      • 陈述是否有源文件支持?
      • 是否存在幻觉或未经证实的结论?

      3. Answer Relevance(答案相关性)

      • 生成的答案是否回答了原始问题?
      • 答案是否完整和准确?
      • 信息深度是否适当?

      当将这三个方面作为参数应用于查询、上下文和生成的答案时,可以最小化幻觉并构建更可靠和更稳健的基于RAG的应用。

      有无RAG的LLMs:比较

      传统LLMs和RAG增强系统在工作方式上有根本区别:

      传统LLMs

      • 仅基于预训练知识
      • 无法访问新的或特定信息
      • 更容易产生幻觉
      • 具有"冻结"的知识状态

      RAG增强系统

      • 将预训练知识与外部源结合
      • 可以访问当前和特定信息
      • 提供可追溯的、基于源的答案
      • 可灵活扩展

      这些差异使RAG成为企业应用的理想解决方案,在这些应用中,精确性、时效性和可追溯性至关重要。

      第3部分展望:向量数据库的作用

      使RAG成为可能的核心组件是向量数据库。这些专门的数据库针对向量的存储和查询进行了优化 - 这些向量是文本的数学表示,构成了RAG的基础。

      在系列的第3部分中,我们将深入研究向量数据库:

      • 它们的详细工作原理是什么?
      • 有哪些类型的向量数据库?
      • 如何为项目选择正确的向量数据库?
      • 实施有哪些最佳实践?

      向量数据库是RAG系统的核心,因此值得特别关注。它是高效信息搜索和处理的关键,因此对整个系统的性能至关重要。