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(推奨)

BASH
pip install zvec

Python 3.10 - 3.14 が必要。

Node.js

BASH
npm install @zvec/zvec

Go

BASH
go get github.com/zvec-ai/zvec-go

Rust

TOML
# Cargo.toml
[dependencies]
zvec = "0.5"

システム要件

プラットフォーム アーキテクチャ
Linux x86_64, ARM64
macOS ARM64 (Apple Silicon)
Windows x86_64

クイックスタート

初めてのベクトル検索

たった数行のコードで、ベクトルデータベースを作成し、類似度検索を完了できる:

PYTHON
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 システムを素早く構築しよう:

PYTHON
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")

高度な機能

v0.5.0 でネイティブ全文検索機能が導入された。Elasticsearch やその他の外部検索エンジンは不要:

PYTHON
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 の最も強力な機能の一つは、ベクトル検索・全文検索・スカラーフィルタを組み合わせて、1回のクエリで最も正確な結果を得られること:

PYTHON
# ハイブリッド検索:ベクトル + 全文 + スカラーフィルタ
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 インデックスは、インデックスの大部分をディスクに保存でき、メモリ使用量を大幅に削減する:

PYTHON
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},
    )])

スカラーフィルタ

ベクトル検索に、構造化フィールドのフィルタリングを追加:

PYTHON
results = collection.query(
    zvec.ScalarQuery("category = 'AI' AND published_year >= 2025"),
    topk=10
)

永続化と同時実行

Zvec は WAL(Write-Ahead Logging)を使用してデータの永続化を保証し、プロセスのクラッシュや停電時でもデータを失わない。また、複数のプロセスが同時に同じコレクションを読み取り可能(書き込み時は排他的):

PYTHON
# プロセス 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 を提供している:

BASH
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 と他のソリューションの比較について、ぜひ語ろう。