向全球数据专业人士社区发布关于 AI、机器学习和数据科学的见解。

如何使用 RAG 和微调提高 LLM 的准确性

以及何时使用哪一种方法

自有可视化图表 — 插图来自 unDraw.co

想象一下,你花了一个学期的时间学习大学的一门课程。在期末,经过密集的学习阶段,你参加了一场考试——无需查阅任何资料,你就能回忆起最重要的概念。

现在想象第二种情况:有人问你一个新主题的问题。你不能立即回答,于是你拿起一本书或浏览维基百科,去寻找正确的信息来回答问题。

这两个比喻代表了改进大语言模型(LLM)基础模型,或使其适应特定任务和领域的最重要的两种方法:检索增强生成(RAG)和微调(Fine-Tuning)。

但是,哪个例子属于哪种方法呢?

这正是我将在本文中解释的内容:阅读后,你将了解 RAG 和微调的定义、它们最重要的区别,以及哪种方法适合哪种应用场景。

让我们开始吧!

目录

1. 基础:什么是 RAG?什么是微调?

像 OpenAI 的 ChatGPT、Google 的 Gemini、Anthropic 的 Claude 或 Deepseek 这样的大语言模型(LLM)功能极其强大,并在极短时间内确立了在日常工作中的地位。

它们最大的局限性之一是其知识仅限于训练数据。一个在 2024 年训练的模型无法获知 2025 年发生的事件。如果我们问 ChatGPT 的 4o 模型当前的美国总统是谁,并明确指示不得使用互联网,我们就会发现它无法确定地回答这个问题。

作者截图

此外,这些模型无法轻易访问公司特定信息,例如内部指南或最新的技术文档。

这正是 RAG 和微调发挥作用的地方。

这两种方法都可以使 LLM 适应特定的需求。

RAG —— 模型保持不变,输入得到改进

使用检索增强生成(RAG)的 LLM 本身保持不变。

然而,它获得了访问外部知识源的权限,因此可以检索存储在模型参数之外的信息。RAG 在推理阶段通过利用外部数据源来提供最新或特定的信息,从而扩展了模型。推理阶段即模型生成答案的时刻。

这使得模型无需重新训练即可保持最新状态。

它是如何工作的?

  1. 用户提出问题。
  2. 查询被转换为向量表示。
  3. 检索器在外部数据源中搜索相关的文本段落或数据记录。这些文档或常见问题解答(FAQ)通常存储在向量数据库中。
  4. 找到的内容作为附加上下文被传输到模型中。
  5. LLM 基于检索到的最新信息生成答案。

关键点在于,LLM 本身保持不变,且 LLM 的内部权重保持不变。

假设一家公司使用内部的 AI 支持聊天机器人。

该聊天机器人帮助员工回答有关公司政策、IT 流程或人力资源主题的问题。如果你问 ChatGPT 一个关于你公司的问题(例如:我还有多少天年假?),从逻辑上讲,该模型无法给你一个有意义的答案。一个没有 RAG 的传统 LLM 对公司一无所知——它从未接受过这些数据的训练。

而 RAG 改变了这一点:聊天机器人可以搜索外部的最新公司政策数据库,找到最相关的文档(例如 PDF 文件、维基页面或内部常见问题解答),并提供具体的答案。

RAG 的工作方式类似于我们人类在图书馆查找特定信息或通过 Google 搜索——但它是实时的。

当一名学生被问到“CRUD”的含义时,他会迅速查阅维基百科条目并回答“创建、读取、更新和删除”——这就像 RAG 模型检索相关文档一样。这一过程使得人类和人工智能都无需死记硬背就能提供知情回答。

这也使得 RAG 成为保持回答准确和最新的有力工具。

作者自行制作的可视化图表

微调 —— 模型经过训练并永久存储知识

LLM 不仅可以通过查找外部信息,还可以通过微调直接更新新知识。

微调用于训练阶段,为模型提供额外的领域特定知识。现有的基础模型会使用特定的新数据进行进一步训练。结果是,它“学习”了特定的内容,并内化了术语、风格或某些内容,同时保留了其对语言的通用理解。

