検索インデックスにベクトル化を構成する
重要
この機能はパブリック プレビュー段階にあり、追加使用条件の下で提供されます。 この機能は、2023-10-01-Preview REST API でサポートされます。
Azure AI Search では、ベクター化を実行するソフトウェア (Azure OpenAI にデプロイされた埋め込みモデルなど) は、クエリの実行中にテキストをベクターに変換します。
これは検索インデックスで定義され、検索可能なベクター フィールドに適用され、クエリ時にテキスト クエリ入力の埋め込みを生成するために使用されます。 代わりに、インデックス作成プロセスの一部としてテキストをベクター化する必要がある場合は、「垂直統合 (プレビュー)」を参照してください。 インデックス作成中の組み込みのベクター化では、生のテキスト コンテンツに対して Azure OpenAI 埋め込みモデルを呼び出すインデクサーとスキルセットを構成できます。
インデックスを検索するベクターライザーを追加するには、Azure portal でインデックス デザイナーを使用するか、Create or Update Index 2023-10-01-preview REST API を呼び出すか、または更新された Azure ベータ SDK パッケージを使用することでこの機能を提供できます。
前提条件
Azure AI Search で検索可能なベクター フィールドを持つインデックス。
Azure OpenAI の text-embedding-ada-002 などのデプロイされた埋め込みモデル。 クエリをベクター化するために使用されます。 インデックスに埋め込みを生成するために使用するモデルと同じである必要があります。
埋め込みモデルを使用するためのアクセス許可。 Azure OpenAI を使用している場合は、呼び出し元に Cognitive Services OpenAI ユーザー権限が必要です。 または、API キーを指定することもできます。
クエリを送信して応答を受け入れる REST クライアント を使用した Visual Studio Code。
ベクター クエリの実行を確認するには、検索サービスで診断ログを有効にすることをお勧めします。
サンプル データを使用してベクター化を試す
データのインポートとベクター化ウィザードは、Azure Blob Storage からファイルを読み取り、チャンクされたフィールドとベクター化されたフィールドを含むインデックスを作成し、ベクター化機能を追加します。 設計上、ウィザードによって作成されたベクターライザーは、BLOB コンテンツのインデックス作成に使用されるものと同じ埋め込みモデルに設定されます。
Azure Storage 上のコンテナーにサンプル データ ファイルをアップロードします。 NASA の地球の本から小さなテキスト ファイルをいくつか使用して、無料の検索サービスでこれらの手順をテストしました。
データ ソースの BLOB コンテナーを選択して、データのインポートとベクター化ウィザードを実行します。
text-embedding-ada-002 の既存のデプロイを選択します。 このモデルは、インデックス作成中に埋め込みを生成し、クエリ中に使用されるベクターライザーの構成にも使用されます。
ウィザードが完了し、すべてのインデクサー処理が完了すると、検索可能なベクター フィールドを含むインデックスが作成されます。 フィールドの JSON 定義は次のようになります。
{ "name": "vector", "type": "Collection(Edm.Single)", "searchable": true, "retrievable": true, "dimensions": 1536, "vectorSearchProfile": "vector-nasa-ebook-text-profile" }
次の例のように、ベクター プロファイルとベクター化も必要です。
"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", "apiKey": "0000000000000000000000000000000000000", "authIdentity": null }, "customWebApiParameters": null } ]
先に進んで、クエリの実行中にテキストからベクターへの変換のベクター化をテストします。
ベクター化とベクター プロファイルを定義する
このセクションでは、ベクターライザーを手動で定義するためのインデックス スキーマの変更について説明します。
検索インデックスに
vectorizers
を追加するには、インデックスの作成または更新 (プレビュー) を使用します。次の 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", "apiKey": "mytopsecretkey" } }, { "name": "my_custom_vectorizer", "kind": "customWebApi", "customVectorizerParameters": { "uri": "https://my-endpoint", "authResourceId": " ", "authIdentity": " " } } ]
同じインデックスに、ベクター ライザーのいずれかを指定するベクター プロファイル セクションを追加します。 ベクター プロファイルには、ナビゲーション構造の作成に使用されるベクター検索アルゴリズムも必要です。
"profiles": [ { "name": "my_vector_profile", "algorithm": "my_hnsw_algorithm", "vectorizer":"my_azure_open_ai_vectorizer" } ]
ベクター フィールドにベクター プロファイルを割り当てます。 次の例は、必須のキー フィールドを持つフィールド コレクション、タイトル文字列フィールド、およびベクター プロファイルの割り当てを持つ 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 を想定しています。
Visual Studio Code で、検索エンドポイントと検索クエリ API キーを指定します。
@baseUrl: @queryApiKey: 00000000000000000000000
ベクター クエリ要求に貼り付けます。 プレビュー 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 つの
k
結果が得られます。
クエリ時に設定するベクター化プロパティがないことに注意してください。 クエリは、インデックス内のベクター プロファイル フィールドの割り当てに従って、ベクター化プロパティを読み取ります。
ログを確認する
検索サービスの診断ログを有効にした場合は、Kusto クエリを実行して、ベクター フィールドでのクエリの実行を確認します。
OperationEvent
| where TIMESTAMP > ago(30m)
| where Name == "Query.Search" and AdditionalInfo["QueryMetadata"]["Vectors"] has "TextLength"
ベスト プラクティス
Azure OpenAI ベクターライザーを設定する場合は、Azure OpenAI 埋め込みスキルに推奨されているものと同じベスト プラクティスを検討してください。