什么是RAG,RAG是检索增强生成,意思是在大模型回答你问题之前先进行了一步操作。通过搜索当前已有的知识库,摘选出与你提出的问题最相关的一些片段。然后据此回复你的问题。但是实际上的操作是在此基础上,不断深耕,在每一个环节上抠细节,从达到完善的效果。简洁结论
RAG(Retrieval-Augmented Generation,检索增强生成)是一种让大模型“先检索资料,再基于资料回答”的方法。它可以缓解大模型知识过时、缺少私有知识、容易幻觉、更新成本高等问题。一个最小 RAG 系统通常包括文档加载、清洗、文本切分、Embedding、向量检索、重排序、Prompt 构造和 LLM 生成等环节。学习 RAG 时,可以先用本地 Markdown、TF-IDF、内存向量库和 Mock LLM 搭建简化系统,再逐步替换为真实组件。
来源:[资料 2]、[资料 3]
---
RAG 学习报告
一、RAG 的基本概念
RAG 的全称是 Retrieval-Augmented Generation,中文通常叫“检索增强生成”。它的核心思想是:大模型在回答问题时,不只依赖自身参数中的记忆,而是在回答前先从外部知识库中检索相关资料,再把这些资料作为上下文交给大模型生成答案。
可以简单理解为:
text
RAG = 知识库检索 + 上下文增强 + 大模型生成
与普通大模型问答相比,普通问答主要依赖模型自己的记忆,而 RAG 会先查资料,再基于资料回答。这相当于让大模型从“闭卷考试”变成“开卷考试”。
来源:[资料 3]
---
二、为什么需要 RAG
使用大模型时,常见问题包括:
1. 大模型有知识截止时间,无法天然知道最新信息。
2. 企业内部的私有文档、制度、产品手册、项目资料通常不在模型训练数据中。
3. 大模型可能产生幻觉,即编造看似合理但不准确的内容。
4. 如果每次知识变化都通过微调模型解决,成本较高,也不够灵活。
RAG 可以让模型基于指定知识库回答问题,从而降低幻觉,提高答案的可追溯性。同时,知识库可以随时更新,不需要频繁重新训练模型。
来源:[资料 3]
---
三、RAG 的整体流程
RAG 一般可以分为两个阶段:离线阶段和在线阶段。
1. 离线阶段:构建知识库
离线阶段的目标是把原始文档处理成系统可以检索的形式。根据资料中的最小 RAG 系统设计,一个典型流程包括:
text
数据源
↓
文档加载器
↓
文档解析与清洗
↓
文本切分器
↓
Embedding 服务
↓
向量数据库
这个阶段主要完成文档整理、切分、向量化和存储。
来源:[资料 2]
2. 在线阶段:检索与生成
在线阶段的目标是根据用户问题找到相关资料,并生成答案。典型流程包括:
text
用户问题
↓
检索服务
↓
Reranker
↓
Prompt 构造器
↓
LLM 生成服务
↓
CLI / API 应用
系统会先在向量数据库中查找最相似的文档片段,然后把这些资料和用户问题一起拼成 Prompt,交给大模型生成最终答案。
来源:[资料 2]、[资料 4]
---
四、文本切分的重要性
文本切分是 RAG 中非常关键的步骤,也就是把长文档切成一个个 chunk。
之所以需要切分,是因为原始文档可能很长,无法直接全部放进模型上下文中。而且如果整篇文档一起检索,系统只能知道“这篇文档相关”,却不知道具体哪一段最相关。
切成 chunk 后,检索会更加精准。例如用户问“文本切分有什么作用”,系统可以直接命中讲文本切分的段落,而不是返回整篇长文档。
来源:[资料 4]
常见的文本切分策略包括:
1. 固定长度切分,例如每 500 字切一段。
2. 按段落切分,尽量保持自然段完整。
3. 按标题层级切分,适合 Markdown、技术文档和产品手册。
4. 特殊内容特殊切分,例如代码按函数切,FAQ 按问题和答案切,法律条文按条款切。
来源:[资料 4]
此外,切分时还有一个重要参数叫 overlap,即相邻 chunk 之间保留一部分重叠内容。它可以避免关键信息刚好被切在两个 chunk 中间,导致检索和回答不完整。
来源:[资料 4]
---
五、Embedding 和向量数据库
RAG 的检索通常依赖 Embedding 和向量数据库。
Embedding 模型的作用是把文本转换成一串数字,也就是向量。例如一句话:
text
RAG 的核心流程是什么?
可能会被转换成类似这样的向量:
text
[0.12, -0.08, 0.31, 0.45, ...]
通过这种方式,文本可以被表示成可计算的形式。系统随后可以根据向量相似度,在向量数据库中找到与用户问题最相关的文档片段。
来源:[资料 4]
---
六、一个最小 RAG 系统的设计
如果用 Python 实现一个最小 RAG 系统,可以按照以下模块设计:
text
数据源
↓
文档加载器
↓
文档解析与清洗
↓
文本切分器
↓
Embedding 服务
↓
向量数据库
↓
检索服务
↓
Reranker
↓
Prompt 构造器
↓
LLM 生成服务
↓
CLI / API 应用
在学习项目中,可以先不接入真实大模型和真实向量数据库,而是使用简单方式模拟:
这样可以先完整理解 RAG 的主流程,后续再逐步替换成真实组件。
来源:[资料 2]
后续可以升级为:
- 使用 bge、m3e、text-embedding 等真实 Embedding 模型。
- 使用 FAISS、Chroma、Qdrant、Milvus 等向量数据库。
- 使用 Qwen、DeepSeek、OpenAI、Claude 等大模型。
---
七、RAG 的关键优化点
1. Chunk 大小
chunk 太小会导致语义不完整;chunk 太大则会带来更多噪声,导致检索不精准。
资料中给出的常见经验值是:
- 中文知识库:300 到 800 字一个 chunk。
- 英文文档:300 到 1000 tokens 一个 chunk。
chunk 参数通常需要结合实际数据调优。
来源:[资料 5]
2. Top-K 设置
Top-K 表示检索多少个片段给模型。资料中提到,系统可以调整粗召回和重排序数量,例如通过参数设置 retrieval-top-k 和 rerank-top-k。
来源:[资料 1]、[资料 5]
3. 评估与可观测性
生产级 RAG 需要持续评估和观测,否则很难知道系统为什么答错。
常见记录内容包括:
常见评估指标包括:
- Citation Accuracy:引用是否准确。
这些指标可以帮助判断问题出在文档解析、chunk 切分、Embedding、检索、重排、Prompt,还是模型生成环节。
来源:[资料 5]
---
八、学习项目的运行方式
资料中给出了一个最小 RAG 学习项目的运行方式。
在项目根目录可以执行:
bash
uv run simple-rag "RAG 的核心流程是什么?"
也可以使用 Python 模块方式运行:
bash
uv run python -m simple_rag.main "为什么 RAG 需要文本切分?"
如果想查看 Prompt,方便学习“上下文如何交给 LLM”,可以运行:
bash
uv run simple-rag "RAG 的核心流程是什么?" --show-prompt
还可以调整粗召回和重排序数量:
bash
uv run simple-rag "检索质量为什么重要?" --retrieval-top-k 8 --rerank-top-k 2
也可以调整文本切分大小:
bash
uv run simple-rag "chunk 太大有什么问题?" --chunk-size 200 --overlap 40
来源:[资料 1]
---
九、总结
通过本次学习可以看出,RAG 是一种把外部知识库和大模型结合起来的问答技术。它通过“先检索、再生成”的方式,使大模型能够基于指定资料回答问题,从而提升答案准确性、降低幻觉,并增强可追溯性。
一个完整的 RAG 系统不仅包括大模型生成,还包括文档处理、文本切分、Embedding、向量数据库、检索、重排序、Prompt 构造、评估与观测等多个环节。其中,文本切分、检索质量、Top-K 设置和评估指标都会直接影响最终回答效果。
对于初学者来说,可以先用本地 Markdown、TF-IDF、内存列表和 Mock LLM 搭建一个最小 RAG 系统,理解完整流程后,再逐步替换为真实 Embedding 模型、向量数据库和大模型服务。
来源:[资料 2]、[资料 3]、[资料 5]