RAG深入了解P1:从RAG类型出发看优化点

发布于:2025-07-18 ⋅ 阅读:(16) ⋅ 点赞:(0)

欢迎来到啾啾的博客🐱。
记录学习点滴。分享工作思考和实用技巧,偶尔也分享一些杂谈💬。
有很多很多不足的地方,欢迎评论交流,感谢您的阅读和评论😄。

引言

在之前的《RAG轻松通》系列中,我们对RAG的基本流程和面临的基本问题有了初步的了解,也初步实现了一个简单的RAG。
本系列将深入理解RAG。

本篇尝试系统整理RAG流程、RAG优化与常见RAG类型。
兴许文章结构有一定的参考价值。

AI使用声明:有AI生成内容,整体结构由人工搭建,内容人工审核,AI交叉验证。

资料:https://github.com/langchain-ai/rag-from-scratch

![[RAG深入了解P1:.png]]

1 RAG类型

当前的RAG(Retrieval-Augmented Generation,检索增强生成)系统发展迅速,已经超越了最初的简单“检索+生成”模式,出现了多种类型和优化策略。为了确保回答的实时性,我将结合最新的研究趋势和实践进行总结。

以下是当前主要的RAG类型及其相关资料:

1.1 基础RAG (Naive/Standard RAG)

  • 描述: 这是最常见的RAG形式,遵循“检索-读取-生成”的经典范式。用户查询首先用于检索相关文档/段落,然后这些检索到的信息被附加到原始查询中作为上下文,一起发送给大型语言模型(LLM)进行最终答案的生成。
  • 特点:
    • 预检索 (Pre-retrieval): 通常在生成之前进行一次性检索。
    • 无循环 (Non-iterative): 检索和生成过程通常是单向的,没有反馈循环来改进检索。
  • 资料:

1.2 迭代/自适应RAG (Iterative/Adaptive RAG)

  • 描述: 引入了反馈循环,允许RAG系统根据LLM的反馈或中间生成结果来改进检索或重新检索。这种方法旨在解决单次检索可能不足以提供所有必要信息的问题。
  • 特点:
    • 多跳检索 (Multi-hop Retrieval): 逐步提炼查询,进行多次检索以回答复杂问题。
    • 生成式检索增强 (Generative Retrieval Augmentation): LLM不仅生成答案,还可以生成新的查询来改进检索。
    • 自适应检索 (Adaptive Retrieval): 根据问题的复杂性和当前知识状态动态调整检索策略。
  • 资料:
    • “Self-RAG: Learning to Retrieve, Generate, and Critique through Self-Reflection” by Akari Asai et al. (Meta AI, 2023). 这是一个重要的研究,模型在生成时进行自我反思和评估,并根据需要触发额外的检索。
    • “Active Retrieval Augmented Generation” (ARAG) and “Adaptive Retrieval Augmented Generation” (ARAG):
      • 相关论文通常探索如何让模型主动决定何时检索以及检索什么。
      • 可以搜索关键词如 “Adaptive RAG” 或 “Iterative RAG” 来寻找相关研究。

1.3 查询优化RAG (Query Optimization RAG)

  • 描述: 在进行检索之前,对用户的原始查询进行优化或重写,使其更适合检索模型。这包括查询扩展、查询分解或生成多个查询。
  • 特点:
    • 查询重写 (Query Rewriting): LLM重写原始查询以提高检索效果。
    • 查询扩展 (Query Expansion): 添加同义词、相关概念或上下文信息来丰富查询。
    • 子查询生成 (Sub-query Generation): 将复杂查询分解为多个更简单的子查询。
  • 资料:
    • “Query Rewriting” in advanced RAG frameworks: 许多RAG框架和库都集成了查询重写模块。
      • 可参考 LlamaIndex 的相关文档或博客,搜索 “Query Rewriting LlamaIndex”。
      • 例如,LangChain 也有关于查询转换和增强的策略。
    • LangChain博客 解构 RAG”:https://blog.langchain.com/deconstructing-rag/

1.4 融合/混合RAG (Fusion/Hybrid RAG)

  • 描述: 结合多种检索策略(例如,向量搜索、关键词搜索、知识图谱查询)来提高检索的全面性和准确性。也可以指结合不同的模型(如多个LLM)来完成检索和生成。
  • 特点:
    • 多模态检索 (Multi-modal Retrieval): 不仅检索文本,还可以检索图像、音频等。
    • 混合检索器 (Hybrid Retrievers): 同时使用稀疏(TF-IDF, BM25)和密集(向量嵌入)检索器。
    • 数据源融合 (Data Source Fusion): 从结构化数据(如数据库、知识图谱)和非结构化数据中检索。
  • 资料:
    • “Hybrid Search” (various vendors/blog posts): 许多向量数据库和搜索引擎都支持混合搜索。
    • 结合知识图谱的RAG (RAG with Knowledge Graphs):
      • 可以搜索 “Knowledge Graph RAG” 来寻找相关论文和实现。

