RAG是什么

0 阅读12分钟

RAG 是 Retrieval-Augmented Generation,中文通常叫做 检索增强生成

RAG架构图.png

你可以把它理解成一句话:

先查资料,再让大模型回答。

它的核心目标,是解决大模型仅靠参数记忆回答问题时常见的几个问题:

  • 容易产生幻觉,胡编乱造
  • 不知道企业私有知识
  • 知识可能过时
  • 回答缺少依据和来源

一、RAG 到底是什么

传统大模型在回答问题时,主要依赖训练阶段学到的参数知识。

比如你问:

  • 公司的报销规则是什么?
  • 这个产品最新版本支持什么功能?
  • 这份合同里第 8 条写了什么?

如果模型没有见过这些内容,或者知识已经过时,就可能答错,甚至一本正经地胡说。

而 RAG 的基本流程是:

  1. 用户提出问题
  2. 系统先去知识库中检索相关资料
  3. 将检索结果和问题一起发送给大模型
  4. 大模型基于这些资料生成答案

所以,RAG 不是让模型“凭空回答”,而是让模型进行:

开卷考试


二、RAG 这个名字怎么理解

1. Retrieval(检索)

从外部知识库中查找与问题相关的信息。

知识库的来源可以包括:

  • PDF
  • Word
  • Excel
  • 数据库
  • 企业文档
  • FAQ
  • 网页
  • API 返回数据
  • 向量库

2. Augmented(增强)

把检索到的信息补充到提示词中,增强模型上下文。

也就是把“相关资料”喂给模型。

3. Generation(生成)

模型根据:

  • 用户问题
  • 检索结果
  • 提示规则

生成最终答案。


三、为什么需要 RAG

1. 解决幻觉问题

模型有时会“一本正经地胡说八道”。
RAG 给模型提供外部依据后,回答通常会更稳。

2. 接入私有知识

大模型并不知道你公司的内部制度、业务数据、知识文档。
RAG 可以把这些私有数据接进来。

3. 降低训练成本

很多场景并不需要重新微调模型,只需要把文档做成知识库即可。

4. 方便知识更新

当制度、产品文档、流程规则变化时,只需要更新知识库,不需要重新训练模型。


四、RAG 的标准流程

一个典型的 RAG 系统,通常可以拆成以下几个步骤。

第一步:准备知识

先把文档、数据库内容、网页内容等收集起来,例如:

  • 产品说明书
  • 接口文档
  • 售后问答
  • 公司制度
  • 合同模板

第二步:切块(Chunking)

由于大模型无法一次处理无限长文本,所以需要把文档切成较小的片段。

常见切法:

  • 每段 300~800 字
  • 按标题切分
  • 按段落切分
  • 按语义切分

这一环节非常关键。

切得太大:

  • 检索不精准

切得太小:

  • 上下文容易丢失

第三步:向量化(Embedding)

把每个文本块转换为向量。

你可以把向量理解成“文本语义坐标”。
这样即使两句话字面不同,只要语义相近,向量也会比较接近。

例如:

  • “怎么退款”
  • “退款流程是什么”

虽然字不同,但语义接近,所以向量距离也接近。

第四步:存储到向量库

把文本块及其向量存储起来。

常见向量库包括:

  • Milvus
  • pgvector
  • Elasticsearch
  • Weaviate
  • Pinecone
  • Chroma

第五步:用户提问并向量化

用户输入问题后,也会把问题转换成向量。

第六步:相似度检索

拿“问题向量”去向量库中检索最相近的文本块。

常见做法是返回:

  • Top 3
  • Top 5
  • Top 10

第七步:重排序(可选)

初步检索到的结果不一定最优,因此通常会再用 Reranker 做一次更精细的排序。

第八步:拼装 Prompt

把以下内容拼成提示词:

  • 用户问题
  • 检索出的知识片段
  • 回答规则

第九步:模型生成答案

大模型基于这些外部资料,生成最终回答。


五、RAG 的核心组成

一个完整的 RAG 系统,通常包含以下模块:

1. 数据源

知识内容的来源。

2. 文档解析

把 PDF、Word、网页等解析成可处理文本。

3. 文本切块

将长文拆成适合检索的片段。

4. Embedding 模型

负责把文本转换成向量。

5. 向量数据库

负责存储向量并执行相似度检索。

6. 检索器(Retriever)

根据问题找到相关片段。

7. 重排器(Reranker)

对召回结果做更精准排序。

8. 大语言模型(LLM)

负责最终生成自然语言答案。

9. Prompt 模板

约束模型如何使用检索内容进行回答。


六、RAG 和微调的区别

