跳到主要内容

向量数据库入门

向量数据库(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 流程:

  1. 文档切分 → 生成向量 → 存入向量数据库
  2. 用户提问 → 生成查询向量
  3. 向量相似度搜索 → 获取相关文档片段
  4. 将检索结果作为上下文输入 LLM
  5. 生成准确、有依据的回答

3. 推荐系统

通过将用户行为和物品内容编码为向量,可以快速找到相似用户或相似物品,实现个性化推荐。

4. 图像/视频检索

将图像或视频帧转换为向量,实现以图搜图、内容去重等功能。

向量数据库的工作原理

数据流向

原始数据 → 嵌入模型 → 向量表示 → 向量数据库 → 索引构建

查询请求 → 嵌入模型 → 查询向量 → 相似度搜索 → 返回结果

近似最近邻搜索(ANN)

当向量数量达到百万、亿级别时,精确计算每个向量与查询向量的相似度会非常慢(时间复杂度 O(n))。近似最近邻(Approximate Nearest Neighbor, ANN)算法通过牺牲少量精度换取显著的搜索速度提升。

常见的 ANN 算法:

算法原理特点
HNSW分层可导航小世界图搜索速度快,内存占用较高
IVF倒排文件索引平衡速度和精度,适合大规模数据
PQ乘积量化压缩存储,适合内存受限场景
Flat暴力搜索100% 精确,仅适合小规模数据

HNSW 算法详解

HNSW(Hierarchical Navigable Small World)是目前最流行的 ANN 算法之一。

核心思想:构建一个多层图结构,上层是稀疏的"高速公路",下层是密集的"街道"。搜索时从顶层开始快速定位大致区域,然后在下层精确搜索。

构建过程

  1. 每个新节点随机决定插入到哪几层(概率逐层递减)
  2. 在每一层中,找到与新节点最接近的 M 个邻居并建立连接
  3. 层数越高,节点越稀疏,连接越长

搜索过程

  1. 从顶层随机节点开始
  2. 在当前层贪婪搜索,找到距离查询点最近的节点
  3. 下降到下一层,以上一层的结果为起点继续搜索
  4. 在最底层返回 K 个最近邻

主流向量数据库对比

数据库类型特点适用场景
Pinecone全托管云服务无需运维,自动扩缩容快速上线、不想运维
Milvus开源/云原生分布式架构,十亿级向量大规模生产环境
Weaviate开源/托管GraphQL 接口,模块化设计需要灵活查询
Qdrant开源/托管Rust 编写,高性能高性能要求
Chroma开源轻量易用,Python 优先原型开发、小型项目
pgvectorPostgreSQL 扩展SQL 兼容,事务支持已有 PG 基础设施
Redis内存数据库低延迟,缓存友好实时推荐、缓存场景
Faiss算法库Meta 开源,GPU 加速研究、自定义系统

选型建议

快速启动:Chroma(本地开发)→ Pinecone(生产部署)

大规模生产:Milvus(十亿级以上向量)

已有 PostgreSQL:pgvector(最小迁移成本)

高性能要求:Qdrant、Milvus

需要 GraphQL:Weaviate

学习路径

  1. 基础概念:理解向量、嵌入、相似度度量
  2. 算法原理:了解 ANN 算法(HNSW、IVF)
  3. 产品实践:选择 1-2 个数据库动手实践
  4. 应用场景:实现 RAG、语义搜索等完整项目

下一步