1.5 后处理/排名优化RAG (Post-processing/Reranking RAG)

  • 描述: 在检索阶段和生成阶段之间增加一个后处理步骤,对检索到的文档进行重新排序、筛选或摘要,以确保传递给LLM的上下文是最相关和高质量的。
  • 特点:
    • 重排器 (Rerankers): 使用更强大的交叉编码器或LLM来评估检索结果的相关性。
    • 上下文压缩/摘要 (Context Compression/Summarization): 减少检索到的信息量,只保留最关键的内容。
    • 信息过滤 (Information Filtering): 移除冗余或不相关的信息。
  • 资料:

1.6 RAG-Agent 融合 (RAG-Agent Integration)

  • 描述: 将RAG能力与LLM代理(Agent)的规划、工具使用和反思能力相结合。代理可以决定何时以及如何使用RAG来获取信息,并在必要时进行多步检索和迭代改进。
  • 特点:
    • 主动检索 (Proactive Retrieval): 代理可以根据其思考和规划主动触发检索。
    • 动态工具选择 (Dynamic Tool Selection): 代理可以根据任务需求选择合适的检索工具。
    • 反思与改进 (Reflection & Improvement): 代理可以评估检索结果和生成答案的质量,并决定是否需要重新检索或调整策略。

1.7 总结

RAG领域正朝着更智能、更自适应、更具推理能力的方向发展。从最初的单次检索,到现在的多轮迭代、查询优化、多种数据源融合以及与Agent的深度结合,RAG系统正在变得越来越强大和复杂,以应对日益复杂的知识密集型任务。选择哪种RAG类型取决于您的具体用例、数据特性以及对性能、成本和复杂度的要求。

2 RAG优化

为了进一步提升 RAG 系统的鲁棒性、准确性、效率和智能水平。我们需要对RAG进行优化。

2.1 RAG类型对应的优化点

不同的RAG类型说明了RAG系统内可以优化的点、流程。
总体而言,RAG 的优化围绕着三个核心目标:

  1. 提高检索相关性 (Retrieval Relevance): 确保检索到的信息与查询高度相关且准确。
  2. 提高生成质量 (Generation Quality): 确保 LLM 生成的答案流畅、准确、一致,并有效利用检索到的信息。
  3. 提高效率与可靠性 (Efficiency & Robustness): 减少延迟,处理边缘情况,并提供更可靠的输出。

以下是具体的优化点和对应的过程:

1. 查询 (Query) 阶段的优化:

  • 目标: 使原始用户查询更适合检索器,以获取高质量的初始检索结果。
  • 优化类型/策略:
    • 查询优化 RAG (Query Optimization RAG)
    • 具体过程:
      • 查询重写 (Query Rewriting): 将模糊或不完整的用户查询转换为更精确、更适合检索的表达。例如,将“告诉我关于苹果”重写为“苹果公司最新的iPhone型号是什么?”或“苹果(水果)的营养价值”。
      • 查询扩展 (Query Expansion): 为原始查询添加同义词、相关术语或不同表述,以扩大检索范围并捕获更多相关文档。
      • 子查询生成 (Sub-query Generation): 将复杂的多意图查询分解为多个更简单的子查询,每个子查询用于检索特定方面的信息。例如,“iPhone 15 和 Galaxy S24 哪个拍照更好,电池续航怎么样?”可以分解为关于拍照的子查询和关于电池的子查询。
      • 意图识别 (Intent Recognition): 识别用户查询的真实意图,指导后续检索,避免检索无关信息。

