第8章:Embedding 与向量数据库——RAG 的技术底座
系列导读:本章讲 RAG 的"底层基础设施"。选对了 Embedding 模型和向量数据库,后面的优化事半功倍;选错了,上层做再多也救不回来。
一、Embedding 到底做了一件什么事?
Embedding(嵌入)做的事情本质上只有一件:
把一段文本,映射成一个固定长度的浮点数向量。
比如把 “今天天气很好” 转成:[0.023, -0.145, 0.778, …],长度比如 768 或 1024。
这个映射最关键的性质:语义相近的文本,向量在空间中距离相近。
度量方式通常用余弦相似度:
cos(A, B) = (A·B) / (||A|| × ||B||)
值接近 1 表示高度相似,接近 0 表示无关。
二、如何选择 Embedding 模型?
维度
- 384 维:轻量,存储省,适合简单场景
- 768-1024 维:最常用,精度够用
- 4096+ 维:高精度,适合专业检索
语言
- 纯中文:BGE 系列(推荐 v1.5 或 M3E 通用版)、智谱 embedding
- 中英混合:BGE 系列、GTE 系列
- 多语言:OpenAI text-embedding-3, E5 multilang, GTE multilang
评估方式
千万不要只看 MTEB 排行榜!
在自己的数据上跑模拟测试:
- 标注一组 “问题 | 期望答案文档” 的配对
- 用候选 Embedding 模型向量化问题和文档
- 计算 Top-K 召回率、NDCG
- 选实际效果最好的,不要迷信榜单第一
关键指标:
- Hit@K:正确结果在 Top-K 中的占比
- NDCG@K:不仅看命没命中,还看命中位置的排名质量
三、向量数据库:为什么不是普通的字典?
向量数据库和普通数据库的根本区别:
| 特性 | 普通数据库 | 向量数据库 |
|---|---|---|
| 查询方式 | 精确匹配 / 范围查询 | 近似最近邻搜索(ANN) |
| 索引结构 | B+ Tree / 哈希 | HNSW / IVF / DiskANN |
| 数据维度 | 低维(几十列) | 高维(几百到几千列) |
| 准确率 | 100% | 可接受的近似误差(99%+) |
| 速度目标 | 毫秒级精确查询 | 毫秒级近似搜索(百万级数据) |
在高维空间里,最近邻搜索的复杂度是 O(n)。百万级数据全量扫描太慢了,所以必须做近似搜索。
索引算法简述
| 算法 | 核心思想 | 适用场景 |
|---|---|---|
| HNSW | 构建多层图结构,像跳表一样逐层搜索 | 内存充足、追求最高召回率 |
| IVF-PQ | 先聚类分桶,粗过滤后精计算 | 磁盘存储、数据量极大 |
| DiskANN | HNSW 的磁盘友好版本,压缩存入 SSD | 十亿级数据 |
四、向量数据库选型矩阵
| 产品 | 类型 | 适用规模 | 特点 |
|---|---|---|---|
| Chroma | 开源嵌入式 | 开发/小项目 | 零配置上手,嵌入式 |
| Qdrant | 开源服务端 | 中小规模生产 | Rust 高性能,API 简洁 |
| Milvus/Zilliz | 开源 + 云 | 大规模/超大规模 | 云原生设计,字节/阿里在用 |
| Pinecone | 全托管云 | 不想运维 | 成本稍高,API 极简 |
| pgvector | PostgreSQL 插件 | 已有 PG 架构 | 无需引入新组件 |
| Elasticsearch | 搜索引擎 | ES 集群已有 | 向量检索是后来补的,性能一般 |
选型建议:
- 本地开发/原型阶段:Chroma(零配置)
- 生产中小规模:Qdrant / pgvector
- 大规模/云上:Milvus / Pinecone
- 已有搜索架构扩展:在现有系统(ES/MeiliSearch)外挂向量能力
五、Embedding + 向量库的完整链路
文档 → 切割 → Chunking → Embedding 模型 → 向量 [v1, v2, ...] → 向量数据库写入
↓
问题 → Embedding 模型(同一个!) → 查询向量 q → 向量库 ANN 搜索 → Top-K 结果 → Rerank → LLM
关键注意:离线存储和在线查询必须用同一个 Embedding 模型。不同模型映射的向量空间不同,交叉使用会导致检索完全失败。
六、生产环境中的高级话题
1. 动态更新
知识库内容更新了怎么办?
- 增量写入:新文档 chunk → embedding → 插入
- 删除:按 metadata 标识清理过期 chunk
- 替换:先删后插(需要事务或软删除策略)
2. 混合搜索
纯向量检索有局限(比如精确匹配产品型号时)。混合搜索 = 向量语义搜索 + 关键词全文搜索,两种结果融合:
最终得分 = α × 向量相似度 + β × BM25 分数
3. 多模态 Embedding
不仅有文本 embedding,还有图片 embedding、音频 embedding。同一语义空间内,“一段描述” 和 “一张图片” 可以互相检索。这就是多模态 RAG 的基础。
七、本章小结
- Embedding 是"语义压缩",让文本变成数学可度量
- 选模型:以自己业务数据上的召回测试结果为准,不是排行榜
- 向量库的核心是 ANN 近似搜索,不是精确匹配
- 选型矩阵覆盖从开发到生产的全链路需求
- 同一个模型贯穿离线和在线链路是基本原则
思考题
- 为什么在高维空间里,传统数据结构(B+树、哈希)对最近邻搜索失效?这和高维空间的几何特性有什么关系?
- 你设计一个 RAG 系统时,会怎么安排 Embedding 模型更新的灰度策略(避免在线查询和离线存储用的模型版本不一致)?