一、先搞懂:RAG 到底是什么?
1. 官方名字
RAG = Retrieval-Augmented Generation检索增强生成, 核心逻辑是「让大模型先查 "专属资料",再基于资料回答问题」。
2. 小白通俗理解
普通大模型(Qwen / ChatGPT 等)就像一个只靠脑子里记忆答题的学生:
- 只记得训练时学过的 "旧知识"
- 不知道你的私人文档、公司手册、最新新闻、课程笔记这类它没学过的内容
- 没记住又被问,就开始瞎编(幻觉)
RAG 就是给这个学生配一本可随时翻阅的 "随身资料册" :你提问 → 模型先去资料册里找最相关的几段话 → 拿着找到的资料组织语言回答 → 不瞎编、只按资料说。
3. RAG 解决的三大问题
- 大模型不知道私有数据(你的笔记、文档、合同、课程)
- 大模型知识过时(训练截止后新发生的事)
- 大模型胡说八道(幻觉)(没见过也强行编答案)
二、RAG 三大核心知识点(按执行顺序讲)
1. 第一步:文本拆分(把长文档切成小段)
1.1 为什么要拆分?
- 大模型一次能 "读" 的文字长度有限(上下文窗口),读不下一整篇长文章 / 整本书
- 太长的文本,模型抓不住重点,检索也不精准
- 我们要做的:把一份长文档,切成很多短片段(chunk)
1.2 通俗叫法
"切书、切文档":把一本书 → 切成一段一段小文字块,每段几十~几百字。
1.3 小白常用拆分规则(不用复杂算法)
实际工具会自动做,你只要理解逻辑:
- 按标点 / 段落切:先按自然段分开,太长的段再继续切
- 固定长度切:比如每 256 字、512 字切一段
- 保留小段重叠:前后两段稍微重叠几个字,防止把一句话从中间切断,丢失语义
1.4 拆分后的结果
一份 学习笔记.md → 变成:
- 片段 1:RAG 是检索增强生成,用于解决大模型幻觉...
- 片段 2:文本拆分的目的是适配模型上下文长度...
- 片段 3:向量数据库用来存储文本对应的数字向量...
这些小段,就是后面要存进数据库、用来检索的最小单位。
2. 第二步:向量与向量数据库(FAISS / Milvus)
2.1 先懂:什么是 "向量"?
文字是字符串,计算机没法直接算 "两段文字像不像"。所以要把每一小段文本,转换成一串固定长度的数字 ------ 这串数字就叫向量(embedding / 词向量 / 文本向量)。
- 人话:把文字 "翻译" 成计算机能看懂、能计算距离的数字数组
- 例子(简化):
- "RAG 介绍" →
[0.12, 0.45, -0.23, ...](长度一般几百~几千位) - "苹果水果" →
[0.88, -0.11, 0.32, ...]
- "RAG 介绍" →
语义越接近的两段文字,它们对应的向量在空间里距离越近。
2.2 向量数据库是干嘛的?
普通数据库(MySQL)存的是:文字、数字、表格,不擅长做 "向量相似度计算"。
向量数据库 = 专门存向量、并能快速算 "哪个向量和我最像" 的数据库核心职责只有两件事:
- 存:把所有文本片段对应的向量存起来
- 查 :你给一个新向量(你的问题),它快速找出距离最近、语义最相似的若干个片段
2.3 FAISS vs Milvus(小白怎么选)
| 库 / 系统 | 定位 | 部署难度 | 适合谁 | 小白结论 |
|---|---|---|---|---|
| FAISS | Facebook 开源,轻量向量检索库 | 极低:本地 pip 安装,无服务、无端口、无配置 | 个人学习、本地 demo、小批量文本 | 入门首选,Windows 直接跑 |
| Milvus | 企业级分布式向量数据库 | 较高:要起服务、端口、后台守护 | 生产环境、大量数据、多用户并发 | 入门先不学,做项目上线再考虑 |
一句话:
- 你自己本地玩、做课程 demo、存几十 / 几百篇文档 → 用 FAISS
- 公司上线、海量数据、多人同时用 → 再上 Milvus
3. 第三步:相似性搜索("找最相关的资料")
3.1 什么是相似性搜索?
你提一个问题 → 把问题也转成向量 → 去向量库里找和这个向量距离最近的 N 个文本片段 → 这就是相似性搜索。
- 不按关键词精确匹配(不是百度式搜词)
- 按语义相似 匹配
- 你问:"RAG 怎么避免大模型瞎编"
- 能搜到:"检索增强可以为模型提供外部参考资料,降低幻觉概率"
- 哪怕文字不完全一样,只要意思接近,就能搜到
3.2 搜索到干嘛用?
把搜到的最相关的几段原文,拼在一起,当做 **"参考资料"**,和你的问题一起喂给大模型。
给模型的提示词大致长这样:
请根据下面的参考资料回答用户问题,只使用资料里的内容,不知道就说 "根据资料无法回答",不要编造。参考资料:
- xxxxxx
- xxxxxx用户问题:xxxxxx
这就是 "让模型查资料再回答" 的完整逻辑。
三、完整 RAG 流程(从头到尾顺一遍,小白必背)
以 "把你的 AI 自学笔记做成 RAG,让模型按笔记回答" 为例:
-
准备文档 把你的笔记、文章、PDF 转成纯文本:
自学笔记.txt -
文本拆分用工具把长文本切成几百字左右的小片段
-
**向量化(embedding)**用一个 "向量模型",把每一段文字 → 转换成向量
-
存入向量库 把 "文本片段 + 对应向量" 一起存进 FAISS(本地)
-
用户提问比如:"LoRA 微调为什么不用从头训练大模型?"
-
问题向量化把这个问题也转成向量
-
相似性搜索 FAISS 找出笔记中语义最接近的 2~3 个片段
-
拼接提示词把问题 + 搜到的片段,一起发给大模型(Ollama 里的 Qwen 等)
-
模型生成答案 模型只基于你提供的笔记内容回答,不会瞎编、不会用外部过时知识
四、小白本地 Windows 极简工具链(无 Anaconda、纯 pip、本地运行)
和前面学的 Ollama、Windows 环境完全对齐,不用云、不用复杂服务:
- 文档加载 / 文本拆分:
langchain(封装好拆分函数,不用自己写) - 向量数据库:
faiss-cpu(CPU 版,Windows 直接 pip) - 向量模型:通用开源 embedding 模型(本地跑)
- 大模型:Ollama + Qwen2:0.5b(之前已经装过)
安装命令(CMD 里直接运行):
pip install langchain langchain-community faiss-cpu -i https://pypi.tuna.tsinghua.edu.cn/simple
这套组合,就是目前最适合小白入门 RAG 的本地方案。
五、核心名词一句话总结(方便记忆)
- RAG:让大模型先检索外部资料,再生成答案,解决幻觉和私有知识问题
- 文本拆分:把长文档切成小段,适配模型长度、提高检索精度
- 向量:文本转换成的一串数字,用来表示语义、计算相似程度
- 向量数据库:专门存向量、快速做相似查找的数据库
- FAISS :轻量本地向量库,小白 RAG 入门标配
- Milvus:企业级向量数据库,生产使用,入门先放一放
- 相似性搜索:根据问题语义,找出库里最相关的文本片段
- 核心逻辑:查资料 → 给模型看资料 → 模型按资料回答
六、小白避坑 3 条
- 不要一上来用 Milvus:入门先用 FAISS,本地一键跑通,别被部署劝退
- 片段不要切太长 / 太短:太长搜不准,太短信息碎,一般 128~512 字区间最常用
- RAG≠微调 :
- LoRA 微调:改模型参数,给模型 "记到脑子里"
- RAG:不改模型,只给模型 "翻书看",不训练、速度快、适合频繁更新的资料
整体知识点速记版(可直接背)
- RAG = 让大模型查资料再回答,解决幻觉、私有知识、知识过时。
- 第一步文本拆分:长文档切小段,方便检索和模型阅读。
- 第二步向量数据库:把文字转成数字向量存起来,FAISS 适合本地小白,Milvus 适合企业生产。
- 第三步相似性搜索:用问题向量找最相似的文本片段,拼给模型做参考。
- 整套流程:文档→切分→向量化→存 FAISS→提问→向量化问题→搜相似片段→模型按片段回答。