DuckDB vector store
DuckDB ストレージ実装は、インプロセス分析データベースの DuckDB を使用した、組み込み型の高性能ベクトル検索ソリューションを提供します。VSS 拡張機能による HNSW インデックスを使用したベクトル類似度検索に対応し、外部サーバーを必要としない軽量で効率的なベクトルデータベースとして利用できます。
@mastra/duckdb パッケージに含まれ、メタデータフィルタリングに対応した効率的なベクトル類似度検索を提供します。
インストールインストールへの直接リンク
- npm
- pnpm
- Yarn
- Bun
npm install @mastra/duckdb@latest
pnpm add @mastra/duckdb@latest
yarn add @mastra/duckdb@latest
bun add @mastra/duckdb@latest
使用方法使用方法への直接リンク
import { DuckDBVector } from "@mastra/duckdb";
// Create a new vector store instance
const store = new DuckDBVector({
id: "duckdb-vector",
path: ":memory:", // or './vectors.duckdb' for file persistence
});
// Create an index
await store.createIndex({
indexName: "myCollection",
dimension: 1536,
metric: "cosine",
});
// Add vectors with metadata
const vectors = [[0.1, 0.2, ...], [0.3, 0.4, ...]];
const metadata = [
{ text: "first document", category: "A" },
{ text: "second document", category: "B" },
];
await store.upsert({
indexName: "myCollection",
vectors,
metadata,
});
// Query similar vectors
const queryVector = [0.1, 0.2, ...];
const results = await store.query({
indexName: "myCollection",
queryVector,
topK: 10,
filter: { category: "A" },
});
// Clean up
await store.close();
コンストラクターオプションコンストラクターオプションへの直接リンク
id:
path?:
dimensions?:
metric?:
メソッドメソッドへの直接リンク
createIndex()createindexへの直接リンク
高速な近似最近傍探索に使用できる HNSW インデックスを備えた、新しいベクトルコレクションを作成します。HNSW インデックスは省略可能です。
indexName:
dimension:
metric?:
upsert()upsertへの直接リンク
インデックス内のベクトルとそのメタデータを追加または更新します。
indexName:
vectors:
metadata?:
ids?:
query()queryへの直接リンク
省略可能なメタデータフィルターを使用して、類似するベクトルを検索します。
indexName:
queryVector:
topK?:
filter?:
includeVector?:
describeIndex()describeindexへの直接リンク
インデックスの情報を取得します。
indexName:
戻り値:
interface IndexStats {
dimension: number
count: number
metric: 'cosine' | 'euclidean' | 'dotproduct'
}
deleteIndex()deleteindexへの直接リンク
インデックスとそのすべてのデータを削除します。
indexName:
listIndexes()listindexesへの直接リンク
データベース内のすべてのベクトルインデックスを一覧表示します。
戻り値: Promise<string[]>
updateVector()updatevectorへの直接リンク
ID またはメタデータフィルターで単一のベクトルを更新します。id と filter のどちらか一方のみを指定する必要があります。
indexName:
id?:
filter?:
update:
update.vector?:
update.metadata?:
deleteVector()deletevectorへの直接リンク
ID を指定してインデックスから特定のベクトルエントリを削除します。
indexName:
id:
deleteVectors()deletevectorsへの直接リンク
ID またはメタデータフィルターで複数のベクトルを削除します。ids と filter のどちらか一方のみを指定する必要があります。
indexName:
ids?:
filter?:
close()closeへの直接リンク
データベース接続を閉じ、リソースを解放します。
await store.close()
レスポンス型レスポンス型への直接リンク
クエリ結果は次の形式で返されます。
interface QueryResult {
id: string
score: number
metadata: Record<string, any>
vector?: number[] // Only included if includeVector is true
}
フィルター演算子フィルター演算子への直接リンク
DuckDB vector store は、MongoDB に似た次のフィルター演算子に対応しています。
| カテゴリ | 演算子 |
|---|---|
| 比較 | $eq, $ne, $gt, $gte, $lt, $lte |
| 論理 | $and, $or, $not, $nor |
| 配列 | $in, $nin |
| 要素 | $exists |
| テキスト | $contains |
フィルターの例フィルターの例への直接リンク
// Allegato operators
const results = await store.query({
indexName: "docs",
queryVector: [...],
filter: {
$and: [
{ category: "electronics" },
{ price: { $gte: 100, $lte: 500 } },
],
},
});
// Nested field access
const results = await store.query({
indexName: "docs",
queryVector: [...],
filter: { "user.profile.tier": "premium" },
});
距離指標距離指標への直接リンク
| 指標 | 説明 | スコアの解釈 | 適した用途 |
|---|---|---|---|
cosine | コサイン類似度 | 0〜1(1 が最も類似) | テキスト埋め込み、正規化済みベクトル |
euclidean | L2 距離 | 0〜∞(0 が最も類似) | 画像埋め込み、空間データ |
dotproduct | 内積 | 大きいほど類似 | ベクトルの大きさが重要な場合 |
エラー処理エラー処理への直接リンク
store は障害の種類に応じたエラーをスローします。
try {
await store.query({
indexName: 'my-collection',
queryVector: queryVector,
})
} catch (error) {
if (error.message.includes('not found')) {
console.error('The specified index does not exist')
} else if (error.message.includes('Invalid identifier')) {
console.error('Index name contains invalid characters')
} else {
console.error('Vector store error:', error.message)
}
}
一般的なエラーには次のものがあります。
- インデックス名の形式が無効
- インデックスまたはテーブルが見つからない
- クエリベクトルとインデックスの次元数が一致しない
- 削除または更新操作で、フィルターまたは ID の配列が空
- 相互排他違反(
idとfilterの両方を指定)
ユースケースユースケースへの直接リンク
組み込みセマンティック検索組み込みセマンティック検索への直接リンク
完全にインプロセスで動作するセマンティック検索を備えた、オフライン対応の AI アプリケーションを構築します。
const store = new DuckDBVector({
id: 'offline-search',
path: './search.duckdb',
})
ローカル RAG パイプラインローカル RAG パイプラインへの直接リンク
クラウドのベクトルデータベースにデータを送信せず、機密ドキュメントをローカルで処理します。
const store = new DuckDBVector({
id: 'private-rag',
path: './confidential.duckdb',
dimensions: 1536,
})
開発とテスト開発とテストへの直接リンク
インフラストラクチャを用意せずに、ベクトル検索機能をすばやく試作します。
const store = new DuckDBVector({
id: 'dev-store',
path: ':memory:', // Fast in-memory for tests
})