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
(オプション):ハイブリッドインデックス用のindices
とvalues
配列を持つスパースベクトルオブジェクト。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データベースのURLUPSTASH_VECTOR_TOKEN
: あなたのUpstash Vector APIトークン