Skip to content

09 进阶(一):Advanced RAG与Modular RAG

本门课程为精品小课,不标配音频。

你好,我是常扬。

在之前的课程中,我们已经详细讨论了RAG(Retrieval Augmented Generation)检索增强生成的技术架构以及相关的效果优化技术,涵盖了其核心流程:索引(Indexing)、检索(Retrieval)和生成(Generation)。这些流程共同作用,提升了大模型的领域知识生成能力。这节课我们将深入介绍 Advanced RAG(进阶 RAG)Modular RAG(模块化 RAG),进一步加深对 RAG 技术范式发展的理解,为进一步优化和提升RAG产品的效果提供研发基础。

RAG技术在适应复杂应用场景和不断发展的技术需求中,经历了从最初的 Naive RAG (朴素 RAG),到流程优化的 Advanced RAG,再到更具灵活性的 Modular RAG 的演变。值得注意的是,这三个范式之间具有 继承与发展 的关系:Advanced RAG 是 Modular RAG 的一种特例形式,而 Naive RAG 则是 Advanced RAG 的基础特例。通过这种逐步演进,RAG技术不断优化,以应对更复杂的任务和场景需求,如下图所示。

图片

Naive RAG 是最基础的形式,它依赖核心的索引和检索策略来增强生成模型的输出,适用于一些基础任务和产品 MVP(Minimum Viable Product,最小可用版本)阶段。Advanced RAG 则通过增加检索前、检索中以及检索后的优化策略,提高了检索的准确性和生成的关联性,特别是在复杂任务中表现更为出色。Modular RAG 则进一步打破了传统的链式结构,允许不同模块之间的灵活组合以及流程的适应性编排,提供了更高的灵活性和可扩展性,用于处理多样化的需求和复杂任务。

Advanced RAG

随着RAG产品化和场景化应用的不断深入,用户对RAG系统效果的要求越来越高,Advanced RAG 成为解决 Naive RAG 局限性的有效范式。通过优化 检索前、检索中、检索后 的各个环节,RAG在索引质量、检索效果以及生成内容的上下文相关性方面都取得了显著提升。在之前的课程中,我们已经介绍了部分优化方案,而这节课我们将结合案例对这些优化策略进行系统性总结,并深入分析它们对 RAG 技术性能提升的具体作用。

先展示案例:

图片

上图对比了在回答复杂问题时使用两种不同的 RAG 范式的效果: Naive RAG 和 Advanced RAG。问题要求分析Nvidia和Apple过去三年的财务表现,并判断哪家公司更值得投资。问题涉及:

  1. 明确的 时间范围(三年)与 多文档的信息(Nvidia与Apple的材料)。
  2. 复杂的 要求,需要分析 专业领域指标(财务) 并做出投资价值的判断。

Naive RAG 流程

  1. 索引流程: 系统对多个文档进行切分和嵌入处理,包括2021、2022和2023年的Apple和Nvidia年度报告。
  2. 检索流程: 系统从索引的文档中检索内容,但检索到的信息不充分,原因包括:

  3. 检索到的是不同年度Nvidia报告中的同一章节内容。

  4. 时间范围可能错误(混合了不同年份的数据)。
  5. Apple相关内容缺失。
  6. 检索过程缺乏处理复杂问题需求的足够上下文。

  7. 生成流程: 生成的回答只提供了Nvidia及一些大盘指数(如标普500和纳斯达克100)的股票价格信息,但未能给出深层次的分析或直接比较;最终回答质量较差,无法根据财务表现确定哪家公司更值得投资。

Advanced RAG流程

  1. 检索前优化

  2. 带有层次结构的PDF文档解析的索引

  3. 使用分层结构对PDF文档进行索引,捕捉不同章节(如业务、风险因素)和段落的内容,帮助系统更精确地进行检索。
  4. 将原问题重写为更清晰、更具体的查询
  5. 重点关注关键财务指标和股票价格,确保检索目标更加明确。

  6. 检索优化: 借助层次结构改进检索,返回相关的段落、表格和财务指标

  7. 检索后优化: 使用问题与检索内容的相关性对检索到的内容进行重排序

  8. 生成: 生成的回答包含了Nvidia和Apple的财务表现数据,如收入和波动性比较,以及提供了投资机会分析。明显提高了分析和生成的质量,但仍有效果提升的空间。

