この記事では、.NET 用の独自のデータ サンプルを使用して、
この記事では、あなたが次のことを行います。
- チャット アプリをAzureに展開します。
- 従業員の福利厚生に関する回答を取得します。
- 応答の動作を変更するように設定を変更します。
この手順を完了したら、カスタム コードを使用して新しいプロジェクトの変更を開始します。
この記事は、Azure OpenAI サービスとAzure AI 検索を使用してチャット アプリを構築する方法を示す記事のコレクションの一部です。
コレクション内のその他の記事は次のとおりです:
アーキテクチャの概要
このサンプル アプリケーションでは、Contoso Electronics という架空の会社が、従業員にチャット アプリエクスペリエンスを提供して、特典、内部ポリシー、職務の説明と役割について質問します。
チャット アプリのアーキテクチャを次の図に示します:
- ユーザー インターフェイス - アプリケーションのチャット インターフェイスは Blazor WebAssembly アプリケーションです。 このインターフェイスは、ユーザー クエリを受け入れ、アプリケーション バックエンドに要求をルーティングし、生成された応答を表示します。
-
Backend - アプリケーション バックエンドは ASP.NET Core Minimal API です。 バックエンドは Blazor 静的 Web アプリケーションをホストし、さまざまなサービス間の相互作用を調整します。 このアプリケーションで使用されるサービスは次のとおりです。
- Azure AI 検索 – Azure Storage アカウントに格納されているデータからドキュメントのインデックスを作成します。 これにより、ベクトル検索機能を使用してドキュメントを検索できるようになります。
- Azure OpenAI Service – 応答を生成する大規模言語モデル (LLM) を提供します。 Microsoft Agent Framework は、Azure OpenAI Serviceと組み合わせて使用して、より複雑な AI ワークフローを調整します。
コスト
このアーキテクチャのほとんどのリソースでは、Basic 価格レベルまたは従量課金価格レベルが使用されます。 従量課金価格は使用量に基づきます。つまり、使用した分だけ支払います。 この記事を完了するには、料金がかかりますが、最小限です。 記事が完了したら、リソースを削除して料金の発生を停止します。
詳細については、「Azure Samples: Cost in the sample repoを参照してください。
前提条件
開発コンテナー環境は、この記事を完了するために必要なすべての依存関係と共に使用できます。 開発コンテナーは、GitHub Codespaces (ブラウザー) で実行することも、Visual Studio Codeを使用してローカルで実行することもできます。
この記事に従うには、次の前提条件が必要です:
- Azure サブスクリプション - 無料で作成します
- Azure アカウントのアクセス許可 - Azure アカウントには、User Access Administrator や Owner などの Microsoft.Authorization/roleAssignments/write 権限が必要です。
- GitHub アカウント
開発環境を開く
この記事を完了するため、すべての依存関係がインストールされている開発環境から始めます。
重要
すべてのGitHub アカウントでは、コア インスタンスが 2 つあり、毎月最大 60 時間無料で Codespaces を使用できます。 詳細については、「GitHub Codespaces の月単位のストレージとコア時間を参照してください。
mainGitHub リポジトリのAzure-Samples/azure-search-openai-demo-csharpブランチに新しいGitHubコードスペースを作成するプロセスを開始します。開発環境とドキュメントの両方を同時に使用できるようにするには、次の
GitHub Codespaces で開く ボタンをクリックし、新しいウィンドウでリンクを開く を選択します。[Codespace の作成] ページで、codespace の構成設定を確認し、[新しい codespace の作成] を選択します:
Codespace が起動するまで待ちます。 この起動プロセスには数分かかることがあります。
画面の下部にあるターミナルで、Azure Developer CLI を使用してAzureにサインインします。
azd auth loginターミナルからコードをコピーし、ブラウザーに貼り付けます。 手順に従って、Azure アカウントで認証します。
この記事の残りのタスクは、この開発コンテナーのコンテキストで行われます。
デプロイして実行する
サンプル リポジトリには、チャット アプリをAzureにデプロイするために必要なすべてのコードファイルと構成ファイルが含まれています。 次の手順では、サンプルをAzureにデプロイするプロセスについて説明します。
チャット アプリを Azure に展開する
重要
このセクションで作成Azureリソースでは、主にAzure AI 検索 リソースから即時のコストが発生します。 これらのリソースは、完全に実行される前にコマンドを中断した場合でも、コストが発生する可能性があります。
次の Azure Developer CLI コマンドを実行して、Azure リソースをプロビジョニングし、ソース コードをデプロイします。
azd up環境名の入力を求められたら、短く小文字のままにします。 たとえば、
myenvのようにします。 リソース グループ名の一部として使用されます。メッセージが表示されたら、リソースを作成するサブスクリプションを選択します。
最初に場所を選択するように求められたら、近くの場所を選択します。 この場所は、ホスティングを含むほとんどのリソースに使用されます。
OpenAI モデルの場所の入力を求められたら、近くの場所を選択します。 最初の場所と同じ場所を使用できる場合は、その場所を選択します。
アプリがデプロイされるまで待ちます。 デプロイが完了するまでに最大 20 分かかる場合があります。
アプリケーションが正常にデプロイされると、ターミナルに URL が表示されます。
Deploying service webとラベルの付いたその URL を選択して、ブラウザーでチャット アプリケーションを開きます。
チャット アプリを使用して PDF ファイルから回答を取得する
チャット アプリには、PDF ファイルからの従業員の特典情報が事前に読み込まれています。 チャット アプリを使用して、福利厚生に関する質問をすることができます。 次の手順では、チャット アプリを使用するプロセスについて説明します。
ブラウザーで、左側のナビゲーションを使用して[チャット] ページに移動します。
チャット テキスト ボックスに「標準ではない Northwind Health Plus プランに含まれるもの」を選択または入力します。 応答は次の画像に "類似した" ものとなります。
回答から引用文献を選択します。 ポップアップ ウィンドウが開き、情報のソースが表示されます。
回答ボックスの上部にあるタブ間を移動して、回答がどのように生成されたかを理解します。
タブ 説明 思考プロセス これは、チャットでの対話のスクリプトです。 システム プロンプト ( content) とユーザーの質問 (content) を表示できます。関連する参照先 これには、質問に答える情報とソース資料が含まれます。 ソース資料の引用文献の数は、[開発者設定] に表示されます。 既定値は 3 です。 引用 引用文献を含む [ソース] ページが表示されます。 完了したら、回答タブに戻ります。
チャット アプリの設定を使用して応答の動作を変更する
チャットのインテリジェンスは、OpenAI モデルと、モデルとの対話に使用される設定によって決まります。
| 設定 | 説明 |
|---|---|
| プロンプト テンプレートをオーバーライドする | これは、回答を生成するために使用されるプロンプトです。 |
| これだけ多くの検索結果を取得する | これは、回答の生成に使用される検索結果の数です。 これらのソースは、引用文献の [思考プロセス] タブと [サポート コンテンツ] タブに返されます。 |
| カテゴリの除外 | これは、検索結果から除外されるドキュメントのカテゴリです。 |
| セマンティック ランカーを使用して取得する | これは、機械学習を使用して検索結果の関連性を向上させる Azure AI 検索 の機能です。 |
| 取得モード | ベクトル + テキスト は、検索結果がドキュメントのテキストとドキュメントの埋め込み内容に基づくことを意味します。 ベクトルは、検索結果がドキュメントの埋め込み内容に基づくことを意味します。 テキストは、検索結果がドキュメントのテキストに基づくことを意味します。 |
| ドキュメント全体ではなくクエリ コンテキストの概要を使用する |
Use semantic ranker と Use query-contextual summaries の両方がチェックされている場合、LLM は、最上位のドキュメント内のすべてのパッセージではなく、主要なパッセージから抽出されたキャプションを使用します。 |
| フォローアップの質問を提案する | 回答に基づいてチャット アプリにフォローアップの質問を提案してもらいます。 |
次の手順では、設定を変更するプロセスについて説明します。
ブラウザーで、ページの右上にある歯車アイコンを選択します。
未選択の場合は、[フォローアップの質問の提案] チェックボックスを選択して、同じ質問をもう一度行います。
What is included in my Northwind Health Plus plan that is not in standard?チャットは、フォローアップの質問の提案を返す場合があります。
[設定] タブで、[セマンティック ランカーを使用して取得する] の選択を解除します。
もう一度同じ質問をします。
What is my deductible?回答の違いは何ですか?
セマンティック ランカーを使用した応答は、1 つの回答を返しました。 セマンティック ランキングを使用しない応答は、あまり直接的でない回答を返しました。
リソースをクリーンアップする
完了するには、使用したAzureとGitHub CodeSpacesのリソースをクリーンアップします。
Azure リソースをクリーンアップする
この記事で作成したAzure リソースは、Azure サブスクリプションに課金されます。 今後これらのリソースが必要になるとは思わない場合は、削除して、より多くの料金が発生しないようにします。
次の Azure Developer CLI コマンドを実行して、Azure リソースを削除し、ソース コードを削除します。
azd down --purge
GitHub Codespaces をクリーンアップする
GitHub Codespaces 環境を削除すると、アカウントに対して取得するコア時間単位の無料エンタイトルメントの量を最大化できます。
重要
GitHub アカウントの権利の詳細については、「GitHub Codespaces の月単位のストレージとコア時間を参照してください。
GitHub Codespaces ダッシュボード (https://github.com/codespaces) にサインインします。
Azure-Samples/azure-search-openai-demo-csharpGitHub リポジトリから提供されている現在実行中のコードスペースを見つけます。
codespace のコンテキスト メニューを開いた後に、 [削除]を選択します。
ヘルプを得る
このサンプル リポジトリには、トラブルシューティング情報が用意されています。
問題が解決しない場合は、リポジトリの Issues に問題を記録します。
次のステップ
- この記事で使用するサンプルのソース コードを取得します
- Azure OpenAI ベスト プラクティス ソリューション アーキテクチャを使用してチャット アプリを構築する
- Azure AI 検索 を使用した Generative AI Apps でのアクセス制御
Azure API Management - ハイブリッド検索とランク付け機能を使用した優れたベクトル検索
.NET