Zvec:阿里巴巴开源的嵌入式向量数据库,毫秒级搜索十亿向量

摘要
Zvec 是阿里巴巴开源的进程内向量数据库,无需独立服务器,直接嵌入应用即可运行。它在阿里集团内部经过生产环境验证,支持稠密向量、稀疏向量、全文检索和混合查询,能在毫秒级别完成十亿规模的相似性搜索,同时保证数据持久化安全。
核心优势
极致性能,开箱即用
Zvec 的设计哲学是”简单即强大”——一行 pip install zvec 就能启动,不需要配置服务、不需要守护进程、不需要运维负担。相比 Milvus、Weaviate 等需要独立部署的向量数据库,Zvec 作为库直接嵌入进程,省去了网络 RTT,延迟极低。
多模式检索一体化
v0.5.0 版本将三种检索能力整合进一个 MultiQuery 接口:
- 稠密向量搜索:基于语义嵌入的相似度召回
- 稀疏向量搜索:保留词频信息的关键词敏感召回
- 全文检索(FTS):原生支持自然语言和结构化表达式,无需 Elasticsearch
三者可以在一次查询中融合,实现真正意义上的混合检索。
数据安全有保证
内置预写日志(WAL)机制,即使进程崩溃或断电,已写入的数据也不会丢失。多进程并发读,单进程独占写,并发模型清晰可预期。
跨平台多语言生态
| 语言 | 安装方式 |
|---|---|
| Python | pip install zvec |
| Node.js | npm install @zvec/zvec |
| Go | 官方 SDK zvec-go |
| Rust | 官方 SDK zvec-rust |
| Dart/Flutter | flutter pub add zvec |
支持 Linux(x86_64 / ARM64)、macOS(ARM64)、Windows(x86_64),以及 RISC-V。
面向人群
- AI 应用开发者:构建 RAG 管道、语义搜索、推荐系统时需要嵌入式向量存储
- 独立开发者 / 原型阶段:不想为向量检索引入额外运维复杂度
- 边缘计算 / 嵌入式场景:需要在笔记本、CLI 工具、边缘设备上运行向量检索
- Python / Node.js 全栈工程师:习惯”库”级别 API 而非”服务”级别集成
快速上手
Python — 五分钟跑通相似度搜索
pip install zvec
import zvec
# 定义 collection schema
schema = zvec.CollectionSchema(
name="articles",
vectors=zvec.VectorSchema("embedding", zvec.DataType.VECTOR_FP32, 768),
)
# 创建并打开 collection(本地文件存储)
collection = zvec.create_and_open(path="./my_zvec_db", schema=schema)
# 插入文档
collection.insert([
zvec.Doc(id="doc_1", vectors={"embedding": my_embedding_1}),
zvec.Doc(id="doc_2", vectors={"embedding": my_embedding_2}),
])
# 语义搜索 Top-10
results = collection.query(
zvec.VectorQuery("embedding", vector=query_embedding),
topk=10
)
print(results) # [{'id': 'doc_1', 'score': 0.95, ...}, ...]
Node.js
npm install @zvec/zvec
import { createAndOpen, CollectionSchema, VectorSchema, DataType, Doc, VectorQuery } from '@zvec/zvec'
const schema = new CollectionSchema('articles', [
new VectorSchema('embedding', DataType.VECTOR_FP32, 768)
])
const collection = await createAndOpen('./my_zvec_db', schema)
await collection.insert([new Doc('doc_1', { embedding: myEmbedding })])
const results = await collection.query(new VectorQuery('embedding', queryEmbedding), { topk: 10 })
进阶用法
混合检索:向量 + 全文 + 标量过滤
v0.5.0 新增的 MultiQuery 可以将多种检索信号合并排序,一次返回最相关的结果:
from zvec import MultiQuery, VectorQuery, TextQuery, Filter
results = collection.query(
MultiQuery([
VectorQuery("embedding", vector=query_embedding),
TextQuery("content", text="大语言模型 RAG"),
]),
filter=Filter("category", "==", "AI"),
topk=20
)
DiskANN 索引——大规模数据集低内存方案
对于千万级以上数据集,可以启用 DiskANN 磁盘索引,将大部分索引数据卸载到磁盘,显著降低内存占用:
schema = zvec.CollectionSchema(
name="large_dataset",
vectors=zvec.VectorSchema(
"embedding",
zvec.DataType.VECTOR_FP32,
768,
index_type=zvec.IndexType.DISK_ANN, # 磁盘索引
),
)
可视化调试:Zvec Studio
如果不想写代码调试数据,可以使用官方可视化工具 Zvec Studio,直接在 GUI 中浏览 collection、执行查询、分析索引状态。