这使得微调成为根据特定需求、数据或任务定制 LLM 的有效工具。

它是如何工作的?

  1. 使用专门的数据集对 LLM 进行训练。该数据集包含有关某个领域或任务的特定知识。
  2. 调整模型权重,使模型将新知识直接存储在其参数中。
  3. 训练完成后,模型无需外部源即可生成答案。

现在假设我们想使用一个能为我们提供法律问题专家级回答的 LLM。

为此,该 LLM 接受法律文本的训练,以便在微调后提供精确的答案。例如,它会学习诸如“故意侵权(intentional tort)”之类的复杂术语,并能说明相关国家背景下的适当法律依据。它不再只是给出一个笼统的定义,而是可以引用相关法律和判例。

这意味着你所拥有的不再仅仅是一个通用的 LLM(如 GPT-4o),而是一个用于法律决策的实用工具。

如果我们再次审视人类的比喻,微调就像是经过密集学习阶段后内化了知识。

在这个学习阶段之后,计算机专业的学生就知道 CRUD 代表创建、读取、更新和删除。他/她无需查找即可解释这个概念。通用词汇量得到了扩展。

这种内化使得回答更快速、更自信——就像经过微调的 LLM 一样。

2. RAG 与微调的区别

两种方法都能提升 LLM 在特定任务上的表现。

两种方法都需要准备充分的数据才能有效工作。

而且,两种方法都有助于减少“幻觉”——即生成虚假或捏造的信息。

但如果我们查看下表,就能看出这两种方法之间的区别:

RAG 特别灵活,因为模型始终可以访问最新数据,而无需重新训练。它在前期所需的计算量较小,但在回答问题(推理)时需要更多资源。延迟也可能较高。

另一方面,微调提供了更快的推理速度,因为知识直接存储在模型权重中,不需要外部搜索。其主要缺点是训练耗时且昂贵,并且需要大量高质量的训练数据。

RAG 为模型提供了在需要时查找知识的工具,而无需改变模型本身;而微调则通过调整参数和权重,将额外知识存储在模型中。

作者自行制作的可视化图表

3. 构建 RAG 模型的方法

构建检索增强生成(RAG)流水线的一个流行框架是 LangChain。该框架促进了 LLM 调用与检索系统的链接,并能够有针对性地从外部来源检索信息。

RAG 技术上是如何工作的?

1. 查询嵌入(Embedding)

第一步,使用嵌入模型将用户请求转换为向量。例如,使用 OpenAI 的 text-embedding-ada-002 或 Hugging Face 的 all-MiniLM-L6-v2。

这是必要的,因为向量数据库不搜索传统文本,而是计算数值表示(嵌入)之间的语义相似度。通过将用户查询转换为向量,系统不仅可以搜索完全匹配的术语,还能识别内容相似的概念。

2. 在向量数据库中搜索

然后将得到的查询向量与向量数据库进行比较。目的是找到回答问题最相关的信息。

这种相似度搜索使用近似最近邻(ANN)算法执行。此任务中著名的开源工具包括:Meta 的 FAISS(用于大型数据集中的高性能相似度搜索)或 ChromaDB(用于中小型检索任务)。

3. 插入 LLM 上下文

在第三步中,将检索到的文档或文本段落集成到提示词(Prompt)中,以便 LLM 基于此信息生成响应。

4. 生成响应

LLM 现在将接收到的信息与其通用的语言词汇相结合,生成上下文特定的响应。

LangChain 的替代方案是 Hugging Face 的 Transformer 库,它提供了专门开发的 RAG 类。

  • ‘RagTokenizer’ 对输入和检索结果进行分词。该类处理用户输入的文本和检索到的文档。
  • ‘RagRetriever’ 类执行语义搜索,并从预定义的知识库中检索相关文档。
  • ‘RagSequenceForGeneration’ 类获取提供的文档,将其集成到上下文中,并传输给实际的语言模型以生成答案。

4. 微调模型的选项

虽然 RAG 模式的 LLM 使用外部信息进行查询,但通过微调,我们改变了模型权重,使得模型永久存储了新知识。

微调在技术上是如何工作的?

