欢迎光临
我们一直在努力

RAG原理

RAG(Retrieval-Augmented Generation,检索增强生成)是一种将信息检索系统与生成式大语言模型相结合的机器学习框架。

其核心定义为:

在生成答案之前,首先利用一个独立的检索模块,从一个庞大的、可被索引的知识源(如维基百科、企业内部文档或向量数据库)中,动态地提取与输入提示(Prompt)最相关的若干个上下文文本块(Chunks)。然后,将这些检索到的文本块作为额外的背景知识,与原始输入一起拼接成增强后的提示,最终输入给生成器(大语言模型),以约束并指导其生成符合事实、且具有外部依据的输出结果。

RAG一般用于 企业知识库、客服机器人、文档助手三个方向。

一、为什么需要RAG

大语言模型(LLM)的本质是预测下一个 token,这带来了三个天然缺陷:

  • 会编造答案:当训练数据中没有答案时,模型不会说“我不知道”,而是继续预测一个“看起来合理”的答案。
  • 知识过时:如果模型训练数据停留在 2025 年,那么它对 2025 年之后的事情完全不知道。
  • 无法访问私有数据:企业内部文档、业务数据、家庭规则等,模型从未“见过”,自然无法回答。
  • 一个直观但不可行的想法

    你可能会想:把整个企业知识库一次性丢给 AI,让它回答。 这听起来合理,但实际上不可行,原因有三:

    • 上下文窗口限制:即使现代模型能处理长输入,内容太多时依然会出现注意力分散。
    • 计算成本高:每次提问都要处理整个知识库,资源消耗巨大。
    • 响应速度慢:用户无法忍受等一两分钟才能得到答案。

    更好的方案:开卷考试模式

    在回答之前,先找到最相关的那几页或那几段内容,再交给大语言模型。 就像开卷考试一样:

    • 看到一个问题
    • 大致定位到书中哪几页可能包含答案
    • 只阅读那几页,然后回答

    RAG 的本质:

    RAG = Retrieval-Augmented Generation(检索增强生成)

    • Retrieval(检索):先在资料库中搜索与问题最相关的片段
    • Augmented Generation(增强生成):基于检索到的资料,让模型生成更准确、更可靠的答案

    RAG的本质就是在模型回答之前先去检索资料,再基于资料生成答案,而不是每次都需要从头把这本书把这个厚厚的文档从头翻到尾.把 RAG 想象成一个“有参考书的考生”:他不需要把整本书背下来,而是拿到题目后快速翻到相关章节,再组织出答案。这样既高效又准确,还能随时更新知识库(换一本新参考书即可)。

    二、RAG的核心流程

    RAG(Retrieval-Augmented Generation,检索增强生成)的核心流程可以分为两个阶段:

    • 第一阶段:数据准备(把企业文档变成计算机能快速查找的形式)
    • 第二阶段:用户提问(根据问题找到相关资料,再让大模型生成答案)

    下面我们用“搭建一个企业知识库问答系统”作为例子,一步步拆解。

    (1)、数据准备阶段

    假设我们有一堆企业内部文档(Word、PDF、网页等)。原始文档通常很长、信息混杂,不能直接丢给模型。

    1. 切分(Chunking)

    把长文档拆成很多小块,每一块尽量表达一个相对完整的语义(比如一个段落、一个小节)。 切分方式可以按:

    • 章节
    • 段落
    • 固定字数(例如 500 字一块)

    为什么一定要切分? 整篇文档一起处理会导致语义混乱,检索不准确。就像一本书,你不会每次提问都把整本书从头读到尾,而是先找到相关的几页。

    2. 向量化(Embedding)

    计算机只认识数字,不认识文字。所以我们需要把每个文本块转成向量(一组数字,可以看作一个坐标点)。

    用二维坐标来理解: 假设我们有一个 X-Y 平面:

    • 文本块“张三是男的” → 对应坐标点 (1, 1)
    • 文本块“张三 30 岁” → 对应坐标点 (2, 1)
    • 文本块“销售额 1 万元” → 对应坐标点 (-1, -1)

    在这个语义空间里,意思相近的文本,它们的坐标点距离更近;意思不相关的,距离更远。 (实际的 embedding 模型可能有几百甚至上千个维度,但原理相同。)

    3. 存入向量数据库

    每个文本块及其对应的向量一起存入数据库。数据库至少有两列:

    至此,数据准备完成。

    (2)、用户提问阶段

    用户输入一个问题,比如:“张三是谁?”

    1. 将问题也转成向量

    使用同样的 embedding 模型,把问题“张三是谁?”转换成向量,假设是 (1.5, 0.5)。

    2. 相似度匹配(初筛)

    用这个向量去和数据库里的每一个文本块的向量计算相似度。 常见方法:

    • 余弦相似度:计算两个向量之间的夹角
    • 欧氏距离:计算两个点之间的直线距离

    然后返回最相关的 top K 个块。K 可以取 1、10、100 等,按需要设置。 假设我们设 K=4,那么系统会召回 4 个最像的文本块。

    这一步只是粗筛,只能判断“看起来像不像”,不能保证这 4 个块真的回答了问题。

    3. 重排序(Rerank)

    用更强的模型把这 4 个候选块逐一和问题进行比较,判断“这一段是否真的回答了问题”。 经过重排,我们可能只选出其中 2 个最相关的片段。

    4. 构建提示词(Prompt)并交给大模型

    把以下内容组合成一个最终的提示词:

    • 用户的问题(“张三是谁?”)
    • 检索到的 2 个相关片段(参考资料)
    • 系统指令,例如:“严格按照参考资料回答,不知道就说不知道,不要胡乱编造。”

    然后把这个提示词发给大语言模型(LLM)。

    5. 生成最终答案

    大模型根据参考资料生成答案,返回给用户。 用户只会看到类似这样的回答:“张三是某某部门的员工,负责XXX工作。”

    用户完全感知不到背后的检索、排序、提示词构建等过程,只觉得模型直接给出了正确答案。

    三、RAG 的卡点及优化技巧

    虽然 RAG 的核心流程看起来简单,但真正落地时有很多“坑”。下面介绍几个关键卡点和对应的优化技巧。

    1、数据清洗:多格式文档解析

    企业的原始数据往往不是干净的纯文本,可能包含:

    • PDF(排版复杂,有表格、图片、多栏)
    • 图片(需要 OCR 识别)
    • 表格(结构化的行列数据)

    卡点:PDF 解析尤其复杂,如果这一步没做好,后面的技术再好也没用——答案一开始就是错的。

    优化技巧:

    • 结合版面分析模型(识别标题、段落、表格、图片区域)
    • 使用 OCR 技术 提取图片中的文字
    • 针对不同格式(Word、PPT、HTML)采用不同解析器

    数据清洗是整个 RAG 系统的基础,必须足够重视。

    2、切分(Chunking)的粒度问题

    切分是影响 RAG 效果最关键的因素之一。

     

    优化技巧:

    • 保证每个块语义相对完整(比如一个段落、一个小节)
    • 信息颗粒度要刚好 —— 具体大小需要根据实际文档和场景反复测试
    • 可以按章节、段落、固定字数(如 500 字)灵活组合

    3、问题重写(Rewrite)

    用户提问往往很口语化、碎片化,比如直接问“张三是谁”。 这会导致向量检索时匹配不准。

    卡点:原始问题太短、太模糊,无法在知识库中精准定位。

    优化技巧:

    • 对用户问题进行自动重写,补全隐含信息
    • 例如:“张三是谁” → 重写为 “详细介绍张三的性别、年龄、家庭住址等情况”
    • 目标:让优化后的问题更适合向量检索,更贴合知识库中的内容

    4、混合检索(Hybrid Search)

    单纯用向量相似度检索有时会“意会”错,单纯用关键词检索又太死板。

     

    优化技巧:

    • 混合检索:两者一起用,再综合排序
    • 相当于“先查字典 + 再问朋友”,取长补短
    • 两个方法各有盲区,但它们的盲区刚好可以互补

    5、大模型基座选型

    即使前面检索到的资料完全正确,如果大模型本身不行:

    • 产生幻觉(编造答案)
    • 不遵循指令(不按给定的参考资料回答)
    • 不稳定或反应慢

    最终答案也是错误的。

    优化技巧:

    • 模型需要满足:低幻觉、稳定、能严格遵循指令
    • 优先选择开源模型(可部署到本地,数据更安全)
    • 模型基座是最后一道关卡,必须谨慎选择

    总结

    RAG 不是让 AI 变得更“聪明”,而是让 AI 在回答之前先找到对的资料,再基于对的资料生成答案。

    • 数据清洗是地基
    • 切分粒度决定检索精度
    • 问题重写优化入口
    • 混合检索兼顾精确与语义
    • 模型基座保证最终输出质量
    赞(0)
    未经允许不得转载:171主机测评 » RAG原理
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址