2. 检索 (Retrieval) 阶段的优化:

  • 目标: 从知识库中找到最准确、最相关、最全面的信息片段。
  • 优化类型/策略:
    • 基础 RAG (Naive/Standard RAG) 的检索部分
    • 融合/混合 RAG (Fusion/Hybrid RAG)
    • 具体过程:
      • 数据索引策略优化 (Indexing Strategy Optimization):
        • 分块大小和重叠 (Chunking Size and Overlap): 如何将原始文档切割成适合检索和LLM上下文窗口的块,是影响检索质量的关键。
        • 元数据丰富 (Metadata Enrichment): 为文档块添加有用的元数据(如来源、日期、主题、实体信息),以便更精确的过滤或检索。
        • 多种索引方式: 例如,除了基于内容的嵌入,还可以构建基于摘要、问题-答案对或知识图谱的索引。
      • 检索算法优化 (Retrieval Algorithm Optimization):
        • 向量相似度搜索 (Vector Similarity Search): 使用更先进的嵌入模型(Embedding Models)来生成语义更丰富的向量,以及更高效的向量数据库(Vector Databases)。
        • 混合搜索 (Hybrid Search): 结合关键词搜索(如BM25)和向量搜索,以弥补各自的不足。关键词搜索擅长精确匹配,向量搜索擅长语义匹配。
        • 多模态检索 (Multi-modal Retrieval): 能够检索并整合来自不同模态(文本、图像、音频)的信息。
        • 知识图谱检索 (Knowledge Graph Retrieval): 利用知识图谱的结构化信息进行精确的事实检索和关系推理。

3. 检索结果处理 / 上下文构建 (Context Processing / Context Construction) 阶段的优化:

  • 目标: 在将检索到的信息发送给LLM之前,对其进行精炼和组织,确保上下文高效且无冗余。
  • 优化类型/策略:
    • 后处理/排名优化 RAG (Post-processing/Reranking RAG)
    • 具体过程:
      • 重排 (Reranking): 使用一个更小的、通常更强大的模型(如交叉编码器,或甚至另一个LLM)对初步检索到的Top-K文档进行重新评分和排序,以确保最相关的文档排在前面。
      • 上下文压缩 (Contextual Compression): 自动从检索到的文档中提取最相关的句子或段落,或者对其进行摘要,以减少发送给LLM的Token数量,同时保留关键信息。这有助于缓解LLM的“中间遗失现象”和上下文窗口限制。
      • 去重与过滤 (Deduplication and Filtering): 移除检索结果中的重复内容,或过滤掉与查询不相关的噪声信息。
      • 冲突检测与解决 (Conflict Detection and Resolution): 如果检索到的文档之间存在矛盾信息,尝试识别并处理这些冲突,避免LLM接收到矛盾的上下文。

4. 生成 (Generation) 阶段的优化:

  • 目标: 引导LLM有效利用上下文生成高质量、准确且符合期望的答案。
  • 优化类型/策略:
    • 迭代/自适应 RAG (Iterative/Adaptive RAG) (反馈循环改进生成)
    • RAG-Agent 融合 (RAG-Agent Integration) (代理的推理和规划影响生成)
    • 具体过程:
      • Prompt Engineering 优化:
        • 上下文整合提示 (Context Integration Prompting): 设计Prompt,明确指示LLM如何利用检索到的上下文来回答问题,例如“请根据提供的上下文信息回答以下问题。如果上下文中没有信息,请说明。”
        • 避免幻觉 (Hallucination Mitigation): 通过Prompting(如要求LLM引用来源、在不确定时拒绝回答)和检索结果的质量控制来减少幻觉。
      • 答案验证与批判 (Answer Verification & Critiquing):
        • 自反思 (Self-Reflection): LLM生成答案后,可以再次“反思”其答案是否合理、是否得到了检索文档的支持。
        • 验证器 (Validators): 使用一个独立的模型或一组规则来评估生成答案的事实准确性、连贯性和完整性。
      • 迭代生成 (Iterative Generation): 在复杂问题中,LLM可能需要多次生成中间结果并根据这些结果进行新的检索和提炼,最终得出完整答案。

5. 整体流程/系统级优化 (End-to-End Workflow/System-level Optimization):

  • 目标: 使整个RAG系统更智能、更鲁棒、更灵活。
  • 优化类型/策略:
    • 迭代/自适应 RAG (Iterative/Adaptive RAG) (引入反馈循环)
    • RAG-Agent 融合 (RAG-Agent Integration) (实现更高级的自主行为)
    • 具体过程:
      • 反馈循环与自适应机制 (Feedback Loops & Adaptive Mechanisms):
        • 检索-生成-评估-改进循环: 系统可以评估生成答案的质量,并根据评估结果决定是重新检索、调整检索策略,还是修改生成过程。
        • 多轮交互 (Multi-turn Interaction): 支持与用户的多轮对话,根据对话历史进行更精准的检索和生成。
      • 代理能力集成 (Agentic Capabilities): 让LLM充当一个“智能代理”,自主地规划、选择工具(包括各种RAG组件)、执行、监控和纠错。例如,代理可以决定何时进行向量检索、何时进行知识图谱查询、何时进行查询重写,甚至何时请求人类帮助。
      • 监控与可观测性 (Monitoring & Observability): 实时监控RAG系统的各个环节,包括检索性能、生成质量、延迟等,以便及时发现问题并进行优化。
      • 缓存策略 (Caching Strategies): 缓存常用查询的结果,或缓存重复的检索结果,以提高响应速度和降低成本。

