主题
向量数据库概论
向量数据库是专门用于存储和检索高维向量的数据库,是 AI 应用(尤其是 RAG)的核心基础设施。
为什么需要向量数据库
传统数据库擅长"精确匹配",但 AI 应用需要"语义搜索":
传统数据库(关键词搜索):
查询:"手机"
结果:只包含"手机"的记录
缺失:包含"智能手机"、"mobile phone"的记录
向量数据库(语义搜索):
查询:"手机"
结果:包含"手机"、"智能手机"、"mobile phone"的记录
原因:它们的向量相似(语义相近)什么是向量数据库
普通数据库:
数据 → 存储 → 按 ID/条件查询
向量数据库:
文本/图像 → Embedding 模型 → 向量(如 1536 维) → 存储
查询 → Embedding 模型 → 向量 → 找最相似的向量 → 返回结果核心概念
Embedding(向量化)
把任何数据转换成固定长度的向量:
python
from sentence_transformers import SentenceTransformer
model = SentenceTransformer('all-MiniLM-L6-v2')
# 两段文本,语义相似,向量也相似
v1 = model.encode("我喜欢吃苹果")
v2 = model.encode("我爱吃苹果")
v3 = model.encode("今天天气真好")
# 计算相似度
from sklearn.metrics.pairwise import cosine_similarity
print(cosine_similarity([v1], [v2])) # 接近 1(很相似)
print(cosine_similarity([v1], [v3])) # 接近 0(不相似)向量相似度计算
| 方法 | 说明 |
|---|---|
| 余弦相似度(Cosine) | 最常用,忽略向量长度 |
| 欧氏距离(Euclidean) | 几何距离 |
| 点积(Dot Product) | 计算最快 |
ANN(近似最近邻搜索)
向量数据库的核心技术:不需要遍历所有向量,用索引加速:
暴力搜索:O(n) - 太慢
ANN 索引:O(log n) - 快,结果近似
常用算法:
- HNSW(Hierarchical Navigable Small World)- 最常用
- IVF(Inverted File Index)
- LSH(Locality Sensitive Hashing)主流向量数据库对比
| 数据库 | 特点 | 部署方式 |
|---|---|---|
| Milvus | 开源,功能全,性能好 | 自部署 / 云服务 |
| Pinecone | 全托管,易用 | 云服务 |
| Weaviate | 开源,支持多模态 | 自部署 / 云服务 |
| Qdrant | 开源,Rust 实现,快 | 自部署 / 云服务 |
| Chroma | 轻量,适合本地开发 | 本地 / 内存 |
| pgvector | PostgreSQL 插件 | 自部署(用现有 PG) |
选择建议
快速原型 → Chroma(无需部署)
生产环境,已有 PG → pgvector
生产环境,高性能 → Milvus / Qdrant
不想运维 → Pinecone(全托管)基本操作示例(以 Chroma 为例)
python
from chromadb import Client
# 1. 创建客户端
client = Client()
# 2. 创建集合
collection = client.create_collection("my_docs")
# 3. 插入数据
collection.add(
documents=["苹果是一种水果", "宝马是一款汽车", "香蕉也是水果"],
ids=["1", "2", "3"]
)
# 4. 搜索
results = collection.query(
query_texts=["吃什么水果好?"],
n_results=2
)
print(results)
# 返回:["苹果是一种水果", "香蕉也是水果"]