这是一个面向普通人的RAG教程。你不需要懂机器学习,也不需要懂数学,只要能理解图书馆,就能理解RAG。
第一章 什么是RAG
RAG全称:
text
Retrieval-Augmented Generation
检索增强生成
核心思想:
text
先找资料
再回答问题
而不是:
text
直接靠模型记忆回答
例如:
用户:
text
盗窃多少钱判刑?
RAG:
text
先查刑法库
↓
找到相关条文
↓
交给Qwen
↓
生成答案
第二章 图书馆角色对照表
| RAG组件 | 图书馆角色 | 职责 |
|---|---|---|
| 原始文档 | 图书 | 知识来源 |
| Chunk切分器 | 拆书员 | 把书拆成知识卡片 |
| Chunk | 知识卡片 | 最小知识单位 |
| Embedding | 分类专家 | 理解内容并确定语义位置 |
| 向量(Vector) | 地图坐标 | 知识卡片的位置 |
| FAISS | 馆藏索引系统 | 根据位置找书 |
| Query | 用户借书需求 | 用户的问题 |
| Q向量 | 用户当前位置 | 用户需求在地图上的位置 |
| Similarity Search | 测距系统 | 计算距离 |
| TopK | 第一轮候选书 | 最接近的50本 |
| Reranker | 资深馆员 | 重新排序 |
| Context | 顾问桌面 | 能放下的资料 |
| Qwen/LLM | 专家顾问 | 阅读资料并回答 |
| Prompt | 工作制度 | 规定顾问如何工作 |
第三章 入库流程(向量化流程)
这是正向流程。
即:
text
文档
↓
知识库
第一步 拆书
一本书:
text
中华人民共和国刑法
50万字。
不能直接处理。
于是:
text
拆书员
开始工作。
拆成:
text
Chunk1
盗窃罪
Chunk2
诈骗罪
Chunk3
故意伤害罪
Chunk4
抢劫罪
得到:
text
知识卡片
第二步 Embedding
分类专家开始工作。
读取:
text
Chunk1
盗窃公私财物,
数额较大的...
Embedding理解:
text
这是盗窃罪相关
然后生成:
text
C1
[0.23,-0.81,0.55,...]
这不是答案。
这是:
text
语义坐标
继续:
text
Chunk2
诈骗罪
↓
text
C2
[0.31,-0.66,0.42,...]
所有Chunk都完成。
第三步 保存到FAISS
FAISS保存:
text
向量
↓
Chunk
例如:
text
C1
↓
Chunk1
C2
↓
Chunk2
C3
↓
Chunk3
图书馆理解:
text
坐标
↓
书架位置
例如:
text
法律区A
第3层
第15本
至此:
text
知识库建立完成
第四章 什么是Embedding
很多人误解:
text
Embedding
=
压缩工具
错误。
Embedding真正作用:
text
理解语义
建立坐标
例如:
text
偷手机
窃取手机
非法占有他人手机
Embedding会认为:
text
意思接近
于是坐标靠近。
这才是Embedding最重要的能力。
第五章 查询流程(RAG回答流程)
这是反向流程。
即:
text
用户问题
↓
答案
第一步 用户提问
用户:
text
偷手机判几年?
第二步 Embedding生成Q
Embedding再次工作。
注意:
这次不是处理Chunk。
而是处理问题。
问题:
text
偷手机判几年?
↓
text
Q
[0.25,-0.80,0.57,...]
这个Q叫:
text
Query Vector
问题向量
图书馆理解:
text
用户站在地图上的位置
第三步 FAISS检索
FAISS收到:
text
Q
开始测距。
例如:
text
Q ↔ C1 = 0.95
Q ↔ C2 = 0.91
Q ↔ C3 = 0.42
Q ↔ C4 = 0.01
得到:
text
Top50
图书馆理解:
text
最接近的50本书
第四步 Reranker
Reranker开始工作。
FAISS返回:
text
盗窃罪量刑
盗窃罪历史沿革
盗窃罪立案标准
诈骗罪量刑
Reranker发现:
用户问:
text
判几年
重点应该是:
text
量刑
于是重新排序:
text
1 盗窃罪量刑
2 司法解释
3 立案标准
4 历史沿革
得到:
text
Top8
图书馆理解:
text
最值得给顾问看的8本书
第五步 Qwen回答
Qwen终于开始工作。
看到:
text
刑法264条
司法解释
量刑标准
然后总结:
text
根据刑法264条...
生成最终答案。
第六章 FAISS到底干什么
很多人误解:
text
FAISS懂法律
错误。
FAISS实际上只懂:
text
向量
它不知道:
text
盗窃罪
诈骗罪
Python
是什么意思。
它只知道:
text
Q
离谁最近
因此:
text
FAISS
=
仓库管理员
第七章 为什么知识明明在库里却回答不出来
这是RAG最常见问题。
情况1
text
Embedding理解错问题
例如:
text
偷手机
没有定位到:
text
盗窃罪区域
结果:
text
Q偏了
情况2
text
FAISS召回失败
正确Chunk没进Top50。
情况3
text
Reranker排序失败
正确答案排第35名。
最终只保留前8名。
情况4
text
Qwen理解失败
资料已经给了。
但模型能力不足。
第八章 谁最重要
很多人认为:
text
Qwen最重要
其实不一定。
法律库、技术文档库、企业知识库:
大约可以理解为:
text
Chunk切分
≈ 30%
Embedding
≈ 30%
Reranker
≈ 20%
LLM
≈ 20%
所以:
text
找不到资料
通常不是Qwen的问题。
而是:
text
Chunk
Embedding
FAISS
Reranker
中的某一步出了问题。
最终一句话总结
RAG其实就是一个图书馆:
text
拆书员
↓
把书拆成知识卡片
Embedding分类专家
↓
给知识卡片建立语义地图
FAISS管理员
↓
根据用户位置找附近的书
Reranker资深馆员
↓
从候选书中挑最相关的
Qwen专家顾问
↓
阅读这些书并回答用户
理解了这套图书馆模型,你就理解了90%以上的RAG工作原理。
以后遇到:
text
知识明明在库里
为什么答不出来?
不要先怀疑Qwen。
先检查:
text
问题
↓
Q向量
↓
FAISS Top50
↓
Reranker Top8
看看正确的那本书,究竟是在什么地方被弄丢了。