这些优化点相互关联,共同构成了现代RAG系统日益复杂和强大的能力。从简单的“检索->生成”到复杂的“查询优化->多阶段检索->重排->生成->反思/迭代”的流程,RAG的进化之路就是不断识别和优化其各个环节的过程。

2.2 RAG的高级增强技术:更深层次的优化

可以在更深层次上改进检索的“语义”或“抽象级别”,比如生成“辅助信息”来帮助检索。

2.2.1 推理增强RAG (Reasoning-Augmented RAG)

  • 描述: 不仅仅是检索事实,而是通过复杂的推理步骤来利用检索到的信息。这通常涉及将 RAG 与更复杂的思维链 (Chain-of-Thought, CoT) 或规划能力相结合。LLM 不仅是回答问题,还能对检索到的信息进行分析、综合、归纳、演绎。
  • 关键策略:
    • CoT-RAG: 在检索后,LLM 被指示进行逐步推理,利用检索到的上下文来推导答案。
    • Decompositional RAG: 将复杂问题分解为多个子问题,每个子问题独立检索和回答,然后将子答案组合。
    • Verification/Critiquing RAG: LLM 生成答案后,会进行自我验证或批判,检查答案的正确性、一致性以及是否与检索到的证据相符,并在必要时重新检索或修改答案。
  • 资料:
    • “Self-RAG: Learning to Retrieve, Generate, and Critique through Self-Reflection” (Meta AI, 2023): 这篇论文是推理增强 RAG 的一个重要代表,通过自我反思和批判来指导检索和生成。
    • “Tree-of-Thought Prompting” (ToT): 虽然不是严格意义上的 RAG,但其“树状”推理结构可以与 RAG 结合,用于多路径探索和决策。

2.2.2 知识图谱增强RAG (Knowledge Graph (KG)-Enhanced RAG)

  • 描述: 结合结构化的知识图谱数据与非结构化的文本检索。LLM 可以利用知识图谱中的实体、关系和属性进行精确的事实查询和多跳推理,弥补文本检索在精确性和关系理解上的不足。
  • 关键策略:
    • KG-guided Retrieval: 使用知识图谱中的实体和关系信息来指导向量检索,例如,基于查询中识别的实体,优先检索包含这些实体的文档。
    • Hybrid Retrieval: 同时进行向量检索和知识图谱查询,将结构化答案和非结构化文本答案融合。
    • KG Construction/Augmentation: 在 RAG 过程中或离线阶段,利用 LLM 从非结构化文本中抽取信息来构建或增强知识图谱,形成一个正反馈循环。
  • 资料:
    • “Knowledge Graph-enhanced RAG” (Various research papers): 这是一个活跃的研究领域,可以搜索 “Knowledge Graph RAG” 或 “KG-RAG” 来找到最新进展。

2.2.3 多模态RAG (Multi-modal RAG)

  • 描述: 将检索范围从纯文本扩展到图像、音频、视频等多模态数据。用户可以提出涉及多种模态的问题,系统能够从对应的知识库中检索并整合多模态信息来生成答案。
  • 关键策略:
    • 多模态嵌入 (Multi-modal Embeddings): 使用能够理解并对齐不同模态信息的统一嵌入空间。
    • 跨模态检索 (Cross-modal Retrieval): 例如,用文本查询检索图像,或用图像查询检索文本。
    • 多模态生成 (Multi-modal Generation): LLM 不仅生成文本,还可以生成或辅助生成图像、代码等。
  • 资料:
    • “Multi-modal RAG” (Emerging research): 这是一个相对较新的领域,随着多模态 LLM 的发展而兴起。
      • 可以搜索 “Multi-modal RAG” 或 “Visual RAG” 来获取最新的研究论文和博客文章。
      • 例如,Google 的 Gemini 模型本身就具有多模态理解能力,为多模态 RAG 提供了基础。

2.2.4 RAG与微调的融合 (RAG-Fine-tuning Hybrid)

  • 描述: 将 RAG 的优点(实时知识更新、减少幻觉)与模型微调 (Fine-tuning) 的优点(模型行为定制、风格调整、领域适应性)相结合。微调模型可以在生成时更好地利用检索到的上下文,或提升其检索相关性。
  • 关键策略:
    • Retriever Fine-tuning: 微调检索器(例如,嵌入模型)使其更适合特定领域的文档和查询。
    • Generator Fine-tuning: 微调 LLM 以更好地吸收检索到的上下文信息,并以特定风格或格式生成答案。
    • 端到端微调 (End-to-End Fine-tuning): 对整个 RAG 流水线进行联合优化。
  • 资料:

