RAG 检索增强生成
一、什么是 RAG?
RAG(Retrieval-Augmented Generation,检索增强生成) 是一种将外部知识库与大语言模型(LLM)相结合的技术。它通过"先检索外部数据,再交给 LLM 生成回答"的方式,有效解决大模型的幻觉问题以及私有知识 / 时效性知识匮乏的痛点。
二、RAG 核心工作流程
RAG 的整体架构包含两个主要阶段:数据准备阶段(离线 / 后台) 和 检索生成阶段(在线 / 实时)。
1. 离线阶段:数据加载与清洗 — 文档处理的第一步。
读取外部文档(PDF、Markdown、数据库记录等),去除无用字符与格式噪声。
2. 离线阶段:文本分块(Chunking) — 控制检索粒度。
将长文档切分成固定长度或按语义切分的"文本块"(Chunks),避免超过模型上下文窗口。
3. 离线阶段:向量化与索引(Embedding & Indexing) — 构建知识库。
使用 Embedding 模型将文本块转换为高维向量,并存入向量数据库或建立倒排索引(BM25)。
4. 在线阶段:用户提问与检索(Retrieval) — 获取相关上下文。
接收用户 Query,采用向量计算或关键词匹配,从数据库中检索出最相关的 Top-K 个文本块。
5. 在线阶段:Prompt 拼接与生成(Generation) — 最终回答合成。
将检索得到的上下文与原始问题拼接进 Prompt 模板,提交给大模型生成最终准确回答。
RAG 架构流程图
【离线准备】 原始文档 ──> 文本切分 (Chunking) ──> Embedding 模型 ──> 向量数据库 (Vector Store)
│
【在线检索】 用户提问 (Query) ───────────────────> 相似度检索 ───────┤
│ ( Top-K Chunk )
▼
Prompt 拼接 ( 系统 Prompt + 上下文 + 提问 )
│
▼
大语言模型 (LLM) ──> 最终输出三、核心技术对比:BM25 vs 向量检索
在检索环节,选择合适的检索算法直接决定了 RAG 效果的好坏。
BM25(关键词 / 字面检索)
- 原理:基于词频(TF)、逆文档频率(IDF)以及文档长度惩罚的传统统计学算法。本质是计算 Query 中的关键词在文档中出现的精确匹配度和稀缺度(属于稀疏向量表示)。
- 优点:
- 精准匹配强:对专有名词、产品型号、专有 ID、人名等非常敏感。
- 零冷启动成本:不需要训练神经网络模型,计算速度极快,开箱即用。
- 可解释性高:容易分析为什么某个文档会被召回。
- 缺点:
- 无法理解语义:搜索"苹果"无法召回"iPhone";搜索"如何退货"无法匹配"售后流程"。
- 词汇同义词 / 错别字敏感:如果用户用词与原文不一致,召回率会大幅下降。
向量检索(Vector / Dense Retrieval)
- 原理:利用深度学习 Embedding 模型(如 text-embedding-3 等)将文本映射为高维连续空间的稠密向量。通过计算余弦相似度(Cosine Similarity)或点积来衡量语义相似度。
- 优点:
- 理解泛化能力强:能跨词汇匹配语义,对意图理解、同义词、近义词效果极佳。
- 跨语言能力:支持跨语言检索(如用英文 Query 检索中文知识库)。
- 缺点:
- 精确定位较弱:对长数字、精确型号、生僻专有名词容易失效。
- 依赖模型质量:Embedding 模型的能力直接决定检索上限,且维度高带来更高的存储和计算开销。
维度对比表
| 特性维度 | BM25(字面检索) | 向量检索(语义检索) |
|---|---|---|
| 匹配机制 | 关键词精确匹配(TF-IDF 演进) | 语义空间距离 / 相似度(Dense Vector) |
| 专有名词 / SKU | 非常优秀 | 容易混淆或忽略精确字符 |
| 同义词 / 抽象意图 | 较差(需额外构建同义词词表) | 优秀(自动映射近义语义) |
| 计算与存储成本 | 极低,传统倒排索引 | 较高,需要 GPU 向量化及向量数据库 |
| 典型代表工具 | Elasticsearch, BM25Okapi, Lucene | Milvus, Pinecone, Qdrant, Chroma |
四、最佳实践:混合检索(Hybrid Search)
单一检索往往有局限。企业级 RAG 通常会将 BM25(保证专有名词不漏) 与 向量检索(保证语义意图覆盖) 相结合,再通过 Rerank(重排序模型) 进行二次打分,以达到召回率与准确率的最佳平衡。
本文首发于「Jason的AI实验室」:https://www.jasonailabtech.com/knowledge/model-practice/rag,站内还有更多 AI 编程助手与大模型开发的实操笔记。
