RAG 是一种将检索系统生成式大模型相结合的人工智能技术。它的核心思想是:在让大模型回答问题之前,先从一个大型、私有的知识库中 “查找” 相关的参考资料,然后让模型基于这些找到的 “证据” 来生成最终答案。

你可以把它想象成一个拥有私人助理的专家

  • 专家 (LLM):拥有强大的语言理解和生成能力,但他的知识更新可能滞后,且不一定了解你的特定领域。
  • 私人助理 (检索系统):虽然不擅长创作,但精通查找。当专家接到问题时,助理会立即去一个巨大的文件柜(你的知识库)里翻找所有相关的资料,并把它们呈给专家。
  • 最终回答:专家阅读完助理找到的资料后,结合自己的专业知识,给出一个有根有据、最新且高度相关的回答。

1. 为什么需要 RAG?—— 解决大模型的四大核心痛点

在 RAG 出现之前,我们直接使用大模型(LLM)会遇到几个棘手的问题:

痛点 描述 RAG 的解决方案
知识过时 (Knowledge Cutoff) 大模型的训练数据有一个截止日期(例如 GPT-4 是 2023 年 4 月),无法获取最新信息。 实时检索:通过接入搜索引擎或实时数据库,RAG 可以为模型提供最新的数据,使其回答与时俱进。
知识私有化 (Private Knowledge) 公司内部文档、行业报告、个人笔记等敏感或专属数据,无法用于训练公开的大模型。 私有知识库:RAG 可以建立一个本地或私有化部署的知识库,模型仅在回答时临时检索,确保数据安全。
回答幻觉 (Hallucination) 模型有时会一本正经地 “胡说八道”,编造出看似合理但实则错误的信息。 有据可依:RAG 要求模型基于检索到的、可验证的文档片段进行回答,大大增强了回答的可信度和准确性。
成本高昂 (High Cost) 为特定任务持续微调(Fine-tuning)大模型的成本非常高,且每次更新知识都需要重新微调。 低成本更新:RAG 的知识库可以轻松增删改,无需重新训练模型,知识更新成本极低。

2. RAG 的核心工作流程(Step-by-Step)

一个典型的 RAG 系统运作流程可以分为两大阶段:构建阶段 (Indexing) 和 问答阶段 (Querying)

阶段一:构建阶段 (Indexing) - “建立文件柜”

这个阶段是一次性的 “基建工程”,目的是把原始文档转换成方便快速检索的格式。

  1. 文档加载 (Document Loading)

    • 做什么:将各种格式的原始文档(如 PDF, DOCX, TXT, Markdown, HTML 等)读取到系统中。
    • 工具示例LangChain 的 DocumentLoaders 模块、LlamaIndex 等。
  2. 文档分割 (Document Splitting / Chunking)

    • 做什么:将长文档切割成更小、更易于处理的片段(Chunks)。这是RAG 性能的关键一步
    • 为什么重要:大模型有上下文窗口限制。如果片段太长,模型无法处理;如果太短,可能会割裂上下文,导致信息丢失。
    • 策略:通常按段落、章节分割,或使用更智能的 “递归字符分割器”,并保留每个片段的元数据(如来源、页码)。
  3. 嵌入生成 (Embedding)

    • 做什么:使用一个嵌入模型 (Embedding Model),将每个文本片段转换为一个高维向量(Vector),即 “嵌入向量”。
    • 原理:这个向量会捕捉文本的语义信息。意思越接近的片段,它们的向量在空间中的距离就越近。
    • 模型示例OpenAI EmbeddingsSentence-BERT (SBERT) 系列(如 all-MiniLM-L6-v2)。
  4. 向量存储 (Vector Storage)

    • 做什么:将所有文本片段的嵌入向量及其对应的原始文本、元数据存储在一个专门的数据库中,即向量数据库 (Vector Database)
    • 核心能力:向量数据库支持近似最近邻搜索 (Approximate Nearest Neighbor, ANN),能在海量向量中快速找到与查询向量最相似的 Top-K 个向量。
    • 数据库示例MilvusWeaviateChromaPinecone (云服务)。
阶段二:问答阶段 (Querying) - “查找并回答”

这是用户与系统交互的实时过程。

  1. 接收查询 (Receive Query)

    • 做什么:用户输入问题,例如:“请总结一下我们公司最新的产品定价策略?”
  2. 查询转换 (Query Transformation)

    • 做什么:将用户的自然语言查询也通过同一个嵌入模型转换成查询向量。
  3. 相似性检索 (Similarity Search)

    • 做什么:将查询向量送入向量数据库,执行 ANN 搜索,找出与查询最相关的 Top-K 个文档片段。
    • 结果:得到一个包含相关文本片段、相似度分数和元数据的列表。
  4. 构建提示 (Prompt Construction)

    • 做什么:这是一个关键的 “编排” 步骤。系统会将检索到的相关片段、原始查询以及一些指令(Prompt)组合成一个新的、信息更丰富的提示。
    • 示例 Prompt 模板

      plaintext

      你是一个专业的问答助手。请基于以下提供的参考资料,用简洁明了的语言回答用户的问题。
      如果参考资料中没有相关信息,请直接回答“根据提供的资料,无法回答该问题”,不要编造内容。
      
      参考资料:
      {retrieved_documents}
      
      用户的问题是:
      {user_query}
      
      请开始回答:
      
  5. 模型生成 (Generation)

    • 做什么:将这个精心构建的提示发送给大语言模型 (LLM)
    • 模型示例GPT-4oClaude 3Gemini ProLlama 3 等。
  6. 返回结果 (Return Result)

    • 做什么:LLM 接收到提示后,会基于其中的参考资料生成回答。系统将这个回答返回给用户,通常还会附上引用来源(来自元数据),以增强透明度和可信度。

