Fine-tuning vs RAG
两种让大模型适应特定场景的方法对比:Fine-tuning 修改模型权重,RAG 引入外部知识。大多数场景应该用 RAG。
概述
当通用大模型不够用时,有两种主流方案让它适应特定场景:
- Fine-tuning — 用领域数据重新训练模型,调整内部权重
- RAG — 不动模型,检索外部知识作为上下文
90% 的场景应该用 RAG。但什么时候该用 Fine-tuning?本文帮你判断。
对比
| 维度 | Fine-tuning | RAG |
|---|---|---|
| 原理 | 修改模型权重 | 检索外部知识 |
| 知识更新 | 需重新训练 | 更新文档即可 |
| 计算成本 | 高(GPU 训练) | 低(检索+推理) |
| 数据需求 | 千条以上标注数据 | 文档即可 |
| 延迟 | 不变 | 略增(检索时间) |
| 可解释性 | 低(黑盒) | 高(能标注来源) |
| 幻觉控制 | 一般 | 好(有出处) |
| 风格调整 | ✅ | ❌ |
| 格式调整 | ✅ | ⚠️ 靠 prompt |
| 事实性知识 | ❌ 不推荐 | ✅ 推荐 |
| 私有数据 | ⚠️ 有泄露风险 | ✅ 数据在本地 |
Fine-tuning 的几种姿势
业内说"做 fine-tuning"时通常指三种不同的事,混着用容易踩坑:
| 类型 | 做什么 | 数据要求 | 适合 |
|---|---|---|---|
| SFT(Supervised Fine-Tuning) | 给输入-输出对,教模型新行为/格式 | 千-万条标注 | 风格、格式、领域语言 |
| DPO(Direct Preference Optimization) | 给"更好的"和"更差的"两个回答,让模型学偏好 | 数千 pair | 对齐人类偏好、减少幻觉 |
| RLHF | DPO 的前身,用奖励模型 + PPO,工程链复杂 | 万级 + 奖励模型 | 大厂基座对齐 |
中小团队 90% 的「fine-tune」需求其实是 SFT。配合 LoRA / QLoRA,单张 4090 就能跑动 7B-13B 模型的 SFT。
什么时候用 Fine-tuning
1. 调整输出风格
模型需要特定的写作风格、语气、格式,而这些很难用 prompt 描述清楚。
例子:让模型模仿某个品牌的文案风格、生成特定格式的法律文书。
2. 特定领域术语
模型对某个领域的专业术语理解不准确,需要大量领域数据训练。
例子:医学影像报告生成、法律条文引用。
3. 降低推理成本
把 prompt 中的大量指令"固化"到模型权重中,减少每次推理的 token 用量。
例子:固定格式的客服分类、情感分析。
4. 任务专精
模型需要在某个窄任务上达到极致表现,牺牲通用能力换取专业能力。
例子:代码补全专用模型、SQL 生成专用模型。
什么时候用 RAG
1. 知识库问答 ✅
企业内部文档、产品手册、FAQ 问答。这是 RAG 的主场。
2. 实时信息 ✅
需要查最新数据(股价、天气、新闻)。Fine-tuning 无法解决知识时效性。
3. 多源知识 ✅
需要综合多个文档来源回答问题。Fine-tuning 会把知识"混"在一起,RAG 能精确标注来源。
4. 数据安全敏感 ✅
数据不能进入模型权重(合规、隐私)。RAG 把数据放在外部知识库,可控制访问权限。
主流 Fine-tuning 服务对比
如果决定做 SFT,三条路线:
| 路线 | 适合 | 代价 | 限制 |
|---|---|---|---|
| OpenAI / Anthropic Fine-tuning API | 不想动 GPU、对 GPT/Claude 系列做 SFT | 训练按 token 计费,推理价格略高于基础模型 | 闭源模型,只能在原厂托管 |
| 自托管 LoRA(LLaMA-Factory / Axolotl) | 开源模型(Qwen / Llama / DeepSeek)、私有部署 | 一张 A100 / 4090 + 一周折腾 | 自己负责训练 + 推理基建 |
| 托管训练平台(Together / Anyscale / 国内火山) | 开源模型、不想自己搭训练环境 | 介于上面两者之间 | 模型权重归你,托管推理 |
经验法则:先试 prompt + RAG,搞不定再试 SFT,SFT 搞不定再试 DPO。直接上 RLHF 是大厂才该做的事。
成本量化(粗略数量级)
按 100 万条对话场景估算:
| 方案 | 一次性成本 | 持续成本 |
|---|---|---|
| Prompt + RAG | 几百块(向量库 + embed) | 按调用次数 × token 价 |
| LoRA SFT(开源 7B) | 几千-几万(GPU 租用 + 数据标注) | 推理便宜,但要自己运维 |
| 全量微调(7B 闭源 API) | 几万-几十万(标注 + 训练费) | 推理价 ≈ 基础模型的 1.5-3x |
| 全量微调(70B 自托管) | 十万级起 | 持续 GPU 集群 |
先算账再决定——很多团队 fine-tune 完一年的推理增量成本就超过了节省的 prompt token 钱。
可以组合使用
Fine-tuning 和 RAG 不是互斥的。最佳实践:
- Fine-tune 调整模型风格和格式
- RAG 提供事实性知识
- Prompt 控制行为规范
用户提问
↓
RAG 检索相关文档
↓
Fine-tuned 模型(已有正确风格)
+ 检索到的文档上下文
+ System Prompt(行为规范)
→ 生成回答
真实案例:客服场景——用 SFT 教模型"用什么语气说话"和"什么不能承诺",用 RAG 提供商品/订单实时数据。两者分工明确,单独用任何一个都做不好。
常见误区
误区 1: "我们的数据很特殊,必须 fine-tune"
大多数情况下,你的数据只是"模型没见过"而非"模型理解不了"。RAG 就能让模型看到你的数据。
误区 2: "Fine-tuning 会让模型更聪明"
Fine-tuning 调整的是行为模式,不是知识。模型不会因为 fine-tuning 就变得更擅长推理。
误区 3: "Fine-tuning 后不需要 prompt 了"
Fine-tuning 后仍需要好的 prompt。Fine-tuning 只是让模型在特定模式下更可靠。
误区 4: "Fine-tune 一次就一劳永逸"
模型升级(GPT-4 → GPT-5、Claude 3 → Claude 4),你的 fine-tune 模型还停在旧基座。要么不升级享受不到新能力,要么重新跑训练流程。RAG 没这问题。
决策树
你的需求是什么?
├─ 让模型知道新知识 → RAG
├─ 让模型改变输出风格 → Fine-tuning(SFT)
├─ 让模型理解领域术语 → 先 RAG(喂术语表),不行再 SFT
├─ 让模型用特定格式输出 → 先 Structured Output / Prompt,不行再 SFT
├─ 让模型基于私有数据回答 → RAG
├─ 减少幻觉 / 对齐偏好 → DPO
└─ 以上多个 → RAG + SFT 组合
延伸阅读
- 高效微调:LoRA(低秩适配)
- 检索架构:RAG(检索增强生成)
- 数据准备:Embedding
- 控制输出:Prompt Engineering