两者解决不同问题

RAG 解决的是"知识"问题:让模型能访问它训练时不知道的信息。

微调解决的是"行为"问题:让模型以特定的方式、风格、格式来响应。

这个区分是选择的关键。

什么时候用 RAG

  • 需要引用外部、动态更新的知识(产品文档、内部 wiki、最新资讯);
  • 需要可溯源——每个回答能标注来源;
  • 知识库很大,且频繁变动;
  • 缺乏足够的训练数据。

优势:更新知识库即刻生效,无需重新训练;成本低。

局限:受上下文长度限制;检索质量决定上限;模型仍需理解检索到的内容。

什么时候用微调

  • 需要模型掌握特定的表达方式(品牌语调、行业术语、固定格式);
  • 需要模型学会特定的任务模式(如把非结构化文本转成特定 JSON);
  • 需要把大量稳定的领域知识压缩进模型(如法律条文、医学知识);
  • 希望减少提示词长度(把指令固化进模型,每次调用省 token);
  • 需要用小模型在特定任务上达到更好效果。

优势:推理时不需要额外的检索步骤,延迟低;行为一致性好。

局限:训练成本高;知识更新需要重新训练;可能损害模型的通用能力(灾难性遗忘)。

一个经典判断

微调教模型"怎么说",RAG 给模型"说什么"。

如果你的问题是"模型不知道这些事实" → RAG。
如果你的问题是"模型说话的方式不对" → 微调。

微调的几种方式

全参数微调:更新所有权重。效果最好,但算力需求大,且每个任务都要保存一份完整模型。

LoRA / QLoRA:只训练少量低秩适配矩阵,冻结原始权重。

  • 大幅降低显存需求和训练成本(QLoRA 可以在单张消费级显卡上微调大模型);
  • 训练出的适配器只有几十 MB,便于切换和分发;
  • 效果通常接近全参数微调。

这是目前最实用的方案。

提示词微调(Prefix/Prompt Tuning):只优化一段可学习的"虚拟提示"。参数量最少,但效果通常弱于 LoRA。

可以一起用

两者并不互斥:

  1. 先微调让模型掌握领域语言风格和输出格式;
  2. 再配合 RAG 提供最新的事实内容。

这是很多实际系统的做法。

起步建议

先做 RAG,再考虑微调。

原因:RAG 的验证周期短、成本低、可解释性强。很多"想微调"的需求,其实用好的提示词 + RAG 就能解决。

只有当确认瓶颈确实在"模型行为"而非"知识获取"时,才值得投入微调。

一个评估方法

在投入前,先手工做 20–30 个典型案例的测试:

  • 用提示词 + RAG 能达到什么水平?
  • 差距在哪?是知识不足,还是格式不对,还是理解偏差?

定位清楚问题,再决定手段。

说明:本文为大模型应用选型的知识整理。