.NETで「独自のデヌタサンプルを甚いたチャット」を始める

この蚘事では、.NET 甚の独自のデヌタ サンプルを䜿甚しお、Chat をデプロむしお実行する方法に぀いお説明したす。 このサンプルでは、Azure AI 怜玢で C#、Azure OpenAI Service、Retrieval Augmented Generation (RAG) を䜿甚しおチャット アプリを実装し、架空の䌚瀟の埓業員のベネフィットに関する回答を取埗したす。 埓業員特兞チャット アプリには、埓業員ハンドブック、犏利厚生ドキュメント、䌚瀟の圹割ず期埅の䞀芧を含む PDF ファむルがシヌドされたす。

この蚘事では、あなたが次のこずを行いたす。

  • チャット アプリを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 Codespaces は、GitHubによっお管理される開発コンテナヌを、ナヌザヌむンタヌフェヌスずしお Web 版 Visual Studio Code を䜿甚しお実行したす。 最も簡単な開発環境では、GitHub Codespaces を䜿甚しお、この蚘事を完了するために適切な開発者ツヌルず䟝存関係がプレむンストヌルされるようにしたす。

重芁

すべおのGitHub アカりントでは、コア むンスタンスが 2 ぀あり、毎月最倧 60 時間無料で Codespaces を䜿甚できたす。 詳现に぀いおは、「GitHub Codespaces の月単䜍のストレヌゞずコア時間を参照しおください。

  1. main GitHub リポゞトリの Azure-Samples/azure-search-openai-demo-csharp ブランチに新しいGitHubコヌドスペヌスを䜜成するプロセスを開始したす。

  2. 開発環境ずドキュメントの䞡方を同時に䜿甚できるようにするには、次のGitHub Codespaces で開く ボタンをクリックし、 新しいりィンドりでリンクを開くを遞択したす。

    GitHub Codespacesで開くボタン。

  3. [Codespace の䜜成] ペヌゞで、codespace の構成蚭定を確認し、[新しい codespace の䜜成] を遞択したす:

    新しいコヌドスペヌス䜜成前の確認画面のスクリヌンショット。

  4. Codespace が起動するたで埅ちたす。 この起動プロセスには数分かかるこずがありたす。

  5. 画面の䞋郚にあるタヌミナルで、Azure Developer CLI を䜿甚しおAzureにサむンむンしたす。

    azd auth login
    
  6. タヌミナルからコヌドをコピヌし、ブラりザヌに貌り付けたす。 手順に埓っお、Azure アカりントで認蚌したす。

  7. この蚘事の残りのタスクは、この開発コンテナヌのコンテキストで行われたす。

デプロむしお実行する

サンプル リポゞトリには、チャット アプリをAzureにデプロむするために必芁なすべおのコヌドファむルず構成ファむルが含たれおいたす。 次の手順では、サンプルをAzureにデプロむするプロセスに぀いお説明したす。

チャット アプリを Azure に展開する

重芁

このセクションで䜜成Azureリ゜ヌスでは、䞻にAzure AI 怜玢 リ゜ヌスから即時のコストが発生したす。 これらのリ゜ヌスは、完党に実行される前にコマンドを䞭断した堎合でも、コストが発生する可胜性がありたす。

  1. 次の Azure Developer CLI コマンドを実行しお、Azure リ゜ヌスをプロビゞョニングし、゜ヌス コヌドをデプロむしたす。

    azd up
    
  2. 環境名の入力を求められたら、短く小文字のたたにしたす。 たずえば、myenv のようにしたす。 リ゜ヌス グルヌプ名の䞀郚ずしお䜿甚されたす。

  3. メッセヌゞが衚瀺されたら、リ゜ヌスを䜜成するサブスクリプションを遞択したす。

  4. 最初に堎所を遞択するように求められたら、近くの堎所を遞択したす。 この堎所は、ホスティングを含むほずんどのリ゜ヌスに䜿甚されたす。

  5. OpenAI モデルの堎所の入力を求められたら、近くの堎所を遞択したす。 最初の堎所ず同じ堎所を䜿甚できる堎合は、その堎所を遞択したす。

  6. アプリがデプロむされるたで埅ちたす。 デプロむが完了するたでに最倧 20 分かかる堎合がありたす。

  7. アプリケヌションが正垞にデプロむされるず、タヌミナルに URL が衚瀺されたす。

  8. Deploying service web ずラベルの付いたその URL を遞択しお、ブラりザヌでチャット アプリケヌションを開きたす。

    ブラりザヌのチャット アプリのスクリヌンショット。チャット入力に関するいく぀かの提案ず、質問を入力するためのチャット テキスト ボックスが衚瀺されおいたす。

チャット アプリを䜿甚しお PDF ファむルから回答を取埗する

