向量数据库入门
向量数据库(Vector Database)是专为存储、管理和检索高维向量数据而设计的数据库系统。随着人工智能和大语言模型(LLM)的快速发展,向量数据库已成为构建语义搜索、推荐系统和 RAG(检索增强生成)应用的核心基础设施。
什么是向量数据库
传统数据库 vs 向量数据库
传统关系型数据库(如 MySQL、PostgreSQL)擅长处理结构化数据,通过精确匹配(Exact Match)来查询数据。例如,查询 name = '张三' 会返回完全匹配的记录。
而向量数据库处理的是非结构化数据(文本、图像、音频、视频等),通过相似度搜索(Similarity Search)来查找数据。它不关注数据是否完全相同,而是关注数据之间的语义相似性。
| 特性 | 传统数据库 | 向量数据库 |
|---|---|---|
| 数据类型 | 结构化数据 | 非结构化数据 |
| 查询方式 | 精确匹配 | 相似度匹配 |
| 核心操作 | CRUD | 向量存储与检索 |
| 索引类型 | B+树、哈希 | HNSW、IVF、PQ |
| 典型应用 | 订单管理、用户系统 | 语义搜索、推荐系统 |
核心概念
1. 向量(Vector)
向量是将非结构化数据转换为数值表示的形式。通过嵌入模型(Embedding Model),一段文本、一张图片可以被转换为一个高维向量(通常是 384 维、768 维或 1536 维)。
文本: "猫在睡觉"
向量: [0.023, -0.156, 0.789, ..., 0.412] # 768维浮点数数组
2. 嵌入模型(Embedding Model)
嵌入模型是将原始数据编码为向量的神经网络模型。常见的嵌入模型包括:
- OpenAI text-embedding-ada-002/3: 1536 维,性能优秀
- sentence-transformers/all-MiniLM-L6-v2: 384 维,轻量高效
- BGE (BAAI General Embedding): 中文场景表现优异
- M3E (Moka Massive Mixed Embedding): 中文开源嵌入模型
3. 相似度度量(Similarity Metrics)
向量数据库通过数学方法计算向量之间的相似度:
- 余弦相似度(Cosine Similarity):衡量两个向量方向的相似程度,范围 [-1, 1]
- 欧几里得距离(Euclidean Distance):衡量向量空间的直线距离
- 点积(Dot Product):考虑向量长度和方向的综合度量
余弦相似度公式:
cos(θ) = (A · B) / (||A|| × ||B||)
其中 A · B 表示向量点积,||A|| 表示向量的模长。
为什么需要向量数据库
1. 语义搜索
传统关键词搜索无法理解查询的语义。例如搜索 "苹果价格",传统搜索可能返回包含 "苹果" 和 "价格" 关键词的页面,但无法区分是指水果还是手机。
向量数据库可以理解语义:
- "iPhone 多少钱" → 与 "苹果手机价格" 语义相似
- "怎么买 MacBook" → 与 "苹果电脑购买" 语义相似
2. RAG(检索增强生成)
大语言模型存在知识截止和幻觉问题。RAG 通过向量数据库存储领域知识,在生成回答前先检索相关知识,显著提升回答的准确性和时效性。
RAG 流程:
- 文档切分 → 生成向量 → 存入向量数据库
- 用户提问 → 生成查询向量
- 向量相似度搜索 → 获取相关文档片段
- 将检索结果作为上下文输入 LLM
- 生成准确、有依据的回答
3. 推荐系统
通过将用户行为和物品内容编码为向量,可以快速找到相似用户或相似物品,实现个性化推荐。
4. 图像/视频检索
将图像或视频帧转换为向量,实现以图搜图、内容去重等功能。
向量数据库的工作原理
数据流向
原始数据 → 嵌入模型 → 向量表示 → 向量数据库 → 索引构建
↓
查询请求 → 嵌入模型 → 查询向量 → 相似度搜索 → 返回结果
近似最近邻搜索(ANN)
当向量数量达到百万、亿级别时,精确计算每个向量与查询向量的相似度会非常慢(时间复杂度 O(n))。近似最近邻(Approximate Nearest Neighbor, ANN)算法通过牺牲少量精度换取显著的搜索速度提升。
常见的 ANN 算法:
| 算法 | 原理 | 特点 |
|---|---|---|
| HNSW | 分层可导航小世界图 | 搜索速度快,内存占用较高 |
| IVF | 倒排文件索引 | 平衡速度和精度,适合大规模数据 |
| PQ | 乘积量化 | 压缩存储,适合内存受限场景 |
| Flat | 暴力搜索 | 100% 精确,仅适合小规模数据 |
HNSW 算法详解
HNSW(Hierarchical Navigable Small World)是目前最流行的 ANN 算法之一。
核心思想:构建一个多层图结构,上层是稀疏的"高速公路",下层是密集的"街道"。搜索时从顶层开始快速定位大致区域,然后在下层精确搜索。
构建过程:
- 每个新节点随机决定插入到哪几层(概率逐层递减)
- 在每一层中,找到与新节点最接近的 M 个邻居并建立连接
- 层数越高,节点越稀疏,连接越长
搜索过程:
- 从顶层随机节点开始
- 在当前层贪婪搜索,找到距离查询点最近的节点
- 下降到下一层,以上一层的结果为起点继续搜索
- 在最底层返回 K 个最近邻
主流向量数据库对比
| 数据库 | 类型 | 特点 | 适用场景 |
|---|---|---|---|
| Pinecone | 全托管云服务 | 无需运维,自动扩缩容 | 快速上线、不想运维 |
| Milvus | 开源/云原生 | 分布式架构,十亿级向量 | 大规模生产环境 |
| Weaviate | 开源/托管 | GraphQL 接口,模块化设计 | 需要灵活查询 |
| Qdrant | 开源/托管 | Rust 编写,高性能 | 高性能要求 |
| Chroma | 开源 | 轻量易用,Python 优先 | 原型开发、小型项目 |
| pgvector | PostgreSQL 扩展 | SQL 兼容,事务支持 | 已有 PG 基础设施 |
| Redis | 内存数据库 | 低延迟,缓存友好 | 实时推荐、缓存场景 |
| Faiss | 算法库 | Meta 开源,GPU 加速 | 研究、自定义系统 |
选型建议
快速启动:Chroma(本地开发)→ Pinecone(生产部署)
大规模生产:Milvus(十亿级以上向量)
已有 PostgreSQL:pgvector(最小迁移成本)
高性能要求:Qdrant、Milvus
需要 GraphQL:Weaviate
学习路径
- 基础概念:理解向量、嵌入、相似度度量
- 算法原理:了解 ANN 算法(HNSW、IVF)
- 产品实践:选择 1-2 个数据库动手实践
- 应用场景:实现 RAG、语义搜索等完整项目