次の方法で共有


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

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

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

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

ベクトライザーは、一般提供されているスキル ベクトライザー ペアを使用している限り、一般に利用できるようになりました。 AzureOpenAIEmbedding ベクトライザーAzureOpenAIEmbedding スキルが一般提供されています。 カスタム Web API ベクトライザーも一般提供されています。

Azure AI Vision ベクトライザーAzure AI Studio モデル カタログ ベクトライザー、およびそれらと同等のスキルはまだプレビュー段階です。 プレビュー段階のスキルとベクトライザーを使用するには、スキルセットで 2024-05-01-preview REST API を指定する必要があります。

前提条件

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

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

データのインポートとベクトル化ウィザードは、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 を追加するには、Create or Update Index を使用します。

  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. ベクトル クエリ要求に貼り付けます。

     ### Run a query
     POST {{baseUrl}}/indexes/vector-nasa-ebook-txt/docs/search?api-version=2024-07-01 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 埋め込みスキルに推奨されているものと同じベスト プラクティスを検討してください。

関連項目