Dialogflow CX ジェネレータとデータストアを使用した情報に基づく意思決定

1. 概要

最終更新日: 2023 年 10 月 10 日

作成するアプリの概要

この Codelab では、Vertex AI Conversation と Dialogflow CX を使用して、献血者を支援し、必要な資格要件を満たしていることを確認する仮想エージェントを構築、デプロイ、構成します。エージェントは、Dialogflow CX のフルフィルメントで、実際の一般公開データと Google の生成大規模言語モデル(LLM)を使用します。

使用する機能

この Codelab を完了するには、次の 3 つの異なる機能を構成します。

データストア エージェント

Vertex AI Conversation 機能は、データストア エージェントと呼ばれる特別な Dialogflow エージェントを作成します。

ウェブサイトの URL、構造化データ、または非構造化データ(データストア)を指定すると、Google がコンテンツを解析し、データストアと大規模言語モデルを活用した仮想エージェントを作成します。お客様やエンドユーザーはそのエージェントと会話して、コンテンツについて質問することができます。このタイプのエージェントについては、Vertex AI Conversation の概要をご覧ください。

生成ツール

ジェネレータ機能は Dialogflow CX の機能です。この機能により、デベロッパーは Google の最新の生成大規模言語モデル(LLM)とカスタム プロンプトを使用して、実行時にエージェントのレスポンスを生成できます。ジェネレータは、トレーニングに使用された大規模なテキスト データセットからの一般知識や会話のコンテキストを含む、一般的なレスポンスを処理できます。

生成フォールバック

生成フォールバック機能は、エンドユーザーの入力がフォーム入力のインテントまたはパラメータと一致しない場合に、Google の最新の生成大規模言語モデル(LLM)を使用して仮想エージェントのレスポンスを生成します。この機能は、LLM に応答方法を指示するテキスト プロンプトを使用して構成できます。テキスト プロンプトは、事前定義されたものを使用することも、独自のプロンプトを追加することもできます。フローやページ、またはパラメータの入力中に使用される、一致しないイベント ハンドラで生成フォールバックを有効にできます。一致しないイベントに対して生成フォールバックが有効になっている場合、そのイベントがトリガーされるたびに、Dialogflow はユーザーに返すレスポンスを生成しようとします。レスポンスの生成に失敗した場合は、代わりに通常の所定のエージェント レスポンスが発行されます。生成フォールバックについて詳しくは、こちらの Codelab をご覧ください。

学習内容

  • 非構造化データからデータストア エージェントを作成する方法
  • ナレッジ ハンドラを使用して、データストアに追加されたコンテンツについてエンドユーザーが仮想エージェントと会話できるようにする方法。
  • 組み込みのジェネレータ プロンプト プレースホルダを使用して、ジェネレータのテキスト プロンプトを構成し、コンテキストに応じたものにする方法。
  • 単語をジェネレータ プロンプト プレースホルダとしてマークし、後でフルフィルメントのセッション パラメータに関連付けて、実行時にその値を使用する。
  • 大規模なテキスト データセットから得た知識と現在の会話のコンテキストを含むレスポンスを処理するようにジェネレータを構成する方法。
  • ジェネレータを使用して正式なメールを生成する方法
  • エージェントをテストし、お客様からの質問をシミュレートしてレスポンスを生成する方法

必要なもの

  • Google Cloud プロジェクト
  • Chrome などのブラウザ

2. API を有効にする

Vertex AI Conversation でデータストア エージェントを作成する前に、Dialogflow と Vertex AI Search and Conversation API を有効にする必要があります。

Dialogflow API を有効にする手順は次のとおりです。

  1. ブラウザで、Dialogflow API サービスの詳細ページに移動します。
  2. [有効にする] ボタンをクリックし、Google Cloud プロジェクトで Dialogflow API を有効にします。

Vertex AI Search and Conversation API を有効にする手順は次のとおりです。

  1. Google Cloud コンソールで、Vertex AI Search and Conversation コンソールに移動します。
  2. 利用規約を読んで同意し、[続行して API を有効にする] をクリックします。

3. 新しいチャットアプリとアプリのデータストアを作成する

