次の方法で共有


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

この記事では、Python のコード例を使用して独自のデータ サンプルでチャットをデプロイして実行する方法について説明します。 このサンプル チャット アプリケーションは、Azure AI Search を使用して Python、Azure OpenAI Service、 および取得拡張生成 (RAG) を使用して構築されています。

このアプリは、架空の会社の従業員の特典に関するユーザーの質問に対する回答を提供します。 Retrieval-Augmented 生成 (RAG) を使用して、提供された PDF ファイルのコンテンツを参照します。これには、次のものが含まれます。

  • 従業員ハンドブック
  • 特典の概要に関するドキュメント
  • 会社の役割と期待の一覧

これらのドキュメントを分析することで、アプリは、コンテキストに応じた正確な回答を使用して自然言語クエリに応答できます。 このアプローチでは、独自のデータを使用して、Azure OpenAI と Azure AI Search を使用してインテリジェントなドメイン固有のチャット エクスペリエンスを強化する方法を示します。

また、応答動作を変更するようにアプリの設定を構成する方法についても説明します。

この記事の手順を完了すると、独自のコードを使用してプロジェクトのカスタマイズを開始できます。 この記事は、Azure OpenAI Service と Azure AI Search を使用してチャット アプリを構築する方法について説明するシリーズの一部です。 このシリーズの他の記事は次のとおりです。

手記

この記事は、1 つ以上の AI アプリ テンプレートに基づいています。これは、十分に保守された参照実装として機能します。 これらのテンプレートは、簡単にデプロイできるように設計されており、独自の AI アプリケーションを構築するための信頼性の高い高品質の開始点を提供します。

サンプル アプリのアーキテクチャ

次の図は、チャット アプリの単純なアーキテクチャを示しています。

データ ソースを使用したクライアントからバックエンド チャット アプリへのサンプルのアーキテクチャを示す図。

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

  • 対話型チャット インターフェイス (通常は Python Flask または JavaScript/React を使用して構築) をホストし、ユーザーの質問をバックエンドに送信して処理する Web アプリケーション。
  • インデックス付きドキュメント (PDF、Word ファイルなど) に対してインテリジェントな検索を実行し、応答で使用するために関連するドキュメントの抜粋 (チャンク) を返す Azure AI Search リソース。
  • 次の条件を満たす Azure OpenAI サービス インスタンス。
    • セマンティック類似性検索のために、ドキュメントとユーザーの質問をベクター表現に変換します。
    • Azure AI Search クエリを絞り込むための重要なキーワードを抽出します。
    • 取得したデータとユーザー クエリを使用して、最終的な応答を合成します。

チャット アプリの一般的なフローは次のとおりです。

  • ユーザーが質問を送信する: ユーザーは、Web アプリ インターフェイスを介して自然言語の質問を入力します。
  • Azure OpenAI は質問を処理します。バックエンドは Azure OpenAI を使用して次の処理を行います。
    • text-embedding-ada-002 モデルを使用して質問の埋め込みを生成します。
    • 必要に応じてキーワードを抽出して検索の関連性を調整する
  • Azure AI Search は関連するデータを取得します。埋め込みまたはキーワードは、Azure AI Search でインデックス付きコンテンツ (PDF など) に対してセマンティック検索を実行するために使用されます。
  • 結果と質問を組み合わせる: 最も関連性の高いドキュメントの抜粋 (チャンク) は、ユーザーの元の質問と組み合わされます。
  • Azure OpenAI によって応答が生成されます。結合された入力は GPT モデル (gpt-35-turbo や gpt-4 など) に渡され、コンテキスト対応の回答が生成されます。
  • 応答がユーザーに返されます。生成された回答がチャット インターフェイスに表示されます。

前提 条件

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

