RAG基础
一、什么是 RAG
RAG 是什么
RAG(Retrieval-Augmented Generation),中文称为检索增强生成,是一种将**信息检索(Retrieval)与大语言模型生成(Generation)**结合的 AI 技术。
一句话理解:
RAG = 大语言模型 + 外部知识库。
它可以让大语言模型在回答问题前,先从知识库中查找相关内容,再结合检索结果生成更加准确、可靠的回答。
二、为什么需要 RAG
大语言模型虽然知识丰富,但存在以下问题:
- 知识有截止时间
- 无法直接访问企业私有数据
- 容易产生幻觉(Hallucination)
- 回答可能缺乏准确依据
例如:
用户 ↓ LLM ↓ 凭已有知识回答可能出现:
编造事实
加入 RAG 后:
用户 ↓ 知识库检索 ↓ 找到相关文档 ↓ LLM ↓ 根据文档回答因此:
RAG 可以显著提升回答的准确性和可信度。
三、RAG 的整体工作流程
RAG 通常分为两个阶段:
第一阶段:知识库构建(离线)
原始文档 ↓ 文档加载(Loader) ↓ 文本切分(Text Splitter) ↓ Embedding(向量化) ↓ Vector Store(向量数据库)这一阶段通常只需要执行一次。
第二阶段:用户提问(在线)
用户问题 ↓ Embedding ↓ 向量检索 ↓ 找到最相关文档 ↓ Prompt 拼接 ↓ LLM ↓ 最终答案四、RAG 的核心组件
整个 RAG 系统通常包含以下几个核心模块:
Document ↓ Loader ↓ Text Splitter ↓ Embedding Model ↓ Vector Database ↓ Retriever ↓ Prompt ↓ LLM五、Document(文档)
知识来源可以是:
- Word
- Markdown
- TXT
- HTML
- CSV
- Excel
- 数据库
- 网页
例如:
公司制度.pdf 产品说明.docx API文档.md 教材.pdf这些都是 RAG 的知识来源。
六、Document Loader(文档加载器)
作用:
负责读取各种格式文件。
例如:
PyPDFLoader TextLoader CSVLoader DirectoryLoader WebBaseLoader工作流程:
文件 ↓ Loader ↓ Document七、Text Splitter(文本切分)
为什么需要切分?
因为:
LLM 每次能够处理的 Token 数量有限。
因此:
需要把长文档拆分成多个小块(Chunk)。
例如:
一本书:
100000 Tokens切分后:
Chunk1 Chunk2 Chunk3 ... Chunk100常见切分方式:
CharacterTextSplitter
按字符长度切分。
RecursiveCharacterTextSplitter
LangChain 最常用。
特点:
- 优先按段落切分
- 再按句子切分
- 最后按字符切分
可以最大程度保持语义完整。
八、Chunk(文本块)
切分后的每一块称为:
Chunk例如:
Chunk 1 介绍 Docker -------- Chunk 2 介绍 Nginx -------- Chunk 3 介绍 LangChain每一个 Chunk 都会进行向量化。
九、Embedding(文本向量化)
Embedding 的作用:
将文本转换为高维向量。
例如:
Docker 很好 ↓ Embedding ↓ [0.23,0.87,0.56...]模型无法理解文字,
但可以理解数字向量。
常见 Embedding 模型
- OpenAI Embedding
- BGE
- Jina Embedding
- Qwen Embedding
- HuggingFace Embedding
- DashScope Embedding
十、Vector Database(向量数据库)
Embedding 后的数据:
需要保存。
于是:
使用向量数据库。
例如:
Chunk ↓ Embedding ↓ Vector Database常见向量数据库
- Chroma
- FAISS
- Milvus
- Qdrant
- Pinecone
- Weaviate
作用:
保存:
向量 + 原文 + Metadata十一、Metadata(元数据)
除了保存正文,
通常还保存:
文件名 页码 标题 作者 更新时间例如:
{"source":"Docker学习笔记.pdf","page":5}方便:
引用来源。
十二、Retriever(检索器)
Retriever:
负责:
根据用户问题,
查找最相似的 Chunk。
例如:
用户:
Docker 是什么?
Retriever:
向量相似度计算 ↓ Chunk17 Chunk18 Chunk21返回:
最相关内容。
十三、Similarity Search(相似度检索)
常见算法:
- Cosine Similarity(余弦相似度)
- Euclidean Distance(欧氏距离)
- Dot Product(点积)
作用:
计算:
问题 ↓ Embedding ↓ 向量 ↓ 和知识库所有向量比较 ↓ 找到最相近内容十四、Prompt 拼接
Retriever 找到内容后:
需要拼接 Prompt。
例如:
你是一位AI助手。 下面是参考资料: ...... 请根据资料回答用户问题: 问题: Docker 有什么作用?然后:
发送给 LLM。
十五、LLM 生成答案
LLM:
结合:
- 用户问题
- 检索内容
生成最终回答。
因此:
不是凭空回答。
而是:
依据知识库回答。
十六、RAG 与微调(Fine-tuning)的区别
| 对比项 | RAG | 微调(Fine-tuning) |
|---|---|---|
| 是否修改模型参数 | ❌ | ✅ |
| 更新知识成本 | 很低 | 很高 |
| 私有数据支持 | ✅ | ✅ |
| 开发速度 | 快 | 慢 |
| 数据更新 | 实时 | 重新训练 |
| 推荐场景 | 企业知识库 | 专业能力训练 |
一句话:
知识更新优先使用 RAG,能力提升优先使用 Fine-tuning。
十七、RAG 在 LangChain 中的基本流程
Loader ↓ Text Splitter ↓ Embedding ↓ Vector Store ↓ Retriever ↓ Prompt ↓ LLM ↓ Answer这是 LangChain 中最经典的 RAG Pipeline。
十八、RAG 在 AI 开发中的应用
典型应用:
- 企业知识库问答
- AI 客服
- 法律咨询
- 医疗文档问答
- 学校教学助手
- API 文档问答
- PDF 智能阅读
- Obsidian 知识库 AI
- AI 编程助手
- AI 搜索引擎
