Skip to content

01.3 - RAG vs 微调:技术选型对比

定位: RAG 生态中的关键决策——什么场景用 RAG、什么场景用 Fine-tuning、何时两者结合 面试高频度: ⭐⭐⭐⭐ 考查方式: 选型分析、场景判断、组合策略

一、这是什么?为什么需要它?

是什么

RAGFine-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:
  信息在「模型权重」中
  -> 用历史股价数据训练
  -> 模型记住了股价模式
  -> 直接回答今天的股价
  -> 你看到的是:模型"猜"的股价(可能已过时)

核心洞察

维度RAGFine-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 维度全面对比

维度RAGFine-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基础索引**

Knowledge4J — Java 知识库