一、RAG 到底解决什么问题

RAG 是 Retrieval-Augmented Generation,也就是“检索增强生成”。

它解决的核心问题不是“让模型更聪明”,而是:

当模型本身不知道,或者不该只靠自己记忆回答时,怎样把外部知识准确接进来

最典型的场景包括:

  • 企业知识库问答
  • 产品文档问答
  • 课程资料辅助学习
  • 私有笔记总结
  • 法务、客服、售后类问答

这些场景有一个共同点:

  • 信息量大
  • 更新频繁
  • 很多内容不在模型训练数据里

只靠通用模型,很容易:

  • 答得不准
  • 答非所问
  • 一本正经地胡说

这就是 RAG 的价值所在。


二、先别把 RAG 想得太神秘

RAG 本质上可以拆成两段:

  1. 先从外部资料中找出相关内容
  2. 再把这些内容交给模型生成答案

也就是说,RAG 不是“另一个模型”,而是一套系统设计方法。

你可以把它理解成:

  • 检索负责“找资料”
  • 模型负责“读资料并组织答案”

如果检索错了,模型通常也答不好。
所以做 RAG 时,很多问题并不出在“生成”,而是出在“召回”。


三、一套最基础的 RAG 链路长什么样

对初学者来说,最重要的是先看清全流程。

3.1 典型链路

一个最常见的 RAG 系统,通常包含下面 8 个步骤:

  1. 收集文档
  2. 清洗文档
  3. 文档切块
  4. 生成 Embedding
  5. 存进向量库
  6. 用户提问并转成查询向量
  7. 检索 Top-K 相关片段
  8. 把片段和问题一起交给模型生成答案

如果你愿意再做得更稳一点,通常还会加上:

  1. 重排
  2. 结果评估
  3. 来源展示
  4. 无命中兜底

四、先学文档处理,再学检索

很多初学者一上来就研究向量数据库,其实更应该先把文档处理做好。

因为垃圾进,垃圾出。

4.1 文档清洗要做什么

常见清洗工作包括:

  • 去掉页眉页脚
  • 去掉无意义空行
  • 去掉重复内容
  • 处理表格、代码块、列表结构
  • 统一标题层级

如果你的原始文档本来就很乱,后面的向量检索往往也不会太理想。

4.2 为什么切块这么重要

切块是 RAG 的核心环节之一。

切得太大,会出现:

  • 无关信息太多
  • 主题混杂
  • 模型读取成本高

切得太小,会出现:

  • 上下文不完整
  • 检索到了碎片,但答不清楚

所以 RAG 的第一门基本功,往往不是调模型,而是学会“怎么切块”。

4.3 初学者怎么理解切块策略

最容易入门的思路有两种:

1. 按结构切

比如按:

  • 标题
  • 小节
  • 段落

这种方式更贴近人类阅读习惯。

2. 按长度切

比如:

  • 固定字符数
  • 固定 token 数
  • 带少量 overlap

这种方式更容易工程化,但要注意不要切得太死板。


五、Embedding 和向量数据库分别负责什么

5.1 Embedding 的作用

Embedding 的作用,是把一段文本表示成向量。

这样系统就可以计算:

  • 哪些文本更相似
  • 哪些问题和哪段资料更接近

所以 Embedding 负责的是“把语义变成可计算的数字表示”。

5.2 向量数据库的作用

向量数据库负责的是:

  • 存储向量
  • 建立索引
  • 做快速相似度检索

如果数据量很小,直接用内存或简单文件也能做实验。
但一旦数据量上来,向量库或带向量能力的数据库就很重要了。

5.3 初学者怎么选

如果你是个人学习或小项目,优先考虑:

  • FAISS
  • PostgreSQL + pgvector
  • Chroma 这类更容易起步的方案

如果是更大规模、更偏生产场景,再看:

  • Milvus
  • Qdrant
  • Weaviate

初学阶段最重要的不是选“最火”的,而是选“最容易看懂整条链路”的。


六、检索不等于回答,回答也不等于准确

很多人第一次做 RAG,会把所有注意力都放在最后回答上。

