微调、RAG 还是提示词?

B12
概念 · 核心构件

微调、RAG 还是提示词?

选错适配方法,你可能白花几周去微调一个模型、让它记住某些事实,结果它照样答错——而用 RAG 一天就能搞定。把一个通用基座模型掰向你的任务只有三条路——提示词、RAG 与微调——而整个决策归根结底就是搞清每个问题该用哪一条,因为它们改变的东西完全不同。

STEP 1

三种方法,改变三样不同的东西。

每一种适配方法触及系统的不同层。把这个思维模型理顺,剩下的选择几乎就成了机械操作:

  • 提示词不改变模型里的任何东西。你完全靠所给的指令和上下文来塑造行为——包括用少样本(few-shot)示例演示你想要的模式。权重原封不动,你只是在选择模型回答前读到什么。参见提示词基础
  • RAG 改变上下文,而非模型。检索增强生成(Retrieval-Augmented Generation)让权重原样不动,转而在查询时检索相关的外部文档并注入上下文窗口。模型读到它从未训练过的新鲜材料,并据此作答。
  • 微调改变权重。你用示例的输入/输出对继续训练模型,模型的参数真的会移动。这是训练,而不只是配置——你在产出一个默认行为就不同的新版本模型。

一句话版本:提示词编辑指令,RAG 用检索到的文档编辑上下文,微调编辑权重。指令、上下文、权重——三层,三种方法。几乎每一个"这个该不该微调?"的问题,一旦你问清它到底落在这三层的哪一层,就迎刃而解了。

STEP 2

各自的代价。

三种方法处在一架"投入阶梯"上,权衡是一致的:改动越大,前期成本越高,服务时能换回的也越多。

  • 提示词——即时、便宜、可逆。无需训练、无需管线、无需等待;你改改文字再试一次即可。它的上限是上下文窗口(你想让模型知道的一切都得在每次调用时随提示词一同送入,每一轮都在消耗 token 与延迟)以及一致性——提示词请模型以某种方式行事,它大体会照做,但并非完全可靠。
  • RAG——中等、持续的投入。你要搭建并维护一条检索管线外加一个向量库(参见分块与向量检索)。回报巨大:知识更新无需重训——改文档,而不是改模型。代价是每次查询新增的检索延迟,以及注入过多时可能撑胀的上下文。
  • 微调——前期成本最高,服务时最省。在拿到任何回报之前,你要先为数据整理、一次训练运行和评测买单。但行为一旦烙进权重,就不必在每条提示词里重新交代——于是微调后的模型可以用更短的提示词运行,比做同样工作的等价提示词模型有更低的推理延迟和更一致的格式。

所以投入曲线是提示词 < RAG < 微调——但杠杆也是如此。微调是唯一能让运行中的系统每次调用更便宜的一种,这正是当某个行为稳定且高流量时它值得费这番功夫的原因。

STEP 3

知识 vs 行为——一切的关键分野。

这就是在 RAG 与微调之间做决定的那道分野,也是整个领域里最被误解的一点。先问问题到底是什么:

  • 是知识缺口吗?模型不知道某些东西——你的内部文档、某客户的订单历史、本周的价格、一个经常变动的事实。这是 RAG 的活。你在查询时供给知识,而它保持最新,因为你更新的是文档,不是模型。
  • 是行为缺口吗?模型懂得不少,却没有按你需要的方式行事——语气不对、输出格式不对、缺少某种规范风格、某个专门任务它老是搞砸。这是微调的活。你把行为烙进去,让它成为默认。

微调不是教模型新事实的办法。这条纠正能省下最多的无用功。微调主要教的是形式、风格与行为——而非对新信息的可靠回忆。想靠微调塞入事实,既极度吃数据,又会在事实一变就立刻过时,而且——作为有文献记载的研究发现、而非民间传说——它甚至可能加重幻觉,因为你是在教模型一个自信的答案外形,却没有可靠地教会答案本身。当你需要模型知道某件事时,请用 RAG,它无需重训就能保持可更新。

把这句口诀念出来:教它该知道什么指向 RAG;教它该如何行事指向微调。大多数真实项目两者都有一些——而且关键在于,这并不意味着你必须二选一。

STEP 4

依次该试的顺序,以及为何不是二选一。

这个领域的默认次序刻意"从最便宜的开始":

  • 从提示词起步。它免费且即时;出人意料地多的"我们得微调",最后发现只是一条从未被认真写过的提示词。
  • 撞上知识或时效之墙时再加 RAG。一旦缺口是模型没有的事实,检索就是答案。
  • 微调放到最后——用于行为、格式、风格或服务时的延迟——且只在提示词与 RAG 都已见顶之后。它是最大的一笔投入,所以只有当更便宜的招数不再奏效时才动用。

RAG 与微调是互补,而非竞争。它们解决的是不同问题——知识 vs 行为——所以"二选一"是个假命题。生产系统常常同时跑一个既微调又检索的模型:微调修好它怎么答,RAG 让它答什么保持最新。选择微调并不意味着放弃检索。

微调如今之所以变得可及,一个原因是:你很少去重训整个模型。全量微调更新每一个权重,代价高昂,所以多数人用 PEFT(Parameter-Efficient Fine-Tuning,参数高效微调),它冻结基座模型、只训练少量新增参数。LoRA(Low-Rank Adaptation,低秩适配)是主流的 PEFT 方法,而 QLoRA 把 LoRA 与量化结合,让你能在一般硬件上微调——两者一起,把微调从一个数据中心级的工程变成了你根本不必去碰底下那数十亿冻结权重就能做的事。

当你准备深入时,本 wiki 的 training-agentic-models 深入解析把微调带进生产——提示、微调还是 RLSFT、拒绝采样与蒸馏,以及 RLHF 与 RLAIF——而 retrieval-and-rag 深入解析对检索做同样的事,见进阶 RAG 架构评估 RAG