RAG 是什么?它和微调(Fine-tuning)怎么选?
RAG(Retrieval-Augmented Generation,检索增强生成)= 先检索资料,再让模型基于资料回答。 它解决的是"模型不知道你的私有数据/最新数据"这个问题,而且不需要训练。
1. 一条最小链路
离线:文档 → 切块(chunk) → 向量化(embedding) → 向量库
在线:问题 → 向量化 → 相似度检索 top-k → 拼进 Prompt → LLM 生成
四个环节各有坑:
| 环节 | 常见问题 |
|---|---|
| 切块 | 切太碎丢上下文,切太大稀释相关性(常见 300~800 token + 重叠 10%~20%) |
| 向量化 | 中英文混排、领域术语,通用 embedding 效果差 |
| 检索 | 只看向量会漏关键词命中,常配 BM25 做混合检索 + rerank |
| 生成 | 检索结果塞太多导致"中间遗忘",需要重排与截断 |
2. RAG vs 微调
| 维度 | RAG | 微调 |
|---|---|---|
| 知识更新 | 改文档即可,分钟级 | 要重训,小时级起 |
| 成本 | 向量库 + 检索开销 | 训练算力 + 标注数据 |
| 可解释性 | 能给出处 | 不能,容易一本正经胡说 |
| 擅长 | 事实问答、私有知识 | 风格、格式、任务模式 |
| 不擅长 | 需要推理/改写的复杂任务 | 频繁变化的知识 |
经验判断:要"知道什么"用 RAG,要"会怎么做"用微调;两者可以叠加(微调出格式,RAG 补事实)。
3. 效果差的三个根因
- 检索没召回:先看 top-k 里有没有正确文档——没有的话,改生成模型毫无意义;
- 召回了但没被用:上下文太长、位置太靠中间,模型忽略;要重排并精简;
- 召回了错内容:分块把一句话切断、或不同版本文档混在一起,需要去重与版本过滤。
4. 评估怎么做
至少要三个指标:
- 召回率:正确片段是否进了 top-k(人工标注 50~100 条评估集即可);
- 忠实度:回答里的每句话能否在检索结果里找到依据(可用模型自评 + 抽检);
- 有用性:是否真正回答了问题(人工评分)。
没有评估集的 RAG 项目,调参全靠感觉,最后一定原地打转。
小结
RAG 的工程重点不在"接个向量库",而在切块策略、混合检索、上下文编排、评估闭环这四件事。 先保证"检索得到",再谈"生成得好"。