· 王思腾 · 大模型工程 · 8 分钟阅读
RAG 原理详解:让大模型用上私有知识的检索增强生成
大模型知识冻结、会幻觉、不知道企业内部数据。RAG(检索增强生成)通过“先检索、再生成”把外部知识注入上下文,是当前落地最广的大模型应用范式。本文带你走通 RAG 的完整链路:分块、嵌入、检索与重排,以及工程上最常踩的坑。

大模型有三个绕不开的短板:知识冻结(训练后不知道新信息)、幻觉(会一本正经地编造)、看不到私有数据(企业文档、数据库)。微调能灌入一些知识,但成本高、更新慢、还无法溯源。
RAG(Retrieval-Augmented Generation,检索增强生成) 给出了更轻的解法:先从知识库里检索出相关内容,再把它塞进提示词,让模型“看着资料回答”。 它是目前落地最广、性价比最高的大模型应用范式,也是 Agent 接入外部知识的基础能力。
一、RAG 的核心思想
一句话概括:把“模型记住所有知识”变成“模型会查资料”。
flowchart LR
subgraph Traditional["传统方式"]
T1["用户问题"] --> T2["LLM<br/>凭参数记忆回答"] --> T3["容易过时 / 幻觉"]
end
subgraph RAG["RAG 方式"]
R1["用户问题"] --> R2["检索相关文档"] --> R3["连同问题给 LLM"] --> R4["基于资料回答<br/>可引用出处"]
end好处很直接:
- 知识可更新:更新知识库即可,无需重新训练模型;
- 减少幻觉:答案基于检索到的真实材料;
- 可溯源:能给出引用来源,增强可信度;
- 接入私有数据:企业文档、客服记录、代码库都能用。
二、RAG 的两个阶段
RAG 系统分离线索引和在线问答两条链路。
1. 离线索引(Indexing)
把原始文档处理成可检索的形式:
flowchart TB
D0["原始文档<br/>PDF / 网页 / Markdown / 数据库"] --> D1["解析、清洗"]
D1 --> D2["文本分块 Chunking<br/>切片段 + 重叠"]
D2 --> D3["嵌入模型 Embedding"] --> Vec["向量"]
Vec --> DB[("向量数据库<br/>向量 + 原文 + 元数据")]- 解析与清洗:提取正文、去噪(页眉页脚、表格特殊处理)。
- 分块:把长文档切成 chunk(常见 300~800 token),块太小丢上下文、太大稀释相关性,通常块之间保留重叠(overlap)避免切断语义。
- 嵌入:用 embedding 模型把每个 chunk 映射成一个高维向量(如 768/1536 维),语义相近的文本向量距离近。
- 入库:向量连同原文、来源、元数据(标题、日期、权限)一起存入向量库。
2. 在线问答(Retrieval + Generation)
flowchart TB
Q["用户提问"] --> QV["问题转成向量"]
QV --> R1["向量检索<br/>相似度 Top-K 候选"]
R1 --> RR["(可选)重排 Rerank<br/>精选最相关几块"]
RR --> Prompt["组装 Prompt<br/>系统指令 + 检索上下文 + 问题"]
Prompt --> LLM["LLM 生成答案<br/>带引用出处"]模型被明确要求“仅根据提供的资料回答,资料不足就说明”,从而把生成锚定在真实内容上。
三、关键技术点
1. 分块策略(Chunking)
分块质量直接决定检索质量。常见做法:
- 固定长度 + 重叠:按 token 切,相邻块重叠 10~20%;
- 按结构切:按标题/段落/句子边界切,保留语义完整;
- 父子分块:检索用小块(精准匹配),返回给模型用大块(完整上下文);
- 上下文增强:给每个块附上文档标题、路径等元信息。
2. 嵌入(Embedding)
- 选择与场景、语言匹配的 embedding 模型(中文场景选多语/中文优化模型);
- 查询和文档要用同一个模型编码;
- 维度越高表达力越强但存储/检索成本越高。
3. 向量检索
用相似度(余弦相似度等)在向量库中找最近邻(ANN,近似最近邻)。但纯向量检索不是万能:
- 向量擅长语义匹配(“怎么退款”≈“退货流程”);
- 关键词(BM25/全文检索)擅长精确匹配(产品型号、错误码、人名)。
生产系统常用混合检索(Hybrid Search):向量 + 关键词两路召回,再合并,兼顾语义和精确。
4. 重排(Reranking)
初检用便宜的向量检索召回较多候选(如 Top-50),再用更精准但更慢的 reranker 模型(交叉编码器)对“问题-文档”对逐一打分,精排出最相关的少数几块(如 Top-5)。这一步往往对准确率提升最明显。
5. 生成与引用
把精排后的上下文拼进 prompt,并要求模型标注引用。上下文要控制长度(相关、少而精优于多而杂),避免噪声干扰。
四、常见工程坑
| 问题 | 表现 | 对策 |
|---|---|---|
| 分块不合理 | 检索不到或上下文残缺 | 按结构切、加重叠、父子分块 |
| 只靠向量检索 | 专有名词/编号匹配差 | 混合检索(向量+关键词) |
| 召回不精 | 塞了无关内容、答案跑偏 | 加 rerank、控制 Top-K |
| 知识过时 | 答案引用旧文档 | 增量索引、版本与时效管理 |
| 权限越界 | 检索到无权访问的文档 | 检索时带权限过滤(元数据) |
| 缺乏评估 | 改了不知道变好没 | 建问答评测集,衡量召回率/命中率/答案正确性 |
五、进阶方向
- 查询改写:把口语问题改写成更利于检索的形式;多轮对话先做“指代消解”;
- 多路召回与融合:向量、关键词、知识图谱、结构化查询结合;
- Agentic RAG:由 Agent 自主决定“要不要检索、检索几次、结果够不够”,甚至做多轮检索、查询分解(对应本系列 Agent 文章中的工具调用循环);
- 评测闭环:用真实问答持续度量检索命中率和答案质量,驱动分块/模型/参数迭代。
六、小结
RAG 的本质是给大模型装上“开卷考试”的能力:
- 离线把知识分块、嵌入、存入向量库;
- 在线把问题向量化、检索、重排,再连同上下文交给模型生成;
- 工程关键在分块、混合检索、重排、权限与评估;
- 它既是独立的知识库问答方案,也是 Agent 获取外部信息的核心工具。
下一篇我们深入它的存储底座——向量数据库,看看海量向量如何被高效地组织和检索。
本文由 AI 辅助创作,所有内容仅供交流与参考。


