Skip to content

向量数据库概论

向量数据库是专门用于存储和检索高维向量的数据库,是 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轻量,适合本地开发本地 / 内存
pgvectorPostgreSQL 插件自部署(用现有 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)
# 返回:["苹果是一种水果", "香蕉也是水果"]

相关资源