🔍 RAG 原理
检索增强生成 · 为什么需要 RAG · 完整流程 · RAG vs 微调
1. 什么是 RAG(检索增强生成)?
RAG(Retrieval-Augmented Generation):让大模型先检索、后回答——把外部知识库中与问题相关的文档片段检索出来,连同问题一起交给大模型生成答案。
核心思想:大模型不知道你的私有数据(校史、内部规范),RAG 把"答案素材"喂给它,模型负责"组织语言"。回答基于检索到的内容,而不是凭模型记忆瞎编。
RAG 一句话流程
用户提问
↓
① 检索:从知识库找到最相关的 3~5 段文档
↓
② 增强:把"问题 + 检索到的文档"拼成提示词
↓
③ 生成:大模型基于文档内容回答(附引用来源)
↓
返回答案
🎯 面试要点
- RAG 三要素:知识库(数据)、检索(向量/关键词)、生成(LLM)
- 典型应用:文档问答、客服机器人、企业知识助手、学校校史/招生问答
2. 为什么需要 RAG?解决了 LLM 的什么问题?
- 知识时效性:模型训练数据有截止日期,新事件(今年招生政策)它不知道。RAG 检索最新文档即可回答
- 私有/专属知识:校史、内部制度、产品手册——模型从未见过。RAG 把"企业知识"外挂进来
- 防幻觉(关键):模型不知道会"一本正经地编"。RAG 提供真实素材 + 要求"只能依据材料回答",大幅降低编造
- 可溯源:回答可以附上引用来源(第几份文档第几段),可信、可审计
- 成本可控:比微调便宜得多,改知识只需更新文档,不用重训模型
🎯 面试要点
- 回答"为什么用 RAG"的标准结构:时效性 + 私有知识 + 防幻觉 + 可溯源 + 低成本
- 注意:RAG 不能完全消除幻觉(检索不到、材料本身错误时仍会出错)——见对话机器人页的防护手段
3. RAG 和微调(Fine-tuning)的区别?怎么选?
| 对比 | RAG | 微调 |
|---|---|---|
| 知识来源 | 外部检索(不改模型) | 改模型参数(记忆进权重) |
| 更新知识 | 改文档即可,秒级生效 | 重训,耗时花钱 |
| 成本 | 低(无训练) | 高(GPU + 数据标注) |
| 可溯源性 | 强(引用来源) | 弱(知识在参数里) |
| 适合 | 知识问答、内容型助手 | 风格/格式/能力定制(客服语气、JSON 输出、领域术语) |
实践结论:知识问答优先 RAG;微调用于"教模型行为方式"而非"喂知识"。两者常组合使用(微调语气 + RAG 喂知识)。
🎯 面试要点
- 一句话:RAG 改"数据库",微调改"模型本身"
- 知识频繁更新 → RAG;需要特定输出风格/领域术语 → 微调
4. 一个 RAG 系统的完整架构?
- 离线(建库):采集文档(PDF/Word/网页)→ 清洗 → 分块(chunk) → 每块 Embedding 向量化 → 存入向量数据库(带元数据:来源、章节)
- 在线(问答):
- 用户问题 → Embedding 向量化 → 向量库相似度检索 Top-K(可加关键词混合检索)
- 重排序(Rerank)精排 → 拼装提示词(问题 + 检索片段 + 引用要求)
- LLM 生成答案 → 返回,附引用来源
工程栈一览
文档处理:PyMuPDF / unstructured / markitdown(网页→markdown)
分块:LangChain TextSplitter / 自研按标题切
Embedding:OpenAI text-embedding-3 / BGE / M3E(中文)
向量库:Milvus / FAISS / pgvector / Elasticsearch / Qdrant
编排:LangChain / LlamaIndex / Dify / FastGPT(低代码)
LLM:GPT / Claude / 国产(通义、DeepSeek、智谱)
评估:RAGAS(忠实度/相关度指标)
🎯 面试要点
- 两条链路记牢:离线"文档→向量"建库,在线"问题→检索→生成"
- 没有向量库也能起步:小知识库用 BM25 关键词检索或直接全文检索(ES)也够用