1. 准备训练数据

微调需要高质量的数据集合。该集合由输入和期望的模型响应组成。例如,对于聊天机器人,可以是问答对。对于医疗模型,可以是临床报告或诊断数据。对于法律 AI,可以是法律文本和判决书。

让我们看一个例子:如果我们查看 OpenAI 的文档,会发现这些模型在微调期间使用带有角色(系统、用户、助手)的标准化聊天格式。这些问答对的数据格式为 JSONL,例如:

{"messages": [{"role": "system", "content": "Du bist ein medizinischer Assistent."}, {"role": "user", "content": "Was sind Symptome einer Grippe?"}, {"role": "assistant", "content": "Die häufigsten Symptome einer Grippe sind Fieber, Husten, Muskel- und Gelenkschmerzen."}]}  

其他模型使用其他数据格式,例如 CSV、JSON 或 PyTorch 数据集。

2. 选择基础模型

我们可以使用预训练的 LLM 作为起点。这些可以是闭源模型(通过 OpenAI API 的 GPT-3.5 或 GPT-4),也可以是开源模型(如 DeepSeek、LLaMA、Mistral 或 Falcon,或者用于 NLP 任务的 T5 或 FLAN-T5)。

3. 模型训练

微调需要大量的计算能力,因为模型是用新数据训练来更新其权重的。特别是像 GPT-4 或 LLaMA 65B 这样的大型模型,需要强大的 GPU 或 TPU。

为了减少计算工作量,有一些优化方法,如 LoRA(低秩自适应),即只训练少量的额外参数;或 QLoRA(量化 LoRA),即使用量化的模型权重(例如 4-bit)。

4. 模型部署与使用

模型训练完成后,我们可以将其部署在本地,或部署在云平台(如 Hugging Face Model Hub、AWS 或 Azure)上。

5. 什么时候建议使用 RAG?什么时候建议使用微调?

RAG 和微调各有优缺点,因此适用于不同的用例。

RAG 特别适用于内容动态更新或频繁更新的场景。

例如,在常见问题(FAQ)聊天机器人中,需要从不断扩充的知识库中检索信息。定期更新的技术文档也可以使用 RAG 有效集成,无需模型频繁重新训练。

另一点是资源:如果计算能力有限或预算较少,使用 RAG 更合理,因为不需要复杂的训练过程。

另一方面,当需要将模型定制为特定公司或行业时,微调更适用。

通过有针对性的训练,响应质量和风格可以得到提高。例如,LLM 可以生成具有精确术语的医疗报告。

基本规则是:当知识过于庞大或过于动态,无法完全集成到模型中时,使用 RAG;当需要一致的、特定于任务的行为时,微调是更好的选择。

还有 RAFT——结合的魔力

如果我们把两者结合起来会怎样?

这正是 检索增强微调(RAFT) 所做的事情。

首先,模型通过微调补充领域特定知识,以便理解正确的术语和结构。然后,模型通过 RAG 进行扩展,从而能够从外部数据源集成特定且最新的信息。这种结合既确保了深厚的专业知识,又具备了实时适应能力。

企业会同时利用这两种方法的优势。

结语

RAG 和微调这两种方法都以不同的方式扩展了基础 LLM 的能力。

微调使模型专门针对特定领域,而 RAG 则为模型配备了外部知识。这两种方法并不互斥,可以在混合方法中结合使用。从计算成本来看,微调前期资源密集,但运行效率高;而 RAG 前期资源需求较少,但在使用过程中消耗更多。

当知识过于庞大或动态,无法直接集成到模型中时,RAG 是理想选择。当需要针对特定任务进行稳定且持续的优化时,微调是更好的选择。这两种方法各有独特且互补的用途,使它们成为 AI 应用中的宝贵工具。

在我的 Substack 上,我会定期撰写有关科技、Python、数据科学、机器学习和 AI 领域已发表文章的总结。如果你感兴趣,欢迎查看或订阅。

您可以在哪里继续学习?


是一个社区出版物。提交您的见解以触达我们的全球受众,并通过TDS作者支付计划赚取报酬。

为TDS投稿

相关文章

© .