微调 vs RAG:生产环境 LLM 应该怎么选
对比两种技术的优劣、适用场景、何时需同时用两者,为 LLM 应用架构提供决策依据。
对比两种技术的优劣、适用场景、何时需同时用两者,为 LLM 应用架构提供决策依据。
如果你正在构建用于生产环境的 AI 应用,最终难免要考虑 fine-tuning 与 RAG 之间的选择:应该让模型在运行时访问外部知识,还是重新训练模型,让它以不同的方式工作?
答案取决于你要解决的问题。本指南将介绍 RAG 和 fine-tuning 的工作原理、各自擅长的场景,以及为什么 RAG 已成为大多数团队的首选方案。
检索增强生成(retrieval-augmented generation,RAG)让大语言模型(LLM)能够访问其训练数据中未包含的信息。RAG 系统并不完全依赖模型已有的知识,而是从外部来源检索相关信息,例如向量数据库、纯文本格式的文档文件,或专门的知识图谱库。在模型生成回答之前,系统会将这些上下文添加到 prompt 中。
由于知识存储在模型之外,因此无需重新训练模型就能更新信息。正因如此,许多团队会在需要访问大规模、频繁变化或专有数据集的应用中使用 RAG,例如内部 Copilot 或客户支持助手。
fine-tuning 通过使用额外样本进行训练,对现有 LLM 进行调整。它不是在运行时提供信息,而是利用特定领域的数据更新模型权重,从而教会模型新的行为模式。
这种方法最早出现时,支持长上下文的 LLM 尚未普及,token 的成本也相对较高。它有助于改善模型在 zero-shot prompting 下的回答表现。例如,你可以对模型进行 fine-tuning,让它遵循特定的写作风格、生成更加一致的输出,或者在医疗、金融等领域的专业任务上取得更好的表现。训练完成后,模型无需在每次请求中接收额外上下文,就能应用这些学到的模式。
如今,出于多方面的原因,与 RAG 相比,fine-tuning 已不那么常见,但对于一些小众用例,它仍然是可行的选择。
LLM RAG 与 fine-tuning 的主要区别在于适配发生在哪里。RAG 保持底层模型不变,在运行时提供相关信息;fine-tuning 则通过额外训练改变模型本身。这一区别会对维护、治理、成本和性能等各个方面产生重要影响。
在实践中,如何选择通常取决于你要解决的问题。如果模型需要访问最新信息、专有文档,或者需要利用规模庞大且频繁变化的知识,RAG 通常更合适。
如果问题在于如何让模型的回答更加一致,或者提升其执行专业任务的能力,那么正确实施 fine-tuning 可能会带来更好的效果。不过,同样的任务也可以通过 RAG 完成:系统可以用类似的方式检索相关示例,再通过 few-shot prompting 技术将其传递给 LLM。
RAG 和 fine-tuning 会将成本转移到 AI 生命周期的不同阶段。使用 RAG 时,大部分成本发生在执行阶段。你需要生成 embedding,将其存储到向量数据库中,并在模型回答之前检索相关上下文。这种方式可以轻松保持知识的时效性,但也会增加基础设施成本,并为每个请求额外增加一个检索步骤。要获得良好的检索效果,可能还需要投入更多工程工作,例如混合稀疏向量与稠密向量,再通过 re-ranking 获得最佳检索结果。
fine-tuning 则将成本前置到数据准备和训练阶段。创建一套高质量样本并非易事,甚至可能导致模型的输出效果变差。Frontier cloud models 通常不支持 fine-tuning,而且一些托管模型正在逐步取消 fine-tuning 功能。好的一面是,规模较小的 open-weight LLM 经过 fine-tuning 后,通常无需检索外部上下文或使用大量 prompt 就能回答问题。这可以降低运行时开销并缩短响应时间。
其中的权衡非常直接:RAG 通常更容易更新,成本也更低;fine-tuning 则可能在推理阶段更加高效。具体如何选择,取决于你要解决的是知识问题还是行为问题,以及你需要使用哪些 LLM。
在 RAG 和 fine-tuning 之间做选择,最简单的方法是找到问题的根源。如果模型无法获取正确的信息,通常应该优先从 RAG 入手。如果模型掌握了相关信息,却仍然产生不一致或质量较差的输出,那么 fine-tuning 可能是更合适的方案,尤其是在使用较小规模的 LLM 时。
你的知识频繁变化:RAG 允许你更新产品文档、政策、价格信息及其他知识来源,而无需重新训练模型。
事实准确性非常重要:RAG 可以在运行时从可信来源检索信息,降低回答内容过时的风险。
你需要来源可追溯:回答可以链接回用于生成内容的文档。
你的知识库规模庞大:检索相关信息比尝试将所有内容编码进模型更加现实。
你的成本模型允许使用 few-shot prompting:可以利用一组前置示例改变模型的行为,但这会消耗更多 token。
选择 fine-tuning 的场景:
你需要更加一致的输出:模型难以遵循特定格式、指令或回答模式。
你希望采用特定的语气或风格:回答需要体现你的品牌形象和沟通规范。
你要解决专业任务:基础模型在你的特定用例中表现得不够可靠。
你需要更强的领域专属推理能力:模型需要运用原始训练数据中未得到充分体现的概念、术语或决策模式。
RAG 和 fine-tuning 并不互斥。RAG 适用于大多数 LLM,通常也更容易构建,但将它与经过 fine-tuning 的模型结合起来,可以进一步提升输出质量。
在混合架构中:
fine-tuning 改进行为:训练本地模型遵循特定语气,并以一致的格式回答。
RAG 改进知识:在运行时检索最新且相关的信息,而不是依赖模型在训练期间学到的内容。
二者结合能够带来更好的结果:当 RAG 和 fine-tuning 都经过正确配置时,模型既知道应该如何回答,也能获取生成准确答案所需的信息。
客户支持助手就是一个很好的例子。经过 fine-tuning 的私有自托管模型可以学习公司的沟通风格和支持流程。RAG pipeline 则会在生成回答之前,检索最新的产品文档、政策和故障排查指南。
这种混合方案在大规模应用中也能取得良好效果,前期投入的 fine-tuning 成本可以在长期使用中获得回报。与其反复添加相同的上下文,不如只使用“稳定”的内容对 LLM 进行 fine-tuning,而将每天都在变化的“动态”知识交给 RAG。n8n 这样的平台让这种组合成为可能。
研究人员也在探索如何进一步融合这两种技术。其中一种新兴方法是检索增强微调(retrieval-augmented fine-tuning,RAFT)。这种方法使用已经包含检索上下文的样本来 fine-tune 模型,帮助模型学习如何更有效地利用外部信息。
选定方案后,下一步就是实施。n8n 提供了一个统一的平台,用于构建和完善 RAG 与 fine-tuning workflow。你可以在不切换工具、也不需要管理多个独立系统的情况下,设计、测试和调整每条 pipeline。
对于 RAG workflow,n8n 提供了摄取和检索知识所需的基础组件。你可以加载文档、将文档拆分成 chunk、生成 embedding,并将其存储到 Pinecone 或 Supabase 等向量数据库中。随后,AI Agent 节点可以在查询时检索相关上下文,并将其传递给 LLM。
对于 fine-tuning workflow,n8n 可以存储 fine-tuning 样本数据集,并通过 Ollama 连接到本地经过 fine-tuning 的模型。这意味着,你可以同时使用经过 fine-tuning 的模型 endpoint 和标准模型部署,而无需引入额外的编排工具。
随着需求不断变化,你可以在同一个 workflow 中结合这两种方法。借助条件分支,可以根据当前任务,将请求路由到 RAG pipeline、直接模型调用或经过 fine-tuning 的模型。执行历史记录则可以帮助你了解检索质量、prompt 和模型输出,从而更轻松地持续测试和完善 AI 系统。
对于大多数用例而言,与 fine-tuning 相比,RAG 已被证明更具成本效益,也更容易实施。不过,在让 LLM 适配现实应用时,两者可以相互补充。选择时既要考虑当前需求,也要考虑这些需求未来可能发生的变化。
许多团队在权衡 LLM fine-tuning 与 RAG 时,会从后者入手,因为 RAG 更容易更新和试验。另一些团队则会在自托管基础设施上需要更专业的行为表现时,转向 fine-tuning。随着 AI 系统逐渐成熟,也可以将这两种方法纳入同一套架构。
这正是编排变得重要的地方。n8n 支持 RAG pipeline、直接模型调用、经过 fine-tuning 的模型 endpoint、AI Agent 和 workflow 编排,让团队能够在一个地方构建、测试和演进 AI 系统,而不必为每种方法分别管理不同的工具。
从 n8n Cloud 中的 RAG pipeline 和编排开始;当你需要 fine-tuning 或本地模型控制时,再迁移到自托管的 n8n。
n8n 用户拥有广泛多样的背景、经验水平和兴趣。我们一直希望在博客文章中介绍不同的用户及其项目。如果你正在使用 n8n,并希望为社区带来启发,欢迎联系我们 💌