微调、RAG 和 Prompt 工程怎么选?

进阶高频对比约 4 分钟读完

一句话回答

三者解决的问题不同:Prompt 工程调整模型在这次调用里怎么做,成本最低、改完立即生效;RAG 在调用时把外部资料放进上下文,解决"模型不知道"和"知识经常变"的问题;微调用数据改变模型参数,适合稳定的风格和格式、特定任务,或者让小模型接近大模型的效果来降低成本。推荐顺序是先 Prompt,缺知识加 RAG,两者都解决不了的稳定行为问题再考虑微调,三者可以组合使用。

详细解析

先判断问题出在哪

文本
效果不达标
├─ 缺少知识、知识经常变、需要给出来源? → RAG
├─ 格式、风格、步骤不符合要求?
│    ├─ 改指令、加示例能解决 → Prompt 工程
│    └─ 示例加了很多仍不稳定,或 Prompt 太长太贵 → 微调
└─ 效果够了,但成本或延迟太高? → 用大模型的输出微调一个小模型(蒸馏)

打个比方:Prompt 是给新同事的任务说明,RAG 是允许他开卷查资料,微调是送他去参加专项培训。

对比

维度 Prompt 工程 RAG 微调
解决的问题 行为、格式、任务说明 缺少知识、知识需要更新 稳定的风格和格式、特定任务、降本
前期成本 低 中:检索系统、向量库 高:数据准备、训练、部署和评测
数据需求 几个示例 文档库 一批高质量的标注样本
知识更新 改 Prompt 即可 更新文档和索引,立即生效 要重新训练
可解释性 高 高,可以给出引用来源 低,知识进入参数,无法溯源
上线速度 最快 较快 最慢
每次调用的 token 指令和示例占用 检索内容占用 行为已经学进参数,Prompt 可以更短

LoRA 等参数高效微调

全量微调要更新全部参数,显存需求大(参数、梯度和优化器状态都要存),每个任务还要保存一整份模型。

LoRA 冻结原有权重,只给部分权重矩阵 W 加一个低秩的增量 ΔW = B × A,其中 B 是 d × r、A 是 r × k,r 远小于 d 和 k。训练时只更新 A 和 B,可训练的参数通常只占很小的比例:

  • 训练省显存,产物(适配器)比完整模型小得多
  • 推理时可以把 ΔW 合并回原权重,不增加延迟;也可以一个基础模型同时挂多个适配器,按请求切换
  • QLoRA 先把基础模型量化到 4 位,再在上面训练 LoRA,进一步降低显存需求

不少模型平台也提供托管的微调服务:上传数据、启动训练,得到一个新的模型标识,不用自己管理 GPU。

推荐顺序和组合

  1. 用 Prompt 工程打底:写清指令、给示例、约束输出格式,同时建立评测集,见 评测集应该怎么构建
  2. 缺知识就加 RAG
  3. Prompt 和 RAG 都做好后,仍然有稳定出现的格式、风格问题,或者成本、延迟不达标,再考虑微调
  4. 组合使用:微调让模型学会"怎么用检索到的资料回答"(引用格式、拒答方式),RAG 负责提供知识

每一步都用评测集对比效果,靠数据而不是感觉做决定。

面试官可能追问

微调能让模型记住公司的知识库吗?

不适合这么做。微调灌进去的知识难以被精确记住,知识更新要重新训练,回答也给不出来源;有研究发现,用模型原本不知道的新知识做微调,还可能增加幻觉。知识问题用 RAG,微调用来学"怎么回答"。

微调需要准备什么样的数据?

质量比数量重要:输入要贴近真实的线上数据,覆盖主要情况和边界情况;输出要统一、正确,最好由领域专家审核。可以先用强模型生成,再人工修正。另外要留出一部分数据做评测,不参与训练。

微调后模型的其他能力会变差吗?

可能会,这叫灾难性遗忘。训练数据越单一、训练得越久越明显。缓解办法:用 LoRA 这类只改动少量参数的方法,在训练数据里混入一些通用数据,评测时除了目标任务也检查通用能力。

什么情况下值得微调?

调用量大、任务固定,想用小模型替代大模型来降本提速;需要非常稳定的输出风格或格式,靠 Prompt 和示例做不到;需要私有化部署较小的模型,又要达到业务要求的效果。

易错点

  • "知识问题用微调"是最常见的误区
  • 微调不能替代 Prompt,微调后的模型仍然需要清晰的指令
  • 没有评测集就做微调,无法判断到底有没有变好
  • 换了基础模型,原来的 LoRA 适配器不能直接沿用,要重新训练

AI 模拟面试官

用自己的话回答,AI 对照参考答案打分、指出遗漏,再追问,最多 3 轮

登录后就可以和 AI 面试官对练,面试记录也会保存下来。登录

这道题你掌握了吗?

选一个最接近的状态,没掌握的题会出现在"我的进度 · 待复习"里。

学习记录暂存在本机浏览器。登录后自动同步到账号,换设备也能看到。