演进

image-20241023221218155

  1. Naive RAG -> Advanced RAG -> Modular RAG
  2. 三个范式之间具有继承发展的关系
    • Advanced RAG 是 Modular RAG 的一种特例形式
    • Naive RAG 是 Advanced RAG 的基础特例
  3. RAG 技术不断演进,以适应更复杂的任务和场景需求

Naive RAG

  1. Naive RAG 是最基础的形式,依赖核心的索引检索策略来增强生成模型的输出
  2. Naive RAG 适用于一些基础任务产品 MVP 阶段

Advanced RAG

通过增加检索前检索中以及检索后的优化策略,提高检索的准确性生成的关联性 - 适用于复杂任务

image-20241023222632284

  1. Advanced RAG 通过优化检索前检索中检索后的各个环节
  2. 索引质量检索效果以及生成内容的上下文相关性方面都取得显著提升

检索前

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

滑动窗口

overlap

  1. 经典的 Chunking 技术,通过在相邻Chunk 之间创建重叠区域,确保关键信息不会因简单的 Chunking 而丢失
  2. Indexing 过程中,通过在 Chunk 之间保留重复部分
    • 保证了检索时上下文信息的连贯性,进而提高了检索的精度

元数据

  1. 为每个 Chunk 添加元数据,能够使系统在检索时快速过滤掉无关内容

分层索引

  1. Indexing 过程中,可以采用句子级段落级甚至文档级多层次嵌入方法
  2. 系统可以根据查询的具体要求,灵活地在不同层次上进行检索
    • 复杂长句查询 - 段落级别的嵌入能够提供更加全面的语义匹配
    • 简短查询 - 句子级的嵌入能够提供更加精确的结果

句子窗口

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

查询重写

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

查询扩展

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

内容向量化

长短不一

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

检索中

核心环节

动态嵌入

  1. 通过动态嵌入模型根据上下文实时调整单词的嵌入表示,能够捕捉单词在不同上下文中的不同含义
  2. 动态嵌入可以根据具体语境生成合适的向量,从而提高检索的精确性
  3. 现代的高质量 Embedding 模型本质上都是动态的,本质上是通过上下文信息进行训练并生成动态的嵌入表示
    • 传统的 Embedding 模型(Word2Vec、GloVe)都是基于预先构建词汇表生成的
    • 每个单词的嵌入表示都是固定不变的,无法根据上下文变化进行动态调整

领域特定嵌入微调

jina-embeddings-v2-base-code

  1. 在实际应用中,不同领域的数据语境差异较大
  2. 通用的嵌入模型无法覆盖某些特定领域的专业术语或特定语义
  3. 通过对通用嵌入模型进行微调,可以增强其在特定领域的表现

假设文档嵌入

HyDE - Hypothetical Document Embeddings - 通过假设文档,系统可以捕捉更准确的相关文档

  1. HyDE 通过生成假设文档并将其向量化,以提升查询检索结果之间的语义匹配度
  2. 用户输入 Query 时,LLM 首先基于 Query 生成一个假设性答案
    • 该答案不一定真实存在的文档内容,但能反映查询核心语义
  3. 根据假设性文档进行检索,系统可能最终找到类似真实文档

混合检索

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

小到大检索

小块有助于提高精度,而大块则提供丰富的背景信息,使得生成的内容更加全面分层检索

  1. 首先通过较小内容块(单句或短段落)进行嵌入检索,确保模型能找到与查询最匹配小范围上下文
  2. 检索到相关内容后,在生成阶段使用对应的较大内容块(完整段落或全文)为模型提供更广泛的上下文支持

递归块合并

  1. 逐级扩展检索内容,确保生成阶段能够捕捉到更全面的上下文信息
  2. 细粒度子块检索后,自动将相关的父块合并,以便为生成模型提供完整的上下文

检索后

重排序

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

提示压缩

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

上下文重构

  1. 通过对检索到的内容进行加工重组,以便更好地符合查询的需求
  2. 将多个检索到的上下文片段整合成一个更具连贯性的文本块,减少重复或者冲突的内容,为 LLM 提供统一清晰的输入

内容过滤

  1. 根据预设规则,过滤掉与查询无直接关联的内容,语义相似度较低的片段,冗长且无关的背景信息,避免影响生成结果

多级推理

  1. 系统通过多个推理步骤,逐步整合信息,以回答复杂查询,常用于需要跨多个上下文多步推理的问题

知识注入

  1. 在检索后通过外部知识库或者预定义的领域知识,增强生成的上下文内容
  2. 适用于对准确性要求较高的场景,系统需要补充额外的专业知识

Modular RAG

打破传统的链式结构,允许不同模块之间的灵活组合以及流程适应性编排 - 更高的灵活性可扩展性

image-20241024021807679

  1. Modular RAG 沿袭Naive RAGAdvanced RAG核心原则,但超越了两者,提供了更强的适应性灵活性
  2. 通过多种优化策略和独有的编排功能,提高 RAG 系统的场景适应性
  3. Modular RAG 将 RAG 的过程细分为多个可优化的模块,支持高度定制化优化
  4. Modular RAG 通过将 Advanced RAG优化策略自由组合
    • 根据不同的应用场景定制化处理检索和生成任务,显著提升效率和效果
  5. 在 Modular RAG 中,Orchestration 是区别于 Advanced RAG 最显著部分
    • 通过自由的流程控制和决策来优化检索和生成的全流程
    • 核心思想 - 通过智能路由和调度动态地决定查询处理的路径和步骤,从而在复杂场景下提升 RAG 系统的性能

Routing

路由编排流程中的关键步骤 - 根据 Query 的特点和上下文,选择最合适的流程

Query Analysis

  1. 对 Query 进行语义分析,判断其类型难度
  2. 直接问答式的查询 - 不需要复杂的检索过程
  3. 涉及多步推理的复杂问题 - 需要走更长的检索路径

Pipeline Selection

  1. 根据 Query Analysis 的结果,动态选择合适的 Pipeline
  2. 简单查询 - 禁用 LLM 的知识来回答,效率高
  3. 需要领域知识以及复杂推理的查询 - 集合外部文档及知识进行深度检索生成

Scheduling

管理 Query 的执行顺序,并动态调整检索和生成步骤

Query Scheduling

  1. 当系统接收到 Query 时,判断是否需要进行检索
  2. 根据 Query 重要性上下文信息已有生成结果的质量等多维度因素进行评估

Judgment of Retrieval Needs

  1. 通过特定的判断节点来确定是否需要额外检索
  2. 在某些情况下,可能会多次判断是否有必要执行新一轮的检索

Knowledge Guide

结合知识图谱推理路径增强查询处理过程

Knowledge Graph

  1. 在处理复杂查询时,系统可以调用知识图谱辅助检索
  2. 提升了检索结果的准确性,还可以通过知识图谱中的上下文关系,推导出更为精确的答案
  3. 当查询涉及多个实体的关系,知识图谱能够提供更深层次的推理支持

Reasoning Path

  1. 通过推理路径,系统可以设计出一条符合查询需求推理链条
  2. 系统根据该推理链条,进行逐步的推理检索
  3. 适用于处理具有强逻辑性的问题 - 跨多个文档的关系推理时间序列推理