當你想給 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 和其他方案的對比。