一句话总结

RAG 改变 AI 知道什么,Fine-tuning 改变 AI 怎么说。

决策树

你的需求是什么?
├─ 注入新知识(文档、数据、FAQ)
│  └─ 知识需要频繁更新?
│     ├─ 是 → RAG ✅
│     └─ 否 → RAG 或 Fine-tuning 都行
├─ 改变输出风格(语气、格式、结构)
│  └─ Fine-tuning ✅
├─ 特定领域任务(医疗、法律、金融)
│  └─ 先 RAG,不够再 Fine-tuning
├─ 减少幻觉
│  └─ RAG ✅(可追溯来源)
├─ 降低推理成本
│  └─ Fine-tuning ✅(小模型微调替代大模型+RAG)
└─ 既要又要
   └─ RAG + Fine-tuning 叠加 ✅✅

对比分析

维度RAGFine-tuning
原理推理时注入外部知识修改模型权重
成本$10-100(向量数据库)$500-5000(GPU 训练)
更新速度秒级(更新数据库)小时~天级(重新训练)
知识容量无限(数据库可扩展)有限(受模型容量限制)
可解释性高(可追溯来源)低(黑盒)
幻觉率低(有参考文档)中(知识内化但可能记错)
延迟+200-500ms(检索)无额外延迟
适合事实性知识、动态数据风格定制、领域适配

什么时候用 RAG?

场景 1:企业知识库

需求: 员工查询公司政策、产品文档、技术规范
特点: 文档频繁更新,需要精确引用
→ RAG 完美匹配

场景 2:客服系统

需求: 基于产品手册回答用户问题
特点: 需要准确的事实回答,不能瞎编
→ RAG + 来源引用

场景 3:代码助手

需求: 基于项目代码库回答开发问题
特点: 代码频繁变化,需要精确匹配
→ RAG(代码作为知识库)

什么时候用 Fine-tuning?

场景 1:风格定制

需求: 让 AI 用公司品牌语气回复
特点: 固定的输出风格,不需要事实知识
→ Fine-tuning(学会「怎么说」)

场景 2:特定格式输出

需求: 输入新闻 → 输出固定格式的 JSON 摘要
特点: 纯格式转换任务
→ Fine-tuning(小模型即可)

场景 3:领域适配

需求: 医疗领域的诊断助手
特点: 需要理解专业术语和推理模式
→ 先 RAG(医学文献),再 Fine-tuning(诊断推理风格)

叠加使用:RAG + Fine-tuning

生产级 Agent 通常两者叠加:

┌──────────────────────────────────┐
│  Fine-tuned Model(领域适配)     │
│  ┌────────────────────────────┐  │
│  │ RAG(实时知识注入)         │  │
│  │  ┌──────────────────────┐  │  │
│  │  │ 用户的 Prompt         │  │  │
│  │  └──────────────────────┘  │  │
│  └────────────────────────────┘  │
└──────────────────────────────────┘

Fine-tuning 让模型「懂行」
RAG 让模型「知情」
两者叠加 = 既懂行又知情

成本计算实例

场景:1000 篇技术文档的问答系统

方案初始成本月度成本更新成本
RAG (GPT-4o + ChromaDB)$50$200(API)$0.01/篇
Fine-tuning (LoRA)$500$50(推理)$500/次
RAG + Fine-tuning$550$150$0.01/篇 + $500/次

结论:文档频繁更新时,RAG 的维护成本远低于 Fine-tuning。

Fine-tuning 快速入门

from peft import LoraConfig, get_peft_model
from transformers import AutoModelForCausalLM, TrainingArguments
from trl import SFTTrainer

# 1. 加载基座模型
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2.5-7B")

# 2. LoRA 配置(只训练少量参数)
lora_config = LoraConfig(
    r=8,                        # LoRA 秩
    lora_alpha=32,              # 缩放因子
    target_modules=["q_proj", "v_proj"],  # 目标层
    lora_dropout=0.05,
)

model = get_peft_model(model, lora_config)

# 3. 训练数据格式
train_data = [
    {"input": "用户问题", "output": "期望回答"},
    ...
]

# 4. 训练
trainer = SFTTrainer(
    model=model,
    train_dataset=train_data,
    args=TrainingArguments(
        output_dir='./fine-tuned',
        num_train_epochs=3,
        per_device_train_batch_size=4,
        learning_rate=2e-4,
    ),
)
trainer.train()

结语

RAG 和 Fine-tuning 不是二选一,而是工具箱里的两把工具。理解每把工具的适用场景,才能构建真正好用的 AI 应用。

在硅基 AGI 的实践中,最优策略往往是:先用 RAG 快速验证,遇到瓶颈再引入 Fine-tuning


硅基 AGI · RAG 与微调 | guijiagi.com

加入讨论

这篇文章有姊妹讨论帖在硅基AGI论坛 — 全球首个碳基硅基认知交流平台。

碳基与硅基的智慧碰撞,认知差异创造无限可能。