上述案例展示了 Advanced RAG 通过引入多种技术,采用了检索前、检索中、检索后的优化策略,显著提高了检索质量。

下面我们按照 检索前、检索、检索后 策略分类,系统性地展现当前主流的优化技术方案。

检索前优化

检索前优化通过索引、分块、查询优化以及内容向量化等技术手段,提高检索内容的精确性和生成内容的相关性。

  1. 滑动窗口方法:经典的分块技术,通过在相邻的文本块之间创建重叠区域,确保关键信息不会因简单的分段而丢失。这种方法在索引过程中通过在块之间保留重复部分,保证了检索时上下文信息的连贯性,进而提高了检索的精度。

  2. 元数据添加:为每个分块添加元数据(如创建日期、章节名称、文档类型等),能够使系统在检索时快速过滤掉无关内容。例如,用户在查询时可以通过元数据筛选特定时间段的文档,减少不相关信息的干扰。

  3. 分层索引:在索引过程中,可以采用句子级、段落级甚至文档级的多层次嵌入方法。这样,系统可以根据查询的具体要求,灵活地在不同层次进行检索。比如,当用户输入较为复杂的长句查询时,段落级别的嵌入能够提供更加全面的语义匹配;而对于简短查询,句子级的嵌入能够提供更精确的结果。

  4. 句子窗口检索:这种方法通过将文档中的每个句子独立嵌入,从而提高检索的精确度。在检索过程中,系统找到与查询最相关的句子后,会扩展句子前后的上下文窗口,保证生成模型能够获取足够的背景信息进行推理。这种方式既能够精准定位关键信息,又能确保生成的上下文连贯性。

  5. 查询重写: 针对用户输入的原始查询进行重新表述,使其更加清晰易懂,并且与检索任务匹配。例如,针对用户模糊或含糊的提问,系统可以通过重写,使查询更加具体化,从而检索到更加精准的内容。

  6. 查询扩展:查询扩展通过增加同义词、相关词汇或概念扩展用户的原始查询,增加了检索结果的广度。这样,当用户输入简短或不完整的查询时,系统能够通过扩展词汇找到更多潜在相关的内容,从而提升检索效果。

  7. 长短不一的内容向量化: RAG系统中,文档或查询的长度对向量化过程有着显著的影响。对于短句子或短语,其生成的向量更加聚焦于具体细节,能够实现更精确的句子级别匹配。段落或文档级别的向量化涵盖了更广泛的上下文信息,能够捕捉到内容的整体语义。

检索优化

