メインコンテンツまでスキップ

Momento Vector Index APIを使う

Momento Vector Index(MVI)は、AIを活用したアプリケーションで使用するベクトルデータをリアルタイムで保存・検索するために設計された、スケーラブルで開発者に優しいベクトルインデックスサービスです。

Vector Index クライアント

Momento Vector Indexes を操作するには、VectorIndexClient を使用する必要があります。

new PreviewVectorIndexClient({
credentialProvider: CredentialProvider.fromEnvironmentVariable({
environmentVariableName: 'MOMENTO_API_KEY',
}),
configuration: VectorIndexConfigurations.Laptop.latest(),
});

Control APIs

これらのAPIメソッドは、インデックスの管理と制御に使用されます。

Index の作成

ベクトルインデックスを作成します。

NameTypeDescription
indexNameStringベクトルのインデックス名
numDimensionsStringベクトルあたりの次元数

| | similarityMetric | String | ベクトル間の距離を定量化するために使用されるメトリック。cosine similarity, inner product, euclidean similarity のいずれかを指定する。デフォルトは cosine similarity。 |

メソッド・レスポンス・オブジェクト
  • Success
  • AlreadyExists
  • Error

詳しくはレスポンスオブジェクトを参照。

const result = await vectorClient.createIndex('test-index', 2);
if (result instanceof CreateVectorIndex.Success) {
console.log("Index 'test-index' created");
} else if (result instanceof CreateVectorIndex.AlreadyExists) {
console.log("Index 'test-index' already exists");
} else if (result instanceof CreateVectorIndex.Error) {
throw new Error(
`An error occurred while attempting to create index 'test-index': ${result.errorCode()}: ${result.toString()}`
);
}

Index の削除

ベクトル・インデックスを削除します。

NameTypeDescription
indexNameStringベクトルのインデックス名
メソッド・レスポンス・オブジェクト
  • Success
  • Error

詳しくはレスポンスオブジェクトを参照。

const result = await vectorClient.deleteIndex('test-index');
if (result instanceof DeleteVectorIndex.Success) {
console.log("Index 'test-index' deleted");
} else if (result instanceof DeleteVectorIndex.Error) {
throw new Error(
`An error occurred while attempting to delete index 'test-index': ${result.errorCode()}: ${result.toString()}`
);
}

Indexes のリスト出力

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

メソッド・レスポンス・オブジェクト
  • Success
    • getIndexes(): VectorIndexInfo[]
      • VectorIndexInfo:
        • name: String
        • numDimensions: number
        • similarityMetric: String
  • Error

詳しくはレスポンスオブジェクトを参照。

const result = await vectorClient.listIndexes();
if (result instanceof ListVectorIndexes.Success) {
console.log(
`Indexes:\n${result
.getIndexes()
.map(index => index.toString())
.join('\n')}\n\n`
);
} else if (result instanceof ListVectorIndexes.Error) {
throw new Error(`An error occurred while attempting to list caches: ${result.errorCode()}: ${result.toString()}`);
}

Data APIs

これらのAPIメソッドは、インデックス内のデータを直接操作するために使用されます。

Count Items

ベクトル・インデックスの項目数を数えます。

NameTypeDescription
indexNameStringベクトルのインデックス名
メソッド・レスポンス・オブジェクト
  • Success
    • itemCount(): number
  • Error
    • 存在しないインデックスはNOT_FOUNDエラーコードを返します。これはアイテムがないインデックスとは異なり、リクエストは0カウントで成功します。

詳しくはレスポンスオブジェクトを参照。

const result = await vectorClient.countItems('test-index');
if (result instanceof VectorCountItems.Success) {
console.log(`Found ${result.itemCount()} items`);
} else if (result instanceof VectorCountItems.Error) {
throw new Error(`An error occurred while counting items: ${result.errorCode()}: ${result.toString()}`);
}

アイテムのアップサートバッチ

アイテムのバッチをベクトル・インデックスにアップサートします。

NameTypeDescription
indexNameStringベクトルのインデックス名
itemsVectorIndexItemインデックスにアップサートする項目
メソッド・レスポンス・オブジェクト
  • Success
  • Error

詳しくはレスポンスオブジェクトを参照。

const result = await vectorClient.upsertItemBatch('test-index', [
{
id: 'example_item_1',
vector: [1.0, 2.0],
metadata: {key1: 'value1'},
},
{
id: 'example_item_2',
vector: [3.0, 4.0],
metadata: {key2: 'value2'},
},
]);
if (result instanceof VectorUpsertItemBatch.Success) {
console.log('Successfully added items');
} else if (result instanceof VectorUpsertItemBatch.Error) {
throw new Error(`An error occurred while adding items to index: ${result.errorCode()}: ${result.toString()}`);
}

検索

クエリのベクトルに最も近いベクトルを持つアイテムを検索する。