この記事を使用するには、次の前提条件が必要です。

  • Azure サブスクリプション。 始める前に、無料アカウントを作成します。

  • Azure アカウントのアクセス許可。 Azure アカウントには、Microsoft.Authorization/roleAssignments/write アクセス許可が必要です。 ユーザー アクセス管理者所有者などのロールがこの要件を満たします。

  • Azure サブスクリプションで Azure OpenAI に付与されるアクセス。 ほとんどの場合、カスタム コンテンツ フィルターを作成し、Azure OpenAI モデルへの一般的なアクセス権を持つ重大度レベルを管理できます。 承認ベースのアクセスの登録は、一般的なアクセスには必要ありません。 詳細については、「 Azure AI サービスの制限付きアクセス機能」を参照してください。

  • コンテンツ フィルターまたは不正使用の変更 (省略可能)。 カスタム コンテンツ フィルターを作成したり、重大度レベルを変更したり、不正使用の監視をサポートしたりするには、正式なアクセス承認が必要です。 必要な登録フォームを入力して、アクセスを申請できます。 詳細については、「 変更されたコンテンツ フィルターや不正使用の監視の登録」を参照してください。

  • サポートとトラブルシューティングへのアクセス。 トラブルシューティングにアクセスするには、GitHub リポジトリでサポートの問題を開きます。

  • GitHub アカウント。 リポジトリをフォークし、GitHub Codespaces を使用するか、ローカルに複製するために必要です。

サンプル リソースの使用コスト

このアーキテクチャで使用されるほとんどのリソースは、基本または従量課金ベースの価格レベルに分類されます。 つまり、使用した分だけ料金が発生し、通常は開発またはテスト中に料金が最小限に抑えられます。

このサンプルを完了するには、Azure OpenAI、AI Search、ストレージなどのサービスを使用すると、わずかなコストが発生する可能性があります。 アプリの評価またはデプロイが完了したら、プロビジョニングされたすべてのリソースを削除して、継続的な料金を回避できます。

予想されるコストの詳細な内訳については、サンプルの GitHub リポジトリの コスト見積もり を参照してください。

オープン開発環境

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

  • Azure サブスクリプション。 無料で作成しましょう
  • Azure アカウントのアクセス許可。 Azure アカウントには、Microsoft.Authorization/roleAssignments/write アクセス許可が必要です。 ユーザー アクセス管理者所有者などのロールがこの要件を満たします。
  • GitHub アカウント。 リポジトリをフォークし、GitHub Codespaces を使用するか、ローカルに複製するために必要です。

開発環境を開く

この記事を完了するために必要なすべての依存関係を含む、構成済みの開発環境をデプロイするには、次の手順に従います。

最もシンプルで効率的なセットアップを行うには、 GitHub Codespaces を使用します。 GitHub Codespaces は、GitHub によって管理される開発コンテナーを実行し、ユーザー インターフェイス (UI) として Web 用の Visual Studio Code を提供します。 この環境には、必要なすべてのツール、SDK、拡張機能、依存関係がプレインストールされているため、手動構成なしですぐに開発を開始できます。

Codespaces を使用すると、次の内容が保証されます。

  • 正しい開発者ツールとバージョンが既にインストールされています。
  • Docker、VS Code、または拡張機能をローカルにインストールする必要はありません。
  • 迅速なオンボードと再現可能な環境セットアップ。

重要

すべての GitHub アカウントでは、2 つのコア インスタンスで毎月最大 60 時間無料で GitHub Codespaces を使用できます。 無料クォータを超えた場合、またはより大きなコンピューティング オプションを使用する場合は、標準の GitHub Codespaces の課金レートが適用されます。 詳細については、「 GitHub Codespaces - 月単位に含まれるストレージとコア時間」を参照してください。

  1. サンプル プロジェクトの操作を開始するには、main GitHub リポジトリの Azure-Samples/azure-search-openai-demo ブランチに新しい GitHub コードスペースを作成します。

    リポジトリ ページの上部にある [GitHub Codespaces - Open ] オプションを右クリックし、[ 新しいウィンドウでリンクを開く] を選択します。 これにより、開発コンテナーが全画面表示の専用ブラウザー タブで起動され、ソース コードと組み込みドキュメントの両方にアクセスできるようになります。

    [Open in GitHub Codespaces]\(GitHub Codespaces で開く\) オプションの画像。

  2. [ 新しいコードスペースの作成 ] ページで、コードスペースの構成設定を確認し、[ コードスペースの作成] を選択します。

    サンプルの新しい GitHub コードスペースを作成するための確認画面のスクリーンショット。

    GitHub コードスペースが起動するまで待ちます。 スタートアップ プロセスには数分かかる場合があります。

  3. GitHub コードスペースが開いたら、コードスペースのターミナル ウィンドウで次のコマンドを入力して、Azure Developer CLI を使用して Azure にサインインします。

    azd auth login
    

    GitHub がターミナル ウィンドウにセキュリティ コードを表示します。

    1. ターミナル ウィンドウでセキュリティ コードをコピーし、Enter キーを します。 ブラウザー ウィンドウが開きます。

    2. プロンプトで、セキュリティ コードをブラウザー フィールドに貼り付けます。

    3. 手順に従って、Azure アカウントで認証します。

