用于 RAG 比较的向量存储
Source: Dev.to

选择合适的 vector store 能决定你的 RAG 应用的性能、成本和可扩展性。本综合对比涵盖了 2024‑2025 年最流行的选项。
什么是向量存储,为什么 RAG 需要它
向量存储是一种专门用于存储和查询高维嵌入向量的数据库。 在检索增强生成(RAG)系统中,向量存储充当知识骨干——它们实现语义相似度搜索,从而提供上下文相关的文档检索。
构建 RAG 流程时,文档会被模型(如 OpenAI 的 text-embedding-3-small 或开源的 BGE、E5)转换为嵌入(稠密数值向量)。若追求最前沿的多语言性能,Qwen3 嵌入和重排序模型 与 Ollama 本地部署的集成表现出色。对于多语言和多模态应用,跨模态嵌入 能将不同数据类型(文本、图像、音频)映射到统一的表示空间。这些嵌入捕获语义含义,使你能够依据意义而非精确关键词匹配来查找文档。
向量存储负责:
- 存储 数百万至数十亿的向量
- 索引 以实现快速近似最近邻(ANN)搜索
- 通过元数据过滤 缩小搜索范围
- CRUD 操作 维护知识库
检索到相关文档后,使用嵌入模型进行重排序 可以通过更复杂的相似度度量重新打分候选项,进一步提升检索质量。
快速对比表
| 向量存储 | 类型 | 最适合 | 部署方式 | 许可证 |
|---|---|---|---|---|
| Pinecone | 托管 | 生产环境,零运维 | 仅云 | 专有 |
| Chroma | 嵌入式/服务器 | 原型开发,简易使用 | 自托管 | Apache 2.0 |
| Weaviate | 服务器 | 混合搜索,GraphQL | 自托管/云 | BSD‑3 |
| Milvus | 服务器 | 大规模,企业级 | 自托管/云 | Apache 2.0 |
| Qdrant | 服务器 | 丰富过滤,Rust 性能 | 自托管/云 | Apache 2.0 |
| FAISS | 库 | 嵌入式,研究 | 内存中 | MIT |
| pgvector | 扩展 | 与 Postgres 集成 | 自托管 | PostgreSQL |
各向量存储详细解析
Pinecone — 托管领袖
Pinecone 是专为机器学习应用打造的全托管向量数据库。
from pinecone import Pinecone
pc = Pinecone(api_key="YOUR_API_KEY")
index = pc.Index("my-rag-index")
# Upsert vectors
index.upsert(vectors=[
{"id": "doc1", "values": embedding, "metadata": {"source": "wiki"}}
])
# Query with metadata filtering
results = index.query(
vector=query_embedding,
top_k=5,
filter={"source": {"$eq": "wiki"}}
)
优点
- 零基础设施管理
- 文档和 SDK 支持优秀
- 无服务器层,按查询付费
- 查询延迟低(约 50 ms P99)
缺点
- 仅云端(不支持自托管)
- 成本随使用量增长
- 供应商锁定风险
最适合:注重快速上线和运维简易性的团队。
Chroma — 开发者最爱
Chroma 自称是 “AI 原生开源嵌入数据库”。因其简洁性以及与 LangChain、LlamaIndex 的无缝集成而备受喜爱。
import chromadb
client = chromadb.Client()
collection = client.create_collection("my-docs")
# Add documents with auto‑embedding
collection.add(
documents=["Doc content here", "Another doc"],
metadatas=[{"source": "pdf"}, {"source": "web"}],
ids=["doc1", "doc2"]
)
# Query
results = collection.query(
query_texts=["semantic search query"],
n_results=5
)
优点
- 极简 API
- 内置嵌入支持
- 可嵌入(内存)或客户端‑服务器模式
- 对 LangChain/LlamaIndex 的一级集成
缺点
- 对超大数据集的可扩展性有限
- 企业级功能较少
- 嵌入模式下持久化可能有挑战
最适合:原型开发、小至中等规模项目,以及以 Python 为主的团队。
Weaviate — 混合搜索冠军
Weaviate 将向量搜索与关键词(BM25)搜索结合,并提供 GraphQL API。混合搜索能显著提升检索质量时,它表现尤为出色。
import weaviate
client = weaviate.Client("http://localhost:8080")
# Create schema with vectorizer
client.schema.create_class({
"class": "Document",
"vectorizer": "text2vec-openai",
"properties": [{"name": "content", "dataType": ["text"]}]
})
# Hybrid search (vector + keyword)
result = client.query.get("Document", ["content"]) \
.with_hybrid(query="RAG architecture", alpha=0.5) \
.with_limit(5) \
.do()
优点
- 原生混合搜索(alpha 参数平衡向量/关键词)
- 内置向量化模块
- GraphQL 查询语言
- 多租户支持
缺点
- 运维复杂度较高
- 学习曲线陡峭
- 资源消耗大
最适合:需要混合搜索和 GraphQL API 的生产级应用。
Milvus — 企业级规模
Milvus 旨在实现十亿级向量相似度搜索,是企业部署大规模需求的首选。
from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType
connections.connect("default", host="localhost", port="19530")
# Define schema
fields = [
FieldSchema(name="id", dtype=DataType.INT64, is_primary=True),
FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=1536)
]
schema = CollectionSchema(fields)
collection = Collection("documents", schema)
# Insert and search
collection.insert([[1, 2, 3], [embedding1, embedding2, embedding3]])
collection.search(
data=[query_embedding],
anns_field="embedding",
param={"metric_type": "COSINE", "params": {"nprobe": 10}},
limit=5
)
优点
- 在十亿向量规模下已被验证
- 多种索引类型(IVF、HNSW、DiskANN)
- 支持 GPU 加速
- 活跃的企业社区(Zilliz Cloud)
缺点
- 部署复杂(需要 etcd、MinIO 等)
- 对小项目而言功能过剩
- 运维负担较重
最适合:大规模企业部署以及具备 DevOps 能力的团队。
Qdrant — 性能与过滤兼备
Qdrant 使用 Rust 编写,提供卓越的性能和丰富的元数据过滤功能,正日益受到生产 RAG 项目的青睐。
from qdrant_client import QdrantClient
from qdrant_client.models import VectorParams, Distance, PointStruct
client = QdrantClient("localhost", port=6333)
# Create collection
client.create_collection(
collection_name="documents",
vectors_config=VectorParams(size=1536, distance=Distance.COSINE)
)
# Upsert with rich payload
client.upsert(
collection_name="documents",
points=[
PointStruct(id=1, vector=embedding, payload={"category": "news", "source": "api"}),
# Add more points as needed
]
)
# Search with filter
results = client.search(
collection_name="documents",
query_vector=query_embedding,
limit=5,
filter={"must": [{"key": "category", "match": {"value": "news"}}]}
)
优点
- Rust 核心带来低延迟和高吞吐
- 高级负载(元数据)过滤
- 支持平面和 HNSW 索引
- 易于自托管(Docker、二进制)
缺点
- 生态系统相对 Pinecone/Weaviate 较小
- 缺少内置向量化器(需外部嵌入步骤)
最适合:需要高速向量搜索并伴随复杂元数据过滤的应用。