当前位置: 首页 > news >正文

RAG学习笔记 检索优化

检索增强技术进阶学习笔记

核心思想:结合稀疏向量与密集向量,利用关键词精确匹配与语义理解的双重优势,克服单一检索的局限性。

技术原理

  1. 稀疏向量 (Sparse Vectors)

    • 表示:基于词频统计(如TF-IDF, BM25),高维向量,绝大多数元素为零
    • 优点:关键词精确匹配,可解释性强,无需训练
    • 缺点:无法理解语义,存在"词汇鸿沟"
  2. 密集向量 (Dense Vectors)

    • 表示:通过深度学习模型(如BERT)学习到的低维、稠密浮点数向量,捕捉语义
    • 优点:语义理解能力强,能处理同义词、上下文
    • 缺点:可解释性差,需大量数据训练,对未登录词敏感

融合策略

  1. 倒数排序融合 (RRF):不依赖原始得分,仅根据文档在不同检索系统中的排名计算最终得分

    • 公式:RRF_score(d) = Σ(1 / (rank_i(d) + c))
  2. 加权线性组合:将不同系统的得分归一化后,通过权重参数 α 进行线性组合

    • 公式:Hybrid_score = α * Dense_score + (1 - α) * Sparse_score

Milvus实践:通过 BGEM3EmbeddingFunction 同时生成稀疏与密集向量,利用 RRFRanker 或自定义加权策略实现混合检索。

查询构建 (Query Construction)

核心思想:利用LLM将用户的自然语言查询"翻译"成针对特定数据源的结构化查询语言或请求,扩展RAG应用场景。

关键技术

  1. 文本到元数据过滤器 (Self-Query Retriever)

    • 原理:LLM解析用户查询,分离出用于语义搜索的查询字符串和用于精确过滤的元数据过滤器
    • 关键:需通过 AttributeInfo 向LLM清晰定义元数据字段的名称、类型和描述
  2. 文本到Cypher:将自然语言问题转换为图数据库(如Neo4j)的Cypher查询语句,用于查询复杂关系数据

  3. 文本到SQL (Text-to-SQL)

    • 挑战:LLM"幻觉"、对数据库结构理解不足、用户输入模糊
    • 优化策略
      • 提供精确的数据库模式(DDL)
      • 提供少量高质量的"问题-SQL"示例(Q-SQL)
      • 利用RAG构建数据库"知识库",包含表结构、字段描述、复杂示例
      • 实现错误修正与反思循环

简易Text2SQL框架:包含知识库模块(存储DDL、Q-SQL、描述)、SQL生成模块(LLM生成与修复SQL)、代理模块(协调检索、生成、执行流程)。

查询重构与分发 (Query Transformation & Routing)

核心思想:在检索前对原始查询进行预处理(重构),并智能分发到最合适的数据源或处理组件(路由),以提升检索质量。

查询翻译 (Transformation) 技术

  1. 提示工程 (Prompt Engineering):引导LLM将查询改写得更清晰、具体,或直接生成可执行的JSON指令(如排序指令)

  2. 多查询分解 (Multi-query):将复杂问题拆分为多个子问题,分别检索后合并结果,丰富上下文。使用 MultiQueryRetriever

  3. 退步提示 (Step-Back Prompting):引导LLM先从具体问题中抽象出通用原理或核心概念(退步问题),再基于此推理具体答案,提升复杂问题推理能力

  4. 假设性文档嵌入 (HyDE):让LLM根据查询生成一个理想的"假设性答案"文档,用该文档的向量去检索真实文档,将"查询-文档"匹配转化为更易的"文档-文档"匹配

查询路由 (Routing) 技术

  • 应用场景:数据源路由(向量库/SQL库/图数据库)、组件路由(简单检索/复杂Agent)、提示模板路由(数学/代码)
  • 实现方法
    1. 基于LLM的意图识别:设计提示词让LLM直接输出路由标签,结合 RunnableBranch 实现分支逻辑
    2. 嵌入相似性路由:计算用户查询与预设路由描述之间的向量相似度,选择最相似的路由。延迟更低

检索进阶 (Advanced Retrieval)

