RAG vs 微调 vs 提示工程,什么时候用哪个?
结论:三者不是替代关系,而是三个不同的"接口"——提示工程改指令,RAG 补知识,微调改行为。 落地顺序几乎总是:提示工程 → RAG → 微调。因为成本从零到高,验证周期从分钟到周,而多数需求其实停在第一步就能解决。
1. 一张表分清职责
| 维度 | 提示工程(Prompt Engineering) | RAG | 微调(Fine-tuning / SFT / LoRA) |
|---|---|---|---|
| 解决什么 | 任务描述、输出格式、角色设定 | 事实知识、私有数据、时效性 | 语气风格、领域语感、固定输出结构 |
| 知识更新 | 改提示词,立即 | 改文档,分钟级 | 重训,小时到天级 |
| 一次性成本 | ≈0 | 中:解析、向量化、存储、评估 | 高:标注数据、算力、调参 |
| 单次成本 | 提示词 token | 检索 + 更长的上下文 | 与普通推理相同 |
| 可解释性 | 中 | 强,能给出处 | 弱,说不清为什么这么答 |
| 主要风险 | 指令冲突、格式漂移 | 检索不到或召回噪声 | 灾难性遗忘、过拟合、事实仍会错 |
2. 选型决策树
需求是什么?
├─ "输出的格式/口吻不对" ──────────▶ 提示工程(加 few-shot、约束 schema)
├─ "模型不知道我们的数据"
│ ├─ 数据量大、经常变 ──────────▶ RAG
│ └─ 数据固定、要模型"内化" ─────▶ 微调(但先问:真的需要内化吗?)
├─ "模型在某个专业任务上表现差"
│ ├─ 缺领域语料/术语 ────────────▶ 微调(继续预训练 CPT + SFT)
│ └─ 缺推理步骤 ───────────────▶ 提示工程(思维链)+ 少量示例
└─ "要极低延迟、不能带检索" ────────▶ 微调把知识压进权重
关键判断:凡是"知识会过期"的,一律走 RAG。微调学的是模式,不是数据库,把制度条款背进权重,明年就得重训一次。
3. 成本量级对比
| 方案 | 前期投入 | 每次请求增量 | 知识变更的代价 |
|---|---|---|---|
| 提示工程 | 几小时调提示词 | 几百 token | 改一行字 |
| RAG | 2~4 周建管线 | 检索 + 2k~8k token 上下文 | 重跑一篇文档的索引 |
| 微调 | 2~6 周(含造数据) | 几乎为零 | 重新训练与回归测试 |
RAG 的成本大头藏在上下文里:每次塞 6k token 的资料,token 费用是纯提示的十倍量级,所以重排与上下文压缩不是可选项。
4. 组合用法:微调管格式,RAG 管事实
# 三层叠加:系统提示定规则 → 检索补事实 → 微调模型保格式
messages = [
{"role": "system",
"content": "你是工单助手。只依据<资料>作答,结论先行,输出 JSON:"
'{"answer": str, "citations": [int], "confidence": "high|low"}'},
# few-shot:把输出格式"演"给模型看,比文字描述稳
{"role": "user", "content": "磁盘满了怎么办?"},
{"role": "assistant",
"content": '{"answer": "先清理日志再扩容", "citations": [1], "confidence": "high"}'},
{"role": "user", "content": f"<资料>\n{ctx}\n</资料>\n问题:{question}"},
]
resp = llm.chat.completions.create(
model="ft:gpt-4o-mini:acme:support-format:7fQ2", # 已用 800 条工单微调过格式
messages=messages,
response_format={"type": "json_object"},
temperature=0.2,
)
微调数据的形态通常是这种三元组,几百到几千条高质量样本就能明显改善格式遵循:
{"messages":[{"role":"user","content":"发票丢了能重开吗"},{"role":"assistant","content":"{\"answer\":\"可以,需提交遗失说明\",\"citations\":[2],\"confidence\":\"high\"}"}]}
5. 常见追问
Q:微调能替代 RAG 吗? 不能。微调不能保证记住原文,也不能在知识更新后立刻生效;它还会让模型更"自信"地编造细节。要让模型说"不知道",RAG 的空白上下文更可靠。
Q:微调会让幻觉变少吗? 通常不会,甚至更多——模型学会了"这个领域的说话方式",但没学会"没证据就闭嘴"。抑制幻觉要靠检索约束与拒答策略。
Q:需要多少条数据? 格式类任务 200~1000 条就有效果;知识注入类任务往往要上万条且仍然不可靠,不如做 RAG。
Q:三个都用会不会太复杂? 复杂度和收益要对齐。先用提示工程打基线,量化差距,再决定加哪一层;没有评估集就上微调,等于拿预算赌博。
小结
提示工程解决"怎么说",RAG 解决"依据什么说",微调解决"稳定地这么说"。判断标准只有一条:变的是知识还是行为。