向量数据库工作原理:AI 搜索的基础设施
向量数据库是 RAG 系统的核心基础设施。它将文本、图像等非结构化数据转化为高维向量,并通过高效的近似最近邻搜索,实现毫秒级的语义检索。
什么是 Embedding?
Embedding(嵌入)是将高维稀疏的原始数据映射到低维稠密向量空间的过程。在 NLP 中,Embedding 模型将文本转换为固定维度的数值向量,语义相似的文本在向量空间中距离更近。
Embedding 示例:
"猫是一种可爱的动物" → [0.23, -0.87, 0.45, 0.12, ..., 0.67] (768维)
"小猫咪真萌" → [0.25, -0.85, 0.43, 0.14, ..., 0.65] (768维)
"今天天气不错" → [0.78, 0.12, -0.34, 0.56, ..., -0.21] (768维)
观察:语义相似的前两句向量更接近
距离(猫, 小猫) = 0.12 ← 近
距离(猫, 天气) = 0.89 ← 远
常用的 Embedding 模型包括 OpenAI text-embedding-3、BGE、E5、GTE 等,它们将文本映射到 384-3072 维的向量空间。
为什么需要向量数据库?
暴力搜索(Brute-Force)在百万级数据上仍然可用,但当数据规模达到亿级时,每次搜索都遍历全部向量是不可接受的。
暴力搜索的计算量:
1 亿向量 × 768 维 = 768 亿次浮点运算/查询
延迟:数秒到数十秒
向量数据库的目标:
用近似搜索(ANN)牺牲少量精度,换取 100-1000 倍的速度提升
延迟:毫秒级
核心 ANN 算法
1. HNSW(Hierarchical Navigable Small World)
HNSW 是目前最流行的 ANN 算法,基于可导航小世界图的层次化结构。
HNSW 的核心思想:
构建多层图结构,每层是一个"小世界网络"
层级结构(从上到下):
Layer 2: A ──── D(稀疏层,少量节点)
| /
Layer 1: A ── B ── D ── F(中等密度)
| | | |
Layer 0: A─B─C─D─E─F─G─H(完整层,所有节点)
搜索过程:
1. 从最高层的入口节点开始
2. 在当前层贪心搜索,找到最近的节点
3. 下降到下一层,以上一层的结果为起点继续搜索
4. 重复直到最底层,返回最终结果
HNSW 的优势:查询速度快(O(log n))、召回率高、支持动态插入。劣势:内存占用较大。
2. IVF(Inverted File Index)
IVF 通过聚类将向量空间划分为多个区域,搜索时只检查最近的几个区域。
IVF 的工作流程:
训练阶段(聚类):
1. 用 K-Means 将所有向量聚成 nlist 个簇
2. 记录每个簇的中心点
搜索阶段:
1. 计算查询向量与所有簇中心的距离
2. 选择最近的 nprobe 个簇
3. 只在这些簇内做暴力搜索
4. 返回全局最优结果
示例(nlist=100, nprobe=10):
搜索范围从 100% 缩小到 10%
速度提升约 10 倍
3. PQ(Product Quantization,乘积量化)
PQ 通过将高维向量分割成子向量并分别量化,大幅压缩存储空间。
PQ 压缩原理:
原始向量 (768维, float32) = 3072 字节
PQ 压缩(m=96 个子空间,每个子空间 8 维):
768 维 → 96 个子向量 → 96 个聚类中心的编号
存储:96 × 1 字节 = 96 字节
压缩比:3072 / 96 = 32 倍
索引类型选择指南
| 索引类型 | 内存占用 | 查询速度 | 召回率 | 适用场景 |
|---|---|---|---|---|
| Flat(暴力) | 高 | 最慢 | 100% | 小数据集、精确搜索 |
| IVF | 中 | 快 | 中高 | 中等规模、内存有限 |
| HNSW | 高 | 最快 | 高 | 大规模、低延迟要求 |
| IVF+PQ | 低 | 快 | 中 | 超大规模、内存受限 |
主流向量数据库对比
| 数据库 | 类型 | 特点 | 适用场景 |
|---|---|---|---|
| Milvus | 开源/分布式 | 支持万亿级向量、丰富索引类型 | 大规模生产环境 |
| Qdrant | 开源 | Rust 编写、过滤搜索强 | 需要标量过滤的场景 |
| Weaviate | 开源 | GraphQL API、多模态支持 | 需要结构化查询的场景 |
| Pinecone | 云托管 | 全托管、开箱即用 | 快速上手、不想运维 |
| Chroma | 开源 | 轻量级、Python 原生 | 原型开发、小规模应用 |
| pgvector | PG 扩展 | 基于 PostgreSQL | 已有 PG 基础设施 |
向量数据库的选型建议
- 原型阶段:Chroma 或 pgvector,快速验证想法
- 中小规模(千万级):Qdrant 或 Weaviate,功能丰富且易部署
- 大规模(亿级以上):Milvus,支持分布式部署和万亿级向量
- 不想运维:Pinecone,全托管云服务
- 已有 PostgreSQL:pgvector,零额外基础设施成本
总结
向量数据库是 AI 应用的核心基础设施。理解 Embedding 的原理、HNSW 和 IVF 等 ANN 算法的机制,以及主流数据库的特点,能帮助你为 RAG 系统选择最合适的向量存储方案。在实际项目中,选型应综合考虑数据规模、延迟要求、运维成本和功能需求。