次に、仮想エージェント用の新しいチャットアプリを作成し、データソースを使用して構成します。作成するエージェントの目的は、血液に関する適格性について質問があるお客様をサポートすることです。オーストラリア赤十字生命体を信頼できる情報源として使用し、血液に関する適格性ウェブサイトの非構造化データに基づいてデータストアを作成します。

  1. Vertex AI Conversation で新しいチャットアプリを作成するには、次のいずれかを行います。
    1. Vertex AI Conversation コンソールに移動し、コンソールの上部にある [+ 新しいアプリ] をクリックします。
    2. Dialogflow CX コンソールに移動して [+Create new agent] をクリックし、[Auto-generate] オプションを選択します。Vertex AI Conversation コンソールの次のステップにリダイレクトされます。
  2. Vertex AI Conversation コンソールで、作成するアプリのタイプとして [チャット] を選択します。
  3. [会社名] に「Save a Life」と入力します。このパラメータは、エージェントの会社とスコープを定義するために使用されます。
  4. [エージェント名] に「Blood Donation Agent」を指定します。
  5. [続行] をクリックします。
  6. [新しいデータストアの作成] をクリックします。
  7. データストアのデータソースとして [Cloud Storage] を選択します。
  8. この Codelab のサンプルデータが含まれている次の Google Cloud Storage フォルダを指定します。gs:// 接頭辞は必須ではありません。
    cloud-samples-data/dialogflow-cx/arc-lifeblood
    
  9. インポートするデータのタイプとして [非構造化ドキュメント] を選択します。
  10. [続行] をクリックします。
  11. [データストア名] に Australian Red Cross Lifeblood Unstructured を指定します。
  12. [作成] をクリックしてデータストアを作成します。
  13. データストアのリストで、新しく作成した Australian Red Cross Lifeblood Unstructured を選択します。
  14. [作成] をクリックしてチャットアプリを作成します。

これで、これで知識を活かしたチャットアプリの作成が完了し、潜在的な寄付者を支援する準備ができました。

ただし、ユーザーがエージェントにアクセスできるようにするには、まだ改善が必要です。次のセクションでは、ナレッジ ハンドラを使用して、資格要件についてエージェントとエンドユーザーの間で会話できるようにします。

4. 血液検査の適格性に関するよくある質問に回答するようにエージェントを構成する

データストア プロンプトを指定する

ドキュメント収集プロセスをバックグラウンドで実行しながら、データストアのプロンプトを編集して、エージェントにブランドを示します。

  1. Vertex AI Conversation コンソールでチャットアプリの名前をクリックします。Dialogflow CX コンソールにリダイレクトされ、さらにテストやカスタマイズを行うことができます。
  2. Dialogflow CX コンソールで、エージェント内で [Agent settings](ページ右上隅)をクリックし、[ML] タブに移動して [Generative AI] タブを開きます。

データストアのプロンプトに移動します

  1. 下記のフォームに入力して、データストア プロンプトを生成します: あなたの名前は Donate、あなたは Save a life, a fictitious organization で親切で礼儀正しい chatbot です。あなたのタスクは、humans with eligibility information さんをサポートすることです。

フォームに入力してプロンプトを生成する

デフォルトの開始フローの no-match イベントに対して生成フォールバックを有効にする

  1. [Build] タブに切り替え、スタートページを開きます。
  2. sys.no-match-default イベント ハンドラをクリックします。チェックボックスがオンになっていない限り、生成フォールバック機能を有効にします。

一致しないフローでの生成フォールバックを有効にする

エージェントのデータストアを確認する

スタートページで [データストアの編集] をクリックして、データストアの設定を確認します。

データストアの編集

以前作成したデータストアは、Dialogflow によってすでに選択されています。

作成したデータストアを関連付ける

[Fulfillment] で [Agent Responses] までスクロールします。フルフィルメントとは、エンドユーザーに対するエージェントからの応答です。Dialogflow では、パラメータ $request.knowledge.answers[0]エージェントの発言にあらかじめ入力されています。このパラメータには、実行時にユーザーの質問に対するトップ回答が含まれています。

エージェントの回答には、ユーザーの質問に対する最も優れた回答が含まれる

5. エージェントをテストする

ドキュメントが準備でき、エージェントが使用できる状態になったら、回答がどの程度適切かを確認します。

[Test Agent] をクリックして [Simulator] を再度開きます。

エージェントを再度テスト

ウェブサイトの「よくある質問」ページに掲載されているような質問をします。

  • What age do I need to be to donate?
  • Can pregnant women donate?
  • I've just come back from a trip to Africa. Can I donate?
  • How can I schedule an appointment?

回答がナレッジベースから取得されていることを確認する

回答がオーストラリア赤十字社のサイトから取得されていることに注目してください。こちらのページで説明されているように、献血には最低年齢と最高年齢があります。初めて寄付する場合の最低年齢は 18 歳、最高年齢は 75 歳です。データストアから情報を pull していることのさらなる証拠は、エージェントのレスポンスに表示される小さなスターアイコンと、元の JSON レスポンスからわかります。

元の JSON レスポンスを検査する

最後に、献血とはまったく関係のない質問をエージェントに出してみましょう。

ユーザー: 「メルボルンの天気はどう?」

エージェント: 「申し訳ございませんが、この件については対応いたしかねます。利用資格について確認させていただきたいのですが、よろしいでしょうか?」

