当你想给 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")

进阶功能

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]}...")

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 和其他方案的对比。