3. 深入细节与关键技术点

要构建一个高性能的 RAG 系统,需要深入理解并优化以下几个方面:

3.1 检索器 (Retriever) 的选择与优化
  • 稀疏检索 (Sparse Retrieval)
    • 代表:TF-IDF, BM25。
    • 原理:基于词频统计,看查询词在文档中出现的频率和重要性。
    • 优点:速度快,对关键词匹配友好,可解释性强。
    • 缺点:不理解同义词和上下文语义(如 “汽车” 和 “轿车”)。
  • ** dense 检索 (Dense Retrieval)**:
    • 代表:使用嵌入模型的向量检索。
    • 原理:捕捉深层语义,能理解同义词和上下文。
    • 优点:语义理解能力强,对模糊查询友好。
    • 缺点:计算和存储成本较高。
  • 混合检索 (Hybrid Retrieval)
    • 原理:结合稀疏检索和 dense 检索 的优点。例如,使用 ColBERT 或 RRF (Reciprocal Rank Fusion) 算法融合两种检索结果。
    • 适用场景:对召回率和准确率要求都非常高的场景。
3.2 文档分割 (Chunking) 的艺术

分割策略对 RAG 性能影响巨大。

  • 固定大小分割:最简单,但可能破坏句子或段落结构。
  • 语义分割:利用 NLP 工具(如 spaCy)按句子、段落或章节分割,保持语义完整性。
  • 滑动窗口 / 重叠 (Overlap):在片段之间保留一小段重叠内容(如 50-100 个字符),防止因分割点不当导致上下文丢失。
  • 层次化分割:先将文档分割成大的块(如章节),再分割成小块(如段落)。检索时先检索大的块,再在其中检索小的块,可以提升效率和准确性。
3.3 提示工程 (Prompt Engineering) 的技巧
  • 指令清晰:明确告诉模型 “必须基于提供的资料回答”、“如果资料不足请说明”。
  • 示例驱动 (Few-shot Prompting):在提示中加入 1-2 个 “问题 - 正确回答” 的示例,让模型快速理解任务。
  • 思维链 (Chain-of-Thought):引导模型在回答前,先思考 “我需要从资料中找什么信息?”“这些信息如何组织成答案?”。
3.4 RAG 的评估 (Evaluation)

如何衡量一个 RAG 系统的好坏?

  • 检索阶段评估
    • 指标:召回率 (Recall@k)。衡量在检索出的 Top-k 个结果中,是否包含了所有与问题相关的文档。这是最重要的指标之一。
  • 生成阶段评估
    • 指标
      • 基于事实性:Faithfulness, Factuality。衡量生成的回答是否忠实于检索到的证据,有无 “幻觉”。
      • 基于相关性:Answer Relevance。衡量回答是否切题。
      • 基于质量:使用 LLM 作为裁判(LLM-as-a-Judge),让另一个大模型对回答的准确性、完整性、有用性进行打分。
    • 工具RAGASTruLens 等框架提供了自动化的 RAG 评估能力。

4. RAG 的架构演进

RAG 技术本身也在快速演进:

  • RAG v1.0 (基础 RAG):就是我们上面描述的标准流程。
  • RAG v2.0 (高级 RAG / "RAG of RAGs"):引入了更多智能。
    • 查询重写 (Query Rewriting):模型先分析原始查询,将其重写为更易于检索的形式(如分解为子问题、生成同义词查询)。
    • 自我检索 (Self-RAG / Reflection):模型生成初步回答后,会检查其中的每个断言是否有证据支持。如果没有,它会进行多轮迭代检索,补充缺失的信息,直到满意为止。
    • 结构化检索:不仅检索非结构化文本,还能检索数据库中的表格、JSON 等结构化数据,回答更精确。

下一步行动建议

现在你已经对 RAG 有了全面的了解,可以从以下几个方向着手实践:

  1. 动手实践:使用 LangChain 或 LlamaIndex 搭建一个最简单的 RAG 原型。你可以用自己的笔记或几篇文章作为知识库。
  2. 深入研究:选择一个你最感兴趣的技术点进行深入研究,例如不同的向量数据库性能对比,或者高级的 Chunking 策略
  3. 方案设计:思考一下你所在行业或领域,哪些具体问题可以通过 RAG 来解决?尝试为其设计一个初步的技术方案。
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