AI アプリに「テキストで画像検索」「セマンティック検索」「類似度レコメンデーション」機能を追加したいとき、まず何を思い浮かべる?Chroma?Pinecone?それとも Weaviate?
今回紹介するオープンソースプロジェクトで、ベクトルデータベースの選び方を再考するかもしれない——その名は Zvec、Alibaba の Tongyi Lab がオープンソース化した組み込み型ベクトルデータベースで、「ベクトルデータベース界の SQLite」と呼ばれている。
サーバー不要、Docker 不要、設定ファイル不要。pip install zvec だけで、Python プロセス内で直接実行できる。本当にこれだけ。
プロジェクト概要
Zvec は Alibaba がオープンソース化した、軽量でプロセス内(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(Alibaba 内部で使われているベクトル検索エンジン) |
Zvec vs 従来のベクトルデータベース
| 特徴 | Zvec | Chroma | Pinecone | Milvus |
|---|---|---|---|---|
| デプロイ方法 | プロセス内(組み込み) | サービスが必要 | クラウドホスティング | デプロイが必要 |
| インストール | pip install zvec |
Docker が必要 | アカウント登録 | 複雑なデプロイ |
| メモリ使用量 | 低い(DiskANN インデックスがディスクストレージをサポート) | 中程度 | 該当なし | 高い |
| 用途 | ローカルアプリ、Edge、中小規模 RAG | プロトタイプ開発 | 本番クラウドサービス | 大規模クラスター |
一言でまとめると: 「すぐに使える」ベクトルデータベースが欲しくて、サーバーや設定に手間をかけたくないなら、Zvec が最も軽量で最速の選択肢だ。
インストール
Zvec は複数の OS とプログラミング言語に対応しており、インストールは非常に簡単。
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 = 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 モデルと組み合わせて、ドキュメント Q&A システムを素早く構築しよう:
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 は Alibaba がオープンソース化した軽量ベクトルデータベース", "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 の最も強力な機能の一つは、ベクトル検索・全文検索・スカラーフィルタを組み合わせて、1回のクエリで最も正確な結果を得られること:
# ハイブリッド検索:ベクトル + 全文 + スカラーフィルタ
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 の登場で重要な空白が埋まった——Docker デプロイが必要な Chroma などのベクトルデータベースと、Pinecone などのクラウドサービスの間に、Zvec は真に軽量で真に組み込み型の代替案を提供する。
以下のような開発者なら、Zvec は 5 分試してみる価値がある:
- ローカルで RAG アプリを動かしたいが、Docker に手間をかけたくない
- セマンティック検索のプロトタイプ用にシンプルなベクトルデータベースが欲しい
- デスクトップ/モバイル AI アプリを開発中で、軽量な組み込みソリューションが必要
- 複雑な設定にうんざりしていて、
pip installだけで使えるツールが欲しい
プロジェクト: github.com/alibaba/zvec
公式ドキュメント: zvec.org
Zvec を使っている方は、コメント欄で体験を共有してほしい。あるいは他のベクトルデータベースをすでに使っている?Zvec と他のソリューションの比較について、ぜひ語ろう。