RAG 检索增强生成:架构、向量库、分块策略(与微调对比)
RAG 是让大模型'会查资料'的技术。讲清架构、向量检索、分块策略,以及它和微调到底该怎么选。
#RAG#向量数据库#检索#Embedding更新于 2026-08-12
RAG(Retrieval-Augmented Generation)让大模型在回答前先去“查资料”,把检索到的相关内容塞进上下文再生成。它不改变模型权重,改变的是模型的“输入”。
为什么需要 RAG
大模型有三大硬伤:
- 知识截止:训练完就停在那个时间点,不知道新事
- 幻觉:不知道就编,一本正经胡说
- 没有私有数据:你的公司文档、你的笔记,它没见过
RAG 用“外挂知识库”同时缓解这三个问题:答案不再是模型“背”出来的,而是“查”出来的。
核心架构(四步)
文档 → 切块(Chunking) → Embedding(向量化) → 存入向量库
↓
用户提问 → Embedding → 向量相似度检索(召回 Top-K)
↓
相关片段 + 问题 → 拼进 Prompt → LLM 生成答案
关键三要素:
- Embedding 模型:把文本变成向量,语义相近的文本向量距离近
- 向量数据库:存向量并支持相似度检索(faiss、Milvus、Qdrant、Chroma、pgvector……)
- LLM:基于检索到的上下文生成最终答案
分块策略:质量的分水岭
检索质量 80% 由“怎么切块”决定。常见策略:
| 策略 | 说明 | 适用 |
|---|---|---|
| 固定长度切块 | 按 token 数硬切 | 简单但会切碎语义 |
| 按段落/标题切 | 尊重文档结构 | 大多数场景推荐 |
| 父子分块 | 小块检索 + 大块喂给 LLM | 兼顾命中率与上下文 |
| 滑动窗口重叠 | 相邻块留重叠 | 避免切断语义 |
| 结构化切片 | 按表格/列表/章节切 | 代码、JSON、表格类文档 |
经验:块太小→上下文割裂;块太大→检索噪声多、浪费 token。一般 300-800 token 起步,配合重叠 10-20%。
RAG vs 微调:到底选谁
| 维度 | RAG | 微调 |
|---|---|---|
| 本质 | 改输入(外挂知识) | 改权重(内化知识) |
| 更新知识 | 秒级,改向量库即可 | 重训,慢 |
| 成本 | 低(无训练) | 高(要算力) |
| 幻觉 | 有效缓解(有依据) | 无法根治 |
| 改变风格/能力 | ❌ | ✅ |
| 引用溯源 | ✅ 可给出来源 | ❌ |
决策铁律:
- 要回答“事实/知识”类问题 → RAG
- 要改变模型的“说话方式/能力” → 微调
- 事实 + 风格都要 → RAG + 微调组合
用第一性原理理解:RAG 是“外挂硬盘”,微调是“写入固件”。查资料靠硬盘,改性格靠固件,两者不冲突。
进阶方向(了解即可)
- GraphRAG:在向量检索之上构建知识图谱,更好处理跨文档、多跳关系问题
- 混合检索:向量 + 关键词(BM25)+ 重排序(Rerank)组合,提升召回精度
- Agentic RAG:让 Agent 自主决定何时检索、检索什么、追问什么
继续学习
模型社区与资源:Hugging Face、ModelScope、Replicate、CivitAI
去哪找模型、怎么下模型?盘点主流模型社区:Hugging Face、魔搭 ModelScope、Replicate、CivitAI 的功能与直达教程。
本地部署实践:Ollama / vLLM / llama.cpp 对比与保姆级教程
在本地或小服务器跑大模型的三大工具对比,含安装、量化选型、消费级显卡(RTX 3060/4090)跑 7B/13B 的实战指南。
多模态模型简介:CLIP、GPT-4V 与视觉语言模型
多模态模型让 AI 同时理解文字和图像。从 CLIP 的对比学习,到 GPT-4V 的图文对话,讲清它们如何对齐不同模态。
扩散模型简介:图像生成背后的原理(去噪的魔法)
Midjourney、Stable Diffusion 背后的扩散模型是怎么工作的?用最直观的方式讲清'从噪声到图像'的过程。