この回答には AI が生成したコンテンツが含まれています。これは、Dialogflow が以前に用意したナレッジ コネクタの設定から作成されたテキスト プロンプトに基づいています。「Your name is Donate、あなたは Save a Life の便利で丁寧な chatbot です。あなたの任務は、資格情報を人間がサポートすることです。」このテキスト プロンプトには、会社名、エージェント名、そして最も重要な要素として、Dialogflow がエージェントのレスポンスを生成するために使用するスコープ内の情報が含まれています。

頑張りましたね。ここまでは、献血に関するよくある質問に回答するためにデータストアを使用しています。Codelab の次のパートでは、ジェネレータのテキスト プロンプトを同じコンテンツにバインドし、情報に基づいた意思決定を行う方法について説明します。

6. 利用資格に関するクイズに対応できるようエージェントを設定する

次のタスクは、ユーザーが献血の対象となるかどうかを判断できるようにエージェントを設計することです。年齢、体重、現在の健康状態、最近の旅行など、寄付者が満たさなければならない厳格な要件があります。この Codelab の対象範囲では、年齢と体重のみが考慮されます。生成ツールは、Google の大規模言語モデル(LLM)を使用し、会話のコンテキストとナレッジベースに基づいて情報に基づいた決定を動的に行います。

新しいルートとパラメータを構成する

  1. スタートページを開き、[データストアの編集] をクリックします。
  2. 既存のエージェントのレスポンスを $request.knowledge.answers[0] Would you like to take the eligibility quiz to find out if you can donate blood, and start changing lives? に変更します。

よくある質問に対するエージェントの回答を充実させる

  1. [保存] ボタンをクリックします
  2. 次に、エージェントが「はい」を処理するように設計する必要があります。と「no」できます。まず、confirmation.yes インテントと confirmation.no インテントを作成します。インテントの再利用については、こちらのガイドラインに従ってください。
  3. 次に、スタートページで、新しいページの適格性に関するクイズに遷移する confirmation.yes インテントのルートを作成します。

確認.yes インテントのルートを作成する

Confirm.yes がトリガーされると、新しいページの適格性に関するクイズに移行します。

  1. 前述のように、クイズは単純化し、ユーザーの年齢と体重のみを考慮して、寄付の資格があるかどうかを判断します。[適格性に関するクイズ] ページを開き、新しいフォーム パラメータ age-weight を追加し、エンティティ タイプとして @sys.any を選択します。最初のプロンプト フルフィルメントとして "What is your age and weight?" を指定します。年齢と体重の両方を一度に収集します。すべての変更を保存します。

パラメータを作成

適格性生成ツールを作成して構成する

ジェネレータ機能は Dialogflow CX の機能です。この機能により、デベロッパーは Dialogflow CX のフルフィルメント時に Google の最新の生成大規模言語モデル(LLM)を使用できます。実行時にエージェントのレスポンスを生成するためのジェネレータ。ジェネレータは、トレーニングに使用された大規模なテキスト データセットからの一般知識や会話のコンテキストを含む、一般的なレスポンスを処理できます。

ユーザーが提供した情報(年齢や体重など)を資格要件と比較し、ユーザーが寄付できるかどうか判断する新しいジェネレータを作成します。

  1. Dialogflow CX コンソールで [Manage] タブに移動し、[Generators] を選択して [Create new] をクリックします。

新しいジェネレータを作成する

  1. 次に、わかりやすい表示名を指定し、テキスト プロンプトを記述します。モデルの品質管理設定はデフォルトのままにします。[Save] をクリックしてジェネレータを作成します。
    • 表示名: Blood Donation Eligibility
    • テキスト プロンプト: Check the users eligibility against the following criteria: the minimum age is 18 and the maximum age is 75. Weight should be above 50 Kg. The user age and weight is $last-user-utterance. Be nice and tell the user if they are eligible to donate (also tell them why not in case)

テキスト プロンプトは、ランタイムのフルフィルメント時に生成モデルに送信されます。モデルが満足のいく回答を生成するためには、それが明確な質問またはリクエストである必要があります。テキスト プロンプトでは、特別な組み込み生成ツールのプロンプト プレースホルダを使用できます。

  • $conversation エージェントとユーザー間の会話(ユーザーの最後の発話を除く)。
  • $last-user-utterance: ユーザーの最後の発話。