この開発コンテナーのコンテキストで、この記事の残りの GitHub Codespaces タスクを完了します。

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

サンプル リポジトリには、独自のデータ アプリケーションを含む Chat を Azure にデプロイするために必要なものがすべて含まれています。

  • アプリケーション ソース コード (Python)
  • コードとしてのインフラストラクチャ ファイル (Bicep)
  • GitHub 統合と CI/CD の構成 (省略可能)

次の手順を使用して、Azure Developer CLI (azd) を使用してアプリをデプロイします。

重要

このセクションで作成された Azure リソース (特に Azure AI Search) は、デプロイが完了前に中断された場合でも、プロビジョニングの直後に料金の発生を開始できます。 予期しない料金を回避するには、Azure の使用状況を監視し、テスト後すぐに未使用のリソースを削除します。

  1. Visual Studio Code ターミナル ウィンドウで、次の azd コマンドを実行して、Azure リソースを作成し、ソース コードをデプロイします。

    azd up
    
  2. このプロセスでは、構成に基づいて、次の設定の 1 つ以上の入力を求められます。

    • 環境名: この値は、リソース グループ名の一部として使用されます。 - などの小文字とダッシュ () で短い名前を入力します。 大文字、数字、特殊文字はサポートされていません。

    • サブスクリプション: リソースを作成するサブスクリプションを選択します。 目的のサブスクリプションが表示されない場合は、方向キーを使用して、使用可能なサブスクリプションの完全な一覧をスクロールします。

    • 場所: このリージョンの場所は、ホスティングを含むほとんどのリソースに使用されます。 地理的に近いリージョンの場所を選択します。

    • OpenAI モデルまたはドキュメント インテリジェンス リソースの場所: 地理的に最も近い場所を選択します。 [場所] で選択したリージョンがこの設定で使用できる場合は、同じリージョンを選択します。

    アプリのデプロイには時間がかかる場合があります。 続行する前に、デプロイが完了するまで待ちます。

  3. アプリが正常にデプロイされると、ターミナル ウィンドウにエンドポイント URL が表示されます。

  4. エンドポイント URL を選択して、ブラウザーでチャット アプリケーションを開きます。

    チャット入力に関するいくつかの提案と、質問を入力するためのチャット テキスト ボックスを示すチャット アプリのスクリーンショット。

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

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

  1. チャット アプリ で、[パフォーマンス レビューで何が起こるか] オプションを 選択するか、チャット テキスト ボックスに同じテキストを入力します。 アプリは最初の応答を返します。

    質問のチャット アプリからの最初の回答のスクリーンショット。パフォーマンス レビューでは何が起こりますか?

  2. 回答ボックスで、引用文献を選択します。

    チャット アプリの回答ボックスで強調表示されている引用文献を示すスクリーンショット。

  3. GitHub Codespaces では、3 つのタブ付き領域がある右の 引用 文献ウィンドウが開き、[ 引用文献 ] タブにフォーカスがあります。

    GitHub Codespaces で開いている右側のウィンドウのスクリーンショット。[引用文献] タブに情報が表示されています。

    GitHub Codespaces には、チャット アプリが回答をどのように生成したかを理解するのに役立つ 3 つの情報タブが用意されています。

    タブ 説明
    思考過程 チャット内の質問/回答の対話のスクリプトを表示します。 チャット アプリの systemによって提供されるコンテンツ、 userによって入力された質問、システム assistantによって行われた説明を表示できます。
    コンテンツのサポート 質問に回答するために使用される情報とソース 資料を一覧表示します。 ソース資料引用の数は、 開発者設定で指定します。 引用文献の既定の数は 3 です
    引用文献 選択した引用文献の元のソースの内容を表示します。
  4. 完了したら、右側のウィンドウで現在選択されているタブを選択します。 右側のウィンドウが閉じます。