NameTypeDescription
indexNameStringベクトルのインデックス名
queryVectornumber[]検索するベクトル
topKnumber返す結果の数。デフォルトは10
metadataFieldsString[] or ALL_VECTOR_METADATA各結果とともに返すメタデータ・フィールドのリスト、またはすべてのメタデータを返すことを示す値。指定しない場合は、メタデータは返されない。デフォルトは None。
scoreThresholdnumber結果をフィルタリングするスコアのしきい値。閾値は排他的。デフォルトはしきい値なし (すべての結果が返される)。
filterVectorFilterExpression結果をフィルターするためのフィルター式。デフォルトはフィルタなし。
メソッド・レスポンス・オブジェクト
  • Success
    • hits(): SearchHit[]
      • SearchHit:
        • id: string
        • score: number
        • metadata: Map<string, string>
  • Error

詳しくはレスポンスオブジェクトを参照。

const result = await vectorClient.search('test-index', [1.0, 2.0], {topK: 3, metadataFields: ALL_VECTOR_METADATA});
if (result instanceof VectorSearch.Success) {
console.log(`Found ${result.hits().length} matches`);
} else if (result instanceof VectorSearch.Error) {
throw new Error(`An error occurred searching index test-index: ${result.errorCode()}: ${result.toString()}`);
}

ベクターの検索と取得

クエリのベクトルに最も近いベクトルを持つアイテムを検索します。検索ヒットしたベクトルに対応するベクトルも返します。

NameTypeDescription
indexNameStringベクトルのインデックス名
queryVectornumber[]検索するベクトル
topKnumber返す結果の数。デフォルトは10
metadataFieldsString[] or ALL_VECTOR_METADATA各結果とともに返すメタデータ・フィールドのリスト、またはすべてのメタデータを返すことを示す値。指定しない場合は、メタデータは返さない。デフォルトは None。
scoreThresholdnumber結果をフィルタリングするスコアのしきい値。閾値は排他的。デフォルトはしきい値なし (すべての結果が返される)。
filterVectorFilterExpression結果をフィルターするためのフィルター式。デフォルトはフィルタなし
メソッド・レスポンス・オブジェクト
  • Success
    • hits(): SearchAndFetchVectorsHit[]
      • SearchAndFetchVectorsHit:
        • id: string
        • score: number
        • metadata: Map<string, string>
        • vector: number[]
  • Error

詳しくはレスポンスオブジェクトを参照。

const result = await vectorClient.searchAndFetchVectors('test-index', [1.0, 2.0], {
topK: 3,
metadataFields: ALL_VECTOR_METADATA,
});
if (result instanceof VectorSearchAndFetchVectors.Success) {
console.log(`Found ${result.hits().length} matches`);
} else if (result instanceof VectorSearchAndFetchVectors.Error) {
throw new Error(`An error occurred searching index test-index: ${result.errorCode()}: ${result.toString()}`);
}

アイテムのバッチゲット

ベクトルインデックスから項目を一括で取得します。

NameTypeDescription
indexNameStringベクトルのインデックス名
filterString[]取得するアイテムのID
メソッド・レスポンス・オブジェクト
  • Success
    • values(): Record<string, VectorIndexItem> - Items for found IDs.
  • Error

詳しくはレスポンスオブジェクトを参照。

const result = await vectorClient.getItemBatch('test-index', ['example_item_1', 'example_item_2']);
if (result instanceof VectorGetItemBatch.Success) {
console.log(`Found ${Object.keys(result.values()).length} items`);
} else if (result instanceof VectorGetItemBatch.Error) {
throw new Error(`An error occurred while retrieving items from index: ${result.errorCode()}: ${result.toString()}`);
}

アイテムメタデータのバッチゲット

ベクトルインデックスからアイテムのメタデータを一括で取得します。

NameTypeDescription
indexNameStringベクトルのインデックス名
filterString[]取得するアイテムのメタデータのID
メソッド・レスポンス・オブジェクト
  • Success
    • values(): Record<string, VectorIndexMetadata> - Metadata for found IDs.
  • Error

詳しくはレスポンスオブジェクトを参照。

const result = await vectorClient.getItemMetadataBatch('test-index', ['example_item_1', 'example_item_2']);
if (result instanceof VectorGetItemMetadataBatch.Success) {
console.log(`Found metadata for ${Object.keys(result.values()).length} items`);
} else if (result instanceof VectorGetItemMetadataBatch.Error) {
throw new Error(
`An error occurred while retrieving item metadata from index: ${result.errorCode()}: ${result.toString()}`
);
}

アイテムの一括削除

ベクトル・インデックスから項目を一括削除します。

NameTypeDescription
indexNameStringベクトルのインデックス名
filterVectorFilterExpression | String[]削除するアイテムまたはアイテムIDにマッチするフィルタ
メソッド・レスポンス・オブジェクト
  • Success
  • Error

詳しくはレスポンスオブジェクトを参照。

const result = await vectorClient.deleteItemBatch('test-index', ['example_item_1', 'example_item_2']);
if (result instanceof VectorDeleteItemBatch.Success) {
console.log('Successfully deleted items');
} else if (result instanceof VectorDeleteItemBatch.Error) {
throw new Error(`An error occurred while deleting items: ${result.errorCode()}: ${result.toString()}`);
}