很多人容易把 RAGFine-tuning(微调) 混淆。

RAG

RAG 是把知识放在 模型外部

特点:

  • 更新快
  • 成本低
  • 适合知识问答
  • 易接入私有文档
  • 可以给出引用依据

微调

微调是把知识或行为“写进模型参数”中。

特点:

  • 更适合固定风格、固定任务
  • 训练成本更高
  • 更新知识不灵活
  • 不适合频繁变化的知识库

一句话区分

  • RAG:让模型查资料
  • 微调:让模型改脑子

实际项目中常见的分工是:

  • RAG 负责知识
  • 微调负责风格、格式和任务能力

七、RAG 的常见类型

1. Naive RAG(基础版)

最简单的做法:

  • 切块
  • 向量检索
  • 拼 Prompt
  • 模型生成

优点:

  • 简单
  • 上手快

缺点:

  • 效果一般
  • 容易检索不准

2. Advanced RAG(增强版)

在基础版上增加优化能力,例如:

  • 更合理的切块
  • 混合检索
  • 重排序
  • 查询改写
  • 多路召回
  • 去重与过滤

3. Agentic RAG(智能体式 RAG)

不仅仅检索一次,而是让系统自己判断:

  • 要不要检索
  • 检索什么
  • 是否继续检索
  • 是否调用数据库或 API
  • 是否进行多步推理

这类系统能力更强,但工程复杂度也更高。


八、RAG 中最关键的几个点

1. 切块质量

切块不合理,后面基本都白做。

例如,一条完整规则被切成两半,模型拿到不完整内容,就容易回答错误。

2. 检索质量

如果检索不到正确资料,模型再强也没用。

因此通常需要做:

  • 关键词检索 + 向量检索混合
  • Query 改写
  • 同义词扩展
  • Metadata 过滤

3. 上下文拼接质量

不是把所有结果一股脑塞进去就好。
要注意:

  • 去重
  • 控制长度
  • 保留最相关内容
  • 给模型明确使用规则

4. 提示词约束

例如明确要求模型:

  • 只能基于提供的资料回答
  • 如果资料不足,要明确说不知道
  • 优先引用原文
  • 不要编造

这能显著降低幻觉。


九、RAG 的常见优化手段

1. Hybrid Search(混合检索)

把以下两种方式结合起来:

  • 向量检索
  • 关键词检索

原因是:

  • 向量检索擅长找语义相近内容
  • 关键词检索擅长找精确术语

两者结合,通常效果更好。

2. Rerank(重排序)

先粗召回 20 条,再从中选出最相关的 3~5 条交给模型。

3. Query Rewrite(问题改写)

当用户问题很口语化时,先改写成更适合检索的形式。

例如:

原问题:

这个能退吗?

改写后:

该商品订单在什么条件下支持退款?

4. Metadata Filter(元数据过滤)

可以基于元数据做筛选,例如:

  • 文档类型
  • 时间范围
  • 部门
  • 产品线
  • 租户 ID

5. Parent-Child Chunk

  • 子块负责检索精度
  • 父块负责提供更完整上下文

这样既能检得准,又能保留完整语境。

6. 多路召回

从多个知识源同时检索,例如:

  • FAQ
  • 产品文档
  • 数据库
  • 工单历史

然后再进行融合。


十、RAG 的典型应用场景

企业知识库问答

例如:

  • 报销制度
  • 人事政策
  • 技术文档查询

客服机器人

例如:

  • 退款规则
  • 物流问题
  • 商品使用说明

法务 / 合同问答

例如:

  • 合同某条款内容
  • 违约责任说明

医疗 / 金融辅助问答

这类场景通常需要更强的审计和合规控制。

开发助手

例如:

  • 查询接口文档
  • 查询代码规范
  • 查询系统设计说明

数据问答

结合数据库、BI、SQL 生成能力,做智能分析问答。


十一、RAG 的优点

1. 知识可更新

文档更新即可,不必重训模型。

2. 更适合私域场景

尤其适合企业内部知识库。

3. 成本更低

相比微调,整体更轻量。

4. 可解释性更强

可以给出“答案依据了哪些文档片段”。

5. 上线速度快

知识库准备完成后,就可以快速验证效果。


十二、RAG 的缺点和难点

1. 检索不到就答不好

典型问题就是:

Garbage in, garbage out

2. 文档解析复杂

PDF、扫描件、表格、图片等都会影响效果。

3. 切块非常考验经验

目前并没有一套对所有场景都适用的万能方案。

4. 长文档容易丢上下文

尤其是跨段落、跨章节的问题。

5. 不能天然保证 100% 正确

RAG 只是降低幻觉,并不能彻底消灭错误。

