RAG 简介
RAG 是什么?
RAG(Retrieval-Augmented Generation) 在调用 LLM 之前,先从你自己的文档里找出相关片段,再把片段和问题一起交给模型。生成仍然是语言模型;「公司制度、产品 FAQ、昨天刚改的接口」则来自检索,而不是来自预训练记忆。
没有检索时,模型只能靠训练数据和提示词里塞进去的原文。上下文窗口再大,也不适合把整座知识库每次都贴进去;私有数据也不会出现在公开权重里。
为什么需要 RAG?
不适合硬上 RAG 的情况:
- 全文只有两三页,直接放进提示词更简单
- 你要的是写作风格或领域技能,而不是查事实 → 考虑微调(见 Hugging Face 微调)
- 毫秒级延迟、且语料几乎不变 → 有时缓存或规则引擎更合适
RAG、微调、长上下文
三者可以组合:用 RAG 提供事实,用微调固定输出格式,用长上下文装「这一轮检索到的块」。本课只把 RAG 链路讲清楚。
本课立场:原则,不是某一个框架
同一条流水线可以出现在:
学会原则之后,换框架只是换 Loader / Retriever 的类名;向量库选型(本地文件、跟 Postgres 走、独立服务)仍然是同一组问题。
核心词汇
索引(离线)和查询(在线)必须用同一个嵌入模型。换模型 = 整库重嵌。中文语料不要只看英文榜单,用你自己的 FAQ 测。
一条最小直觉
下面不用任何向量库,只说明「近邻」是什么。生产请用后面章节的 ANN 索引。
单位长度向量上,余弦与点积等价。嵌入模型(OpenAI 或 Ollama)通常已做归一化,以厂商文档为准。
下一步
- 流水线 — 把上表连成一张图
- 切块 — 块切坏了,后面全是噪声
- Embeddings — 云端或本地,都不需要 GPU