構成したテキスト プロンプトでは、ユーザーが 1 回の会話ターン(`$last-user-utterance``)で年齢と体重を提供することを前提としています。

フルフィルメントでジェネレータを使用し、必要なすべてのパラメータを設定する

  1. [確認] ページで、すべてのパラメータが完了すると発生する新しいルートを追加します。条件の要件 $page.params.status = "FINAL" を入力して、[保存] をクリックします。

すべてのパラメータが入力された場合に実行される新しいルートを追加する

  1. [Fulfillment] ペインの [Generators] セクションに移動し、展開します。次に、[Add generator] をクリックし、[Blood Donation の要件] ジェネレータを選択します。ジェネレータを選択したら、実行後のジェネレータの結果を含む出力パラメータを定義する必要があります。

「献血の適格性」ジェネレータを選択し、プロンプト プレースホルダをセッション パラメータに関連付けて、出力パラメータを定義する

  1. エージェントのレスポンスの出力パラメータを使用して、ルートを保存します。これで、すべてのテストを行う準備が整いました。

エージェントのレスポンスで output パラメータを使用する

7. エージェントを再テストする

[Test Agent] をクリックしてシミュレータを再度開きます。

エージェントを再度テスト

シミュレータで、エージェントと新しい会話を開始します。まず年齢制限について尋ねてから、利用資格に関するクイズに進みます。「適格」な年齢が 18 ~ 75 歳で、体重が 50 kg 以上で入力してください。

適格のパス

一方または両方の要件が満たされていない場合は、適格性チェックが失敗します。

不適格のパス

これで、ジェネレータが想定どおりに動作します。それとも効果があるのか。ユーザーが年齢を提示しても体重は伝えない場合(またはその逆の場合)はどうなりますか?

年齢は教えるが体重は教えない

8. ジェネレータ プロンプトのチューニング

年齢と体重の両方を指定しないと、1 つ前の年齢と体重の情報は機能していないようです。代わりに、両方の値をエンティティ パラメータとして収集するフォームを作成する必要があります。プロンプトにすべての資格要件(年齢や体重など)のコンテキストを反映させるには、プレースホルダを使用して、単語の前に $ を追加します。これらのジェネレータ プロンプトのプレースホルダは、後でフルフィルメントのセッション パラメータに関連付け、実行時にセッション パラメータ値に置き換えられます。

  1. [参加資格に関するクイズ] ページを開き、体重と年齢の 2 つのフォーム パラメータを追加します。エンティティ タイプとして @sys.number-integer を選択し、パラメータを必須としてマークします。How old are you?What is your correct weight? などの最初のプロンプト フルフィルメントを指定します。すべての変更を保存します。

資格フォーム

  1. 2 つの新しいカスタム プレースホルダを追加するため、ジェネレータのテキスト プロンプトを変更する前に、まずルート フルフィルメントからジェネレータを削除する必要があります。[保存] をクリックします。

ジェネレータを削除する

  1. [Manage] タブに移動し、[Generators] を選択して、寄付の資格要件生成ツールのテキスト プロンプトを「Check the users eligibility against the following criteria: the minimum age is 18 and the maximum age is 75. The weight must be at least 50 kg. The user is $age years old and weighs $weight Kg. Craft an email and politely explain to the user if they're eligible to donate and if not why.」に変更します。[保存] をクリックします。

テキスト プロンプトに年齢と体重のフォーム パラメータを反映させるだけでなく、最後の文も変更して、適格性チェックの公式結果を含むユーザーへの正式なメールを生成できるようにしています。

テキスト プロンプトを再構成する

  1. [Potential Quiz] ページでルートを選択し、[Fulfillment] ペインの [Generators] セクションを展開します。次に、[Add generator] をクリックし、寄付の利用資格生成ツールを選択します。ジェネレータを選択したら、新しいプロンプト プレースホルダをそれぞれのセッション パラメータに関連付ける必要があります。さらに、出力パラメータをリセットする必要があります。[保存] をクリックします。

ジェネレータ バインディングを更新する

  1. エージェントを再度テストします。適格性チェックでは年齢と体重の両方が考慮され、言い回しが会話調から、人間が関与する可能性がない状態で送ることのできる、より丁寧な回答に変更されました。

お客様が対象外であることを知らせるメール

お客様が対象であることを知らせるメール

9. 完了

これで、この Codelab は終了です。

この Codelab はお疲れさまでした。

本日は、適格性クイズのコンテキストでジェネレータについて調査しました。生成担当者が LLM を使用してエージェントの応答を生成し、ナレッジベースを活用すれば十分な情報に基づいた意思決定も行えることがわかりました。もちろん、ジェネレータやデータストアを利用して実装できるユースケースは他にも多数あります。詳しくご紹介したいと思います。

クリーンアップ

この Codelab で使用したリソースについて、Google Cloud アカウントに課金されないようにするには、次のクリーンアップを実行します。

詳細

会話型 AI と生成 AI の詳細については、以下のガイドとリソースをご覧ください。

ライセンス

この作業はクリエイティブ・コモンズの表示 2.0 汎用ライセンスにより使用許諾されています。