次の方法で共有


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

この記事では、Java のデータ サンプルを使用してChat をデプロイして実行する方法について説明します。 このサンプルでは、Azure AI Search で Java、Azure OpenAI Service、取得拡張生成 (RAG) を使用してチャット アプリを実装し、架空の会社の従業員のベネフィットに関する回答を取得します。 このアプリには、従業員ハンドブック、特典ドキュメント、会社の役割と期待の一覧を含む PDF ファイルがシードされます。

この記事では、次のタスクを実行します。

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

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

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

手記

この記事では、記事の例とガイダンスの基礎として 1 つ以上の AI アプリ テンプレートを使用します。 AI アプリ テンプレートを使用すると、AI アプリの高品質な開始点を確保するのに役立つ、保守性が高く、簡単にデプロイできる参照実装が提供されます。

アーキテクチャの概要

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

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

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

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

費用

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

サンプル リポジトリ コストの詳細について説明します。

前提 条件

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

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

  • Azure サブスクリプション - 無料で作成できます
  • Azure アカウントのアクセス許可 - Azure アカウントには、ユーザー アクセス管理者 や所有者 など、Microsoft.Authorization/roleAssignments/write アクセス許可が必要です。
  • GitHub アカウント。

オープン開発環境

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

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

重要

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

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

    GitHub Codespaces で開く

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

    新しいコードスペースを作成する前の確認画面のスクリーンショット。

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

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

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

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

デプロイと実行

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

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

重要

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

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

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

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

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

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

  6. アプリがデプロイされるまで待ちます。完了するまで 5 ~ 10 分かかる場合があります。

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

  8. ブラウザーでチャット アプリケーションを開くには、Deploying service web というラベルが付いた URL を選択します。

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

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

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

  1. ブラウザーのチャット テキスト ボックスで Northwind Health Plus プランに含まれていて、標準プランに含まれていないものは何ですか? を選択するか、入力します。

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

  2. 回答から、いずれかの引用文献を選択します。

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

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

    タブ 説明
    思考プロセス チャットでの対話のスクリプト。
    コンテンツ をサポートする 質問に回答するための情報とソース資料が含まれています。
    引用文献 引用文献を含む PDF ページを表示します。
  4. 完了したら、選択したタブをもう一度選択してウィンドウを閉じます。

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

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

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

設定 説明
プロンプト テンプレートをオーバーライドする 回答の生成に使用されるプロンプト。
この多くの検索結果を取得する 回答の生成に使用される検索結果の数。 これらのソースは、引用文献の[思考プロセス]タブと[サポートコンテンツ]タブで確認することができます。
カテゴリを除外する 検索結果から除外されるドキュメントのカテゴリ。
セマンティック ランカーを使用して取得する 機械学習 使用して検索結果の関連性を向上させる Azure AI Search の機能。
ドキュメント全体ではなくクエリ コンテキストの概要を使用する Use semantic rankerUse query-contextual summaries の両方がチェックされている場合、LLM(言語モデル)は、全文ではなく、主要な部分から抽出されたキャプションを上位のドキュメントで使用します。
フォローアップの質問を提案する チャット アプリで、回答に基づいてフォローアップの質問を提案します。
取得モード Vector + Text は、検索結果がドキュメントのテキストとドキュメントの埋め込み内容に基づいて行われることを意味します。 ベクター は、検索結果がドキュメントの埋め込み内容に基づくことを意味します。 テキスト は、検索結果がドキュメントのテキストに基づくことを意味します。
チャット完了応答をストリーム配信する 完全な回答が用意されるのを待たずに、即時にストリームで応答します。

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

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

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

    What is my deductible?
    

    チャットでは、次のような推奨されるフォローアップの質問が返されます。

    1. What is the cost sharing for out-of-network services?
    2. Are preventive care services subject to the deductible?
    3. How does the prescription drug deductible work?
    
  3. [設定] タブで、[セマンティック ランカーを使用して取得する] の選択を解除します。

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

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

    たとえば、セマンティック ランカーを使用した応答では、The deductible for the Northwind Health Plus plan is $2,000 per yearという 1 つの回答が提供されました。

    セマンティックランク付けなしの応答は回答を返しました。答えを得るにはさらに多くの作業が必要です:Based on the information provided, it is unclear what your specific deductible is. The Northwind Health Plus plan has different deductible amounts for in-network and out-of-network services, and there is also a separate prescription drug deductible. I would recommend checking with your provider or referring to the specific benefits details for your plan to determine your deductible amount.

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

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

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

azd down --purge

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

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

重要

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

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

  2. Azure-Samples/azure-search-openai-demo-java GitHub リポジトリから入手した、現在実行中の Codespace を見つけます。

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

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

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

質問はどのように答えますか?

アプリは 2 つのアプリに分かれています。

  • React フレームワークと Vite ビルド ツールを使用するフロントエンド JavaScript アプリケーション。
  • バックエンド Java アプリケーションが質問に回答します。

バックエンド /chat API は、回答を取得するプロセスを段階的に進みます。

  • RAG オプションを作成する: 回答の生成に使用する一連のオプションを作成します。
  • RAG オプションを使用したアプローチの作成: 取得ベースのモデルと生成ベースのモデルの組み合わせを使用して、正確で自然に聞こえる応答を生成するアプローチを作成します。
  • RAG オプションと前の会話を使用してアプローチを実行する: アプローチと RAG オプションを使用して、前の会話に基づいて回答を生成します。 回答には、応答の生成に使用されたドキュメントに関する情報が含まれます。

ヘルプを受ける

このサンプル リポジトリでは、トラブルシューティング情報を提供します。 問題が解決しない場合は、リポジトリの Issuesに記録します。

次の手順