Skip to content

RAG vs Fine-tuning:什么时候检索,什么时候微调 ​

这篇文章解决什么问题 ​

很多大模型项目遇到回答不准时,会立刻问:“要不要微调?”但大多数企业知识问答问题,第一反应应该是 RAG,而不是 Fine-tuning。

RAG 和 Fine-tuning 解决的问题不同:

  • RAG 解决“模型不知道最新/私有知识”的问题。
  • Fine-tuning 更适合解决“模型应该怎么表现、怎么输出、怎么遵循任务模式”的问题。

如果把两者混淆,项目会走偏:该检索的去微调,导致知识更新困难;该训练格式和行为的只做 RAG,导致输出不稳定。

核心区别 ​

维度RAGFine-tuning
解决问题外部知识、私有知识、最新知识行为模式、输出风格、任务格式
知识更新更新文档和索引即可需要重新训练或继续训练
可解释性可以引用来源通常不能直接说明训练来源
成本推理时多检索成本训练成本 + 推理成本
适合场景企业知识库、客服、售后、文档问答结构化输出、领域风格、分类/抽取模式
风险检索失败、引用错误训练数据质量差、遗忘、过拟合

什么时候优先用 RAG ​

优先用 RAG 的场景:

  • 知识经常更新。
  • 需要引用来源。
  • 数据是私有文档。
  • 问题答案依赖具体资料。
  • 希望能解释答案来自哪里。
  • 不希望把所有知识写进模型参数。

例如:

  • 设备手册问答。
  • 公司制度问答。
  • 售后故障诊断。
  • 法规/政策检索。
  • 项目文档助手。

什么时候考虑 Fine-tuning ​

Fine-tuning 更适合:

  • 固定输出格式。
  • 固定语气和风格。
  • 领域分类。
  • 信息抽取。
  • 模型经常不遵循特定任务规范。
  • 大量高质量示例能代表目标行为。

例如:

  • 把客服对话分类成固定标签。
  • 把非结构化文本抽取成固定 JSON。
  • 让模型学会某种报告风格。
  • 让小模型在特定任务上接近大模型表现。

Fine-tuning 不适合用来硬塞大量动态知识。

常见决策树 ​

text
问题是模型不知道事实吗?
  是 -> 优先 RAG
  否 -> 看下一步

问题是输出格式/风格不稳定吗?
  是 -> 先 Prompt + schema;仍不稳定再考虑 fine-tuning
  否 -> 看下一步

问题是工具选择或流程决策不稳定吗?
  是 -> 优先改 Agent Runtime、State、Tool schema、Eval
  否 -> 看下一步

问题是成本太高吗?
  是 -> 先做路由、缓存、上下文压缩;再考虑小模型微调

RAG + Fine-tuning 可以组合 ​

两者不是互斥的。

典型组合:

  • RAG 提供最新知识和引用。
  • Fine-tuning 让模型稳定输出企业格式。
  • Tool schema 控制工具调用。
  • Eval Dataset 检查效果。

例如售后诊断系统:

text
RAG:检索设备手册和历史工单
Fine-tuning:学习诊断报告格式和工单字段抽取
Tool Calling:创建工单草稿
Eval:检查引用、字段完整性和建议可执行性

不要把这些问题甩给 Fine-tuning ​

检索质量差 ​

如果 gold document 都没召回,微调不能解决知识缺失。先优化 chunk、embedding、query rewrite、rerank。

上下文太乱 ​

如果 Context Engineering 做得差,微调也会被噪声干扰。

工具 schema 不清楚 ​

工具调用失败通常要先改 schema、参数校验、错误返回,而不是微调。

评测集没有 ​

没有 eval dataset 时,微调后也不知道是否变好。

面试表达 ​

可以这样回答 RAG vs Fine-tuning:

> 我会先判断问题类型。如果模型缺少外部知识、需要引用来源、知识经常更新,我优先用 RAG;如果模型知道信息但输出格式、风格、分类或抽取模式不稳定,才考虑 Fine-tuning。RAG 让知识留在外部可更新系统里,Fine-tuning 更适合把高质量示例固化成行为模式。实际项目中两者可以组合:RAG 提供证据,Fine-tuning 稳定输出格式,Tool Calling 执行业务动作,Evaluation 负责验证效果。

相关链接 ​

参考资料 ​