检索优化是RAG系统中直接影响检索效果和质量的核心环节。通过增强向量搜索、动态嵌入模型、混合检索等技术手段,系统能够高效、精准地找到与用户查询最相关的内容。

  1. 动态嵌入:RAG系统通过动态嵌入模型根据上下文变化实时调整单词的嵌入表示,能够捕捉单词在不同上下文中的不同含义。例如,“bank”在“river bank”(河岸)和“financial bank”(银行)中的语义完全不同,动态嵌入可以根据具体语境生成合适的向量,从而提高检索的精准性。

  2. 领域特定嵌入微调:在实际应用中,不同领域的数据语境差异较大,通用的嵌入模型往往无法覆盖某些领域的专业术语或特定语义。通过对嵌入模型进行微调,可以增强其在特定领域中的表现。例如,针对医学、法律等专业领域,可以对嵌入模型进行定制化训练/微调,使其更好地理解这些领域中的特有词汇和语境。

  3. 假设文档嵌入:假设文档嵌入(Hypothetical Document Embeddings,HyDE)是一种创新的检索技术。HyDE 方法通过生成假设文档并将其向量化,以提升查询与检索结果之间的语义匹配度。当用户输入一个查询时,LLM首先基于查询生成一个假设性答案,这个答案不一定是真实存在的文档内容,但它反映了查询的核心语义。然后,系统将该假设性答案向量化,与数据库中的向量进行匹配,寻找最接近的文档。例如,用户询问“拔除智齿需要多长时间?”,系统会生成一个假设性回答“拔智齿通常需要30分钟到两小时”,然后根据该假设文档进行检索,系统可能最终找到类似的真实文档,如“拔智齿的过程通常持续几分钟到20分钟以上”。通过假设文档,系统可以捕捉到更准确的相关文档。

  4. 混合检索:混合检索是结合向量搜索与关键词搜索等多种检索方法的混合方法,能够同时利用语义匹配与关键词匹配的优势。

  5. 小到大检索:这种方法首先通过较小的内容块(如单个句子或短段落)进行嵌入和检索,确保模型能找到与查询最匹配的小范围上下文。检索到相关内容后,再在生成阶段使用对应的较大文本块(如完整段落或全文)为模型提供更广泛的上下文支持。小块检索有助于提高精度,而大块生成则提供丰富的背景信息,使得生成的内容更加全面。

  6. 递归块合并:通过逐级扩展检索内容,确保生成阶段能够捕捉到更全面的上下文信息。该技术在细粒度的子块检索后,自动将相关的父块合并,以便提供完整的上下文供生成模型参考。

检索后优化

检索后优化目的是对已经检索到的内容进行进一步的处理和筛选,常用的技术包括重排序、提示压缩等,以确保最终生成的答案具有高度的相关性和准确性。

  1. 重排序:在RAG系统中,虽然初始检索可以找到多个与查询相关的内容块,但这些内容的相关性可能存在差异,因此需要进一步排序以优化生成结果。重排序通过重排序模型根据上下文的重要性、相关性评分等因素对已检索内容重新打分,以确保最相关的信息被优先处理。

  2. 提示压缩:通过删除冗余信息、合并相关内容、突出关键信息等方式来压缩提示,为生成模型提供更简洁、更相关的输入。

  3. 上下文重构:通过对检索到的内容进行再加工或重组,以便更好地符合查询的需求。常见的做法是将多个检索到的上下文片段整合成一个更具连贯性的文本块,减少重复或冲突的内容,从而为生成模型提供一个统一、清晰的输入。

  4. 内容过滤:根据预先设定的规则进行,包括过滤掉与查询无直接关联的内容、语义相似度较低的片段、冗长且无关的背景信息等,避免对生成结果产生负面影响。

  5. 多跳推理:系统通过多个推理步骤,逐步整合信息,以回答复杂查询。通常用于需要跨多个上下文或多步推理的问题。例如,用户询问“某个技术的演化历程”,系统可能先检索到该技术的某个时间点的关键事件,然后再通过进一步检索,找到关于这些关键事件的详细说明,最终给出完整的回答。

  6. 知识注入:在检索后通过外部知识库或预定义的领域知识,增强生成的上下文内容。这种方式适用于对准确性要求较高的场景,尤其是在特定领域或技术场景下,系统需要补充额外的专业知识。

Modular RAG

Modular RAG(模块化 RAG) 架构超越了前两种 RAG 范式,提供了更强的适应性和灵活性。它通过多种优化策略和独有的编排功能提高 RAG 系统的场景适应性。尽管具有独特性,Modular RAG 仍然沿袭了 Naive RAG 和 Advanced RAG 的核心原则,充分体现了 RAG 技术体系的不断进化和完善。

图片

上图展示了三种不同的 RAG 范式的架构设计,突出表现了 Modular RAG 的部分,Modular RAG 将 RAG 的过程细分为多个可优化的模块,以支持高度定制化和优化。Modular RAG 通过将 Advanced RAG 的优化策略自由组合,根据不同的应用场景定制化处理检索和生成任务,显著提升效率和效果。

