01.3 - RAG vs 微调:技术选型对比
定位: RAG 生态中的关键决策——什么场景用 RAG、什么场景用 Fine-tuning、何时两者结合 面试高频度: ⭐⭐⭐⭐ 考查方式: 选型分析、场景判断、组合策略
一、这是什么?为什么需要它?
是什么
RAG 和 Fine-tuning 是两种让 LLM 在特定任务上表现更好的主流范式:
RAG(检索增强生成)
不改变模型 → 改变模型能看到的信息
模型参数不变 → 通过 Prompt 注入上下文
类似:考试时带参考书
Fine-tuning(微调)
改变模型 → 让模型"学习"数据的模式
模型参数更新 → 通过训练调整权重
类似:通过做练习题掌握知识点为什么需要对比?
选错方案 ≈ 用错了工具。RAG 和 Fine-tuning 不是竞争关系,而是解决不同问题的工具。
python
# 错误的选择逻辑:
"RAG 很流行,所以所有问题都用 RAG" ❌
"Fine-tuning 能提升准确率,所以先微调" ❌
# 正确的选择逻辑:
"我的问题是知识缺失还是能力不足?"
"知识缺失 -> RAG(快速注入知识)"
"能力不足 -> Fine-tuning(提升模型能力)"
"既要又要 -> RAG + Fine-tuning(组合)"二、原理拆解
2.1 根本区别:信息位置不同
"今天的股价是多少?"
RAG:
信息在「外部数据库」中
-> 检索到最新的股价信息
-> 注入 Prompt
-> 模型基于股价信息回答
-> 你看到的是:准确的最新股价
Fine-tuning:
信息在「模型权重」中
-> 用历史股价数据训练
-> 模型记住了股价模式
-> 直接回答今天的股价
-> 你看到的是:模型"猜"的股价(可能已过时)核心洞察:
| 维度 | RAG | Fine-tuning |
|---|---|---|
| 信息存储位置 | 外部知识库(向量数据库) | 模型内部(权重参数) |
| 信息更新方式 | 改知识库即可,分钟级 | 重新训练,小时-天级 |
| 信息访问方式 | 运行时检索 + 注入上下文 | 训练时学习 + 推理时回忆 |
| 可追溯性 | 可显示来源文档 | 黑盒,不可追溯 |
2.2 适用场景分层对比
┌─────────────────────────────────────────────────────────┐
│ 场景 × 方案 决策矩阵 │
│ │
│ 你需要: │
│ ┌─────────────────┐ │
│ │ 知道新信息 │ ──→ RAG(改知识库即可) │
│ │ 2025年的事件 │ │
│ └─────────────────┘ │
│ │
│ ┌─────────────────┐ │
│ │ 按特定格式输出 │ ──→ Fine-tuning(训练输出格式) │
│ │ JSON/摘要/风格 │ │
│ └─────────────────┘ │
│ │
│ ┌─────────────────┐ │
│ │ 需要事实准确性 │ ──→ RAG(优先) │
│ │ 医疗/法律/金融 │ │
│ └─────────────────┘ │
│ │
│ ┌─────────────────┐ │
│ │ 需要模型行为对齐 │ ──→ Fine-tuning(优先) │
│ │ 安全/语调/角色 │ │
│ └─────────────────┘ │
│ │
│ ┌─────────────────┐ │
│ │ 既要知识又要风格 │ ──→ RAG + Fine-tuning(组合) │
│ │ 客服/领域Agent │ │
│ └─────────────────┘ │
└─────────────────────────────────────────────────────────┘2.3 选型决策树
你的场景需要什么?
|
+-- 问题:需要知道模型训练数据之外的信息?
| (最新数据、私有数据、长尾知识)
| YES --> RAG(知识注入是第一需求)
|
+-- 问题:需要模型按特定格式/风格输出?
| (JSON格式、特定语气、领域术语)
| YES --> Fine-tuning(行为改变优先)
|
+-- 问题:两个都需要?
| (既要有新知识又要有特定风格)
| YES --> RAG + Fine-tuning(组合策略)
|
+-- 问题:需要低延迟、低成本的简单场景?
| (简单的 FAQ、无需最新数据)
| YES -> 可能都不需要(直接用 Prompt Engineering)
|
+-- 都不符合?
-> 先用 RAG(零训练成本,适合快速验证)2.4 10 维度全面对比
| 维度 | RAG | Fine-tuning | 胜出者(单维) |
|---|---|---|---|
| 知识时效性 | ✅ 实时更新,改知识库即可 | ❌ 过时知识固化,需重新训练 | RAG |
| 知识广度 | ✅ 可接入任意规模的知识库 | ❌ 受训练数据量和模型容量限制 | RAG |
| 幻觉控制 | ✅ 提供事实上下文,显著降低 | ❌ 依赖训练质量,仍会编造 | RAG |
| 事实可追溯 | ✅ 可显示引用来源 | ❌ 黑盒,不可追溯 | RAG |
| 开发速度 | ✅ 几天内可用 | ❌ 数据准备+训练需数天/周 | RAG |
| 维护成本 | ✅ 改知识库即可 | ❌ 每次更新需重新训练 | RAG |
| 输出格式控制 | ⚠️ 通过 Prompt 引导,不稳定 | ✅ 训练后稳定遵循格式 | Fine-tuning |
| 行为对齐 | ⚠️ 依赖 Prompt 工程 | ✅ 深度嵌入模型行为 | Fine-tuning |
| 减少延迟 | ❌ 多了检索环节 | ✅ 推理时无额外环节 | Fine-tuning |
| 减少推理成本 | ❌ 需传入大量上下文 | ✅ 输入更短更高效 | Fine-tuning |
2.5 组合策略:RAG + Fine-tuning
实践中,最强方案往往是两者的组合。以下是三种典型的组合模式:
模式 A:Fine-tuning 打底 + RAG 注入知识(推荐)
先微调让模型学会领域风格和格式
再通过 RAG 注入具体知识
角色行为 = 微调控制;知识 = RAG 控制
适用:客服Agent、医疗问诊
模式 B:RAG 为主 + Fine-tuning 微调检索引擎
用 RAG 做主要问答
微调 Embedding 模型提升领域检索精度
生成模型不变,检索模型特化
适用:专业领域知识库搜索
模式 C:Fine-tuning 后蒸馏 + RAG 联合推理
先微调大模型学会复杂推理
蒸馏到小模型降低推理成本
小模型 + RAG 完成日常任务
适用:高吞吐量生产系统组合策略决策流程:
组合策略选择: 成本/收益
先问:场景需要特定输出格式吗?
|
+-- NO --> 只用 RAG 成本:低 收益:80%
|
+-- YES --> 需要知识更新频率?
|
+-- 高(天天更新)-> 模式A 成本:中 收益:90%
| (微调行为 + RAG知识)
|
+-- 低(知识相对稳定)-> 模式B 成本:中低 收益:85%
(微调检索模型)
|
+-- 需要高吞吐?-> 模式C 成本:高 收益:95%三、图解全景
RAG vs Fine-tuning 全量对比图
RAG vs Fine-tuning 决策全景
==========================================================
│ │
RAG Fine-tuning
│ │
┌─────────────────┐│┌──────────────────┐│┌─────────────────┐
│ 强项领域 │││ │││ 强项领域 │
│ │││ │││ │
│ 最新信息 │││ 实时知识 │││ 行为控制 │
│ 私有数据 │││ 可追溯 │││ 格式控制 │
│ 长尾知识 │││ 快速迭代 │││ 角色扮演 │
└──────────────────┘│└──────────────────┘│└─────────────────┘
│ │
┌──────────────────┐ │ ┌────────────────┐ │ ┌────────────────┐
│ 成本构成 │ │ │ │ │ │ 成本构成 │
│ │ │ │ │ │ │ │
│ 推理:+检索延迟 │ │ │ 开源模型 │ │ │ 训练:GPU费用 │
│ 推理:+上下文token │ │ │ 成本 │ │ │ 数据:标注/清洗 │
│ 存储:向量数据库 │ │ │ 可控 │ │ │ 维护:重训 │
└──────────────────┘ │ └────────────────┘ │ └─────────────────┘
│ │
┌──────────────────┐ │ ┌────────────────┐ │ ┌────────────────┐
│ 局限性 │ │ │ 最佳组合 │ │ │ 局限性 │
│ │ │ │ │ │ │ │
│ 不能改变模型行为 │ │ │ FT 控制角色 │ │ │ 知识固化 │
│ 依赖检索质量 │ │ │ 行为 = 角色 │ │ │ 无法访问新知识 │
│ 上下文消耗 token │ │ │ RAG 提供知识 │ │ │ 不可追溯 │
└──────────────────┘ │ └────────────────┘ │ └─────────────────┘
│ │
└──────────┬─────────┘
│
┌────────┴─────────┐
│ 选型核心问题 │
│ │
│ 问题 = "知识"问题 │
│ 还是"能力"问题? │
│ │
│ 知识 -> RAG │
│ 能力 -> FT │
│ 两者 -> RAG + FT │
└───────────────────┘四、实战验证
4.1 实验:对比 RAG vs Fine-tuning 效果
python
# 实验设计:同一知识库 + 同一组测试问题
# 对比三种方案的 RAGAS 指标
import pandas as pd
from ragas import evaluate
from datasets import Dataset
# 测试数据集
test_questions = [
"公司年假政策是什么?",
"请用邮件格式回复客户投诉流程",
"最新版产品的 API 变更说明"
]
# 方案1:纯 LLM(知识截止状态,无额外处理)
# 预计:知识类问题答错(截止于训练数据时间)
# 方案2:RAG(注入知识库)
# 预计:知识类问题答对,格式要求答得一般
# 方案3:Fine-tuned LLM(已训练格式+知识)
# 预计:格式完美,但知识可能过时
# 方案4:Fine-tuning + RAG(组合)
# 预计:格式完美 + 知识最新
# 实际实验结果示例:
data = {
"方案": ["纯LLM", "RAG", "Fine-tuning", "FT + RAG"],
"知识准确率": [0.15, 0.87, 0.42, 0.91],
"格式符合度": [0.60, 0.65, 0.92, 0.93],
"开发时间": ["0天", "1天", "5天", "6天"],
"维护成本": ["无", "低", "高", "中"]
}
df = pd.DataFrame(data)
print(df)4.2 典型场景的选型建议表
| 场景 | 推荐方案 | 理由 |
|---|---|---|
| 企业内部知识库问答 | RAG | 知识实时更新 + 事实准确性要求高 |
| 客服对话机器人 | FT + RAG | 微调控制语气/规范 + RAG 提供产品知识 |
| 代码补全/代码生成 | Fine-tuning | 需要学习特定代码库的语法和模式 |
| 法律文档审查 | RAG | 法律条文不能出错,必须可追溯来源 |
| 新闻摘要 | RAG | 实时新闻内容,用检索获取最新信息 |
| 角色扮演聊天 | Fine-tuning | 需要深度对齐角色行为模式 |
| 医疗辅助诊断 | FT + RAG | 微调理解医疗术语 + RAG 查询最新研究 |
| 金融报告自动生成 | FT + RAG | 微调生成格式 + RAG 获取实时财务数据 |
| 电商商品生成 | Fine-tuning | 学习商品描述风格和关键词模式 |
| 多语言翻译 | Fine-tuning | 语言能力需要模型内在学习 |
五、面试视角
| 问题 | 答案要点 |
|---|---|
| RAG 和 Fine-tuning 最核心的区别? | RAG 改变了模型输入(注入额外信息),不改变模型;Fine-tuning 改变了模型本身(更新权重)。RAG 解决"知识缺失",FT 解决"能力不足" |
| 什么时候应该选 RAG 而不是 Fine-tuning? | 知识需频繁更新、事实准确性要求必须可追溯、需要快速接入大量新数据、零训练成本需求。典型场景:私有知识库问答 |
| RAG + Fine-tuning 组合的实际效果如何? | 通常是最优解。FT 控制"怎么回答"(风格/格式),RAG 控制"回答什么"(知识/事实)。两者互补,不互斥 |
| 为什么 Fine-tuning 对"事实型问题"效果不如 RAG? | FT 把知识"记忆"到权重中,类似人类死记硬背——会遗忘、会混淆、无法更新。RAG 遇到事实就查书,更可靠 |
| RAG 的缺陷中哪些是 Fine-tuning 能弥补的? | RAG 输出格式/风格不稳定、对 Prompt 模板敏感、消耗更多 token。FT 能固化输出格式、降低 prompt 敏感度和推理成本 |
| 在什么场景下 RAG 和 Fine-tuning 都不如 Prompt Engineering? | 简单任务(翻译/分类/摘要)且不需要额外知识时,写好 Prompt 即可,零成本、零维护 |
📚 相关链接
- **什么是RAG** — RAG 核心概念
- **RAG系统架构总览** — RAG 架构设计
- **Embedding模型与向量化** — RAG 依赖的 Embedding 技术
- <- 返回 **RAG基础索引**