第8章:Embedding 与向量数据库——RAG 的技术底座

第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 排行榜!

在自己的数据上跑模拟测试

  1. 标注一组 “问题 | 期望答案文档” 的配对
  2. 用候选 Embedding 模型向量化问题和文档
  3. 计算 Top-K 召回率、NDCG
  4. 选实际效果最好的,不要迷信榜单第一

关键指标

  • 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 近似搜索,不是精确匹配
  • 选型矩阵覆盖从开发到生产的全链路需求
  • 同一个模型贯穿离线和在线链路是基本原则

思考题

  1. 为什么在高维空间里,传统数据结构(B+树、哈希)对最近邻搜索失效?这和高维空间的几何特性有什么关系?
  2. 你设计一个 RAG 系统时,会怎么安排 Embedding 模型更新的灰度策略(避免在线查询和离线存储用的模型版本不一致)?