RAG 和微调有什么区别?什么时候该用 RAG? — 一句话定位
RAG 和微调有什么区别?什么时候该用 RAG? — 一句话定位
一句话核心:RAG 和大模型微调(Fine-Tuning)是大模型落地"专业化"的两条主流路径——前者不改模型权重,靠外挂知识库实时检索;后者改动模型权重,把知识"烧"进参数里。面试官问这个题,本质是在考察你能不能根据数据量、知识更新频率、成本、可解释性四个维度做出合理技术选型。
核心概念(术语表)
- RAG(Retrieval-Augmented Generation,检索增强生成):把"向量检索"和"大模型生成"拼接在一起的范式,先从外部知识库捞相关片段,再让模型基于这些片段作答,模型权重不变。
- Fine-Tuning(大模型微调):在已经预训练好的大模型(如 GPT、DeepSeek)基础上,用小规模、特定任务的数据集再训练一轮,调整模型参数,使其更擅长该任务。
- 预训练模型(Pre-trained Model):在超大规模通用语料上先"学过一遍"的模型(如 BERT、Qwen2.5-7B、DeepSeek-R1),具备语言结构和常识,可作为下游任务的起点。
- LoRA(Low-Rank Adaptation):参数高效微调方法(PEFT)的一种,通过在原始权重矩阵上添加低秩矩阵来减少训练参数量,典型场景是把 7B 模型的训练显存压到单卡 4090 可承受范围。
- 知识库 / 向量数据库:RAG 里的"外部记忆",通常使用 FAISS、Milvus、Chroma 等存储文档 embedding,支持按语义相似度检索。
- Embedding(向量嵌入):把文本转为高维稠密向量的过程,相似的文本在向量空间里距离更近,是 RAG 检索环节的基础。
- Prompt 工程:在不修改模型权重的前提下,通过设计输入提示词来引导模型输出的技术,与 RAG、微调并列的"轻量级优化手段"。
- RAG 的起源:2020 年由 Facebook AI(Meta)团队 Patrick Lewis 等人在论文《Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks》中首次提出,用来解决大模型"知识陈旧"和"幻觉"问题,把生成模型和检索系统耦合在一起。
- 微调(Fine-Tuning)的传统:是深度学习时代就有的方法,早期 NLP 主要靠"预训练 + 微调"两阶段范式(BERT 时代定型),随着 GPT-3 之后参数规模爆炸,又演化出 LoRA、QLoRA、Prefix-Tuning 等参数高效微调(PEFT)方法,目的是用更少算力完成定制。
- 二者关系:RAG 与微调并非"二选一",2023 年以来业界逐渐形成"RAG 解决知识更新,微调解决风格 / 能力迁移"的共识,两者经常在同一系统里组合使用。
工作原理 / 核心机制(详细讲解)
微调(Fine-Tuning)整体思路
通过"在通用模型基础上用小数据再训练",把特定领域的语言风格、专业术语、输出格式"内化"到模型参数里。
- 输入:通用预训练模型(如
deepseek-ai/DeepSeek-R1-Distill-Qwen-7B,7B 参数)+ 特定任务的小规模标注数据集(如医疗文本分类数据集,含 5 类疾病标签)。 - 输出:一个对该任务表现更好的"专用模型",推理时无需再依赖外部知识库。
核心步骤详解:
- 选择预训练模型:根据任务复杂度和硬件选基座。例如对推理任务可选 DeepSeek-R1-7b,对文本分类可用 BERT 或 Qwen2.5-7B。7B 级别模型在单卡 4090(24G 显存)上即可完成微调。
- 准备数据集:以知乎文章中的"Medical-Text-Classification"项目为例,使用 pandas 清洗、用 SMOTE 算法处理类别不平衡、然后按 8:2 切分训练集和验证集,最终训练 token 长度截断到 512。
- 加载模型与分词器:通过 Hugging Face
transformers的AutoModelForSequenceClassification.from_pretrained加载,配合AutoTokenizer做文本编码。 - 配置训练参数并训练:典型配置——
num_train_epochs=3、per_device_train_batch_size=8、学习率2e-5、evaluation_strategy="epoch"、logging_steps=100;用Trainer+DataCollatorWithPadding自动跑训练与评估。 - 评估与调优:在验证集上看准确率 / F1,根据结果调整学习率或增加 epoch,必要时切换到 LoRA、QLoRA 等参数高效方法。
RAG 整体思路
不动模型权重,通过"先检索外部知识,再让模型基于检索结果回答",把最新的、私域的信息临时"喂"给模型。
- 输入:用户问题(Query)+ 外部知识库(文档切片 + 向量化存储)。
- 输出:模型基于检索到的上下文(Context)生成的、更准确、可溯源的回答。
核心步骤详解:
- 文档预处理与切片:把 PDF、Word、网页等私有文档按 500~1000 字切片,避免超出模型上下文窗口。
- Embedding 与入库:用 Embedding 模型(如 BGE、M3E、OpenAI text-embedding-3)把每个切片转成向量,写入向量数据库(FAISS / Milvus / Chroma)。
- Query 检索:用户提问时,先把 Query 也转成向量,用余弦相似度或近似最近邻(ANN)算法从库里捞回 Top-K(典型 K=3~5)个最相关片段。
- Prompt 组装:把检索到的片段拼到 Prompt 模板里,类似"请基于以下参考资料回答:{context}\n问题:{question}"。
- 大模型生成:把组装好的 Prompt 喂给 LLM,模型基于给定上下文作答,并在回答末尾标注引用来源(可溯源是 RAG 的核心卖点之一)。
关键知识点(10-15 条 bullet,每条都要具体)
- 微调像"专科培训",RAG 像"开卷考试"——前者改模型脑子,后者给模型带小抄。
- 微调的代表配置:
DeepSeek-R1-Distill-Qwen-7B+ 学习率2e-5+batch_size=8+3 epochs,4090 单卡可跑。 - RAG 的最小闭环:文档切片 → 向量化 → 入库 → Query 检索 Top-K → Prompt 组装 → LLM 生成。
- 微调的数据门槛通常 1000~10000 条标注样本即可见效;RAG 几乎不需要标注,但要求文档质量高。
- 微调会把知识"烧"进参数,更新知识必须重新训练;RAG 只需更新向量库,几分钟内即可生效。
- 微调改的是模型的"能力 / 风格"(如法律口吻、医疗分类);RAG 改的是模型的"事实 / 知识"(如公司产品手册、最新法规)。
- 同一台 4090 上:微调 7B 模型大约占 20~24G 显存;RAG 推理通常只用 8~16G,因为基座模型可以更小或量化。
- 知识库有访问控制 / 隐私需求时,RAG 更安全——敏感数据不进模型权重,可以随时删除向量。
- 微调可解释性差,模型行为像黑盒;RAG 可溯源,每条回答都能附上引用片段编号,利于审计。
- RAG 在"问不到 / 检索不到"时会退化为普通生成,产生幻觉;微调模型即使训练数据少也仍可输出"看起来合理但可能错"的内容。
- 知乎 fanstuck 文章里的微调示例数据集是 GitHub 上 prasun1/Medical-Text-Classification,含 5 类疾病标签。
- 微调训练集中 80%、验证集 20% 是常见切分比例,文本截断长度 512 是 BERT / Qwen 系列常用值。
- LoRA 是当下最热门的参数高效微调方法,仅训练低秩矩阵,可把可训练参数压缩到原模型的 1% 以下。
- RAG + 微调是工业界主流组合拳:微调负责"专业口吻 + 输出格式",RAG 负责"实时知识 + 引用溯源"。
应用场景(3-5 个真实例子)
- 场景 1:医疗文本分类 — 知乎文章示例项目用
DeepSeek-R1-7b在 Medical-Text-Classification 数据集(5 类疾病)上微调,8:2 切分数据,4090 单卡训练 3 个 epoch,解决"医疗摘要自动归类"问题。 - 场景 2:法律文书助手 — 用微调让模型学会法律条款的口吻和推理结构,再用 RAG 挂载最新司法解释库,回答既专业又实时。
- 场景 3:企业内部知识库问答 — 把公司产品手册、Wiki、会议纪要切片存入向量库,搭 RAG,新员工 24 小时自助问答,无需重新训练模型。
- 场景 4:电商客服 — 微调让模型具备品牌话术和礼貌语气,RAG 让模型实时检索订单 / 物流状态,二者叠加效果最佳。
- 场景 5:法律 / 医疗等强合规场景 — RAG 优先,因为每条回答可标注引用来源,便于审计和责任追溯;纯微调做不到这一点。
常见误区 / 踩坑(4-6 条)
- ❌ 误区 1:以为 RAG 一定能解决幻觉问题。
✅ 正解:RAG 只在"检索到了相关片段"时有效;如果切片粒度不对、Top-K 选错、或知识库本身缺失,依然会幻觉。 - ❌ 误区 2:以为微调数据越多越好。
✅ 正解:微调更看重数据质量而非数量,几千条高质量样本常比几万条噪声样本效果更好。 - ❌ 误区 3:以为微调 = 让模型学新知识。
✅ 正解:微调擅长迁移"风格 / 格式 / 能力",对注入新事实反而吃力且易灾难性遗忘——更新知识应该用 RAG。 - ❌ 误区 4:以为 RAG 不需要任何训练。
✅ 正解:RAG 的 Embedding 模型、检索排序(Reranker)、Prompt 模板都需要根据领域做调整,否则 Top-K 命中率会很低。 - ❌ 误区 5:以为上 RAG 就一定要切很多文档。
✅ 正解:切片过细会破坏语义,过粗又超出上下文窗口,常见 500~1000 字 + 10%~20% overlap 是经验值。 - ❌ 误区 6:以为 LoRA 微调是无损的。
✅ 正解:LoRA 降低了训练成本,但 rank 选得太小(如 r=4)会欠拟合,选得太大(如 r=64)会丧失 PEFT 优势,需要按任务调参。
性能 / 复杂度(数据驱动)
- 微调时间复杂度:O(N × P),N 是样本数,P 是可训练参数量;7B 全量微调在 4090 上训练 1 万条样本约 4~8 小时;LoRA 可压缩到 1~2 小时。
- 微调空间复杂度:全量微调 7B 模型需要约 60G 显存(含优化器和激活),LoRA 可压到 16G 以内,QLoRA 4bit 量化甚至 8G 即可。
- RAG 时间复杂度:检索阶段 O(log N) 到 O(N)(取决于向量索引结构,如 FAISS IVF 近似),生成阶段 O(L × d) 与模型规模相关。
- RAG 空间复杂度:主要是向量库存储——100 万条 768 维向量约 3GB 磁盘 + 内存。
- 与替代方案对比:
- 方案 A(Prompt 工程):时间复杂度最低(O(L × d))、零训练成本,但能力上限受基座模型限制,适合通用任务。
- 方案 B(微调):训练成本最高、推理成本与原模型持平,但能改变模型"行为模式",适合稳定、大批量的任务。
- 方案 C(RAG):增量成本低(更新向量库即可)、推理成本比微调高 1 次检索(约 +50~200ms),适合知识频繁更新的场景。
- 临界点:知识更新频率 > 周 = RAG 更优;输出风格 / 格式高度定制 = 微调更优;二者都要求 = 组合使用。
- 性能数字:知乎文章示例中,4090 单卡微调 7B 模型,3 epoch 约 1~2 小时;RAG 检索 Top-K=5,单次查询端到端延迟约 300~800ms。
与相关概念的区别(至少 3 对)
- vs 微调(Fine-Tuning)
- 维度 1(知识更新):RAG 几分钟即可更新;微调需要重新训练,周期通常数小时到数天。
- 维度 2(可解释性):RAG 每条回答可附引用;微调模型行为像黑盒。
- 维度 3(适用场景):RAG 适合知识密集型(FAQ、文档问答);微调适合能力 / 风格迁移(医疗分类、专用 Agent)。
- 怎么选:知识要"新"用 RAG,模型要"专"用微调。
- vs Prompt 工程
- 维度 1(成本):Prompt 工程几乎零成本;RAG 需要建向量库和维护。
- 维度 2(能力上限):Prompt 工程受基座能力天花板限制;RAG 可外挂无限知识。
- 维度 3(稳定性):Prompt 工程对 Prompt 敏感、易抖;RAG 因检索结果相对稳定,输出更可控。
- 怎么选:能用 Prompt 解决就别上 RAG;Prompt 装不下知识时再上 RAG。
- vs 长上下文(Long Context)
- 维度 1(成本):长上下文直接吃 token,单价高;RAG 只检索必要片段,省钱。
- 维度 2(精度):长上下文在 200K+ 时"中间遗忘"问题严重;RAG 通过检索聚焦相关片段精度更高。
- 维度 3(更新频率):长上下文需每次重传全部文档;RAG 只更新向量库。
- 怎么选:文档 < 5 万字用长上下文省事,文档多且需要频繁更新用 RAG。
进阶 / 面试加分项(2-3 条)
- 最新进展:2024 年起出现"Self-RAG"(模型自己决定要不要检索)、"CRAG"(带置信度的检索评估)、"GraphRAG"(基于知识图谱的检索)等增强范式;微调侧则有"指令微调(Instruction Tuning)"+"DPO / RLHF"组合拳,把偏好对齐和任务定制合并。
- 业界争议:RAG 是否会被超长上下文(如 Gemini 1.5 的 1M 窗口)取代?多数观点认为 RAG 在成本、可解释性、私域控制上仍不可替代,但"何时该用 RAG"的边界在模糊化。
- 一句话送给候选人:选技术不要看哪个"高级",要看数据量、更新频率、可解释性需求、预算这四条线——RAG 是"外挂大脑",微调是"重塑大脑",组合使用才是工业界主流。
面试如何回答
🟢 一句话解释 RAG 和微调的核心区别是什么?
回答要点:
RAG 和微调都是让通用大模型"专业化"的技术,但路径完全不同:RAG 不改模型权重,通过实时检索外部知识库把相关片段喂给模型,本质是"开卷考试";微调则是在预训练模型基础上用特定数据再训练一轮,把知识或风格"烧"进参数里,本质是"专科培训"。
从四个维度对比:
- 知识更新:RAG 几分钟即可更新向量库,微调需重新训练(数小时到数天)。
- 数据需求:微调需 1000~10000 条标注样本,RAG 几乎不需要标注。
- 可解释性:RAG 每条回答可附引用片段,微调是黑盒。
- 成本:微调 7B 模型单卡 4090 需 1~8 小时,RAG 主要是向量库维护成本。
真实场景:企业知识库问答优先 RAG,医疗文本分类优先微调(典型如 DeepSeek-R1-7b 在 Medical-Text-Classification 数据集 5 类疾病上微调)。
金句:"RAG 改事实,微调改能力;知识要新用 RAG,模型要专用微调。"
加分项:工业界主流是 RAG + 微调组合拳——微调定风格、RAG 补知识。
🟡 RAG 的完整工作流程是什么?每一步的关键参数有哪些?
回答要点:
RAG 的标准流程可以拆成 5 步:文档切片 → Embedding 入库 → Query 检索 → Prompt 组装 → LLM 生成。
每一步关键参数:
- 切片:500~1000 字/片,overlap 10%~20%,避免语义断裂。
- Embedding:常用 BGE、M3E、text-embedding-3,向量维度 768~1536。
- 检索:向量库用 FAISS / Milvus / Chroma,余弦相似度,Top-K 通常 3~5,召回率与延迟的平衡点。
- Prompt 组装:模板形如"请基于以下参考资料回答:{context}\n问题:{question}",可加引用标注。
- 生成:温度 temperature 0~0.3 保证稳定,max_tokens 控制长度。
真实场景:企业把 Wiki、产品手册按 800 字切片入库,新员工问答响应延迟 300~800ms,准确率从纯 LLM 的 60% 提升到 90%+。
金句:"RAG 不是'接个向量库'那么简单,每一步参数都会影响召回与生成质量。"
加分项:进阶玩法是在检索后加 Reranker(如 BGE-Reranker)做二次精排,进一步提升 Top-K 命中率。
🟡 微调一个 7B 模型的具体步骤和参数怎么配?
回答要点:
以知乎文章里 DeepSeek-R1-7b 微调医疗文本分类任务为例,标准步骤 5 步:
- 选基座:
deepseek-ai/DeepSeek-R1-Distill-Qwen-7B,基于 Qwen2.5-7B 架构,专注推理任务,单卡 4090(24G 显存)即可运行。 - 准备数据:用 Medical-Text-Classification 数据集(5 类疾病),pandas 清洗、SMOTE 处理类别不平衡,按 8:2 切分训练 / 验证集,文本截断长度 512。
- 加载模型:用
transformers的AutoModelForSequenceClassification.from_pretrained,num_labels=5。 - 配置训练参数:
num_train_epochs=3、per_device_train_batch_size=8、学习率2e-5、evaluation_strategy="epoch"、logging_steps=100,用Trainer+DataCollatorWithPadding自动跑训练。 - 评估调优:在验证集看 F1,调整学习率或 epoch;显存吃紧可切 LoRA,把可训练参数压缩到原模型 1% 以下。
真实场景:单卡 4090 微调 7B 模型 3 epoch 约 1~8 小时(LoRA 1~2 小时),最终在 5 类疾病分类任务上 F1 通常能达 85%+。
金句:"微调不是玄学,参数配置比模型选择更重要。"
加分项:PEFT 时代优先 LoRA/QLoRA 而非全量微调,资源紧张时还能上 QLoRA 4bit 量化进一步压显存。
🟡 什么时候该用 RAG,什么时候该用微调?给出判断决策树。
回答要点:
判断用 RAG 还是微调,看 4 个维度:数据量、知识更新频率、可解释性需求、预算。
用 RAG 的 3 个信号:
- 知识更新频率高(每天 / 每周变),如新闻、产品价格、法规——RAG 几分钟更新向量库即可。
- 需要可解释性和引用溯源,如医疗、法律、金融——RAG 能附引用片段。
- 标注数据少但文档多,如企业内部知识库——RAG 不需要标注。
用微调的 3 个信号:
- 输出风格 / 格式高度定制,如法律口吻、医疗分类——微调能改模型"行为模式"。
- 任务高频稳定,日均调用量大——微调后推理无检索开销,长期更省钱。
- 数据已标注且量大(>1 万条)——微调能充分发挥数据价值。
组合拳场景:客服 Agent 用微调定话术(礼貌、专业)+ RAG 实时查订单状态,二者叠加效果最佳。
金句:"知识要新用 RAG,能力要专选微调,怀疑人生就组合用。"
加分项:决策的本质是"知识 vs 能力"的解耦——RAG 管事实,微调管能力,两者职责清晰、组合无冲突。
🟡 RAG 最大的坑是什么?怎么避免幻觉问题?
回答要点:
RAG 最大的坑是"检索不到时模型硬答"导致的幻觉——切片粒度不对、Top-K 太小、知识库覆盖不全,都会让模型在没找到答案时编造内容。
避免幻觉的 4 个实操方法:
- 切片策略优化:500~1000 字 + 10%~20% overlap,避免破坏语义;用结构化文档解析(如 Markdown 按章节切)效果更好。
- 混合检索:向量检索 + 关键词检索(如 BM25)混合召回,命中率比单一检索高 15%~30%。
- Reranker 二次精排:在 Top-K=20 召回后用 BGE-Reranker 精排到 Top-K=3~5,精度显著提升。
- Prompt 约束:明确指示"若参考资料未涉及请回答'不知道'",并加引用标注(如 [1][2]),让模型有据可循。
真实场景:企业知识库从纯向量检索升级为"向量 + BM25 + Reranker"后,回答准确率从 70% 提升到 92%,幻觉率下降一半。
金句:"RAG 的幻觉不是模型问题,是检索问题——召回质量决定回答上限。"
加分项:进阶方案是 Self-RAG,让模型自己决定要不要检索、检索结果是否可信,进一步降低幻觉。
🔴 LoRA 微调相比全量微调具体省在哪里?什么场景下 LoRA 会失效?
回答要点:
LoRA(Low-Rank Adaptation)的核心思想是在原始权重矩阵 W 上并联一个低秩分解 ΔW = A × B(A 是 d×r,B 是 r×k,r<<min(d,k)),训练时冻结 W、只更新 A 和 B,从而把可训练参数压缩到原模型的 1% 以下。
具体省在哪里:
- 显存:7B 模型全量微调需 60G+(含优化器状态、激活、梯度),LoRA 可压到 16G 以内,QLoRA 4bit 量化甚至 8G 即可。
- 训练时间:单卡 4090 上 1 万条样本,全量微调约 4~8 小时,LoRA 仅 1~2 小时。
- 存储:每个任务只需存几 MB 的 LoRA 权重,切换任务无需重新加载基座。
LoRA 失效的 3 个场景:
- 任务与预训练差异极大:如让通用模型学完全新的编程语言或数学推理,rank 太小会欠拟合。
- rank 选得太小:如 r=4 不足以表达任务复杂度,loss 不下降。
- 学习率 / 训练轮数不够:LoRA 对超参更敏感,常需要比全量微调更细致地调学习率(如 1e-4 ~ 5e-4)。
真实场景:知乎文章中如果觉得 7B 全量微调吃显存,可直接切 LoRA,rank 选 8 或 16,通常效果几乎无损。
金句:"LoRA 不是银弹,省了显存也可能省了能力上限。"
加分项:当 LoRA 效果不佳时,可考虑 QLoRA(4bit 量化基座 + LoRA 适配器),进一步压显存但需注意量化误差。
🔴 如果让你设计一个企业级 RAG 系统,关键架构和组件怎么选?
回答要点:
企业级 RAG 系统设计要点:"离线建库 + 在线检索 + 生成"三段式架构,关键组件选型直接影响系统稳定性。
离线建库链路:
- 文档解析:PDF 用 PyMuPDF / Unstructured,Word 用 python-docx,网页用 Trafilatura。
- 切片策略:500~1000 字 + 10%~20% overlap,结构化文档按章节切。
- Embedding:BGE-large-zh(中文)或 text-embedding-3(多语言),维度 1024~1536。
- 向量库:千万级选 Milvus(分布式),百万级选 FAISS(单机),轻量选 Chroma。
在线检索链路:
- 混合检索:向量召回(语义)+ BM25(关键词),Top-K=20 粗排。
- Reranker:BGE-Reranker 精排到 Top-K=3~5。
- 元数据过滤:按时间、权限、文档类型做硬过滤,提升精度。
生成层:
- 基座模型:7B~13B 量化模型(如 Qwen2.5-7B-Instruct)即可,温度 0~0.3 保证稳定。
- Prompt 模板:要求引用标注、不确定时回答"不知道"。
- 缓存层:高频 query 做 Redis 缓存,降低 LLM 调用成本。
真实场景:某 500 强企业知识库系统用 Milvus + BGE + Qwen2.5-7B,月均 50 万次查询,P99 延迟 < 1.5s,准确率 92%。
金句:"企业级 RAG 不是单点技术,是文档工程 × 检索 × 生成的系统工程。"
加分项:监控层要加召回率、引用率、用户反馈闭环,长期用 Bad Case 反哺切片策略和 Embedding 微调。
🔴 为什么说微调容易'灾难性遗忘'?RAG 为什么没有这个问题?
回答要点:
"灾难性遗忘(Catastrophic Forgetting)"指神经网络在新任务训练时丢失旧任务能力的现象。微调之所以容易出现,是因为它直接用梯度下降修改模型权重,新任务的数据分布会"覆盖"掉预训练时学到的通用知识。
具体表现:
- 用 1 万条医疗数据微调 7B 模型后,模型在通用问答、推理、代码任务上的能力可能下降 10%~30%。
- 学习率越大、训练轮数越多,越容易遗忘——这也是为什么微调学习率通常压到 2e-5 而非 1e-3。
RAG 没有这个问题,是因为它根本不修改模型权重——所有"新知识"都在外挂的向量库里,模型本身始终保持预训练时的状态。
缓解微调灾难性遗忘的 4 个方法:
- 小学习率 + 少 epoch:如 2e-5 + 3 epoch。
- LoRA / Adapter:只更新少量参数,对原模型影响小。
- 混合训练数据:在微调数据里掺 10%~20% 通用数据,保持基础能力。
- 指令微调 + RLHF:用对齐方法让模型"选择性学习"。
真实场景:知乎文章示例用 5 类医疗分类数据微调 DeepSeek-R1-7b,如果学习率调到 1e-3,3 epoch 后通用对话能力会明显退化。
金句:"微调是'重塑大脑',RAG 是'外挂小抄'——改权重有风险,外挂最安全。"
加分项:这也是为什么工业界越来越倾向"微调做能力、RAG 做知识"的分工,让两者各司其职、互不干扰。