設定を使用して応答の動作を変更する

特定の OpenAI モデルによって、チャットのインテリジェンスと、モデルとの対話に使用される設定が決まります。 [開発者設定] オプションを選択すると、[回答生成の構成] ウィンドウが開き、チャット アプリの設定を変更できます。

チャット アプリの右側のウィンドウで使用できる開発者設定のスクリーンショット。

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

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

  1. ブラウザーで、[ 開発者設定 ] オプションを選択します。

  2. [ フォローアップの質問の提案 ] チェックボックスをオンにしてオプションを有効にし、[ 閉じる ] を選択して設定の変更を適用します。

  3. チャットアプリで、質問ボックスにテキストを入力して、もう一度質問してください。

    What happens in a performance review?
    

    チャット アプリの回答に、推奨されるフォローアップの質問が含まれるようになりました。

    チャット アプリが回答の後に推奨されるフォローアップの質問を提供する方法を示すスクリーンショット。

  4. [開発者設定] オプションをもう一度選択し、[セマンティック ランカーを使用して取得] オプションをオフにします。 設定を閉じます。

  5. もう一度同じ質問をして、チャット アプリからの回答の違いに注目してください。

    セマンティック ランカー: "Contoso Electronics でのパフォーマンス レビュー中に、上司は過去 1 年間のパフォーマンスについて話し合い、改善のための領域に関するフィードバックを提供します。 また、来年の目標と目標について話し合う機会もあります。 レビューは、マネージャーと従業員の間の双方向の対話であり、従業員が誠実でオープンなプロセスを行うよう奨励されています (1)。 レビュー中に提供されるフィードバックは、従業員の役割の発展と成長を支援することを目的として、肯定的で建設的である必要があります。 従業員は、業績レビューの要約を書面で受け取ります。これには、今後の年 (1) の業績、フィードバック、目標と目標の評価が含まれます。

    セマンティック ランカーなし: "Contoso Electronics でのパフォーマンス レビュー中に、上司は過去 1 年間のパフォーマンスについて話し合い、改善のための領域に関するフィードバックを提供します。 正直でオープンにすることが奨励されている双方向の対話です(1)。 レビュー中に提供されるフィードバックは、自分の役割の発展と成長を支援することを目的として、肯定的で建設的である必要があります。 今後 1 年間のパフォーマンス、フィードバック、目標の評価を含む、レビューの要約が書面で送信されます。

リソースのクリーンアップ

演習を完了したら、不要になったリソースを削除することをお勧めします。

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

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

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

azd down --purge --force

コマンド スイッチには次のものが含まれます。

  • purge: 削除されたリソースは直ちに消去されます。 このオプションを使用すると、1 分あたりの Azure OpenAI トークン (TPM) メトリックを再利用できます。
  • force: 削除は、ユーザーの同意を必要とせずに、自動的に行われます。

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

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

重要

GitHub アカウントの権利について詳しく知りたい場合は、「GitHub Codespaces - 月ごとのストレージとコア時間の含有量」を参照してください。

  1. GitHub Codespaces ダッシュボードにサインインします。

  2. ダッシュボードで、 Azure-Samples/azure-search-openai-demo GitHub リポジトリから提供されている現在実行中のコードスペースを見つけます。

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

  3. コードスペースのコンテキスト メニューを開き、[削除] を選択 します

    削除オプションが強調表示されている 1 つのコードスペースのコンテキスト メニューのスクリーンショット。

助けを得る

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

問題が解決しない場合は、リポジトリの Issues Web ページに問題を追加します。