检索增强 RAG
RAG(Retrieval-Augmented Generation,检索增强生成)= 先查资料,再让大模型照着资料回答。 相当于给 AI 配一场「开卷考试」:遇到问题先去你的知识库里翻,翻到原文再落笔作答。
前置:大语言模型 LLM——会调 API 即可,本教程沿用那边的 OpenAI 兼容 SDK 写法。 基线:Python 3.12+ · NumPy 2.5.4 · openai 3.35.1 · ChromaDB 1.5.9 · rank-bm25 0.2.2 · jieba 0.42.1 · LangChain 1.4.x(第 11 章:langchain-openai 1.7.x · langchain-chroma 1.1.0 · langchain-text-splitters 1.x) 进阶(第 8、9 章):MinerU 4.0.12(要求 Python
>=3.10,<3.15,须单独建 3.12 环境)· PaddleOCR 3.7.0 + PaddlePaddle 3.3.1 · pypdfium2 5.x
为什么需要 RAG
| 痛点 | RAG 怎么解 |
|---|---|
| 模型不知道你公司的内部资料 | 把资料检索出来放进提示词 |
| 模型的知识有截止日期 | 资料随时更新,答案跟着更新 |
| 答案无从追溯、像在瞎编 | 答案带出处,可逐句核对 |
| 每次问答都烧 token | 小模型 + 少量精准上下文,成本骤降 |
RAG 五步
| 步骤 | 干什么 | 对应章节 |
|---|---|---|
| 解析 Parsing | 原始文档(PDF / 扫描件 / 图片)变成可切文本 | 第 8 章 · 第 9 章 |
| 切分 Chunking | 长文档切成小段 | 第 3 章 |
| 向量化 Embedding | 每段文字变成一串数字 | 第 4 章 |
| 检索 Retrieval | 用问题找出最相关的几段 | 第 5 章 · 第 6 章 |
| 生成 Generation | 把资料塞进提示词,让模型作答 | 第 2 章 · 第 10 章 |
前七章的资料都是现成的
.md/.txt。真实项目里最难的往往是第一步「解析」——PDF 直接抽文本会乱序、表格会散架、扫描件根本抽不出来。第 8、9 章专门补这一环。
技术路线
| 章节 | 核心内容 |
|---|---|
| 1. RAG 是什么 | 原理、适用场景、常见误区 |
| 2. 环境搭建与第一个 RAG | 三步闭环跑通 |
| 3. 文档切分 | 切多大、怎么切、要不要重叠 |
| 4. 向量与嵌入 | 文字怎么变成数字,相似度怎么算 |
| 5. 向量数据库 | Chroma 落地、持久化、元数据过滤 |
| 6. 检索优化 | 混合检索、RRF 融合、重排、查询改写 |
| 7. 评估与常见问题 | 命中率、MRR、忠实度 |
| 8. 进阶:MinerU 解析 PDF | 四档质量 tier、命令行与 JSON、按标题切块 |
| 9. 进阶:PaddleOCR 处理扫描件 | 文字层判断、置信度过滤、阅读顺序、页眉清理 |
| 10. 综合练习 | 知识库问答助手 |
| 11. 上框架:LangChain 版 RAG | 组件对照、LCEL 链、v1 搬家要点、PDF / 扫描件接入 |
本教程前十章不引 LangChain:核心用 NumPy 手写,让你看清每一步到底在干什么;手搓完了,第 11 章用 LangChain 1.x 把同一个知识库助手重写一遍,对照着看框架省了哪步。 第 8、9 章的解析工具也只调命令行 / SDK,不引解析框架——保持「看得见每一步」的初衷。
从 1. RAG 是什么 开始吧!