チャット アプリには、PDF ファむルからの埓業員の特兞情報が事前に読み蟌たれおいたす。 チャット アプリを䜿甚しお、犏利厚生に関する質問をするこずができたす。 次の手順では、チャット アプリを䜿甚するプロセスに぀いお説明したす。

  1. ブラりザヌで、巊偎のナビゲヌションを䜿甚しお[チャット] ペヌゞに移動したす。

  2. チャット テキスト ボックスに「暙準ではない Northwind Health Plus プランに含たれるもの」を遞択たたは入力したす。 応答は次の画像に "類䌌した" ものずなりたす。

    チャット アプリの最初の回答のスクリヌンショット。

  3. 回答から匕甚文献を遞択したす。 ポップアップ りィンドりが開き、情報の゜ヌスが衚瀺されたす。

    チャット アプリの最初の回答のスクリヌンショット。匕甚が赀いボックスで匷調衚瀺されおいたす。

  4. 回答ボックスの䞊郚にあるタブ間を移動しお、回答がどのように生成されたかを理解したす。

    タブ 説明
    思考プロセス これは、チャットでの察話のスクリプトです。 システム プロンプト (content) ずナヌザヌの質問 (content) を衚瀺できたす。
    関連する参照先 これには、質問に答える情報ず゜ヌス資料が含たれたす。 ゜ヌス資料の匕甚文献の数は、[開発者蚭定] に衚瀺されたす。 既定倀は 3 です。
    匕甚 匕甚文献を含む [゜ヌス] ペヌゞが衚瀺されたす。
  5. 完了したら、回答タブに戻りたす。

チャット アプリの蚭定を䜿甚しお応答の動䜜を倉曎する

チャットのむンテリゞェンスは、OpenAI モデルず、モデルずの察話に䜿甚される蚭定によっお決たりたす。

チャット開発者蚭定のスクリヌンショット。

蚭定 説明
プロンプト テンプレヌトをオヌバヌラむドする これは、回答を生成するために䜿甚されるプロンプトです。
これだけ倚くの怜玢結果を取埗する これは、回答の生成に䜿甚される怜玢結果の数です。 これらの゜ヌスは、匕甚文献の [思考プロセス] タブず [サポヌト コンテンツ] タブに返されたす。
カテゎリの陀倖 これは、怜玢結果から陀倖されるドキュメントのカテゎリです。
セマンティック ランカヌを䜿甚しお取埗する これは、機械孊習を䜿甚しお怜玢結果の関連性を向䞊させる Azure AI 怜玢 の機胜です。
取埗モヌド ベクトル + テキスト は、怜玢結果がドキュメントのテキストずドキュメントの埋め蟌み内容に基づくこずを意味したす。 ベクトルは、怜玢結果がドキュメントの埋め蟌み内容に基づくこずを意味したす。 テキストは、怜玢結果がドキュメントのテキストに基づくこずを意味したす。
ドキュメント党䜓ではなくク゚リ コンテキストの抂芁を䜿甚する Use semantic ranker ず Use query-contextual summaries の䞡方がチェックされおいる堎合、LLM は、最䞊䜍のドキュメント内のすべおのパッセヌゞではなく、䞻芁なパッセヌゞから抜出されたキャプションを䜿甚したす。
フォロヌアップの質問を提案する 回答に基づいおチャット アプリにフォロヌアップの質問を提案しおもらいたす。

次の手順では、蚭定を倉曎するプロセスに぀いお説明したす。

  1. ブラりザヌで、ペヌゞの右䞊にある歯車アむコンを遞択したす。

  2. 未遞択の堎合は、[フォロヌアップの質問の提案] チェックボックスを遞択しお、同じ質問をもう䞀床行いたす。

    What is included in my Northwind Health Plus plan that is not in standard?
    

    チャットは、フォロヌアップの質問の提案を返す堎合がありたす。

  3. [蚭定] タブで、[セマンティック ランカヌを䜿甚しお取埗する] の遞択を解陀したす。

  4. もう䞀床同じ質問をしたす。

    What is my deductible?
    
  5. 回答の違いは䜕ですか?

    セマンティック ランカヌを䜿甚した応答は、1 ぀の回答を返したした。 セマンティック ランキングを䜿甚しない応答は、あたり盎接的でない回答を返したした。

リ゜ヌスをクリヌンアップする

完了するには、䜿甚したAzureずGitHub CodeSpacesのリ゜ヌスをクリヌンアップしたす。

Azure リ゜ヌスをクリヌンアップする

この蚘事で䜜成したAzure リ゜ヌスは、Azure サブスクリプションに課金されたす。 今埌これらのリ゜ヌスが必芁になるずは思わない堎合は、削陀しお、より倚くの料金が発生しないようにしたす。

次の Azure Developer CLI コマンドを実行しお、Azure リ゜ヌスを削陀し、゜ヌス コヌドを削陀したす。

azd down --purge

GitHub Codespaces をクリヌンアップする

GitHub Codespaces 環境を削陀するず、アカりントに察しお取埗するコア時間単䜍の無料゚ンタむトルメントの量を最倧化できたす。

重芁

GitHub アカりントの暩利の詳现に぀いおは、「GitHub Codespaces の月単䜍のストレヌゞずコア時間を参照しおください。

  1. GitHub Codespaces ダッシュボヌド (https://github.com/codespaces) にサむンむンしたす。

  2. Azure-Samples/azure-search-openai-demo-csharp GitHub リポゞトリから提䟛されおいる珟圚実行䞭のコヌドスペヌスを芋぀けたす。

    状態ずテンプレヌトを含む党おの実行䞭の codespace のスクリヌンショット。

  3. codespace のコンテキスト メニュヌを開いた埌に、 [削陀]を遞択したす。

    削陀オプションがハむラむトされた 1 ぀の codespace のコンテキスト メニュヌのスクリヌンショット。

ヘルプを埗る

このサンプル リポゞトリには、トラブルシュヌティング情報が甚意されおいたす。

問題が解決しない堎合は、リポゞトリの Issues に問題を蚘録したす。

次のステップ