第 03 章:RAG 基石:Embedding 与向量检索

第 03 章:RAG 基石:Embedding 与向量检索

核心观点:在 AI 的眼里,万物皆是坐标。RAG(检索增强生成)的本质,就是把用户的自然语言问题,映射到知识库的坐标系中,寻找最近的”邻居”。

1. 引言:计算机不懂中文,它只懂数学

你问 AI:”苹果怎么卖?”
在计算机底层,它根本不知道”苹果”是水果还是手机。
但如果你告诉它:”苹果”的坐标是 [0.8, 0.2],”香蕉”的坐标是 [0.85, 0.1],”卡车”的坐标是 [-0.5, 0.9]
它会立刻计算出:苹果和香蕉很近,离卡车很远。
这就是 Embedding(向量化) —— 它是 RAG 系统地基中的地基。

2. 核心概念:Embedding Space (向量空间)

2.1 把意义数字化

Embedding 就是把一段文字变成一串数字(向量)。
这串数字厉害的地方在于,它捕获了语义(Meaning)

💡 比喻:想象一个巨大的宇宙图书馆
这里的书不是按字母排列的,而是按内容相似度悬浮在空中的。

  • 讲”烹饪”的书聚成一个星云。
  • 讲”编程”的书聚成另一个星云。

Embedding 模型就是一个图书管理员,它读完一句话,就给它贴上一个 GPS 坐标 (x, y, z...)
语义星座


3. 技术解析:向量数据库与检索

当你有 100 万条文档时,如果每一条都去算距离(暴力计算),速度会慢到不可接受。
我们需要 ANN (Approximate Nearest Neighbor,近似最近邻搜索)
HNSW (Hierarchical Navigable Small World) 是目前的王者算法。

  • 原理:跳表(Skip List)+ 图结构。
  • 比喻:坐高铁。先做洲际高铁(顶层索引)快速到达区域,再换城际列车(中层),最后骑共享单车(底层)找到具体的门牌号。

HNSW 分层检索

3.2 文本切分 (Chunking) 的艺术

存入向量库前,必须把长文档切成小块(Chunk)。
切分策略直接决定 RAG 的生死。

  • Fixed Size: 机械地按 500 字一刀切。简单,但容易把一句话切断。
  • Recursive: 按段落、句子层级递归切分。推荐
  • Semantic: 按语义变化切分(高级)。

4. 工业实战:选型与避坑

4.1 Embedding 模型选型

不要只盯着 OpenAI 的 text-embedding-3。中文场景下,开源模型往往更强。
| 模型 | 厂商 | 特点 | 适用场景 |
| :— | :— | :— | :— |
| BGE-M3 | BAAI (智源) | 多语言、多功能、长文本。目前的六边形战士。支持 Dense/Sparse/ColBERT 三种检索。 | 中文首选,通用场景 |
| text-embedding-3-large | OpenAI | 方便,维度可变。但在中文特定领域微调能力不如 BGE。 | 快速验证,不想自己部署 |
| Jina-Embeddings-v3 | Jina AI | 针对长文本优化,支持 8k 长度。 | 需要处理长合同、长研报 |

4.2 常见坑点

  1. 切分太碎:导致上下文丢失。”他被捕了。” —— 谁被捕了?前面那块没切进来。
    • 解法:增加 Overlap (重叠窗口),比如切 500 字,重叠 50 字。
  2. Top-K 幻觉:强行召回了不相关的文档,LLM 只能一本正经地胡说八道。
    • 解法:设置 Similarity Threshold (相似度阈值),低于 0.6 的直接丢弃。

5. 总结与预告

  • 本章总结
    • Embedding 将语义转化为坐标。
    • HNSW 算法让我们能在亿级数据中毫秒级检索。
    • BGE-M3 是目前中文开源界的必看模型。
  • 下章预告
    虽然向量检索很强,但它经常”脸盲”,分不清”人咬狗”和”狗咬人”(因为词差不多)。下一章《RAG 进阶:重排序与混合检索》,我们将引入一位严厉的审核员——Rerank 模型。
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×