インデックスを作成してデプロイしたら、クエリを実行して最近傍を取得できます。
以下に、k 最近傍探索アルゴリズム(k-NN)を使用して上位の最近傍を見つける一致クエリの例を示します。
パブリック エンドポイントのクエリ例
Python
Python
Curl
下記の publicEndpointDomainName
は、デプロイにあります。形式は <number>.<region>-<number>.vdb.vertexai.goog
です。
$ curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer `gcloud auth print-access-token`" https://1957880287.us-central1-181224308459.vdb.vertexai.goog/v1/projects/181224308459/locations/us-central1/indexEndpoints/3370566089086861312:findNeighbors -d '{deployed_index_id: "test_index_public1", queries: [{datapoint: {datapoint_id: "0", feature_vector: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]}, neighbor_count: 5}]}'
この curl の例は、http(s)
クライアントから呼び出す方法を示していますが、パブリック エンドポイントは RESTful と grpc_cli
のデュアル プロトコルをサポートしています。
$ curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer `gcloud auth print-access-token`" https://1957880287.us-central1-181224308459.vdb.vertexai.goog/v1/projects/${PROJECT_ID}/locations/us-central1/indexEndpoints/${INDEX_ENDPOINT_ID}:readIndexDatapoints -d '{deployed_index_id:"test_index_public1", ids: ["606431", "896688"]}'
この curl の例は、トークンと数値の制限を使用してクエリを実行する方法を示しています。
$ curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer `gcloud auth print-access-token`" https://${PUBLIC_ENDPOINT_DOMAIN}/v1/projects/${PROJECT_ID}/locations/${LOCATION}/indexEndpoints/${INDEX_ENDPOINT_ID}:findNeighbors -d '{deployed_index_id:"${DEPLOYED_INDEX_ID}", queries: [{datapoint: {datapoint_id:"x", feature_vector: [1, 1], "sparse_embedding": {"values": [111.0,111.1,111.2], "dimensions": [10,20,30]}, numeric_restricts: [{namespace: "int-ns", value_int: -2, op: "GREATER"}, {namespace: "int-ns", value_int: 4, op: "LESS_EQUAL"}, {namespace: "int-ns", value_int: 0, op: "NOT_EQUAL"}], restricts: [{namespace: "color", allow_list: ["red"]}]}}]}'
コンソール
パブリック エンドポイントにデプロイされたインデックスをコンソールからクエリするには、次の手順を実施します。
- Google Cloud コンソールの [Vertex AI] セクションで、[デプロイと使用] セクションに移動します。[ベクトル検索] を選択します。
- クエリを実行するインデックスを選択します。[インデックスの情報] ページが開きます。
- [デプロイされたインデックス] セクションまで下にスクロールし、クエリを実行するデプロイされたインデックスを選択します。[デプロイされるインデックスの情報] ページが開きます。
- [インデックスのクエリ] セクションで、密エンベディング値、スパース エンベディング値、ハイブリッド エンベディング値(密エンベディングとスパース エンベディング)、または特定のデータポイントでクエリを実行するかどうかを選択します。
- 選択したクエリの種類に合わせてクエリ パラメータを入力します。たとえば、密エンベディングでクエリを実行する場合は、クエリするエンベディング ベクトルを入力します。
- 指定された curl コマンドを使用して、または Cloud Shell を使用して実行し、クエリを実行します。
- Cloud Shell を使用する場合は、[Cloud Shell で実行] を選択します。
- Cloud Shell で実行します。
- 結果として最近傍が返されます。
インデックスの作成方法、パブリック エンドポイントへのデプロイ方法、クエリの方法に関するエンドツーエンドの例については、公式ノートブックのStackOverflow 質問のテキストにベクトル検索と Vertex AI エンベディングを使用するをご覧ください。
パフォーマンスに影響するクエリ時間の設定
ベクトル検索を使用する場合、クエリ時のパラメータはレイテンシ、可用性、コストに影響する可能性があります。このガイダンスはほとんどのケースに適用されます。 ただし、必ず構成をテストして、ユースケースに適していることを確認してください。
パラメータの定義については、インデックス構成パラメータをご覧ください。
パラメータ | 概要 | パフォーマンスへの影響 |
---|---|---|
approximateNeighborsCount |
各シャードから取得するおおよその結果数をアルゴリズムに指定します。
|
|
setNeighborCount |
クエリで返す結果の数を指定します。 |
300 以下の値は、ほとんどのユースケースでパフォーマンスを維持できます。値が大きい場合は、特定のユースケースでテストします。 |
fractionLeafNodesToSearch |
最近傍を検索する際に参照するリーフノードの割合を制御します。これは、リーフノードあたりのエンベディングが多いほど、リーフあたりのデータが多く検査される leafNodeEmbeddingCount に関連しています。 |
|
次のステップ
- インデックスの更新と再構築の方法を学ぶ。
- ベクトル一致をフィルタする方法を学ぶ。
- インデックスのモニタリングの方法を学ぶ。