チュートリアル: Azure AI 検索で RAG 用の埋め込みとチャットのモデルを選択する
Azure AI 検索上に構築された RAG ソリューションは、ベクトル化のための埋め込みモデルと、データに対する会話型検索のためのチャット モデルに依存します。
このチュートリアルでは、次の作業を行いました。
- Azure クラウドのどのモデルが組み込みの統合で機能するかについて学習する
- チャットに使用される Azure モデルについて学習する
- モデルをデプロイし、コードのモデル情報を収集する
- Azure モデルへの検索エンジンのアクセスを構成する
- 非 Azure モデルをアタッチするためのカスタム スキルとベクタライザーについて学習する
Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。
前提条件
Azure portal。モデルをデプロイし、Azure クラウドでロールの割り当てを構成するために使用されます。
Azure サブスクリプションの所有者またはユーザー アクセス管理者のロール。ロールの割り当てを作成するために必要です。 このチュートリアルでは、少なくとも 3 つの Azure リソースを使用します。 接続は Microsoft Entra ID を使用して認証されます。これには、ロールを作成する機能が必要です。 モデルに接続するためのロールの割り当てについては、この記事に説明されています。 ロールを作成できない場合は、代わりに API キーを使用できます。
Azure OpenAI、Azure AI サービス マルチサービス リソース経由の Azure AI Vision、Azure AI Studio などのモデル プロバイダー。
このチュートリアルでは Azure OpenAI を使用します。 垂直統合のオプションを理解できるように、他のプロバイダーも紹介します。
Azure AI 検索の Basic レベル以上では、ロールの割り当てに使用されるマネージド ID が用意されています。
共有リージョン。 このシリーズのすべてのチュートリアルを完了するには、リージョンが Azure AI 検索とモデル プロバイダーの両方をサポートしている必要があります。 以下のサポートされているリージョンを参照してください。
現在、Azure AI 検索は一部のリージョンで可用性が制限されています。 リージョンの状態を確認するには、「Azure AI 検索のリージョン一覧」を参照してください。
ヒント
重複するリージョンの一覧については、こちらの記事を参照してください。
組み込みベクトル化をサポートするモデルを確認する
コンテンツをベクトル化すると、RAG ソリューションのクエリ結果を改良できます。 Azure AI 検索は、インデックス作成パイプラインでの組み込みのベクトル化アクションをサポートしています。 また、クエリ時のベクトル化もサポートしており、テキストまたは画像入力をベクトル検索のために埋め込みに変換します。 この手順では、コンテンツとクエリに適した埋め込みモデルを特定します。 生のベクトル データと生のベクトル クエリを用意している場合、または RAG ソリューションにベクトル データが含まれていない場合は、この手順をスキップします。
テキストからベクトルへの変換手順を含むベクトル クエリでは、インデックス作成時に使用したのと同じ埋め込みモデルを使用する必要があります。 異なるモデルを使用しても検索エンジンはエラーをスローしませんが、得られる結果は低質になります。
同じモデルという要件を満たすには、インデックス作成時には "スキル" を使用して、クエリ実行時には "ベクタライザー" を使用して参照できる埋め込みモデルを選択します。 スキルとベクタライザーのペアを次の表に示します。 埋め込みモデルの使用方法を確認するには、インデックス パイプラインの作成に関するページに進み、埋め込みスキルと一致するベクタライザーを呼び出すコードを参照してください。
Azure AI 検索は、Azure クラウド内の次の埋め込みモデルに対応するスキルとベクタライザーをサポートしています。
クライアント | 埋め込みモデル | スキル | ベクトライザー |
---|---|---|---|
Azure OpenAI | text-embedding-ada-002、 text-embedding-3-large、 text-embedding-3-small |
AzureOpenAIEmbedding | AzureOpenAIEmbedding |
Azure AI Vision | multimodal 4.0 1 | AzureAIVision | AzureAIVision |
Azure AI Studio モデル カタログ | OpenAI-CLIP-Image-Text-Embeddings-vit-base-patch32、 OpenAI-CLIP-Image-Text-Embeddings-ViT-Large-Patch14-336、 Facebook-DinoV2-Image-Embeddings-ViT-Base、 Facebook-DinoV2-Image-Embeddings-ViT-Giant、 Cohere-embed-v3-english、 Cohere-embed-v3-multilingual |
AML 2 | Azure AI Studio モデル カタログ |
1 画像とテキストのベクトル化をサポートします。
2 モデル カタログにデプロイされたモデルには、AML エンドポイント経由でアクセスされます。 この接続には、既存の AML スキルを使用します。
ここに記載されていない他のモデルも使用できます。 詳細については、この記事の「埋め込みに Azure 以外のモデルを使用する」を参照してください。
Note
通常、埋め込みモデルへの入力はチャンク化されたデータです。 Azure AI 検索の RAG パターンでは、チャンクはインデクサー パイプラインで処理されます。これについては、このシリーズの別のチュートリアルで説明されています。
クエリ時に生成 AI に使用されるモデルを確認する
Azure AI 検索にはチャット モデル用の統合コードがないため、自分が使い慣れていて要件を満たす LLM を選択する必要があります。 インデックスをリビルドしたり、インデックス作成パイプラインの一部を再実行したりすることなく、クエリ コードを変更してさまざまなモデルを試すことができます。 チャット モデルを呼び出すコードについては、「回答の検索と生成」を参照してください。
一般的に、チャット検索エクスペリエンスには次のモデルが使用されます。
クライアント | チャット モデル |
---|---|
Azure OpenAI | GPT-35-Turbo、 GPT-4、 GPT-4o、 GPT-4 Turbo |
GPT-35-Turbo および GPT-4 モデルは、会話形式の入力を処理するように最適化されています。
このチュートリアルでは GPT-4o を使用します。 テスト時に、所有しているトレーニング データでは補完できる可能性が低いことがわかりました。 たとえば、"地球の表面積の何割が水で覆われていいますか?" という質問に対して、GPT-35-Turbo は、サンプル データはその事実を提供していないにもかかわらず、組み込みの地球に関する知識を使用して、地球の 71% が水で覆われていると回答しました。 対照的に、GPT-4o は "わかりません" と (正しく) 回答しました。
モデルをデプロイして情報を収集する
モデルは、デプロイして、エンドポイント経由でアクセスできるようにする必要があります。 埋め込み関連のスキルとベクタライザーの両方に、ディメンション数とモデル名が必要です。
このチュートリアル シリーズでは、次のモデルとモデル プロバイダーを使用します。
- 埋め込み用には Azure OpenAI 上の Text-embedding-3-large
- チャット補完用には Azure OpenAI 上の GPT-4o
Azure OpenAI にモデルをデプロイするには、Cognitive Services OpenAI 共同作成者以上が必要です。
Azure AI Studio に移動します。
左側のメニューで [デプロイ] を選択します。
[モデルをデプロイします]>[基本モデルのデプロイ] を選択します。
ドロップダウン リストから text-embedding-3-large を選択し、選択を確定します。
デプロイ名を指定します。 "text-embedding-3-large" をお勧めします。
既定値を受け入れます。
[デプロイ] を選択します。
gpt-4o について前の手順を繰り返します。
モデル名とエンドポイントをメモしておきます。 完全なエンドポイントは埋め込みスキルとベクタライザーによって内部で組み立てられるため、必要なのはリソース URI だけです。 たとえば、
https://MY-FAKE-ACCOUNT.openai.azure.com/openai/deployments/text-embedding-3-large/embeddings?api-version=2024-06-01
の場合、スキルとベクタライザーの定義で指定する必要があるエンドポイントはhttps://MY-FAKE-ACCOUNT.openai.azure.com
です。
Azure モデルへの検索エンジンのアクセスを構成する
パイプラインとクエリの実行の場合、このチュートリアルでは、認証には Microsoft Entra ID を、認可にはロールを使用します。
Azure OpenAI 上で自分自身と検索サービス ID のアクセス許可を割り当てます。 このチュートリアルのコードはローカルで実行されます。 Azure OpenAI への要求は、お使いのシステムから送信されます。 また、検索エンジンからの検索結果は Azure OpenAI に渡されます。 このような理由から、ユーザーと検索サービスの両方に Azure OpenAI に対するアクセス許可が必要です。
Azure portal にサインインし、ご利用の検索サービスを探します。
システム マネージド ID を使用するように Azure AI 検索を構成します。
Azure OpenAI リソースを見つけます。
左メニューで [アクセス制御 (IAM)] を選択します。
[ロールの割り当ての追加] を選択します。
[Cognitive Services OpenAI ユーザー] を選択します。
[マネージド ID] を選択し、次に [メンバー] を選択します。 ドロップダウン リストで、検索サービスのシステムマネージド ID を見つけます。
次に、[ユーザー、グループ、またはサービス プリンシパル] を選択して、[メンバー] を選択します。 ユーザー アカウントを検索し、ドロップダウン リストから選択します。
ロールに 2 つのセキュリティ プリンシパルが割り当てられていることを確認します。
[確認と割り当て] を選択して、ロールの割り当てを作成します。
Azure AI Vision のモデルにアクセスするには、Cognitive Services OpenAI ユーザーを割り当てます。 Azure AI Studio の場合は、Azure AI 開発者を割り当てます。
埋め込みに Azure 以外のモデルを使用する
埋め込みモデルを統合するパターンは、それをカスタム スキルとカスタム ベクタライザーでラップすることです。 このセクションでは、参照記事のリンクを紹介します。 Azure 以外のモデルを呼び出すコード例については、custom-embeddings デモのページを参照してください。
クライアント | 埋め込みモデル | スキル | ベクトライザー |
---|---|---|---|
Any | Any | カスタム スキル | カスタム ベクタライザー |