Turbopuffer Vector Store
TurbopufferVector クラスは、RAG アプリケーション向けに最適化された高性能ベクターデータベースである Turbopuffer を使用したベクター検索を提供します。Turbopuffer は、高度なフィルタリング機能と効率的なストレージ管理を備えた高速なベクター類似検索を提供します。
コンストラクタオプション
apiKey:
string
Turbopufferで認証するためのAPIキー。
baseUrl?:
string
= https://api.turbopuffer.com
Turbopuffer APIのベースURL。
connectTimeout?:
number
= 10000
接続を確立するためのタイムアウト(ミリ秒)。NodeとDenoでのみ適用されます。
connectionIdleTimeout?:
number
= 60000
ソケットのアイドルタイムアウト(ミリ秒)。NodeとDenoでのみ適用されます。
warmConnections?:
number
= 0
新しいクライアントを作成する際に最初に開く接続の数。
compression?:
boolean
= true
リクエストを圧縮し、圧縮されたレスポンスを受け入れるかどうか。
schemaConfigForIndex?:
function
インデックス名を受け取り、そのインデックスの設定オブジェクトを返すコールバック関数。これにより、インデックスごとに明示的なスキーマを定義できます。
メソッド
createIndex()
indexName:
string
作成するインデックスの名前
dimension:
number
ベクトルの次元(埋め込みモデルに一致する必要があります)
metric?:
'cosine' | 'euclidean' | 'dotproduct'
= cosine
類似性検索のための距離メトリック
upsert()
vectors:
number[][]
埋め込みベクトルの配列
metadata?:
Record<string, any>[]
各ベクトルのメタデータ
ids?:
string[]
オプションのベクトルID(指定されない場合は自動生成)
query()
indexName:
string
クエリを実行するインデックスの名前
queryVector:
number[]
類似ベクトルを見つけるためのクエリベクトル
topK?:
number
= 10
返す結果の数
filter?:
Record<string, any>
クエリのメタデータフィルター
includeVector?:
boolean
= false
結果にベクトルを含めるかどうか
listIndexes()
文字列としてインデックス名の配列を返します。
describeIndex()
indexName:
string
説明するインデックスの名前
返される内容:
interface IndexStats {
dimension: number;
count: number;
metric: "cosine" | "euclidean" | "dotproduct";
}
deleteIndex()
indexName:
string
削除するインデックスの名前
応答タイプ
クエリ結果はこの形式で返されます:
interface QueryResult {
id: string;
score: number;
metadata: Record<string, any>;
vector?: number[]; // Only included if includeVector is true
}
スキーマ構成
schemaConfigForIndex
オプションを使用すると、異なるインデックスに対して明示的なスキーマを定義できます:
schemaConfigForIndex: (indexName: string) => {
// Mastraのデフォルトの埋め込みモデルとメモリメッセージのインデックス:
if (indexName === "memory_messages_384") {
return {
dimensions: 384,
schema: {
thread_id: {
type: "string",
filterable: true,
},
},
};
} else {
throw new Error(`TODO: add schema for index: ${indexName}`);
}
};
エラーハンドリング
このストアは、キャッチ可能な型付きエラーをスローします:
try {
await store.query({
indexName: "index_name",
queryVector: queryVector,
});
} catch (error) {
if (error instanceof VectorStoreError) {
console.log(error.code); // 'connection_failed' | 'invalid_dimension' | etc
console.log(error.details); // 追加のエラーコンテキスト
}
}