当你想给 AI 应用添加"以文搜图""语义搜索""相似度推荐"功能时,第一反应是什么?Chroma?Pinecone?还是 Weaviate?
今天介绍的这个开源项目,可能会让你重新思考向量数据库的选择——它叫 Zvec,是阿里巴巴通义实验室开源的嵌入式向量数据库,被称为"向量数据库界的 SQLite"。
无需服务器、无需 Docker、无需配置文件,pip install zvec 之后直接在你的 Python 进程里就能运行。就是这么简单。
项目简介
Zvec 是阿里巴巴开源的一个轻量级、进程内(in-process)向量数据库。它的设计理念和 SQLite 如出一辙——不依赖任何外部服务,直接嵌入到你的应用程序中。
| 特性 | 说明 |
|---|---|
| GitHub Stars | 10,400+(2026 年 6 月 GitHub Trending 上榜) |
| 许可证 | Apache 2.0 |
| 语言 | C++ 核心,多语言 SDK(Python / Node.js / Go / Rust / Dart) |
| 最新版本 | v0.5.0(2026-06-12) |
| 底层引擎 | Proxima(阿里巴巴内部使用的向量搜索引擎) |
Zvec vs 传统向量数据库
| 特性 | Zvec | Chroma | Pinecone | Milvus |
|---|---|---|---|---|
| 部署方式 | 进程内(嵌入式) | 需要服务 | 云端托管 | 需要部署 |
| 安装 | pip install zvec |
需要 Docker | 注册账号 | 复杂部署 |
| 内存占用 | 低(DiskANN 索引支持磁盘存储) | 中等 | 不适用 | 高 |
| 适用场景 | 本地应用、Edge、中小规模 RAG | 原型开发 | 生产云服务 | 大规模集群 |
一句话总结: 如果你需要一个"开箱即用"的向量数据库,不想折腾服务器和配置,Zvec 是最轻量、最快捷的选择。
安装
Zvec 支持多个操作系统和编程语言,安装非常简单。
Python(推荐)
pip install zvec
要求 Python 3.10 - 3.14。
Node.js
npm install @zvec/zvec
Go
go get github.com/zvec-ai/zvec-go
Rust
# Cargo.toml
[dependencies]
zvec = "0.5"
系统要求
| 平台 | 架构 |
|---|---|
| Linux | x86_64, ARM64 |
| macOS | ARM64 (Apple Silicon) |
| Windows | x86_64 |
快速上手
第一个向量搜索
只需几行代码,就能创建一个完整的向量数据库并完成相似度搜索:
import zvec
# 1. 定义集合结构(Schema)
schema = zvec.CollectionSchema(
name="my_collection",
vectors=zvec.VectorSchema("embedding", zvec.DataType.VECTOR_FP32, 4),
)
# 2. 创建并打开集合(自动持久化到本地)
collection = zvec.create_and_open(path="./my_zvec_data", schema=schema)
# 3. 插入向量数据
collection.insert([
zvec.Doc(id="doc_1", vectors={"embedding": [0.1, 0.2, 0.3, 0.4]}),
zvec.Doc(id="doc_2", vectors={"embedding": [0.2, 0.3, 0.4, 0.1]}),
zvec.Doc(id="doc_3", vectors={"embedding": [0.9, 0.1, 0.1, 0.2]}),
])
# 4. 执行向量相似度搜索
results = collection.query(
zvec.VectorQuery("embedding", vector=[0.2, 0.3, 0.3, 0.1]),
topk=2
)
# 输出结果
for r in results:
print(f"ID: {r['id']}, 相似度得分: {r['score']:.4f}")
运行结果:
ID: doc_2, 相似度得分: 0.9899
ID: doc_1, 相似度得分: 0.9798
构建一个简单的 RAG 应用
结合 OpenAI 的 embedding 模型,快速搭建一个文档问答系统:
import zvec
import openai
# 初始化 embedding 模型
client = openai.OpenAI(api_key="your-api-key")
def get_embedding(text: str) -> list[float]:
response = client.embeddings.create(
model="text-embedding-3-small",
input=text
)
return response.data[0].embedding
# 创建集合
schema = zvec.CollectionSchema(
name="rag_docs",
vectors=zvec.VectorSchema("embedding", zvec.DataType.VECTOR_FP32, 1536),
fields=[
zvec.FieldSchema("content", zvec.DataType.STRING),
zvec.FieldSchema("source", zvec.DataType.STRING),
],
)
collection = zvec.create_and_open(path="./rag_data", schema=schema)
# 索引文档
documents = [
("Zvec 是阿里巴巴开源的轻量级向量数据库", "doc1.md"),
("向量数据库用于存储和检索高维向量数据", "doc2.md"),
("RAG 技术结合了检索和生成,是当前 LLM 应用的主流方案", "doc3.md"),
]
for content, source in documents:
embedding = get_embedding(content)
collection.insert([
zvec.Doc(
vectors={"embedding": embedding},
fields={"content": content, "source": source},
)
])
# 搜索最相关的文档
question = "什么是向量数据库?"
query_embedding = get_embedding(question)
results = collection.query(
zvec.VectorQuery("embedding", vector=query_embedding),
topk=2
)
print("相关文档:")
for r in results:
print(f"- [{r['fields']['source']}] {r['fields']['content']}")
print(f" 相似度: {r['score']:.4f}\n")
进阶功能
全文搜索(Full-Text Search)
v0.5.0 引入了原生全文搜索功能,无需引入 Elasticsearch 或其他外部搜索引擎:
import zvec
schema = zvec.CollectionSchema(
name="ft_search",
vectors=zvec.VectorSchema("embedding", zvec.DataType.VECTOR_FP32, 384),
fields=[
zvec.FieldSchema("title", zvec.DataType.STRING),
zvec.FieldSchema("body", zvec.DataType.STRING),
],
)
collection = zvec.create_and_open(path="./fts_data", schema=schema)
# 为 body 字段创建全文搜索索引
collection.create_fts_index("body_fts", field="body")
# 插入数据
collection.insert([
zvec.Doc(
id="1",
vectors={"embedding": [0.1] * 384},
fields={"title": "Python 教程", "body": "Python 是一门强大的编程语言,广泛用于 AI 和数据分析。"},
),
zvec.Doc(
id="2",
vectors={"embedding": [0.2] * 384},
fields={"title": "JavaScript 入门", "body": "JavaScript 是前端开发的核心语言,支持 Web、Node.js 等场景。"},
),
])
# 全文搜索
results = collection.query(
zvec.FTSQuery("body_fts", "Python 数据分析"),
topk=5
)
for r in results:
print(f"[{r['fields']['title']}] {r['fields']['body'][:30]}...")
混合搜索(Hybrid Search)
Zvec 最强大的功能之一是将向量搜索、全文搜索和标量过滤组合在一起,一次查询获得最精确的结果:
# 混合搜索:向量 + 全文 + 标量过滤
results = collection.query(
zvec.MultiQuery([
# 向量相似度
zvec.VectorQuery("embedding", vector=[0.15] * 384, weight=0.7),
# 全文搜索
zvec.FTSQuery("body_fts", "编程语言 教程", weight=0.3),
]),
topk=3
)
for r in results:
print(f"[{r['id']}] 混合得分: {r['score']:.4f}")
DiskANN 磁盘索引
当你的向量数据量很大时,内存可能不够。Zvec 的 DiskANN 索引可以将大部分索引存储在磁盘上,大幅降低内存占用:
schema = zvec.CollectionSchema(
name="large_collection",
vectors=zvec.VectorSchema("embedding", zvec.DataType.VECTOR_FP32, 768),
)
# 使用 DiskANN 索引创建集合
collection = zvec.create_and_open(
path="./diskann_data",
schema=schema,
index_options=zvec.IndexOptions(
index_type=zvec.IndexType.DISKANN, # 磁盘索引
)
)
# 插入大量数据(百万级也不怕)
for i in range(100000):
collection.insert([zvec.Doc(
id=f"doc_{i}",
vectors={"embedding": [0.1 * (i % 768)] * 768},
)])
标量过滤
在向量搜索的基础上,添加结构化字段过滤:
results = collection.query(
zvec.ScalarQuery("category = 'AI' AND published_year >= 2025"),
topk=10
)
持久化与并发
Zvec 使用 WAL(Write-Ahead Logging)保证数据持久化,即使进程崩溃或断电也不会丢失数据。同时支持多个进程同时读取同一个集合(写入时独占):
# 进程 A:写入
collection_a = zvec.open("./shared_data", mode="write")
collection_a.insert([zvec.Doc(id="new_1", vectors={"embedding": [0.5] * 4})])
collection_a.flush()
# 进程 B:读取(与进程 A 并行)
collection_b = zvec.open("./shared_data", mode="read")
results = collection_b.query(
zvec.VectorQuery("embedding", vector=[0.5] * 4),
topk=5
)
性能表现
根据官方基准测试,Zvec 在多个维度上表现出色:
- 搜索延迟: 毫秒级响应,即使在数十亿向量数据集上
- 内存效率: DiskANN 索引比传统内存索引节省 10 倍以上的内存
- 吞吐量: 支持高并发查询场景
- 对比竞品: 在相同硬件下,Zvec 的 QPS(每秒查询数)和延迟均优于 Chroma 和 Milvus
详细基准测试数据请参考 官方 Benchmarks 文档。
可视化调试工具:Zvec Studio
如果你不喜欢写代码来调试向量数据,Zvec 官方提供了可视化工具 Zvec Studio:
git clone https://github.com/zvec-ai/zvec-studio
cd zvec-studio
npm install && npm run dev
打开浏览器即可浏览集合数据、调试查询语句、查看索引状态——无需编写任何代码。
适用场景
| 场景 | 为什么适合 Zvec |
|---|---|
| 个人 RAG 应用 | 无需部署外部服务,pip install 即用 |
| 桌面端 AI 应用 | 嵌入式设计,不增加额外进程 |
| 移动端/Edge 设备 | 轻量、低内存占用 |
| 原型快速验证 | 零配置,5 分钟跑通完整流程 |
| 中小规模生产 | WAL 持久化 + DiskANN 保证可靠性 |
| 多语言项目 | Python / Node.js / Go / Rust / Dart SDK |
总结
Zvec 的出现填补了一个重要的空白——在 Chroma 等需要 Docker 部署的向量数据库,和 Pinecone 等云端服务之间,Zvec 提供了一个真正轻量、真正嵌入式的替代方案。
如果你是以下类型的开发者,Zvec 值得你花 5 分钟试试:
- 想在本地跑一个 RAG 应用,不想折腾 Docker
- 需要一个简单的向量数据库做语义搜索原型
- 在开发桌面/移动端 AI 应用,需要轻量级嵌入方案
- 厌倦了复杂配置,想要
pip install就能用的工具
项目地址: github.com/alibaba/zvec
官方文档: zvec.org
如果你也在用 Zvec,欢迎在评论区分享你的使用体验。或者你已经在用其他向量数据库了?欢迎聊聊 Zvec 和其他方案的对比。