RAG 从原理到落地理论

大模型局限性

如果一次性把企业文档各种记录扔给大模型,动辄可能几十万字的输入:

  • 上下文窗口限制
  • 推理成本高
  • 响应速度慢

RAG 核心工作流程

一、整体框架

检索  --->  增强  --->  生成

RAG(Retrieval-Augmented Generation,检索增强生成)可以拆成两条线来理解:

  1. 数据准备阶段(业务线)——把业务数据变成可检索的向量
  2. 回答生成阶段(用户线)——用户提问后,检索相关片段并生成回答

二、数据准备阶段(业务线)

1. 流程概览

业务数据 ---> Chunking(分片) ---> Chunks ---> Embedding 模型 ---> 向量

2. 分片(Chunking)

  • 切分方式:可以按照字数 / 段落 / 章节切分
  • 分片目的:将长文档转化为易于管理的碎片,克服大模型“吃不下”长文的难题

3. 索引(Indexing)

分片 ---> 索引(Indexing)

分片之后需要建立索引,方便后续快速检索。

4. 理解 Embedding

将文字“翻译”为高维坐标。

核心逻辑:文本被转化为高维空间中的向量点后,语义相近 = 空间距离近

坐标系示意

        Y
        ↑
        |                   [小坛爱吃西瓜] (红框)
        |                    🟢 🔵
        |                   [小坛喜欢吃水果] (红框)
        |                   (两点距离很近)
        |
<-------+----------------------------→ X
        |
        |
        |       🟡
        |   [长沙天气怎么样]
        |   (距离上方点很远)
        |

图中要素解析

元素说明
坐标轴 (X, Y)代表多维向量空间中的两个维度(实际应用中通常是几百到上千维)。
彩色圆点 (🟢🔵🟡)代表经过 Embedding 模型转换后的文本向量
红框文本组「小坛爱吃西瓜」与「小坛喜欢吃水果」。虽然字面不完全相同,但语义高度相似(都是关于“吃”和“水果/西瓜”),所以它们在空间中的距离非常近
黄点文本「长沙天气怎么样」。与上方文本主题(饮食)完全无关,因此它在空间中的位置距离很远

核心结论(笔记重点)

  1. 语义向量化:计算机无法直接理解文字,需要将文本通过 Embedding 模型映射为高维空间中的向量点
  2. 距离即相似度:向量空间中的距离(如余弦相似度、欧氏距离),可以用来衡量文本之间的语义相似度
  3. RAG 检索原理

    • 当用户提问时,系统将问题转化为向量。
    • 在向量数据库中,寻找与问题向量距离最近的文档向量(即最相关的知识片段)。
    • 距离越近,代表语义越相关,越应该被召回作为大模型的上下文。
  • Embedding:将文字转化为向量
  • 向量数据库:存储“向量 + 原始文本”的对照表
  • 核心直觉:在高维坐标系中,距离越近的向量,语义越相近

三、回答生成阶段(用户线)

1. 流程概览

用户 ---> 问题 ---> Embedding 模型 ---> 向量 ---> 向量数据库

RAG 回答生成阶段(完整流水线)

核心逻辑:这张图展示了 RAG 在“回答生成阶段”的完整闭环流程。用户提问后,系统通过向量检索找到相关上下文,最后连同问题一起交给大模型(LLM)生成回答。

流程图示意

[用户]
   │
   │ 提问
   ▼
[问题]
   │
   │ 输入
   ▼
[Embedding模型]
   │
   │ 向量化
   ▼
[向量]
   │
   │ 检索
   ▼
[向量数据库]
   │
   │ 匹配
   ▼
[Context]
   │
   │ 拼接
   ▼
[问题 + Context]
   │
   │ 输入
   ▼
[LLM]
   │
   │ 生成
   ▼
[Response]
   │
   └──► 返回给 [用户]

图中各环节解析

用户:发起提问的起点,是整个流水线的触发者。

问题:用户输入的自然语言问题,作为后续检索和生成的输入。

Embedding 模型:将“问题”转化为计算机能理解的向量形式。图中标注为 Embedding模型。

向量:问题经过 Embedding 后的数学表示,是一个高维空间中的点。

向量数据库:存储了知识库中所有文档的向量。系统用“问题向量”去这里做相似度检索,找出最相关的文档片段。

Context(上下文):从向量数据库中召回的、与问题最相关的知识片段。它是 RAG 的“外部知识来源”。

问题 + Context:将原始问题和召回的知识片段拼接在一起,形成完整的 Prompt 输入给 LLM。

LLM(大语言模型):接收“问题 + Context”,基于这些信息生成最终的回答。