核心目标:解决基础向量检索的局限性(如最相关文档不在顶端、语义偏差、上下文噪音),构建更精准、鲁棒的RAG系统。

重排序 (Re-ranking):对初步检索结果进行精细排序。

  1. RRF:零样本方法,融合多路召回结果的排名信息
  2. RankLLM / LLM-based Reranker:直接让LLM根据查询和候选文档判断相关性并排序,精度高但成本高
  3. Cross-Encoder:将查询和文档拼接后输入模型,直接输出相关性分数。精度最高,但需N次模型推理,延迟高
  4. ColBERT:采用"后期交互"机制,独立编码查询和文档的每个Token,通过计算Token间最大相似度(MaxSim)并聚合得到总分,在精度和效率间取得平衡

压缩 (Compression):提炼检索结果,去除无关信息。

  • LangChain的 ContextualCompressionRetriever:包装基础检索器,使用压缩器(如 LLMChainExtractor 提取相关句、LLMChainFilter 过滤整文档、EmbeddingsFilter 基于向量相似度过滤)进行后处理
  • 自定义管道:通过继承 BaseDocumentCompressor 实现自定义功能(如ColBERT重排器),并可利用 DocumentCompressorPipeline 组合多个处理器(如先重排后压缩)

校正 (Correcting):引入"检索-评估-行动"循环,提升系统鲁棒性。

  • 校正RAG (C-RAG):先评估检索到的文档质量(正确/不正确/模糊),再根据评估结果采取不同行动(知识精炼或触发外部知识搜索),减少幻觉。可用 langgraph 构建此类复杂流程。
http://www.gsyq.cn/news/183348.html

相关文章:

  • 官网-城乡居民医疗保险报销政策
  • 读书笔记9-12.18
  • 实操-失业保险金申领
  • polar-ctf 简单(web)
  • 2021hychs 一试模拟题解析
  • 计算机Java毕设实战-基于springboot+vue的车辆配件进销存平台设计和实现基于SpringBoot的汽车配件仓储管理系统设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 2021hychs 一试模拟题
  • Java计算机毕设之基于SpringBoot的汽车配件仓储管理系统设计与实现配件信息、供应商、库存、采购、销售(完整前后端代码+说明文档+LW,调试定制等)
  • 京东多智能体综合设计——多源异构数据采集与融合应用综合实践
  • Miniconda-Python3.10镜像如何支持最新版PyTorch 2.x?
  • SEER癌症数据库(The Surveillance, Epidemiology, and End Results)
  • 艺术模型
  • Java毕设项目:基于SpringBoot的学校图书管理系统设计与实现(源码+文档,讲解、调试运行,定制等)
  • 学长亲荐8个AI论文工具,本科生毕业论文轻松搞定!
  • PyTorch安装教程避坑指南|基于Miniconda-Python3.10真实测试
  • 读书笔记7-12.4
  • HTTP在参考模型中的哪一层
  • Java计算机毕设之基于SpringBoot的学校图书管理系统设计与实现基于SpringBoot+Vue的图书管理系统的设计与实现(完整前后端代码+说明文档+LW,调试定制等)
  • CUDA驱动不匹配?Miniconda-Python3.10镜像自动检测修复机制
  • 5层是7层中的哪两层进行了合并
  • 一个合格的程序员必读经典书籍(含下载链接PDF)
  • async 和 await 详细解析
  • Anaconda下载太慢?改用Miniconda-Python3.10+清华镜像极速体验
  • 领域专用提示词之视频主题与内容创作
  • C++ 多态:面向对象的 “灵活灵魂”
  • Markdown撰写技术博客|Miniconda-Python3.10环境实测PyTorch性能
  • Linux 字符设备驱动中 “主次设备号的静态 / 动态分配” 实验
  • Java毕设项目:基于SpringBoot的房屋租赁系统的设计与实现(源码+文档,讲解、调试运行,定制等)
  • ThinkLink 正式上线 Docker 安装版本:快速部署的一体化 LoRaWAN 物联网平台
  • Pyenv管理多个Python版本?不如试试Miniconda-Python3.10专用环境