RAG 系统真到生产才发现有 N 个坑,向量库选型不能只看 benchmark。
一、选型维度:别只看"快"
RAG 系统的向量库,真到生产才发现有 N 个坑。先定义 5 个选型维度:
| 维度 | 说明 |
|---|---|
| 规模天花板 | 百万级 vs 十亿级向量,架构天差地别 |
| 部署复杂度 | 单文件能用 vs 分布式集群运维 |
| 检索性能 | QPS、召回率、延迟 |
| 生态/过滤 | 是否支持标量过滤(metadata filter)、混合检索 |
| 上手成本 | 本地原型到生产的迁移平滑度 |
二、三者横评
| 项 | Chroma | Qdrant | Milvus |
|---|---|---|---|
| 定位 | 轻量、嵌入式、原型首选 | 单机/中小集群、Rust 高性能 | 分布式、十亿级、企业级 |
| 部署 | pip install 即跑,可持久化到本地 |
二进制/Docker,单节点强 | 分布式需 etcd/对象存储,重 |
| 语言 | Python | Rust | Go + C++ |
| 标量过滤 | ✅ metadata | ✅ 强(payload filter) | ✅ 最强 |
| 混合检索 | 基础 | ✅(稀疏+稠密) | ✅(BM25+向量) |
| 10 亿级 | ❌ | ⚠️ 吃力 | ✅ 原生 |
| 学习曲线 | 最平缓 | 平缓 | 陡峭 |
三、场景推荐
-
个人/学生/快速验证(< 100 万向量) :闭眼选 Chroma。三行代码起一个向量库,配 LangChain/LlamaIndex 丝滑。
-
中小团队生产(百万~数千万,要过滤和稳定) :Qdrant。Rust 单节点就能扛高 QPS,payload filter 写起来爽,Docker 一键起。
-
大厂/海量知识库(亿级、要水平扩展) :Milvus。分布式架构 + 多索引 + 混合检索,运维代价换来的是天花板。
四、决策树(照着走)
你的向量量多大?
├─ < 100 万,只想快点出 Demo ───────────► Chroma
├─ 100 万 ~ 5000 万,要过滤+性能 ────────► Qdrant
└─ > 5000 万 / 要水平扩展 / 企业级 ──────► Milvus
五、最小可运行示例
Chroma(原型最快):
python
import chromadb
client = chromadb.Client()
col = client.create_collection("docs")
col.add(ids=["1"], documents=["AWQ 用激活感知保护敏感权重"],
embeddings=[[0.1, 0.2, ...]])
print(col.query(query_embeddings=[[0.1, 0.2, ...]], n_results=1))
Qdrant(带过滤):
python
from qdrant_client import QdrantClient
c = QdrantClient(":memory:")
c.recreate_collection(...)
c.upsert("docs", points=[{"id":1,"vector":[...],
"payload":{"source":"awq"}}])
c.search("docs", query_vector=[...],
query_filter={"must":[{"key":"source","match":{"value":"awq"}}]})
Milvus(生产集群):
python
from pymilvus import Collection, FieldSchema, CollectionSchema, DataType
fields = [FieldSchema("id", DataType.INT64, is_primary=True),
FieldSchema("vec", DataType.FLOAT_VECTOR, dim=768)]
Collection("docs", CollectionSchema(fields)).insert([...])
六、踩坑提醒
-
别忘了标量过滤 :纯向量检索在真实 RAG 里几乎不够,必带
source/时间/权限过滤,选型时优先看这块能力。 -
召回率别只看 benchmark:用你自己的语料测,公开数据集和你的分布可能差很远。
-
Chroma 上生产要换后端 :默认内存版重启即丢,生产记得开
PersistentClient或上 Qdrant/Milvus。
没有"最好"的向量库,只有"最贴合你当前阶段"的。原型用 Chroma 跑通,量起来迁 Qdrant,再大到 Milvus------别一开始就被分布式吓退,也别临生产才发现单机扛不住。
往期回顾: