次の方法で共有


Python 用の独自のデータ サンプルを使用してチャットを開始する

この記事では、Python 用の独自のデータ サンプルを使用してチャットをデプロイして実行する方法について説明します。 このサンプルでは、架空の会社における従業員の福利厚生に関する回答を得るために、Python、Azure OpenAI Service、Retrieval Augmented Generation (RAG) を使用して Azure AI Search にチャット アプリを実装しています。 このアプリには、従業員ハンドブック、福利厚生ドキュメント、会社の役割と期待値に関するリストなどの PDF ファイルを読み込ませます。

この記事の手順に従うことで、次の操作を行います:

  • チャット アプリを Azure にデプロイします。
  • 従業員の福利厚生に関する回答を取得します。
  • 応答の動作を変更するように設定を変更します。

この手順の完了後は、カスタム コードを使用して、新しいプロジェクト用の変更を開始できます。

この記事は、Azure OpenAI Service と Azure AI 検索を使用してチャット アプリを構築する方法を示す記事のコレクションの一部です。

コレクション内のその他の記事は次のとおりです:

Note

この記事では、記事内の例とガイダンスの土台として、1 つ以上の AI アプリ テンプレートを使用しています。 AI アプリ テンプレートは、適切にメンテナンスされ、デプロイが容易なリファレンス実装を提供します。これは、高品質な AI アプリの作成を開始するために役立ちます。

アーキテクチャの概要

チャット アプリの単純なアーキテクチャを次の図に示します:

クライアントからバックエンド アプリへのアーキテクチャを示す図。

アーキテクチャの主なコンポーネントは次のとおりです:

  • 対話型チャット エクスペリエンスをホストする Web アプリケーション。
  • 独自のデータから回答を得るための Azure AI Search リソース。
  • 以下を提供する Azure OpenAI Service:
    • 独自のデータに対する検索を強化するキーワード。
    • OpenAI モデルからの回答。
    • ada モデルからの埋め込み

コスト

このアーキテクチャのほとんどのリソースでは、Basic 価格レベルまたは従量課金価格レベルが使用されます。 従量課金価格は使用量に基づきます。つまり、使用した分だけ支払います。 この記事を完了するには、料金がかかりますが、最小限に抑えられます。 この記事の手順の完了後は、リソースを削除して料金の発生を停止できます。

サンプル リポジトリでコストの詳細を参照してください。

前提条件

開発コンテナー環境は、この記事を完了するために必要なすべての依存関係と共に使用できます。 開発コンテナーは、(ブラウザーで) GitHub Codespaces で実行することも、Visual Studio Code を使用してローカルで実行することもできます。

この記事の手順を使用するには、次の前提条件が必要になります。

  • Azure サブスクリプション - 無料アカウントを作成します
  • Azure アカウントのアクセス許可 - Azure アカウントには、ユーザー アクセス管理者所有者などの Microsoft.Authorization/roleAssignments/write アクセス許可が必要です。
  • 目的の Azure サブスクリプション内の Azure OpenAI に付与されたアクセス権。 現時点では、このサービスへのアクセスは申請によってのみ許可されます。 Azure OpenAI へのアクセスを申請するには、https://aka.ms/oai/access のフォームに入力してください。 問題がある場合は、このリポジトリで問題をオープンしてお問い合わせください。
  • GitHub アカウント

開発環境を開く

この記事を完了するため、すべての依存関係がインストールされている開発環境から始めます。

GitHub Codespaces は、 Visual Studio Code for the Web をユーザー インターフェイスとして使用して、GitHub によって管理される開発コンテナーを実行します。 最も簡単な開発環境では、GitHub Codespaces を使用して、この記事を完了するために正しい開発者ツールと依存関係がプレインストールされるようにします。

重要

すべての GitHub アカウントでは、2 つのコア インスタンスで毎月最大 60 時間無料で Codespaces を使用できます。 詳細については、「GitHub Codespaces に月単位で含まれるストレージとコア時間」を参照してください。

  1. main GitHub リポジトリの Azure-Samples/azure-search-openai-demo ブランチに新しい GitHub Codespace を作成するプロセスを開始します。

  2. 次のボタンを右クリックし、[新しいウィンドウでリンクを開く] を選択して、開発環境とドキュメントの両方を同時に使用できるようにします。

    GitHub codespaces で開く

  3. [codespace の作成] ページで、codespace の構成設定を確認した後に、[新しい codespace の作成] を選択します

    新しい codespace 作成前の構成画面のスクリーンショット。

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

  5. 画面の下部にあるターミナルで、Azure Developer CLI を使用して Azure にサインインします。

    azd auth login
    
  6. ターミナルからコードをコピーし、ブラウザーに貼り付けます。 手順に従って、Azure アカウントで認証します。

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

