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 引擎
- Contextual AI RAG Agents:面向企业级场景的解决方案,可构建并部署带有重排序器(Reranker)的专用 RAG 智能体
- Gigaspaces eRAG
检索方法
传统检索、混合检索、语义检索、知识驱动检索与智能体上下文检索
主要检索策略对比:
智能体上下文检索:
为 RAG 微调模型
参见
参考资料
- AI Engineering: Building Applications with Foundation Models — Chip Huyen, O'Reilly, 2024. 第 6 章。


