构建问答系统之更新知识库与微调二者比较

一、参考文章

(1)RAG & 微调,我们应该如何选择?

二、什么时候需要使用RAG,什么时候使用微调

要求/使用对象 RAG 微调
(1)要构建一个需要访问外部数据源的 LLM 应用程序 Y
(2)应用程序需要专门的写作与回答风格(如客服)与特定领域的语言和惯例深度一致 Y
(3)抑制幻觉 Y
(4)数据集有限时,微调效果有限,但RAG仍能保持一定知情度与准确度 Y
(5)如果我们正在应对快速发展的数据环境,RAG 提供的敏捷性是传统微调难以比拟的。 Y
(6)LLM 应用程序需要透明/可解释,RAG 可以增强用户对其输出的信任和理解。 Y
(7)快速集成领域知识如法律、数学与特定公司产品等,提高专业问答能力、成为当前领域内的专家 Y
(8)可扩展性(不断给增加数据源知识量) Y
(9)延迟和实时要求(RAG 涉及在生成响应之前检索数据,可能会引入更多延迟) Y
(10)维护与支持(RAG需要维护知识库与检索机制,而微调需要反复的再训练流程) Y
(11)成本(微调需要反复微调动作,需要持续投入;RAG则主要在初期需要一定成本,用来集成相关应用等,但还需要考虑定期维护外部知识库,成本相对较低) Y
(12)复杂度 Y

RAG英文全称是“Retrieval-Augmented Generation”,中文翻译为“检索增强生成”,它将检索(或搜索)的能力集成到 LLM 的文本生成中。它结合了一个检索系统和一个 LLM,前者从大型语料库中获取与用户查询最相关的文档,后者使用这些被检索到的文档中的信息生成答案。本质上,RAG 帮助模型“查找”外部信息以改进其响应。

Model Fine-tuning,中文翻译为“模型微调”,是在较小的特定数据集上进一步训练预训练过的 LLM,以使其适应特定任务或提高其性能。通过微调,我们根据数据调整模型的权重,使其更适合我们应用程序的独特需求。

那么到底什么时候应该使用RAG,什么时候应该使用模型微调呢?下面从多个角度来进行分析说明。


(1)是否需要访问外部数据源?

LLM本身的知识储备是有一个自身缺陷或限制的,主要来自两个方面:第一,LLM被训练时所使用的训练数据集是有一个收集时间界线的,在这个时间界线之后的产生的新知识是LLM无法知晓的。第二,收集训练数据集时无法收集到那么不公开的数据,这样的数据也是LLM无法知晓的。

如果我们要构建一个需要访问外部数据源的 LLM 应用程序,那么我们就应该选择 RAG。因为 RAG 会通过在 LLM 生成响应之前从外部数据源中检索与当前用户查询最相关的信息来增强 LLM 的能力。 相比之下,虽然我们可以对LLM进行微调以学习一些外部知识,但这样做需要目标领域内的大量带标签的问答数据集,且该数据集必须随着基础数据的变化不断变化更新,这在基础数据频繁更新时是不切实际的。微调过程也没有明确地对查询外部知识所涉及的检索和推理步骤进行建模,这使得开发人员与用户对这两个步骤的执行存在较大不确定性。

因此总而言之,如果我们的应用程序需要使用外部数据源,那么使用 RAG 系统可能比尝试仅通过微调“融入”所需的知识更有效且可扩展。

(2)是否需要修改模型的行为、写作风格或特定领域的知识?

微调的优势在于能够使 LLM 的行为适应特定领域的语气或术语。比如我们希望模型的回答更像一个法律专家,那么对法律领域的数据集进行微调可以达到这个目的。

而与之相对地,RAG虽然能够检索外部数据源并提供给LLM进行利用与整合,但其侧重点仍在于信息检索,并不会根据检索到的文件与信息修改LLM的语气与措词风格。

因此,如果我们的应用程序需要专门的回复风格或与特定领域的语言惯例和气质保持一致,那么就需要使用微调。

(3)抑制幻觉

LLM的一个明显的缺点就是容易产生幻觉,即对于未掌握的知识或不熟悉的知识,LLM也会尝试编造没有现实依据或现成数据的事情与细节,生成回复。人类看到之后,可能感觉“有理有据,头头是道”,但其实可能是LLM在“一本正经地胡说八道”。如果用户遵照这类回复进行操作,可能造成不可确认的结果甚至重大破坏性问题。

如果在特定领域的训练数据上对LLM进行微调,可以在一定程度上减少LLM出现幻觉的可能性。但只是一定程度上减少这种可能性,即当LLM面对不熟悉的问题时,LLM仍可能会“一本正经地胡说八道”,导致LLM幻觉现象的出现。

相对地,如果使用RAG则不太容易产生幻觉,因为它的每个响应都基于从指定数据源中检索到的信息。在LLM输出答案之前,检索器从外部数据源(我们当然应该尽量保证此外部数据源中数据的准确严谨性)中检索到相关文件与信息,这个过程其实就是相当于是对LLM的大致回复内容进行了事实检查操作,极大地减少了LLM“一本正经地胡说八道”的可能性。LLM 也被限制根据检索到的上下文信息合成响应。

(4)可用的已标记训练数据量大小是一个重要因素

