公司动态
微调与 RAG 分别适合什么场景?
第20题微调与 RAG 分别适合什么场景1. 核心回答选择 RAG 还是 Fine-tuning首先要判断当前主要问题属于哪一类知识供给问题优先考虑 RAG。模型行为问题优先考虑 Fine-tuning。知识和行为同时存在问题可以组合使用 RAG Fine-tuning。一个简化判断可以写成Knowledge Problem→RAG \text{Knowledge Problem} \rightarrow \text{RAG}Knowledge Problem→RAGBehavior Problem→Fine-tuning \text{Behavior Problem} \rightarrow \text{Fine-tuning}Behavior Problem→Fine-tuningKnowledge Behavior→RAG Fine-tuning \text{Knowledge Behavior} \rightarrow \text{RAG Fine-tuning}Knowledge Behavior→RAG Fine-tuning2. RAG 适合什么场景RAG即 Retrieval-Augmented Generation核心过程是Query→Retrieve→Context→LLM→Answer Query \rightarrow Retrieve \rightarrow Context \rightarrow LLM \rightarrow AnswerQuery→Retrieve→Context→LLM→Answer模型收到问题后先从外部知识库中检索相关内容再把这些内容作为 Grounding Context 提供给大模型生成答案。因此RAG 特别适合以下场景。2.1 知识经常变化例如最新漏洞信息CVE 数据威胁情报公司产品文档内部知识库法规和政策新闻和实时业务数据。这些知识可能每天更新。如果全部依靠模型参数保存知识每次知识变化都重新训练模型维护成本较高。RAG 可以直接更新Document → Index模型本身可以保持不变。因此当知识具有明显的高更新频率特征时RAG 通常更合适。2.2 需要回答私有知识例如企业内部有安全事件报告内部代码仓库产品手册运维文档SOC 分析报告客户内部知识。基础模型训练阶段通常无法访问这些资料。RAG 可以在推理阶段检索这些私有数据并将相关片段提供给模型。因此Private KnowledgeRetrieval→Grounded Answer \text{Private Knowledge} \text{Retrieval} \rightarrow \text{Grounded Answer}Private KnowledgeRetrieval→Grounded Answer2.3 需要引用来源例如一个安全分析系统回答CVE-2025-XXXX 的影响版本是什么业务上可能要求同时给出NVD厂商公告GitHub Advisory内部漏洞知识库中的证据。RAG 可以保存Document ID Chunk Source Version生成答案时再把这些信息返回给用户。因此 RAG 更容易实现CitationEvidence TraceabilitySource AttributionAudit。对于安全、医疗、法律和企业知识问答这一点尤其重要。2.4 知识需要快速删除或修改例如某条内部文档失效可以从知识库或索引中删除。这种维护方式具有明确的数据边界。如果知识主要写入模型参数精确删除某一条知识会困难得多。因此对于权限变化文档下线合规删除知识版本更新RAG 的可维护性通常更好。3. Fine-tuning 适合什么场景Fine-tuning 的核心是通过训练数据更新模型参数θ→θ′ \theta \rightarrow \thetaθ→θ′使模型在特定输入下稳定地产生期望行为。因此 Fine-tuning 更适合解决模型的稳定行为问题。3.1 需要固定输出格式例如要求模型始终返回{vulnerability:,cwe:,severity:,evidence:[]}即使 Prompt 已经写得很详细模型仍可能偶尔缺字段改字段名称输出额外解释JSON 格式错误。如果存在大量高质量示例输入 → 标准 JSON可以通过 SFT 强化这种稳定输出行为。3.2 需要学习特定任务例如漏洞分类CWE 分类恶意代码分类安全事件归因文本信息抽取固定标签分类。这些任务通常可以表示成x→y x\rightarrow yx→y例如漏洞描述 → CWE-79如果有大量高质量标注数据Fine-tuning 可以让模型更稳定地学习这一映射。3.3 需要学习稳定的领域行为例如希望安全分析模型形成固定流程识别危险操作↓定位数据流↓分析 Sanitization↓判断是否可利用↓输出证据如果大量训练样本都遵循同一种任务规范Fine-tuning 可以强化这种处理模式。3.4 需要稳定的风格或表达规范例如企业要求所有报告都采用统一格式风险描述证据影响修复建议风险等级。这种稳定的输出行为也适合 Fine-tuning。4. 两者最核心的区别是什么可以从知识存放位置理解。4.1 RAG知识主要存放在External Knowledge Base \text{External Knowledge Base}External Knowledge Base推理时动态检索。因此ModelRetrieved Knowledge→Answer \text{Model} \text{Retrieved Knowledge} \rightarrow \text{Answer}ModelRetrieved Knowledge→Answer知识更新主要修改知识库。4.2 Fine-tuning训练样本通过梯度更新影响θ \thetaθ因此能力主要表现为模型参数中的稳定行为变化。模型更新需要再次训练或继续训练。5. 一个实际例子安全漏洞问答系统假设我要构建一个企业漏洞分析助手。系统需要完成两个任务。第一回答Log4Shell 当前有哪些受影响版本这是知识问题。漏洞信息可能不断更新而且需要引用官方公告。因此使用RAG。知识库可以包含NVDCVE厂商公告内部漏洞库安全研究报告。第二要求模型始终输出漏洞名称CWE受影响组件攻击前置条件证据修复建议这是输出行为问题。如果 Prompt 很难保证稳定格式可以使用Fine-tuning。最终系统可以形成Fine-tuned LLMRAG \text{Fine-tuned LLM} \text{RAG}Fine-tuned LLMRAG其中Fine-tuning 负责稳定行为RAG 负责动态知识。6. 什么情况下同时使用 RAG 和 Fine-tuning很多真实系统最终会同时使用两种方法。例如6.1 RAG 解决知识问题检索漏洞代码CWE 文档历史漏洞官方安全公告。6.2 Fine-tuning 解决行为问题让模型学习如何使用这些证据如何判断漏洞如何按照标准格式输出如何处理信息不足如何拒绝缺少证据的结论。最终流程可以表示为q→Retriever→Dq q \rightarrow Retriever \rightarrow D_qq→Retriever→Dq然后(q,Dq)→LLMfine-tuned→y (q,D_q) \rightarrow LLM_{\text{fine-tuned}} \rightarrow y(q,Dq)→LLMfine-tuned→y这种设计把Knowledge和Behavior分别交给最适合的组件处理。7. RAG 有哪些局限RAG 的效果高度依赖 Retrieval Quality。如果真正相关的文档没有被召回RecallK↓ RecallK\downarrowRecallK↓那么生成模型即使能力很强也没有足够证据回答问题。常见失败包括Chunk 切分错误Embedding 无法理解领域语义Query 与文档表达差异很大Top-K 中存在大量无关内容Context Window 被噪声占满文档版本错误权限过滤错误。因此 RAG 系统需要单独评估RecallKMRRNDCGRetrieval LatencyAnswer GroundednessCitation Correctness。RAG 的主要工程成本通常集中在数据处理 Index Retrieval Reranking Context Construction。8. Fine-tuning 有哪些局限Fine-tuning 需要高质量训练数据训练计算资源超参数选择独立验证集回归评测。同时存在OverfittingCatastrophic Forgetting能力退化数据污染维护成本。如果企业知识每天变化把大量事实主要放入微调数据会导致频繁重新训练。Fine-tuned Model 的回答也天然缺少逐条文档来源。因此需要知识来源追踪时通常仍然需要 RAG 或其他外部工具提供证据。9. 如何判断到底应该选哪个我会先问四个问题。9.1 问题一错误来自缺少知识吗例如模型不知道企业内部产品信息。优先RAG。9.2 问题二错误来自行为不稳定吗例如模型已经知道答案但输出格式不稳定分类规则执行不好经常不遵循特定工作流。优先Fine-tuning。9.3 问题三知识是否经常变化如果答案是“经常变化”优先RAG。9.4 问题四是否需要引用证据如果业务要求每个结论必须给出来源。优先RAG。10. 实验上怎么证明选择是正确的最终不能只根据经验选择。应该建立至少四组 BaselineBase LLM / Prompt-onlyRAG-onlyFine-tuning-onlyFine-tuning RAG固定测试集Base ModelPrompt最大上下文解码参数数据可见范围。然后比较10.1 任务质量例如AccuracyPrecisionRecallF1Exact Match。10.2 RAG 指标例如RecallKMRRNDCGCitation AccuracyGroundedness。10.3 系统指标例如LatencyToken CostGPU CostIndex CostTraining Cost。10.4 泛化能力测试新知识新用户新项目域外数据新时间段。最终根据真实任务数据决定方案。11. 一个简单的决策表需求RAGFine-tuning最新知识优先较弱私有文档优先可辅助来源引用优先较弱知识频繁更新优先维护成本高固定输出格式可通过 Prompt 辅助优先分类任务可提供上下文优先稳定任务行为可辅助优先特定表达风格可辅助优先快速删除知识优先困难动态权限控制优先困难两类需求同时存在与 Fine-tuning 组合与 RAG 组合12. 面试时可以压缩成下面这段我主要根据问题属于知识问题还是行为问题来选择。RAG 更适合动态知识、企业私有数据以及需要引用来源的场景。它在推理阶段先检索外部知识再把证据放入 Context因此知识更新通常只需要更新索引。例如漏洞情报、CVE、企业知识库这类频繁变化的数据我会优先考虑 RAG。Fine-tuning 更适合稳定改变模型行为例如固定 JSON 输出、分类、信息抽取、领域任务流程和特定表达规范。它通过训练样本更新模型参数因此需要高质量数据和独立评测。真实系统中两者可以组合。RAG 提供最新、可追溯的知识Fine-tuning 让模型稳定地使用这些知识完成特定任务。最终我会比较 Prompt-only、RAG-only、Fine-tuning-only 和 RAG Fine-tuning 四组方案在相同测试集下评估任务质量、检索质量、泛化、延迟和成本再决定最终架构。13. 来源Lewis et al.,Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks, NeurIPS 2020。该论文提出 RAG将参数化语言模型与外部非参数知识库结合并讨论知识更新和来源追踪问题。Microsoft Foundry Documentation,Retrieval augmented generation (RAG) and indexes。官方明确建议需要私有或频繁变化的数据时使用 RAG需要改变模型行为、风格或任务性能时使用 Fine-tuning。Microsoft Learn,Augment LLMs with RAGs or Fine-Tuning。讨论了 Fine-tuning 与 RAG 的适用条件、维护和过拟合风险。AWS Prescriptive Guidance,Comparing Retrieval Augmented Generation and fine-tuning。比较了两种方案在知识更新、来源引用、模型定制以及组合使用方面的差异。OpenAI API Documentation,Fine-tuning。说明 Fine-tuning 通过特定训练数据对模型进行定制并支持 Supervised、DPO 等训练方式。