Skip to Content

Upstash Vector Store

UpstashVectorクラスはUpstash Vectorを使用してベクトル検索を提供します。これは、メタデータフィルタリング機能とハイブリッド検索サポートを備えたベクトル類似性検索を提供するサーバーレスベクトルデータベースサービスです。

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

url:

string
Upstash Vectorデータベース URL

token:

string
Upstash Vector APIトークン

メソッド

createIndex()

注意: このメソッドは、インデックスが自動的に作成されるため、Upstashでは何も実行しません。

indexName:

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

dimension:

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

metric?:

'cosine' | 'euclidean' | 'dotproduct'
= cosine
類似性検索のための距離メトリック

upsert()

indexName:

string
アップサートするインデックスの名前

vectors:

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

sparseVectors?:

{ indices: number[], values: number[] }[]
ハイブリッド検索用のスパースベクトルの配列。各スパースベクトルは、一致するindicesとvalues配列を持つ必要があります。

metadata?:

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

ids?:

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

query()

indexName:

string
クエリするインデックスの名前

queryVector:

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

sparseVector?:

{ indices: number[], values: number[] }
ハイブリッド検索用のオプションのスパースベクトル。一致するindicesとvalues配列を持つ必要があります。

topK?:

number
= 10
返す結果の数

filter?:

Record<string, any>
クエリのメタデータフィルター

includeVector?:

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

fusionAlgorithm?:

FusionAlgorithm
ハイブリッド検索でデンス検索とスパース検索の結果を組み合わせるために使用されるアルゴリズム(例:RRF - Reciprocal Rank Fusion)

queryMode?:

QueryMode
検索モード:デンスのみの場合は'DENSE'、スパースのみの場合は'SPARSE'、組み合わせ検索の場合は'HYBRID'

listIndexes()

インデックス名(名前空間)の配列を文字列として返します。

describeIndex()

indexName:

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

戻り値:

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

deleteIndex()

indexName:

string
削除するインデックス(名前空間)の名前

updateVector()

indexName:

string
更新するインデックスの名前

id:

string
更新するアイテムのID

update:

object
ベクトル、スパースベクトル、および/またはメタデータを含む更新オブジェクト

updateオブジェクトには以下のプロパティを含めることができます:

  • vector(オプション):新しいデンスベクトルを表す数値の配列。
  • sparseVector(オプション):ハイブリッドインデックス用のindicesvalues配列を持つスパースベクトルオブジェクト。
  • metadata(オプション):メタデータのキーと値のペアのレコード。

deleteVector()

indexName:

string
アイテムを削除するインデックスの名前

id:

string
削除するアイテムのID

指定されたインデックスからIDによってアイテムの削除を試行します。削除に失敗した場合はエラーメッセージをログに記録します。

ハイブリッドベクトル検索

Upstash Vectorは、セマンティック検索(密ベクトル)とキーワードベース検索(疎ベクトル)を組み合わせたハイブリッド検索をサポートし、関連性と精度を向上させます。

基本的なハイブリッド使用法

import { UpstashVector } from '@mastra/upstash'; const vectorStore = new UpstashVector({ url: process.env.UPSTASH_VECTOR_URL, token: process.env.UPSTASH_VECTOR_TOKEN }); // 密ベクトルと疎ベクトルの両方のコンポーネントでベクトルをアップサート const denseVectors = [[0.1, 0.2, 0.3], [0.4, 0.5, 0.6]]; const sparseVectors = [ { indices: [1, 5, 10], values: [0.8, 0.6, 0.4] }, { indices: [2, 6, 11], values: [0.7, 0.5, 0.3] } ]; await vectorStore.upsert({ indexName: 'hybrid-index', vectors: denseVectors, sparseVectors: sparseVectors, metadata: [{ title: 'Document 1' }, { title: 'Document 2' }] }); // ハイブリッド検索でクエリ const results = await vectorStore.query({ indexName: 'hybrid-index', queryVector: [0.1, 0.2, 0.3], sparseVector: { indices: [1, 5], values: [0.9, 0.7] }, topK: 10 });

高度なハイブリッド検索オプション

import { FusionAlgorithm, QueryMode } from '@upstash/vector'; // 特定の融合アルゴリズムでクエリ const fusionResults = await vectorStore.query({ indexName: 'hybrid-index', queryVector: [0.1, 0.2, 0.3], sparseVector: { indices: [1, 5], values: [0.9, 0.7] }, fusionAlgorithm: FusionAlgorithm.RRF, topK: 10 }); // 密ベクトルのみの検索 const denseResults = await vectorStore.query({ indexName: 'hybrid-index', queryVector: [0.1, 0.2, 0.3], queryMode: QueryMode.DENSE, topK: 10 }); // 疎ベクトルのみの検索 const sparseResults = await vectorStore.query({ indexName: 'hybrid-index', queryVector: [0.1, 0.2, 0.3], // インデックス構造のために依然として必要 sparseVector: { indices: [1, 5], values: [0.9, 0.7] }, queryMode: QueryMode.SPARSE, topK: 10 });

ハイブリッドベクトルの更新

// 密ベクトルと疎ベクトルの両方のコンポーネントを更新 await vectorStore.updateVector({ indexName: 'hybrid-index', id: 'vector-id', update: { vector: [0.2, 0.3, 0.4], sparseVector: { indices: [2, 7, 12], values: [0.9, 0.8, 0.6] }, metadata: { title: 'Updated Document' } } });

レスポンスタイプ

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

interface QueryResult { id: string; score: number; metadata: Record<string, any>; vector?: number[]; // Only included if includeVector is true }

エラー処理

ストアは捕捉可能な型付きエラーをスローします:

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); // Additional error context } }

環境変数

必要な環境変数:

  • UPSTASH_VECTOR_URL: あなたのUpstash VectorデータベースのURL
  • UPSTASH_VECTOR_TOKEN: あなたのUpstash Vector APIトークン

関連