Skip to Content

LibSQLVector Store

LibSQLストレージ実装は、ベクトル拡張を備えたSQLiteのフォークであるSQLite互換のベクトル検索LibSQLと、ベクトル拡張を備えたTursoを提供し、軽量で効率的なベクトルデータベースソリューションを提供します。 これは@mastra/coreパッケージの一部であり、メタデータフィルタリングを伴う効率的なベクトル類似性検索を提供します。

インストール

デフォルトのベクトルストアはコアパッケージに含まれています:

npm install @mastra/core

使用法

import { LibSQLVector } from "@mastra/core/vector/libsql"; // Create a new vector store instance const store = new LibSQLVector({ connectionUrl: process.env.DATABASE_URL, // Optional: for Turso cloud databases authToken: process.env.DATABASE_AUTH_TOKEN, }); // Create an index await store.createIndex({ indexName: "myCollection", dimension: 1536, }); // 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, // top K results filter: { category: "A" } // optional metadata filter });

コンストラクタオプション

connectionUrl:

string
LibSQLデータベースのURL。インメモリデータベースには':memory:'を使用し、ローカルファイルには'file:dbname.db'を使用、または'libsql://your-database.turso.io'のようなLibSQL互換の接続文字列を使用します。

authToken?:

string
Tursoクラウドデータベースの認証トークン

syncUrl?:

string
データベースレプリケーションのためのURL(Turso特有)

syncInterval?:

number
データベース同期のためのミリ秒単位の間隔(Turso特有)

メソッド

createIndex()

新しいベクトルコレクションを作成します。インデックス名は文字またはアンダースコアで始まり、文字、数字、アンダースコアのみを含むことができます。次元は正の整数でなければなりません。

indexName:

string
作成するインデックスの名前

dimension:

number
ベクトルの次元サイズ(埋め込みモデルに一致する必要があります)

metric?:

'cosine' | 'euclidean' | 'dotproduct'
= cosine
類似性検索のための距離メトリック。注意: 現在、LibSQLがサポートしているのはコサイン類似度のみです。

upsert()

インデックスにベクトルとそのメタデータを追加または更新します。すべてのベクトルが原子性を持って挿入されるようにトランザクションを使用します - もし挿入が失敗した場合、全体の操作はロールバックされます。

indexName:

string
挿入するインデックスの名前

vectors:

number[][]
埋め込みベクトルの配列

metadata?:

Record<string, any>[]
各ベクトルのメタデータ

ids?:

string[]
オプションのベクトルID(提供されない場合は自動生成)

query()

オプションのメタデータフィルタリングを使用して類似ベクトルを検索します。

indexName:

string
検索するインデックスの名前

queryVector:

number[]
類似ベクトルを見つけるためのクエリベクトル

topK?:

number
= 10
返す結果の数

filter?:

Filter
メタデータフィルタ

includeVector?:

boolean
= false
結果にベクトルデータを含めるかどうか

minScore?:

number
= 0
最小類似度スコアのしきい値

describeIndex()

インデックスに関する情報を取得します。

indexName:

string
説明するインデックスの名前

戻り値:

interface IndexStats { dimension: number; count: number; metric: "cosine" | "euclidean" | "dotproduct"; }

deleteIndex()

インデックスとそのすべてのデータを削除します。

indexName:

string
削除するインデックスの名前

listIndexes()

データベース内のすべてのベクトルインデックスを一覧表示します。

戻り値: Promise<string[]>

truncateIndex()

インデックスの構造を保持しながら、すべてのベクトルを削除します。

indexName:

string
切り詰めるインデックスの名前

updateIndexById()

IDによって特定のベクトルエントリを新しいベクトルデータおよび/またはメタデータで更新します。

indexName:

string
ベクトルを含むインデックスの名前

id:

string
更新するベクトルエントリのID

update:

object
ベクトルおよび/またはメタデータを含む更新データ

update.vector?:

number[]
更新する新しいベクトルデータ

update.metadata?:

Record<string, any>
更新する新しいメタデータ

deleteIndexById()

IDによってインデックスから特定のベクトルエントリを削除します。

indexName:

string
ベクトルを含むインデックスの名前

id:

string
削除するベクトルエントリのID

レスポンスタイプ

クエリ結果はこの形式で返されます:

interface QueryResult { id: string; score: number; metadata: Record<string, any>; vector?: number[]; // includeVector が true の場合のみ含まれます }

エラーハンドリング

ストアは、異なる失敗ケースに対して特定のエラーをスローします:

try { await store.query({ indexName: "my-collection", queryVector: queryVector, }); } catch (error) { // 特定のエラーケースを処理 if (error.message.includes("Invalid index name format")) { console.error( "インデックス名は文字/アンダースコアで始まり、英数字のみを含む必要があります", ); } else if (error.message.includes("Table not found")) { console.error("指定されたインデックスは存在しません"); } else { console.error("ベクトルストアエラー:", error.message); } }

一般的なエラーケースには以下が含まれます:

  • 無効なインデックス名の形式
  • 無効なベクトルの次元
  • テーブル/インデックスが見つからない
  • データベース接続の問題
  • アップサート中のトランザクションの失敗

関連