6. 工程链路更复杂

不仅仅有模型,还需要:

  • 文档处理
  • 向量化
  • 检索
  • 排序
  • 缓存
  • 监控

十三、一个简单的 RAG 例子

假设你在做一个公司制度问答机器人。

用户提问:

年假最多可以连续请几天?

系统内部流程如下:

  1. 去员工手册中检索“年假、连续请假、假期规定”等相关内容

  2. 找到相关片段,例如:

    “员工年假原则上可连续申请,连续休假超过 5 个工作日需部门负责人审批……”

  3. 把这个片段和问题一起发给模型

  4. 模型生成答案:

    “根据提供的制度,年假可以连续申请;若连续休假超过 5 个工作日,需要部门负责人审批。”

这就是一个典型的 RAG 场景。


十四、RAG 和普通搜索的区别

普通搜索通常只是返回一组文档列表。

而 RAG 不一样,它是:

  1. 先搜索资料
  2. 再结合资料直接生成答案

所以它更像是:

带参考资料的智能回答


十五、RAG 和数据库查询的区别

数据库查询更适合返回 结构化数据

RAG 更适合处理:

  • 非结构化文档
  • 自然语言问答
  • 多文档综合归纳

很多企业系统会把两者结合起来:

  • 结构化数据 走 SQL / API
  • 非结构化知识 走 RAG

这通常才是更完整的企业智能问答方案。


十六、做 RAG 时的常见误区

1. 以为只要上向量库就行

不是。真正困难的地方通常在于:

  • 数据清洗
  • 切块
  • 召回
  • Prompt 设计

2. 以为模型越大效果一定越好

如果检索错了,再大的模型也会答偏。

3. 以为 RAG 可以替代所有微调

不能。
行为控制、格式稳定输出、特定任务能力等方面,微调依然很重要。

4. 以为知识库越大越好

知识越杂,噪音越多,检索效果反而可能变差。


十七、RAG 的本质

RAG 的本质,就是给大模型外挂一个“可检索的外部知识系统”,让它回答时不是只靠记忆,而是边查边答。

从系统层面看,一个完整的 RAG 通常分成两大部分:


十八、离线建库链路

这一部分负责把知识“准备好”。

流程

数据源 → 文档采集 → 文本解析清洗 → 切块 → 元数据抽取 → 向量化 → 入库

这里最重要的 4 个点

1. 文档解析

把 PDF、Word、网页、数据库内容转成可处理的文本。
如果是扫描件,还可能需要 OCR。

2. 切块

把长文本拆成适合检索的小块。

常见做法包括:

  • 固定字数切块
  • 按标题 / 段落切块
  • Parent-Child 切块
  • 滑动窗口切块

3. 元数据

每个 Chunk 最好附带元信息,例如:

  • 文档名
  • 来源
  • 时间
  • 部门
  • 产品线
  • 权限范围

这样检索时可以进行精确过滤。

4. 向量化与索引

同一份内容,通常会同时进入:

  • 向量库:负责语义检索
  • 关键词索引:负责 BM25 / 精准术语命中
  • 元数据库:负责业务属性和权限控制

十九、在线问答链路

这一部分负责真正回答用户问题。

流程

用户提问 → Query 预处理 → 检索路由 → 混合召回 → 重排序 → 上下文构建 → Prompt 组装 → LLM 生成 → 后处理 → 返回答案

二十、真正影响效果的关键点

完整架构有了,并不代表效果一定好。
RAG 最容易出问题的地方,通常集中在以下几个方面。

1. 切块不合理

  • 切太碎,语义断裂
  • 切太大,检索不准

2. 检索策略过于单一

如果只用向量检索,很容易漏掉专业术语。
因此很多项目会加入 BM25 混合召回

3. 没有重排序

粗召回回来的内容中常常有很多噪音,若不做 rerank,效果通常会明显下降。

4. 上下文拼接太乱

不是把 Top5 全塞进去就结束了。
还需要:

  • 控制长度
  • 去重
  • 提取关键片段
  • 保留上下文完整性

5. 没有权限隔离

在企业知识库中,这是非常关键的问题。
不同用户必须只能看到自己有权限访问的内容。

6. 没有评估体系

如果没有监控:

  • 召回是否正确
  • 答案是否有依据
  • 哪个环节出了问题

那么后续就很难持续优化。


二十一、一句话总结

RAG = 检索系统 + 外部知识 + 大模型生成。

它不是让模型“更会背”,而是让模型“更会查”。

所以,RAG 最核心的价值并不只是“接一个向量库”,而是:

让大模型在回答时拥有可用、可控、可更新、可追溯的外部知识能力。