デプロイして実行する

サンプル リポジトリには、チャット アプリを Azure にデプロイするために必要なすべてのコードと構成ファイルが含まれています。 次の手順では、サンプルを Azure にデプロイするプロセスについて説明します。

チャット アプリを Azure にデプロイする

重要

このセクションで作成した Azure リソースでは、主に Azure AI Search リソースからのコストが直ちに発生します。 これらのリソースは、コマンドが完全に実行される前に中断した場合でも、コストが発生する可能性があります。

  1. 次の Azure Developer CLI コマンドを実行して、Azure リソースをプロビジョニングし、ソース コードをデプロイします:

    azd up
    
  2. 環境名の入力を求められた場合、短く小文字のままにします。 たとえば、myenv のようにします。 リソース グループ名の一部として使用されます。

  3. メッセージが表示されたら、リソースを作成するサブスクリプションを選択します。

  4. 最初に場所を選択するように求められたら、近くの場所を選択します。 この場所は、ホスティングを含むほとんどのリソースに使用されます。

  5. OpenAI モデルまたは Document Intelligence リソースの場所の入力を求められた場合は、最も近い場所を選択します。 最初の場所と同じ場所を使用できる場合は、その場所を選択します。

  6. アプリがデプロイされてから 5 分から 10 分待機して、続行します。

  7. アプリケーションが正常にデプロイされると、ターミナルに URL が表示されます。

    AZD CLI azd up プロセスの最後に報告されたデプロイ済みアプリのスクリーンショット。

  8. (✓) Done: Deploying service webapp とラベルの付いたその URL を選択して、ブラウザーでチャット アプリケーションを開きます。

    ブラウザーのチャット アプリのスクリーンショット。チャット入力に関するいくつかの提案と、質問を入力するためのチャット テキスト ボックスが表示されています。

チャット アプリを使用して PDF ファイルから回答を取得する

チャット アプリには、PDF ファイルからの従業員の福利厚生情報が事前に読み込まれています。 チャット アプリを使用して、福利厚生に関する質問をすることができます。 次の手順では、チャット アプリを使用するプロセスについて説明します。 基になるモデルが更新されると、回答が異なる場合があります。

  1. ブラウザーのチャット テキスト ボックスで、"What happens in a performance review?" (パフォーマンスレビューでは何が行われますか?) を選択するか、入力します。

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

  2. 回答から引用文献を選択します。

    引用が赤いボックスで強調表示された、チャット アプリの最初の回答のスクリーンショット。

  3. 右側のウィンドウでタブを使用して、回答がどのように生成されたかを確認します。

    Tab 説明
    思考プロセス これは、チャットでの対話のスクリプトです。 システム プロンプト (content) とユーザーの質問 (content) を表示できます。
    関連する参照先 これには、質問に答える情報とソース資料が含まれます。 ソース資料の引用文献の数は、[開発者設定] に表示されます。 既定値は 3 です。
    引用 引用文を含む元のページが表示されます。
  4. 完了したら、選択したタブをもう一度選択してペインを閉じます。

チャット アプリの設定を使用して応答の動作を変更する

チャットのインテリジェンスは、OpenAI モデルと、モデルとの対話に使用される設定によって決まります。

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

設定 説明
プロンプト テンプレートをオーバーライドする 質問と検索結果に基づいて回答を生成するために使用されるプロンプトをオーバーライドします。
温度 応答を生成する LLM に要求の温度を設定します。 温度が高いほどクリエイティブな反応が増えますが、接地が少なくなる可能性があります。
最小検索スコア Azure AI 検索から返される検索結果の最小スコアを設定します。 スコア範囲は、ハイブリッド (既定)、ベクターのみ、またはテキストのみを使用しているかどうかによって異なります。
最小リランカー スコア セマンティック リランカーから返される検索結果の最小スコアを設定します。 スコアの範囲は常に 0 ~ 4 です。 スコアが高いほど、結果が質問に対して意味的に関連性が高くなります。
これだけ多くの検索結果を取得する Azure AI 検索から取得する検索結果の数を設定します。 結果が多いほど正しい回答が見つかる可能性が高くなる可能性がありますが、モデルが "途中で失われる" 可能性があります。これらのソースは、引用文献の [思考プロセス] タブと [サポート コンテンツ] タブで返されます。
カテゴリの除外 検索結果から除外するカテゴリを指定します。 既定のデータ セットで使用されるカテゴリはありません。
セマンティック ランカーを使用して取得する ユーザーのクエリに対するセマンティック類似性に基づいて検索結果を再ランク付けするモデルである Azure AI Search セマンティック ランカーを有効にします。
セマンティック キャプションを使用する 完全な検索結果ではなく、セマンティック キャプションを LLM に送信します。 セマンティック キャプションは、セマンティック ランク付けの処理中に検索結果から抽出されます。
フォローアップの質問を提案する ユーザーのクエリに基づいてフォローアップの質問を提案するように LLM に依頼します。
取得モード Azure AI Search クエリの取得モードを設定します。 Vector + Text (Hybrid) はベクター検索とフルテキスト検索の組み合わせを使用し、 ベクター はベクター検索のみを使用し 、Text はフルテキスト検索のみを使用します。 一般に、ハイブリッドは最適です。
チャット完了応答をストリーミングする 応答が生成されると、チャット UI に継続的にストリーム配信されます。