在 Modular RAG 架构中, Orchestration(编排) 是区别于 Advanced RAG 最显著的部分,它通过自由的流程控制和决策来优化检索和生成的全流程。这一部分的核心思想是通过智能路由和调度,动态地决定查询处理的路径和步骤,从而在复杂场景下提升 RAG 系统的性能。

  1. Routing(路由)

路由是编排流程中的关键步骤。它的主要功能是在收到用户查询后,根据查询的特点和上下文,选择最合适的流程。具体来说,Routing 模块依赖于以下两部分:

a. Query Analysis(查询分析):首先,对用户的查询进行语义分析,判断其类型和难度。例如,一个直接问答式的查询可能不需要复杂的检索过程,而一个涉及多步推理的复杂问题则可能需要走更长的检索路径。

b. Pipeline Selection(管道选择):根据查询分析的结果,Routing 模块会动态选择合适的流程(Pipeline)。比如针对简单的查询,可以仅用大模型的知识来回答,效率高。而针对需要领域知识及复杂推理的查询,系统会使用更多的检索步骤,结合外部文档及知识进行深度检索生成。

  1. Scheduling(调度)

调度的作用是管理查询的执行顺序,并动态调整检索和生成步骤。

a. Query Scheduling(查询调度):当系统接收到查询时,调度模块会判断是否需要进行检索。调度模块根据查询的重要性、上下文信息、已有生成结果的质量等多维度因素进行评估。

b. Judgment of Retrieval Needs(检索需求判断):调度还通过特定的判断节点来确定是否需要额外检索。在某些情况下,系统可能会多次判断是否有必要执行新一轮的检索。

  1. Knowledge Guide(知识引导)

知识引导是结合知识图谱和推理路径来增强查询处理过程。

a. Knowledge Graph(知识图谱):在处理复杂查询时,系统可以调用知识图谱来辅助检索。这不仅提升了检索结果的准确性,还可以通过知识图谱中的上下文关系来推导出更为精确的答案。例如,若查询涉及多个实体的关系或多个时间点,知识图谱能够提供更深层次的推理支持。

b. Reasoning Path(推理路径):通过推理路径,系统可以设计出一条符合查询需求的推理链条,系统可以根据这一链条进行逐步地推理和检索。这在处理具有强逻辑性的问题时非常有效,例如跨多个文档的关系推理或时间序列推导。

编排模块 是 Modular RAG 区别于 Advanced RAG 的核心,它通过灵活的路由、调度、知识引导与推理路径来动态决定处理流程,从而提升了整个系统在复杂查询场景下的适应性和处理能力。

总结

这节课我们讲解了 Advanced RAGModular RAG

Advanced RAG 通过在 检索前、检索中、以及检索后 对RAG系统进行优化,显著提升了检索的精准性和生成内容的上下文相关性。具体优化措施包括且不限于滑动窗口方法、元数据添加、分层索引、句子窗口检索、查询重写、查询扩展、长短不一的内容向量化、动态嵌入、领域特定嵌入微调、假设文档嵌入、混合检索、小到大检索、递归块合并、重排序、提示压缩、上下文重构、内容过滤、多跳推理、知识注入等,使得 RAG 在复杂任务中的表现效果更加优越。

Modular RAG 进一步增强了 RAG 系统的灵活性和适应性,允许通过不同模块的自由组合来应对多样化的应用场景。与 Advanced RAG 相比,Modular RAG 最大的不同之处在于其引入了 编排机制,包括路由、调度和知识引导 等模块,实现了更加智能的流程控制和动态决策。

思考题

编排机制可以根据查询的复杂性动态调整流程,你能想到哪些复杂的应用场景可以从这种编排机制中获益?对于某些看似简单的任务,编排机制是否也会带来意想不到的提升?欢迎你在留言区分享,和我一起讨论,也欢迎你把这节课的内容分享给对RAG感兴趣的朋友,我们下节课再见!