検索インデックスにベクトル化を構成する

重要

この機能はパブリック プレビュー段階にあり、追加使用条件の下で提供されます。 2023-10-01-preview REST API2024-03-01-preview REST API では、AzureOpenAIEmbedding ベクターライザーおよびカスタム ベクターライザーをサポートします。 2024-05-01-preview REST API では、Azure AI Vision ベクターライザーAzure AI Studio モデル カタログ ベクターライザーに対するサポートを追加しています。

Azure AI 検索では、"ベクターライザー" という、ベクター化を実行するソフトウェア (Azure OpenAI にデプロイされた埋め込みモデルなど) が、クエリの実行中にテキスト (または画像) をベクターに変換します。

これは検索インデックスで定義され、検索可能なベクター フィールドに適用され、クエリの実行時にテキスト (または画像) クエリ入力の埋め込みを生成するために使用されます。 代わりに、インデックス作成プロセスの一部としてコンテンツをベクター化する必要がある場合は、「垂直統合 (プレビュー)」を参照してください。 インデックス作成中の組み込みのベクター化では、生のテキスト コンテンツに対して埋め込みモデルを呼び出すインデクサーとスキルセットを構成できます。

インデックスを検索するベクターライザーを追加するには、Azure portal でインデックス デザイナーを使用するか、Create or Update Index 2024-05-01-preview REST API を呼び出すか、または更新された Azure ベータ SDK パッケージを使用してこの機能を提供できます。

前提条件

ベクター クエリの実行を確認するには、検索サービスで診断ログを有効にすることをお勧めします。

サンプル データを使用してベクター化を試す

データのインポートとベクター化ウィザードは、Azure Blob Storage からファイルを読み取り、チャンクされたフィールドとベクター化されたフィールドを含むインデックスを作成し、ベクター化機能を追加します。 設計上、ウィザードによって作成されたベクターライザーは、BLOB コンテンツのインデックス作成に使用されるものと同じ埋め込みモデルに設定されます。

  1. Azure Storage 上のコンテナーにサンプル データ ファイルをアップロードします。 NASA の地球の本から小さなテキスト ファイルをいくつか使用して、無料の検索サービスでこれらの手順をテストしました。

  2. データ ソースの BLOB コンテナーを選択して、データのインポートとベクター化ウィザードを実行します。

    [データへの接続] ページのスクリーンショット。

  3. text-embedding-ada-002 の既存のデプロイを選択します。 このモデルは、インデックス作成中に埋め込みを生成し、クエリ中に使用されるベクターライザーの構成にも使用されます。

    データのベクター化とエンリッチのページのスクリーンショット。

  4. ウィザードが完了し、すべてのインデクサー処理が完了すると、検索可能なベクター フィールドを含むインデックスが作成されます。 フィールドの JSON 定義は次のようになります。

     {
         "name": "vector",
         "type": "Collection(Edm.Single)",
         "searchable": true,
         "retrievable": true,
         "dimensions": 1536,
         "vectorSearchProfile": "vector-nasa-ebook-text-profile"
     }
    
  5. 次の例のように、ベクター プロファイルとベクター化も必要です。

    "profiles": [
       {
         "name": "vector-nasa-ebook-text-profile",
         "algorithm": "vector-nasa-ebook-text-algorithm",
         "vectorizer": "vector-nasa-ebook-text-vectorizer"
       }
     ],
     "vectorizers": [
       {
         "name": "vector-nasa-ebook-text-vectorizer",
         "kind": "azureOpenAI",
         "azureOpenAIParameters": {
           "resourceUri": "https://my-fake-azure-openai-resource.openai.azure.com",
           "deploymentId": "text-embedding-ada-002",
           "modelName": "text-embedding-ada-002",
           "apiKey": "0000000000000000000000000000000000000",
           "authIdentity": null
         },
         "customWebApiParameters": null
       }
     ]
    
  6. 先に進んで、クエリの実行中にテキストからベクターへの変換のベクター化をテストします。

ベクター化とベクター プロファイルを定義する