次の手順では、設定を変更するプロセスについて説明します。

  1. ブラウザーで、[開発者設定] タブを選択します。

  2. [フォローアップの質問の提案] チェックボックスをオンにして、同じ質問をもう一度行います。

    What happens in a performance review?
    

    チャットから、次のようなフォローアップの質問の提案が返されました。

    1. What is the frequency of performance reviews?
    2. How can employees prepare for a performance review?
    3. Can employees dispute the feedback received during the performance review?
    
  3. [設定] タブで、[セマンティック ランカーを使用して取得する] の選択を解除します。

  4. もう一度同じ質問をします。

    What happens in a performance review?
    
  5. 回答の違いは何ですか?

    セマンティック ランカーを使用した場合: During a performance review at Contoso Electronics, employees will have the opportunity to discuss their successes and challenges in the workplace (Contoso Electronics のパフォーマンス レビューでは、従業員が職場での成功と課題について説明する機会があります) (1). The review will provide positive and constructive feedback to help employees develop and grow in their roles (レビューでは、従業員がその役割において能力を高め成長するために役立つ、前向きで建設的なフィードバックが提供されます) (1). The employee will receive a written summary of the performance review, which will include a rating of their performance, feedback, and goals and objectives for the upcoming year (従業員は、パフォーマンス レビューの要約を書面で受け取ります。これには、業績の評価、フィードバック、来年の目標と方針が含まれます) (1). The performance review is a two-way dialogue between managers and employees (パフォーマンス レビューは、マネージャーと従業員の間で行われる双方向の対話です) (1).

    セマンティック ランカーを使用しない場合: During a performance review at Contoso Electronics, employees have the opportunity to discuss their successes and challenges in the workplace (Contoso Electronics のパフォーマンス レビューでは、従業員が職場での成功と課題について説明する機会があります). Positive and constructive feedback is provided to help employees develop and grow in their roles (従業員がその役割において能力を高め成長するために役立つ、前向きで建設的なフィードバックが提供されます). A written summary of the performance review is given, including a rating of performance, feedback, and goals for the upcoming year (パフォーマンス レビューの要約が書面で提供されます。これには、業績の評価、フィードバック、来年の目標が含まれます). The review is a two-way dialogue between managers and employees (レビューは、マネージャーと従業員の間で行われる双方向の対話です) (1).

リソースをクリーンアップする

Azure リソースをクリーンアップする

この記事で作成した Azure リソースは、Azure サブスクリプションに課金されます。 今後これらのリソースが必要になるとは思わない場合は、削除して、より多くの料金が発生しないようにします。

次の Azure Developer CLI コマンドを実行して、Azure リソースを削除し、ソース コードを削除します:

azd down --purge --force

スイッチには次の機能が備わっています。

  • purge: 削除されたリソースがすぐに消去されます。 これにより、Azure OpenAI TPM を再利用することができます。
  • force: 削除はサイレント モードで行われ、ユーザーの同意は必要ありません。

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

GitHub Codespaces 環境を削除すると、アカウントに対して取得するコアごとの無料時間エンタイトルメントの量を最大化できることが保証されます。

重要

GitHub アカウントのエンタイトルメントの詳細については、「 GitHub Codespaces に月単位で含まれるストレージとコア時間」を参照してください。

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

  2. Azure-Samples/azure-search-openai-demo GitHub リポジトリをソースとして現在実行中の Codespaces を見つけます。

    状態とテンプレートを含むすべての実行中の Codespaces のスクリーンショット。

  3. codespace のコンテキスト メニューを開いた後に、 [削除]を選択します。

    削除オプションがハイライトされた 1 つの codespace のコンテキスト メニューのスクリーンショット。

ヘルプを参照する

このサンプル リポジトリでは、トラブルシューティング情報が提供されます。

問題が解決しない場合は、リポジトリの [問題] にその問題を記録します。

次のステップ