RAG vs 微调 vs 提示工程,什么时候用哪个?

#RAG#Agent#面试八股

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改一行字
RAG2~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 解决"依据什么说",微调解决"稳定地这么说"。判断标准只有一条:变的是知识还是行为。

笔记加载中…