RAG 技术入门
一、RAG 到底解决什么问题
RAG 是 Retrieval-Augmented Generation,也就是“检索增强生成”。
它解决的核心问题不是“让模型更聪明”,而是:
当模型本身不知道,或者不该只靠自己记忆回答时,怎样把外部知识准确接进来
最典型的场景包括:
- 企业知识库问答
- 产品文档问答
- 课程资料辅助学习
- 私有笔记总结
- 法务、客服、售后类问答
这些场景有一个共同点:
- 信息量大
- 更新频繁
- 很多内容不在模型训练数据里
只靠通用模型,很容易:
- 答得不准
- 答非所问
- 一本正经地胡说
这就是 RAG 的价值所在。
二、先别把 RAG 想得太神秘
RAG 本质上可以拆成两段:
- 先从外部资料中找出相关内容
- 再把这些内容交给模型生成答案
也就是说,RAG 不是“另一个模型”,而是一套系统设计方法。
你可以把它理解成:
- 检索负责“找资料”
- 模型负责“读资料并组织答案”
如果检索错了,模型通常也答不好。
所以做 RAG 时,很多问题并不出在“生成”,而是出在“召回”。
三、一套最基础的 RAG 链路长什么样
对初学者来说,最重要的是先看清全流程。
3.1 典型链路
一个最常见的 RAG 系统,通常包含下面 8 个步骤:
- 收集文档
- 清洗文档
- 文档切块
- 生成 Embedding
- 存进向量库
- 用户提问并转成查询向量
- 检索 Top-K 相关片段
- 把片段和问题一起交给模型生成答案
如果你愿意再做得更稳一点,通常还会加上:
- 重排
- 结果评估
- 来源展示
- 无命中兜底
四、先学文档处理,再学检索
很多初学者一上来就研究向量数据库,其实更应该先把文档处理做好。
因为垃圾进,垃圾出。
4.1 文档清洗要做什么
常见清洗工作包括:
- 去掉页眉页脚
- 去掉无意义空行
- 去掉重复内容
- 处理表格、代码块、列表结构
- 统一标题层级
如果你的原始文档本来就很乱,后面的向量检索往往也不会太理想。
4.2 为什么切块这么重要
切块是 RAG 的核心环节之一。
切得太大,会出现:
- 无关信息太多
- 主题混杂
- 模型读取成本高
切得太小,会出现:
- 上下文不完整
- 检索到了碎片,但答不清楚
所以 RAG 的第一门基本功,往往不是调模型,而是学会“怎么切块”。
4.3 初学者怎么理解切块策略
最容易入门的思路有两种:
1. 按结构切
比如按:
- 标题
- 小节
- 段落
这种方式更贴近人类阅读习惯。
2. 按长度切
比如:
- 固定字符数
- 固定 token 数
- 带少量 overlap
这种方式更容易工程化,但要注意不要切得太死板。
五、Embedding 和向量数据库分别负责什么
5.1 Embedding 的作用
Embedding 的作用,是把一段文本表示成向量。
这样系统就可以计算:
- 哪些文本更相似
- 哪些问题和哪段资料更接近
所以 Embedding 负责的是“把语义变成可计算的数字表示”。
5.2 向量数据库的作用
向量数据库负责的是:
- 存储向量
- 建立索引
- 做快速相似度检索
如果数据量很小,直接用内存或简单文件也能做实验。
但一旦数据量上来,向量库或带向量能力的数据库就很重要了。
5.3 初学者怎么选
如果你是个人学习或小项目,优先考虑:
- FAISS
- PostgreSQL + pgvector
- Chroma 这类更容易起步的方案
如果是更大规模、更偏生产场景,再看:
- Milvus
- Qdrant
- Weaviate
初学阶段最重要的不是选“最火”的,而是选“最容易看懂整条链路”的。
六、检索不等于回答,回答也不等于准确
很多人第一次做 RAG,会把所有注意力都放在最后回答上。
其实你应该拆开看三层:
- 有没有检索到相关内容
- 检索到的内容够不够回答问题
- 模型是否基于这些内容正确组织了回答
6.1 什么叫检索好
至少要满足:
- 相关内容能被找出来
- 无关内容不要太多
- 检索结果覆盖关键事实
6.2 为什么有时候检索到了,结果还是差
常见原因有:
- 检索片段太碎
- 上下文顺序混乱
- 模型提示词没约束好
- 没有要求“基于资料回答”
- 没有处理无命中场景
所以 RAG 的质量,永远是系统工程,不是只靠一个模型参数。
七、进阶一点:为什么很多系统还会加重排
当资料变多以后,单纯依赖第一次向量召回,结果不一定总是最优。
这时很多系统会再加一层“重排”:
- 先粗召回一批候选片段
- 再对候选片段重新排序
- 最后把更相关的内容送给模型
它的价值在于:
- 提高精度
- 降低无关噪声
- 让最终上下文更聚焦
对零基础来说,第一步不用急着上重排,但要先知道它为什么存在。
八、做 RAG 时应该重点评估什么
不要只问一句“这个回答像不像对的”。
至少要拆成下面几项来看:
8.1 召回是否正确
问题:
- 该找到的内容找到了吗
- 有没有明显漏召回
8.2 召回是否干净
问题:
- 无关段落是不是太多
- 噪声是否影响后续回答
8.3 最终回答是否忠实于资料
问题:
- 是否引用了不存在的结论
- 是否把资料里的意思说偏了
8.4 无命中时是否会胡说
一个成熟一点的 RAG 系统,应该敢于说:
- 没找到相关资料
- 当前知识库里没有足够依据
而不是强行编一个看起来顺的答案。
九、零基础最适合做的第一个 RAG 项目
我最推荐的第一个练手项目是:
9.1 个人资料问答助手
你可以准备一批自己的资料,比如:
- 课程讲义
- 学习笔记
- 产品说明
- 项目文档
然后做一个最小系统:
- 上传资料
- 切块并向量化
- 用户提问
- 检索相关内容
- 返回答案并附带来源
这个项目的好处是:
- 目标清楚
- 资料可控
- 容易做效果对比
9.2 第一个版本别做太复杂
第一版只要做到这些就够了:
- 文本资料导入
- 基本切块
- Top-K 检索
- 基于资料回答
等这一版稳定后,再慢慢补:
- 元数据过滤
- 重排
- 多轮对话
- 多模态 RAG
十、初学者最容易犯的错
10.1 一上来就追求“全能”
比如:
- 一次接 PDF、Word、图片、网页、音频
- 一次上向量检索、关键词检索、重排、多轮记忆
这样很容易把自己绕晕。
第一版最重要的是把主链路跑通。
10.2 不存元数据
很多人只存文本和向量,不存:
- 文档名
- 标题
- 页码
- 标签
- 来源链接
这样后面就很难做:
- 来源展示
- 条件过滤
- 召回分析
10.3 不做无命中兜底
RAG 不是万能问答机。
不知道的时候,应该让系统明确说不知道。
10.4 只调模型,不调检索
如果检索本身就错了,再换模型通常也救不回来。
十一、学 RAG 时推荐看的资料
11.1 官方和一手资料
- OpenAI Embeddings Guide
https://platform.openai.com/docs/guides/embeddings - LangChain RAG Tutorial
https://python.langchain.com/docs/tutorials/rag/ - pgvector
https://github.com/pgvector/pgvector - Dify Knowledge Base
https://docs.dify.ai/en/guides/knowledge-base
11.2 可配合阅读的站内文章
- 《Embeddings和向量数据库》
- 《Dify部署与应用》
十二、总结
RAG 最值得学的地方,不是它有多“高级”,而是它把 AI 应用开发里最关键的一件事摆到了台面上:
模型不能只靠记忆回答,系统要学会先找资料,再组织答案
真正把 RAG 做好,靠的不是某一个神奇技巧,而是整条链路都尽量清楚:
- 文档是否干净
- 切块是否合理
- 向量表示是否合适
- 检索是否准确
- 回答是否忠实
- 无命中时是否诚实
当你能从这几个角度看一个 RAG 系统时,你就已经不是“会搭个 Demo”,而是在真正理解它了。


