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 の概要をご覧ください。

生成ツール

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

生成的フォールバック

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

学習内容

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

必要なもの

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

2. API を有効にする

Vertex AI Conversation でデータストア エージェントを作成する前に、Dialogflow API と 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. アプリの新しいチャットアプリとデータストアを作成する

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

  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 コンソールで、エージェント内から [エージェントの設定](ページの右上隅)をクリックし、[ML] タブに移動して、[生成 AI] タブを開きます。

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

  1. 次のようにフォームに入力して、次のデータストア プロンプトを生成します: Your name is Donate, and you are a helpful and polite chatbot at Save a life, a fictitious organization. あなたのタスクは humans with eligibility information をサポートすることです。

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

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

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

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

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

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

データストアを編集する

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

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

[Fulfillment] の [Agent Responses] まで下にスクロールします。フルフィルメントは、エンドユーザーに対するエージェントの回答です。Dialogflow は、実行時にユーザーの質問に対する上位の回答を含むパラメータ $request.knowledge.answers[0] を使用して、[Agent says] に事前入力しています。

エージェントの回答にユーザーの質問に対するベストアンサーが含まれている

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

ドキュメントの準備が整いエージェントが使用できるようになるまで待ってから、回答の質を確認します。

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

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

ウェブサイトのよくある質問ページに記載されると思われる質問をします。

  • 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?

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

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

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

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

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

エージェント: 「申し訳ありませんが、そちらについてはお役に立てません。資格情報について、どのようなご用件でしょうか?」

この回答には AI が生成したコンテンツが含まれており、それは Dialogflow が作成したテキスト プロンプトに由来するものです。このテキスト プロンプトは、前に行ったナレッジ コネクタの設定: "Your name is Donate, and you are a helpful and polite chatbot at Save a Life. Your task is to assist humans with eligibility information". このテキスト プロンプトには、会社名とエージェント名が含まれ、さらには最も重要な点としてスコープの内容が含まれます。それらは、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. 「はい」と「いいえ」の回答を処理するようにエージェントを設計する必要があります。まず、confirmation.yes インテントと confirmation.no インテントを作成します。インテントの再利用に関するガイドラインに従ってください。
  3. 次に、[スタートページ] で、新しいページ [Eligibility Quiz] に遷移する confirmation.yes インテントのルートを作成します。

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

confirmation.yes がトリガーされると、新しいページ「Eligibility Quiz」に遷移します。

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

パラメータを作成する

資格ジェネレーターを作成して構成する

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

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

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

新しい生成ツールを作成する

  1. 次に、わかりやすい表示名を入力し、テキスト プロンプトを記述します。モデル品質管理の設定はデフォルトのままにします。[保存] をクリックして、ジェネレーターを作成します。
    • 表示名: 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. [Eligibility Quiz] ページで、すべてのパラメータが入力されたときに発生する新しいルートを追加します。条件要件 $page.params.status = "FINAL" を入力し、[保存] をクリックします。

すべてのパラメータが入力されたときに発生する新しいルートを追加

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

[Blood Donation Eligibility] ジェネレーターを選択し、プロンプト プレースホルダをセッション パラメータに関連付けて、出力パラメータを定義します。

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

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

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

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

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

シミュレータで、エージェントとの新しい会話を開始します。まず年齢要件について質問してから、資格クイズに進みます。まず「eligible」パスをテストするため、年齢を 18 ~ 75 歳、体重を 50 kg 超で入力します。

適格のパス

次に、要件のいずれかまたは両方が満たされていない場合に資格がないことを確認します。

不適格のパス

ジェネレーターは想定どおりに動作しているようです。しかし、本当にそうでしょうか?ユーザーが年齢を入力しても体重を入力しなかった場合(またはその逆の場合)はどうなるでしょうか?

年齢は提供するが体重は提供しない

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

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

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

利用資格フォーム

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

ジェネレータを削除する

  1. [Manage] タブに移動し、[Generators] を選択して、[Blood Donation Eligibility] ジェネレーターのテキスト プロンプトを次のように変更します。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. [Eligibility Quiz] ページでルートを選択し、[Fulfillment] ペインの [Generators] セクションを開きます。[Add generator] をクリックし、[Blood Donation Eligibility] ジェネレーターを選択します。ジェネレーターを選択したら、新しいプロンプト プレースホルダを、対応するセッション パラメータに関連付ける必要があります。また、出力パラメータを再設定する必要があります。[保存] をクリックします。

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

  1. エージェントをもう一度テストします。年齢と体重の両方が資格チェックの対象となり、会話調の文言から、人間の手を加えずに送信できる礼儀正しい返信に変更されました。

お客様が対象外であることを伝えるメール

お客様が対象であることを伝えるメール

9. 完了

この Codelab は以上です。

これでこの Codelab は完了です。

今回は、資格クイズのコンテキストでジェネレーターについて説明しました。ジェネレーターは LLM を使用してエージェントの回答を生成します。また、ナレッジベースを活用することで、情報に基づいた意思決定を行うこともできます。ジェネレーターとデータストアを活用して実装できるユースケースは他にもたくさんあります。皆様のユースケースを楽しみにしています。

クリーンアップ

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

詳細

以下のガイドとリソースを参考に、会話型 AI と生成 AI についての学習を続けましょう。

ライセンス

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