二、为什么要使用 RAG?

之所以需要 RAG,是因为大语言模型本身存在一些局限性。

  1. 时效性 模型的训练是基于截至某一时间点之前的数据集完成的。这意味着在该时间点之后发生的任何事件、新发现、新趋势或数据更新都不会反映在模型的知识库中。例如,我的训练数据在 2025 年底截止,之后发生的事情我都无法了解。另外,大型模型的训练涉及巨大的计算资源和时间。这导致频繁更新模型以包括最新信息是不现实的,尤其是在资源有限的情况下。
  2. 专业领域深度 虽然大模型的训练数据集非常庞大,但仍可能无法涵盖所有领域的知识或特定领域的深度信息。例如,某些专业的医学、法律或技术问题可能只在特定的文献中被详细讨论,而这些文献可能未被包括在模型的训练数据中。另外,对于一些私有数据集,也是没有被包含在训练数据中的。当我们问的问题的答案没有包含在大模型的训练数据集中时,这时候大模型在回答问题时便会出现幻觉,答案也就缺乏可信度。
  3. 幻觉问题 LLM可能会”自信地编造”错误信息,大模型有时会生成看起来很合理、但实际上完全错误的内容。例如,大模型可能在没有证据的情况下声称某个事件发生了,或者提供不准确的信息。

    通俗类比: “像一个想象力过剩的学生,考试时编造不存在的历史事件”;“医生AI误诊时,会用专业术语详细解释错误治疗方案”;

  4. 数据隐私风险 大模型的训练数据可能包含敏感信息,如个人隐私、商业机密等。如果这些数据被泄露,将对个人和组织造成严重的后果。
  5. 可解释性 大模型的决策过程往往是黑箱的,缺乏透明度。这使得用户难以理解模型的输出结果,从而降低了模型的可信度和可用性。

2.2 RAG如何解决这些问题?

核心思想:让LLM”开卷考试”而非”闭卷考试”

1
2
3
4
5
6
7
8
9
传统LLM(闭卷考试):
用户问题 → LLM → 回答

仅依赖训练知识

RAG系统(开卷考试):
用户问题 → 检索相关文档 → LLM + 文档 → 回答
↑ ↑
外部知识库 结合文档生成
问题 RAG的解决方案 效果
时效性 实时检索外部知识库,支持动态更新 实时性
领域专业性不足 引入领域特定知识库(如医疗/法律) 专业化
幻觉(Hallucination) 基于检索内容生成,错误率降低 减少幻觉
数据隐私风险 本地化部署知识库,避免敏感数据泄露 隐私保护
可解释性 增加透明度,便于用户理解 可追溯

2.3 技术选型:RAG vs. 微调

我们可以从两个维度来理解这些技术的区别。如下图 所示,横轴代表“LLM 优化”,即对模型本身进行多大程度的修改。从左到右,优化的程度越来越深,其中提示工程和 RAG 完全不改变模型权重,而微调则直接修改模型参数。纵轴代表“上下文优化”,是对输入给模型的信息进行多大程度的增强。从下到上,增强的程度越来越高,其中提示工程只是优化提问方式,而 RAG 则通过引入外部知识库,极大地丰富了上下文信息。
RAG vs. 微调

基于此,我们的选择路径就清晰了:

  • 先尝试提示工程:通过精心设计提示词来引导模型,适用于任务简单、模型已有相关知识的场景。
  • 再选择 RAG:如果模型缺乏特定或实时知识而无法回答,则使用 RAG,通过外挂知识库为其提供上下文信息。
  • 最后考虑微调:当目标是改变模型“如何做”(行为/风格/格式)而不是“知道什么”(知识)时,微调是最终且最合适的选择。例如,让模型学会严格遵循某种独特的输出格式、模仿特定人物的对话风格,或者将极其复杂的指令“蒸馏”进模型权重中。

2.4 既然这些场景这么好,为什么有些企业还是宁愿用传统搜索而不是 RAG?

下面简单对比一下二者:

维度 传统搜索(搜索框) RAG(检索+生成)
用户目标 找到文档/页面/附件 直接得到可读答案/总结/对比结论
延迟与成本 极低、易扩展 更高(检索+LLM 推理)
可控性/可审计 强:给原文链接 弱一些:可能误解/总结偏差,需要引用与评测
风险 低(主要是召回排序) 更高(幻觉、引用错误、越权泄露)
数据治理 相对成熟(ACL、字段过滤) 更复杂(检索过滤+上下文脱敏+日志)
适用场景 编号/标题/关键词检索、找模板、找制度原文 客服解答、技术排障、制度解读、跨文档总结对比
最佳实践 ES/BM25 + 权限过滤 混合检索 + 重排 + 引用溯源 + 权限过滤 + 评测闭环