微调、RAG 和 Prompt 工程怎么选?
一句话回答
三者解决的问题不同: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。
推荐顺序和组合
- 用 Prompt 工程打底:写清指令、给示例、约束输出格式,同时建立评测集,见 评测集应该怎么构建
- 缺知识就加 RAG
- Prompt 和 RAG 都做好后,仍然有稳定出现的格式、风格问题,或者成本、延迟不达标,再考虑微调
- 组合使用:微调让模型学会"怎么用检索到的资料回答"(引用格式、拒答方式),RAG 负责提供知识
每一步都用评测集对比效果,靠数据而不是感觉做决定。
面试官可能追问
微调能让模型记住公司的知识库吗?
不适合这么做。微调灌进去的知识难以被精确记住,知识更新要重新训练,回答也给不出来源;有研究发现,用模型原本不知道的新知识做微调,还可能增加幻觉。知识问题用 RAG,微调用来学"怎么回答"。
微调需要准备什么样的数据?
质量比数量重要:输入要贴近真实的线上数据,覆盖主要情况和边界情况;输出要统一、正确,最好由领域专家审核。可以先用强模型生成,再人工修正。另外要留出一部分数据做评测,不参与训练。
微调后模型的其他能力会变差吗?
可能会,这叫灾难性遗忘。训练数据越单一、训练得越久越明显。缓解办法:用 LoRA 这类只改动少量参数的方法,在训练数据里混入一些通用数据,评测时除了目标任务也检查通用能力。
什么情况下值得微调?
调用量大、任务固定,想用小模型替代大模型来降本提速;需要非常稳定的输出风格或格式,靠 Prompt 和示例做不到;需要私有化部署较小的模型,又要达到业务要求的效果。
易错点
- "知识问题用微调"是最常见的误区
- 微调不能替代 Prompt,微调后的模型仍然需要清晰的指令
- 没有评测集就做微调,无法判断到底有没有变好
- 换了基础模型,原来的 LoRA 适配器不能直接沿用,要重新训练
AI 模拟面试官
用自己的话回答,AI 对照参考答案打分、指出遗漏,再追问,最多 3 轮
这道题你掌握了吗?
选一个最接近的状态,没掌握的题会出现在"我的进度 · 待复习"里。
学习记录暂存在本机浏览器。登录后自动同步到账号,换设备也能看到。