跳转至

7.9 RAG 实现

RAG 架构(Huyen, 2025)

一个 RAG 系统有两个核心组件:

  • 检索器(Retriever):通过两个功能处理外部记忆源——索引(为快速检索而准备数据)与查询(按与给定查询的相关性对文档排序)。
  • 生成器(Generator):一个基础模型,依据查询加上检索到的上下文产出回复。

在现代 RAG 系统中,这两个组件通常分开训练。把整个 RAG 系统端到端(检索器 + 生成器联合)微调可显著提升性能,但较为少见。

检索算法

检索是 RAG 的支柱。算法选择决定了质量、成本与延迟:

算法类型 工作原理 最适用于
关键词(BM25/TF-IDF) 按词频与逆文档频率为文档打分 精确匹配;技术术语;法律/合规文本
稠密检索(向量搜索) 对查询和文档做嵌入,按余弦/点积相似度检索 语义相似;改写句;概念检索
混合(Hybrid) 组合关键词与稠密得分(通常用 RRF 或加权求和) 通用场景;兼顾精确匹配与语义匹配
稀疏 + 稠密(SPLADE、ColBERT) 习得式稀疏表示;查询时做稠密交互 高召回兼具可解释性
重排序(Re-ranking) 用第二轮交叉编码器对召回的 top-k 片段做最终排序 在首轮检索之后提升精确率

检索优化

提升检索质量的关键策略:

  • 切块策略(Chunking strategy):把文档切分为可处理的片段是一项核心设计决策。块大小与重叠会同时影响召回率与上下文长度。常见做法:固定大小切块、句级切块、语义切块(在主题边界处切分)。
  • 查询扩展(Query expansion):改写或扩充用户查询以提升召回(假设性文档嵌入、多查询检索)。
  • 元数据过滤(Metadata filtering):为文档附加元数据(日期、来源、类别)并据此过滤,减少不相关的召回。
  • 上下文压缩(Contextual compression):检索之后,只提取与具体查询最相关的段落,而非纳入整块内容。
  • 嵌入模型选型:嵌入模型与检索算法同等重要。在专业语料上,领域微调过的嵌入模型优于通用模型。

RAG vs. 全上下文提示 vs. 微调

方案 何时使用
RAG 知识不在模型权重中;需保持时新;大规模/专有文档集
全上下文提示(Full-context prompting) 知识能装进上下文窗口;可容忍延迟;无需维护索引
微调(Finetuning) 风格/格式适配;领域专门化;重复出现的任务模式

RAG 与微调是互补的:RAG 提供时新的知识检索,微调则调整模型的行为与风格。两者可以(且通常应当)配合使用。

代码化搜索(SaC)

一种新兴范式:语言模型通过生成代码,按需组装任务专用的检索流水线,而非将请求路由至固定流水线。完整架构详见 代码化搜索,涵盖 Perplexity 的"模型即控制平面"、计算沙箱、智能体搜索 SDK,以及 WANDR 基准测试与 CVE 案例研究(显示 Token 减少 85.1%)。

RAG 引擎

检索方法

传统检索、混合检索、语义检索、知识驱动检索与智能体上下文检索

retrieval strategies

主要检索策略对比:

retrieval strategies

智能体上下文检索:

contextual retrieval

为 RAG 微调模型

参见

参考资料