可用已标记数据的质量与数量是决定采用模型微调还是RAG的一个重要因素。即如果可用已标记数据量大且质量都不错,那么这些训练数据可以帮助模型深入理解特定领域的细微差别、复杂性与独特模式,从而生成准确的、与上下文相关的回复;反过来,如果我们的训练数据数据与质量无法达到上述标准,事实上微调能够带来的改进效果是非常有限的,如果训练数据集不足还有可能导致出现过拟合现象。

相比之下,即使没有大量的可用已标记数据,RAG独立于训练数据,仍能够从提供的外部知识源中检索用户提问的相关信息,然后由LLM通过访问与整合来自外部数据源的信息生成最终回复。检索和生成的结合确保系统即使在特定领域的训练数据稀疏的情况下也能保持知情。

所以说,如果我们拥有大量的可用标记数据以覆盖当前领域内问题的复杂性与广度,模型微调可以提供定制化的、准确完善的模型行为。反之,我们则应该采用RAG文案,确保应用程序通过其检索功能保持数据知情与上下文感知。

(5)数据动静态程度如何

在特定数据集上微调LLM意味着LLM本身的知识储备就是微调时所用数据集的一个静态快照。很显然,如果模型所需要使用的数据集频繁更新,为了使用LLM本身的知识储备能够跟这些更新保持同步,就需要对模型频繁进行微调,这不仅需要频繁地准备数据集与格式化它们,还需要频繁地执行微调指令,这门将是一个耗时又占用资源的过程。与此同时,为了确保更新后的模型在不同场景下能够使用更新后的知识做出准确恰当的回答,还需要对其进行测试与仔细监控。

而RAG在类似的场景下则拥有与身俱来的优势。它们本来就是使用检索机制在外部知识源查询与用户提问最相关的文档与信息,更新了外部知识源其实对它来说几乎是透明的,它们仍能从更新后的外部知识源检索并提取最新的知识。

总之,如果我们数据环境是快速迭代更新的,RAG为我们提供的敏捷性、便捷性、高效性是传统微调难以比拟的。

(6)LLM 应用程序需要有多透明/可解释?

经过微调后的LLM虽然很强大,但其背后的运作与推理逻辑对人类来说就是一个黑盒子,不透明且不可感知其中某个关键细节过程。对于某些用户或某些需要验证LLM输出结果准确性的应用程序来说,确定LLM输出的内容并知晓其背后的原因与参考内容也是很重要的。遗憾的是,微调并不能实现此功能。

相反,RAG却可以轻松地实现此功能。由于RAG的两步性质即”检索与生成“,且能将中间的检索结果中与生成内容相关的内容最终以参考文档的形式呈现给使用者,这为使用者溯源输出内容提供了切实的证据与参考线索。

所以,如果使用者要求对LLM输出的内容进行溯源,以找到切实的证据与参考线索,那么RAG将是首选。

(12)复杂度

虽然许多提供商现在提供一键式微调,我们只需要提供训练数据,但跟踪模型版本并确保新模型仍然全面运行是一项挑战。另一方面,RAG 也可能很快变得复杂。有多个组件的设置,确保数据库保持最新,并确保各个部分(例如检索和生成)正确地组合在一起。


三、总结

显然,我们在决定选择微调还是RAG前,需要先对LLM的独特需要、优先事项与自身条件进行综合评估。

没有一种万能的解决方案 ,成功在于使优化方法与任务的具体要求保持一致。通过评估关键标准(外部数据的需求、调整模型行为、训练数据可用性、数据动态、结果透明度等),我们就可以用最佳前进路径做出明智的决策。在某些情况下,同时利用 RAG 和微调的混合方法可能是最佳选择。

image-20250311162729369

(1)如果要使用微调,目前在我看来将存在以下缺点或待解决问题:

  • 微调需要将我们公司现有各种文档如使用手册、产品说明书、白皮书等,转换成可用于微调的数据集。而这些文档的格式可能是多种多样的如pdf、pptx、docx等,需要继续研究这种转换工作可用方法与成本。
  • 后期基础数据关键内容更新一次可能就需要进行一次微调,将增加成本。且微调一次其实会生成一个新模型,需要重新部署,将临时中断模型对外提供服务(目前这对于我们公司来说,可能不是最关键的缺点)

(2)如果使用RAG(这里直接以“fastGPT这类知识库问答系统”来搭建客服系统为例),则存在以下缺点:

  • 客服的回复语气与风格,可能不够委婉。但能实现会话且保证回复的答案能够溯源且相对准确
  • 不管微调还是RAG,如果需要联网搜索,就需要配置联网搜索引擎(有收费搜索引擎,但增加了成本;也有免费的,但服务可能不够稳定、效果不如收费版本好)

最后,我给出自己的建议供参考

如果需要马上搭建出这样的客服系统,可以先使用fastGPT来搭建RAG应用程序,完成知识库与相关功能配置,先体验下效果。

如果后续有需要且技术完善、时间充裕,可以将公司相关资料文档转换成可用标记数据集,进行微调。最好能将“微调与RAG结合起来使用”、”单独使用微调“进行比较评估,并确定后续动作。


构建问答系统之更新知识库与微调二者比较
https://jiangsanyin.github.io/2025/03/10/构建问答系统之更新知识库与微调二者比较/
作者
sanyinjiang
发布于
2025年3月10日
许可协议