このセクションでは、ベクターライザーを手動で定義するためのインデックス スキーマの変更について説明します。

  1. 検索インデックスに vectorizers を追加するには、インデックスの作成または更新 (プレビュー) を使用します。

  2. 次の JSON をインデックスの定義に追加します。 ベクター化セクションでは、デプロイされた埋め込みモデルへの接続情報が示されます。 この手順では、Azure OpenAI 埋め込みモデルとカスタム Web API を並べて比較できるように、2 つのベクター化の例を示します。

      "vectorizers": [
        {
          "name": "my_azure_open_ai_vectorizer",
          "kind": "azureOpenAI",
          "azureOpenAIParameters": {
            "resourceUri": "https://url.openai.azure.com",
            "deploymentId": "text-embedding-ada-002",
            "modelName": "text-embedding-ada-002",
            "apiKey": "mytopsecretkey"
          }
        },
        {
          "name": "my_custom_vectorizer",
          "kind": "customWebApi",
          "customVectorizerParameters": {
            "uri": "https://my-endpoint",
            "authResourceId": " ",
            "authIdentity": " "
          }
        }
      ]
    
  3. 同じインデックスに、ベクター ライザーのいずれかを指定するベクター プロファイル セクションを追加します。 ベクター プロファイルには、ナビゲーション構造の作成に使用されるベクター検索アルゴリズムも必要です。

    "profiles": [ 
        { 
            "name": "my_vector_profile", 
            "algorithm": "my_hnsw_algorithm", 
            "vectorizer":"my_azure_open_ai_vectorizer" 
        }
    ]
    
  4. ベクター フィールドにベクター プロファイルを割り当てます。 次の例は、必須のキー フィールドを持つフィールド コレクション、タイトル文字列フィールド、およびベクター プロファイルの割り当てを持つ 2 つのベクター フィールドを示しています。

    "fields": [ 
            { 
                "name": "ID", 
                "type": "Edm.String", 
                "key": true, 
                "sortable": true, 
                "analyzer": "keyword" 
            }, 
            { 
                "name": "title", 
                "type": "Edm.String"
            }, 
            { 
                "name": "vector", 
                "type": "Collection(Edm.Single)", 
                "dimensions": 1536, 
                "vectorSearchProfile": "my_vector_profile", 
                "searchable": true, 
                "retrievable": true
            }, 
            { 
                "name": "my-second-vector", 
                "type": "Collection(Edm.Single)", 
                "dimensions": 1024, 
                "vectorSearchProfile": "my_vector_profile", 
                "searchable": true, 
                "retrievable": true
            }
    ]
    

ベクトル化をテストする

検索クライアントを使用して、ベクターライザーを介してクエリを送信します。 この例では、REST クライアントとサンプル インデックスのある VISUAL Studio Code を想定しています。

  1. Visual Studio Code で、検索エンドポイントと検索クエリ API キーを指定します。

     @baseUrl: 
     @queryApiKey: 00000000000000000000000
    
  2. ベクター クエリ要求に貼り付けます。 プレビュー REST API バージョンを必ず使用してください。

     ### Run a query
     POST {{baseUrl}}/indexes/vector-nasa-ebook-txt/docs/search?api-version=2023-10-01-preview  HTTP/1.1
         Content-Type: application/json
         api-key: {{queryApiKey}}
    
         {
             "count": true,
             "select": "title,chunk",
             "vectorQueries": [
                 {
                     "kind": "text",
                     "text": "what cloud formations exists in the troposphere",
                     "fields": "vector",
                     "k": 3,
                     "exhaustive": true
                 }
             ]
         }
    

    クエリに関する重要なポイントは次のとおりです。

    • "kind": "text" は、入力がテキスト文字列であることを検索エンジンに指示し、検索フィールドに関連付けられているベクターライザーを使用します。

    • "text": "what cloud formations exists in the troposphere" はベクター化するテキスト文字列です。

    • "fields": "vector" は、クエリを実行するフィールドの名前です。 ウィザードによって生成されたサンプル インデックスを使用する場合、生成されるベクター フィールドには vector という名前が付けられます。

  3. 要求を送信します。 最初の結果が最も関連性の高い、3 つの k 結果が得られます。

クエリ時に設定するベクター化プロパティがないことに注意してください。 クエリは、インデックス内のベクター プロファイル フィールドの割り当てに従って、ベクター化プロパティを読み取ります。

ログを確認する

検索サービスの診断ログを有効にした場合は、Kusto クエリを実行して、ベクター フィールドでのクエリの実行を確認します。

OperationEvent
| where TIMESTAMP > ago(30m)
| where Name == "Query.Search" and AdditionalInfo["QueryMetadata"]["Vectors"] has "TextLength"

ベスト プラクティス

Azure OpenAI ベクターライザーを設定する場合は、Azure OpenAI 埋め込みスキルに推奨されているものと同じベスト プラクティスを検討してください。

関連項目