2.2.5 基于模拟或强化学习的RAG优化 (Simulation/Reinforcement Learning based RAG Optimization)

  • 描述: 使用模拟环境或强化学习来训练 RAG 系统的组件(如查询生成器、检索器、重排器)或优化其整体策略,使其能够根据结果反馈进行自适应学习和改进。
  • 关键策略:
    • Learning to Retrieve: 通过强化学习信号,优化检索器,使其能够检索到对 LLM 生成有用答案最有帮助的文档。
    • Learning to Rank: 训练一个模型来学习如何对检索结果进行最佳排序。
    • Simulation-based Evaluation: 在模拟环境中测试和优化 RAG 策略,减少对真实用户反馈的依赖。
  • 资料:
    • 这是一个相对更偏学术的前沿领域,通常出现在顶会论文中。可以搜索 “Reinforcement Learning for RAG” 或 “Learning to Retrieve” 等关键词。

2.2.6 生成辅助信息

2.2.6.1 HyDE (Hypothetical Document Embeddings)
  • 核心思想: HyDE 并不直接修改或优化你的原始查询。相反,它让 LLM 根据你的原始查询,首先生成一个“假设性的(Hypothetical)”答案或文档。然后,它使用这个假设性的文档的嵌入(embedding)去检索相似的真实文档。
  • 为什么不是典型的“查询优化”:
    • 生成式辅助: 它不是优化原始查询的词语或结构,而是生成一个全新的、语义上更接近理想答案的文本。
    • 语义匹配: 它的目的是利用假设性文档的丰富语义信息来提升向量检索的准确性,因为假设性文档包含了更多与答案相关的概念,能更好地激活知识库中的相关信息。原始查询可能非常简短或模糊,但假设性文档能提供一个更密集的语义空间。
  • 优化的是: 检索阶段的语义匹配能力。 它通过一个中间的生成步骤,将查询从“问题空间”映射到“答案/文档空间”,从而让嵌入匹配更加有效。
  • 资料:
2.2.6.2 Step-Back Prompting
  • 核心思想: Step-Back Prompting 是一种高级的思维链(Chain-of-Thought)提示策略。它要求 LLM 不直接回答原始问题,而是先生成一个更抽象、更基础、更概括性的“退后一步(Step-Back)”的问题。然后,LLM 回答这个退后一步的问题,并利用这个答案来帮助回答原始问题。
  • 为什么不是典型的“查询优化”:
    • 思维过程引导: 它关注的是引导 LLM 的推理过程,让其从一个更宏观或更基础的层面理解问题,而不是简单地优化检索关键词。
    • 双重回答/推理: 它涉及两个生成步骤(生成退后问题及答案,然后用退后答案帮助回答原始问题),而查询优化通常只涉及查询本身的转换。
    • 辅助推理,而非直接检索增强: 虽然退后问题可以用于检索,但其核心目的是帮助 LLM 进行更高层次的推理,有时即使不进行检索,也能提升 LLM 的回答能力。当它与 RAG 结合时,这个“退后一步”的答案或问题可以作为额外的上下文或新的检索查询。
  • 优化的是: LLM 的推理能力和问题分解能力,间接提升检索的有效性。 它帮助 LLM 找到一个更合适的概念框架来理解问题,这可以用于生成更好的检索查询,也可以用于更好地利用检索到的信息。
  • 资料:
    • 原始论文:
      • “Step-Back Prompting: Advance Reasoning with Simpler Inference Steps” by Huaixiu Steven Zheng et al. (Google DeepMind, 2023).
    • 相关博客/介绍:
      • 许多关于高级提示工程的指南都会提及 Step-Back Prompting。

2.2.7 趋势

这些更高级的 RAG 增强技术代表了当前研究和实践的趋势,即:

  • 从单纯的检索到智能的推理和规划。
  • 从文本到多模态和结构化知识的融合。
  • 从静态流程到动态、自适应和可学习的系统。

这些技术的集成使得 RAG 系统能够处理更复杂、更开放的问题,同时提供更精确、更可靠的答案。在构建企业级或高性能的 RAG 解决方案时,通常会根据具体需求组合运用其中的多种策略。

3 总结

![[14083a36d99b7790fea54015742b13bc.png]]


网站公告

今日签到

点亮在社区的每一天
去签到