Response(回答):LLM 生成的答案,最终返回给用户,完成整个 RAG 闭环。

核心结论(笔记重点)

RAG 回答生成阶段 = 检索 + 生成

  • 检索:问题 → 向量 → 向量数据库 → Context
  • 生成:问题 + Context → LLM → Response

为什么需要 Context:LLM 本身的知识有限且可能过时,通过检索外部知识库,可以让 LLM 基于最新、最相关的事实来回答,减少幻觉。

完整闭环:从用户提问,到向量检索,再到 LLM 生成,最后返回用户,形成一个完整的 RAG 流水线。图中字幕“你看这就是 IG 完整的流水线”中的“IG”应为口误或识别错误,实际指的是 RAG

2. 两个关键动作:召回 + 合成

RAG 检索与生成核心链路

核心逻辑:这张图是对 RAG 流程的高度抽象简化版,重点突出了“计算相似度”这一核心检索步骤,并展示了用户提问、检索、生成、返回的完整链路。

流程图示意

text

[用户提问] ─────────────────────────────────────────────┐
    │                                                  │
    │ 输入                                             │
    ▼                                                  │
[计算相似度 (余弦/欧式)]                                │
    │                                                  │
    │ 匹配                                             │
    ▼                                                  │
[相关文档片段]                                          │
    │                                                  │
    │ 输入                                              │
    ▼                                                  │
[大模型] ◄──────────────────────────────────────────────┘
    │                 (用户原始提问作为上下文一并输入)
    │ 生成
    ▼
[大模型最终回答]

图中各环节解析

用户提问:整个流程的起点,同时也是后续输入给大模型的重要上下文之一。图中有一条线从“用户提问”直接连接到“大模型”,表示原始问题会与检索到的文档一起送入模型。

计算相似度(余弦/欧式):RAG 检索的核心步骤。将用户问题转化为向量后,与向量数据库中的文档向量进行相似度计算。图中标注了两种常用度量方式:

  • 余弦相似度:衡量两个向量方向的夹角,关注方向上的相似性,常用于文本语义匹配。
  • 欧式距离:衡量两个向量在空间中的直线距离,关注位置上的接近程度。

相关文档片段:经过相似度计算后,筛选出的与用户问题最相关的文档内容。这些片段作为外部知识,用于补充大模型的知识盲区。

大模型:接收两个输入:

  • 用户原始提问(从上方直接传入)
  • 检索到的相关文档片段(从左侧传入)
    大模型基于这两部分信息,生成最终回答。

大模型最终回答:整个 RAG 流程的输出结果,返回给用户。

  • 召回(Retrieval):在向量数据库中计算相似度,找出最相关的 Top-k 个片段
  • 生成(Generation):把召回片段交给大模型,指令为“根据这 Top-k 个片段回答,别瞎编”

四、一句话总结

RAG = 先把知识切片、向量化、存进向量库;用户提问时,用同样方式把问题向量化,召回最相似的片段,再让大模型基于这些片段生成答案。

商业化落地实战痛点

实现的挑战:从Demo到商业交付

原理很通透,落地全是坑

基础RAG流程逻辑很丝滑,但在实际商业场景中往往面临答非所问/找不到资料的致命问题。如果不解决细节,上线即失败。

痛点1:文档解析

真实业务场景需要面临各种文档格式,PDF、Word等等,包含许多排版错乱表格

  • 解决方案:专用版面分析模型+OCR+人工复核反馈(RLHF),文档解析是AI落地的第一道门槛

补充:什么是 RLHF?

RLHF(Reinforcement Learning from Human Feedback,基于人类反馈的强化学习)是一种让模型“对齐人类偏好”的训练方法。核心思路是:

  1. 人类标注:让人对模型输出的多个结果进行排序 / 打分
  2. 训练奖励模型:用这些偏好数据训练一个“打分器”,学会判断什么样的输出更好
  3. 强化学习微调:用奖励模型的分数作为信号,引导大模型生成更符合人类期望的结果

在文档解析场景中,可以理解为:人工复核解析结果,把“哪里解析错了、正确应该是什么”反馈给系统,用来持续优化版面分析与 OCR 模型,让解析越来越准。

痛点2:颗粒度

如何切片

  • 切太大=噪音多;切太小=语义丢失。需要根据业务场景大量测试分片策略

举例展开:

假设一份员工手册里有一条规定:“年假天数根据工龄计算:满 1 年 5 天,满 3 年 10 天,满 5 年 15 天。”

  • 切太大:把整章“休假制度”作为一个 chunk,里面还包含病假、婚假、产假……用户问“年假几天”,召回的是几千字的大段落,噪音极多。
  • 切太小:只切出“满 3 年 10 天”这一句,用户问“年假怎么算”,模型不知道这是年假规则,也不知道工龄档位,语义丢失。
  • 合理做法:按“条款”粒度切分,保留小标题和上下文,必要时加 重叠(overlap),让每个 chunk 既完整又不臃肿。

痛点3:检索准确率

  • 检索准确率决定RAG结果生死

朴素RAG检索准确率大概只有60%

可以混合检索(用向量去找也用传统关键词去找,然后进行重排模型给找出来的片段重新打分)

用户问题 ---> 向量检索 ---┐
                          ├---> 重排模型 ---> Top-k 片段
用户问题 ---> 关键词检索 ---┘

痛点 4:用户提问的模糊性

  • 针对口语化、指代不明、语义模糊的提问,结合上下文进行信息补全与意图重构,是确保查询可执行的关键步骤。

举例:

“哪些货快没了,赶紧补”
        |
        v
  Query Rewrite(查询重写)
        |
        v
“检索全国仓可售天数 < 15 天的 A 类商品,排除在途库存,按缺货风险生成补货单”
  • 核心结论:用户说的是“人话”,系统要把它翻译成“机器能执行的查询”。

大模型选型与评估标准

  • 逻辑推理能力
  • 指令遵循能力
  • 防幻觉能力
  • 并不是所有的模型都适合做RAG,需建立系统化评估框架

进阶方案与总结

进阶方案:GraphRAG与Agentic RAG

补充理解:

  • GraphRAG:在传统向量检索之外,引入知识图谱。把文档中的实体、关系抽出来建成图,检索时沿着图结构找关联信息。适合需要多跳推理、全局总结的场景(比如“这家公司所有子公司的风险点有哪些”)。
  • Agentic RAG:把 RAG 交给 Agent(智能体) 来调度。Agent 可以自己决定“要不要检索、检索几次、换什么查询词、用哪个工具”,把单次检索变成多轮自主决策的过程。适合复杂、开放的任务。

总结:真正的壁垒在于工程细节

RAG 冰山模型

核心隐喻:RAG 框架的搭建看似简单(水面上),但真正的难点和核心工作量在于底层的工程优化(水面下)。

          /\
         /  \
        /    \      <-- 水面之上 (可见部分)
       /______\         【RAG Framework / Demo】
       ~~~~~~~~
      /        \
     /          \   <-- 水面之下 (隐藏的庞大工程)
    /            \      【数据清洗、分片策略、多路召回、工程调优】
   /______________\

水面之上(冰山一角):RAG Framework / Demo

  • 含义:指的是 RAG 的基础流程框架或快速演示原型。
  • 特征:通常只需调用现成的库(如 LangChain、LlamaIndex),连接大模型和向量数据库,几十行代码就能跑通一个“看起来能用”的 Demo。
  • 陷阱:很多人误以为这就是 RAG 的全部,但往往在实际业务中效果不佳。

水面之下(冰山主体):核心工程挑战

这部分才是决定 RAG 系统能否真正落地、能否精准回答问题的关键。图中列出了四个核心模块:

  1. 数据清洗 (Data Cleaning)

    • 逻辑:原始文档(PDF、Word、HTML)往往包含大量噪音(页眉页脚、乱码、无关表格、格式错乱)。
    • 目的:将非结构化数据转化为干净、可读、语义连贯的文本,这是高质量检索的基石。
  2. 分片策略 (Chunking Strategy)

    • 逻辑:如何将长文档切分成适合向量化的小块(Chunk)。
    • 目的:切得太碎会丢失上下文,切得太大会导致检索噪音大。需要根据文档类型(如代码、论文、合同)设计固定长度、重叠切分或语义切分策略。
  3. 多路召回 (Multi-route Recall)

    • 逻辑:单一向量检索(Dense Retrieval)往往不够。
    • 目的:结合关键词检索(BM25/Sparse)、向量检索、甚至知识图谱检索。通过多路召回融合(如 RRF 算法),提高相关文档的召回率和覆盖面。
  4. 工程调优 (Engineering Optimization)

    • 逻辑:涉及整个系统的性能与效果迭代。
    • 目的:包括 Embedding 模型微调、重排序(Rerank)模型引入、Prompt 模板优化、检索参数调整(Top-K)、以及系统延迟和并发处理等。
  • 能够独立解决这些“脏活累活”,才是商业落地的核心价值所在
最后修改:2026 年 09 月 15 日
如果觉得我的文章对你有用,请随意赞赏