其实你应该拆开看三层:

  1. 有没有检索到相关内容
  2. 检索到的内容够不够回答问题
  3. 模型是否基于这些内容正确组织了回答

6.1 什么叫检索好

至少要满足:

  • 相关内容能被找出来
  • 无关内容不要太多
  • 检索结果覆盖关键事实

6.2 为什么有时候检索到了,结果还是差

常见原因有:

  • 检索片段太碎
  • 上下文顺序混乱
  • 模型提示词没约束好
  • 没有要求“基于资料回答”
  • 没有处理无命中场景

所以 RAG 的质量,永远是系统工程,不是只靠一个模型参数。


七、进阶一点:为什么很多系统还会加重排

当资料变多以后,单纯依赖第一次向量召回,结果不一定总是最优。

这时很多系统会再加一层“重排”:

  • 先粗召回一批候选片段
  • 再对候选片段重新排序
  • 最后把更相关的内容送给模型

它的价值在于:

  • 提高精度
  • 降低无关噪声
  • 让最终上下文更聚焦

对零基础来说,第一步不用急着上重排,但要先知道它为什么存在。


八、做 RAG 时应该重点评估什么

不要只问一句“这个回答像不像对的”。
至少要拆成下面几项来看:

8.1 召回是否正确

问题:

  • 该找到的内容找到了吗
  • 有没有明显漏召回

8.2 召回是否干净

问题:

  • 无关段落是不是太多
  • 噪声是否影响后续回答

8.3 最终回答是否忠实于资料

问题:

  • 是否引用了不存在的结论
  • 是否把资料里的意思说偏了

8.4 无命中时是否会胡说

一个成熟一点的 RAG 系统,应该敢于说:

  • 没找到相关资料
  • 当前知识库里没有足够依据

而不是强行编一个看起来顺的答案。


九、零基础最适合做的第一个 RAG 项目

我最推荐的第一个练手项目是:

9.1 个人资料问答助手

你可以准备一批自己的资料,比如:

  • 课程讲义
  • 学习笔记
  • 产品说明
  • 项目文档

然后做一个最小系统:

  1. 上传资料
  2. 切块并向量化
  3. 用户提问
  4. 检索相关内容
  5. 返回答案并附带来源

这个项目的好处是:

  • 目标清楚
  • 资料可控
  • 容易做效果对比

9.2 第一个版本别做太复杂

第一版只要做到这些就够了:

  • 文本资料导入
  • 基本切块
  • Top-K 检索
  • 基于资料回答

等这一版稳定后,再慢慢补:

  • 元数据过滤
  • 重排
  • 多轮对话
  • 多模态 RAG

十、初学者最容易犯的错

10.1 一上来就追求“全能”

比如:

  • 一次接 PDF、Word、图片、网页、音频
  • 一次上向量检索、关键词检索、重排、多轮记忆

这样很容易把自己绕晕。

第一版最重要的是把主链路跑通。

10.2 不存元数据

很多人只存文本和向量,不存:

  • 文档名
  • 标题
  • 页码
  • 标签
  • 来源链接

这样后面就很难做:

  • 来源展示
  • 条件过滤
  • 召回分析

10.3 不做无命中兜底

RAG 不是万能问答机。
不知道的时候,应该让系统明确说不知道。

10.4 只调模型,不调检索

如果检索本身就错了,再换模型通常也救不回来。


十一、学 RAG 时推荐看的资料

11.1 官方和一手资料

11.2 可配合阅读的站内文章

  • 《Embeddings和向量数据库》
  • 《Dify部署与应用》

十二、总结

RAG 最值得学的地方,不是它有多“高级”,而是它把 AI 应用开发里最关键的一件事摆到了台面上:

模型不能只靠记忆回答,系统要学会先找资料,再组织答案

真正把 RAG 做好,靠的不是某一个神奇技巧,而是整条链路都尽量清楚:

  • 文档是否干净
  • 切块是否合理
  • 向量表示是否合适
  • 检索是否准确
  • 回答是否忠实
  • 无命中时是否诚实

当你能从这几个角度看一个 RAG 系统时,你就已经不是“会搭个 Demo”,而是在真正理解它了。