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 を有効にする手順は次のとおりです。
- ブラウザで、Dialogflow API サービスの詳細ページに移動します。
- [有効にする] ボタンをクリックし、Google Cloud プロジェクトで Dialogflow API を有効にします。
Vertex AI Search and Conversation API を有効にする手順は次のとおりです。
- Google Cloud コンソールで、Vertex AI Search and Conversation コンソールに移動します。
- 利用規約を読んで同意し、[続行して API を有効にする] をクリックします。
3. 新しいチャットアプリとアプリのデータストアを作成する
次に、仮想エージェント用の新しいチャットアプリを作成し、データソースを使用して構成します。作成するエージェントの目的は、血液に関する適格性について質問があるお客様をサポートすることです。オーストラリア赤十字生命体を信頼できる情報源として使用し、血液に関する適格性ウェブサイトの非構造化データに基づいてデータストアを作成します。
- Vertex AI Conversation で新しいチャットアプリを作成するには、次のいずれかを行います。
- Vertex AI Conversation コンソールに移動し、コンソールの上部にある [+ 新しいアプリ] をクリックします。
- Dialogflow CX コンソールに移動して [+Create new agent] をクリックし、[Auto-generate] オプションを選択します。Vertex AI Conversation コンソールの次のステップにリダイレクトされます。
- Vertex AI Conversation コンソールで、作成するアプリのタイプとして [チャット] を選択します。
- [会社名] に「
Save a Life
」と入力します。このパラメータは、エージェントの会社とスコープを定義するために使用されます。 - [エージェント名] に「
Blood Donation Agent
」を指定します。 - [続行] をクリックします。
- [新しいデータストアの作成] をクリックします。
- データストアのデータソースとして [Cloud Storage] を選択します。
- この Codelab のサンプルデータが含まれている次の Google Cloud Storage フォルダを指定します。
gs://
接頭辞は必須ではありません。cloud-samples-data/dialogflow-cx/arc-lifeblood
- インポートするデータのタイプとして [非構造化ドキュメント] を選択します。
- [続行] をクリックします。
- [データストア名] に
Australian Red Cross Lifeblood Unstructured
を指定します。 - [作成] をクリックしてデータストアを作成します。
- データストアのリストで、新しく作成した
Australian Red Cross Lifeblood Unstructured
を選択します。 - [作成] をクリックしてチャットアプリを作成します。
これで、これで知識を活かしたチャットアプリの作成が完了し、潜在的な寄付者を支援する準備ができました。
ただし、ユーザーがエージェントにアクセスできるようにするには、まだ改善が必要です。次のセクションでは、ナレッジ ハンドラを使用して、資格要件についてエージェントとエンドユーザーの間で会話できるようにします。
4. 血液検査の適格性に関するよくある質問に回答するようにエージェントを構成する
データストア プロンプトを指定する
ドキュメント収集プロセスをバックグラウンドで実行しながら、データストアのプロンプトを編集して、エージェントにブランドを示します。
- Vertex AI Conversation コンソールでチャットアプリの名前をクリックします。Dialogflow CX コンソールにリダイレクトされ、さらにテストやカスタマイズを行うことができます。
- Dialogflow CX コンソールで、エージェント内で [Agent settings](ページ右上隅)をクリックし、[ML] タブに移動して [Generative AI] タブを開きます。
- 下記のフォームに入力して、データストア プロンプトを生成します: あなたの名前は
Donate
、あなたはSave a life, a fictitious organization
で親切で礼儀正しいchatbot
です。あなたのタスクは、humans with eligibility information
さんをサポートすることです。
デフォルトの開始フローの no-match イベントに対して生成フォールバックを有効にする
- [Build] タブに切り替え、スタートページを開きます。
- 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 レスポンスからわかります。
最後に、献血とはまったく関係のない質問をエージェントに出してみましょう。
ユーザー: 「メルボルンの天気はどう?」
エージェント: 「申し訳ございませんが、この件については対応いたしかねます。利用資格について確認させていただきたいのですが、よろしいでしょうか?」
この回答には AI が生成したコンテンツが含まれています。これは、Dialogflow が以前に用意したナレッジ コネクタの設定から作成されたテキスト プロンプトに基づいています。「Your name is Donate、あなたは Save a Life の便利で丁寧な chatbot です。あなたの任務は、資格情報を人間がサポートすることです。」このテキスト プロンプトには、会社名、エージェント名、そして最も重要な要素として、Dialogflow がエージェントのレスポンスを生成するために使用するスコープ内の情報が含まれています。
頑張りましたね。ここまでは、献血に関するよくある質問に回答するためにデータストアを使用しています。Codelab の次のパートでは、ジェネレータのテキスト プロンプトを同じコンテンツにバインドし、情報に基づいた意思決定を行う方法について説明します。
6. 利用資格に関するクイズに対応できるようエージェントを設定する
次のタスクは、ユーザーが献血の対象となるかどうかを判断できるようにエージェントを設計することです。年齢、体重、現在の健康状態、最近の旅行など、寄付者が満たさなければならない厳格な要件があります。この Codelab の対象範囲では、年齢と体重のみが考慮されます。生成ツールは、Google の大規模言語モデル(LLM)を使用し、会話のコンテキストとナレッジベースに基づいて情報に基づいた決定を動的に行います。
新しいルートとパラメータを構成する
- スタートページを開き、[データストアの編集] をクリックします。
- 既存のエージェントのレスポンスを
$request.knowledge.answers[0] Would you like to take the eligibility quiz to find out if you can donate blood, and start changing lives?
に変更します。
- [保存] ボタンをクリックします
- 次に、エージェントが「はい」を処理するように設計する必要があります。と「no」できます。まず、confirmation.yes インテントと confirmation.no インテントを作成します。インテントの再利用については、こちらのガイドラインに従ってください。
- 次に、スタートページで、新しいページの適格性に関するクイズに遷移する confirmation.yes インテントのルートを作成します。
- 前述のように、クイズは単純化し、ユーザーの年齢と体重のみを考慮して、寄付の資格があるかどうかを判断します。[適格性に関するクイズ] ページを開き、新しいフォーム パラメータ age-weight を追加し、エンティティ タイプとして
@sys.any
を選択します。最初のプロンプト フルフィルメントとして"What is your age and weight?"
を指定します。年齢と体重の両方を一度に収集します。すべての変更を保存します。
適格性生成ツールを作成して構成する
ジェネレータ機能は Dialogflow CX の機能です。この機能により、デベロッパーは Dialogflow CX のフルフィルメント時に Google の最新の生成大規模言語モデル(LLM)を使用できます。実行時にエージェントのレスポンスを生成するためのジェネレータ。ジェネレータは、トレーニングに使用された大規模なテキスト データセットからの一般知識や会話のコンテキストを含む、一般的なレスポンスを処理できます。
ユーザーが提供した情報(年齢や体重など)を資格要件と比較し、ユーザーが寄付できるかどうか判断する新しいジェネレータを作成します。
- Dialogflow CX コンソールで [Manage] タブに移動し、[Generators] を選択して [Create new] をクリックします。
- 次に、わかりやすい表示名を指定し、テキスト プロンプトを記述します。モデルの品質管理設定はデフォルトのままにします。[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``)で年齢と体重を提供することを前提としています。
フルフィルメントでジェネレータを使用し、必要なすべてのパラメータを設定する
- [確認] ページで、すべてのパラメータが完了すると発生する新しいルートを追加します。条件の要件
$page.params.status = "FINAL"
を入力して、[保存] をクリックします。
- [Fulfillment] ペインの [Generators] セクションに移動し、展開します。次に、[Add generator] をクリックし、[Blood Donation の要件] ジェネレータを選択します。ジェネレータを選択したら、実行後のジェネレータの結果を含む出力パラメータを定義する必要があります。
- エージェントのレスポンスの出力パラメータを使用して、ルートを保存します。これで、すべてのテストを行う準備が整いました。
7. エージェントを再テストする
[Test Agent] をクリックしてシミュレータを再度開きます。
シミュレータで、エージェントと新しい会話を開始します。まず年齢制限について尋ねてから、利用資格に関するクイズに進みます。「適格」な年齢が 18 ~ 75 歳で、体重が 50 kg 以上で入力してください。
一方または両方の要件が満たされていない場合は、適格性チェックが失敗します。
これで、ジェネレータが想定どおりに動作します。それとも効果があるのか。ユーザーが年齢を提示しても体重は伝えない場合(またはその逆の場合)はどうなりますか?
8. ジェネレータ プロンプトのチューニング
年齢と体重の両方を指定しないと、1 つ前の年齢と体重の情報は機能していないようです。代わりに、両方の値をエンティティ パラメータとして収集するフォームを作成する必要があります。プロンプトにすべての資格要件(年齢や体重など)のコンテキストを反映させるには、プレースホルダを使用して、単語の前に $ を追加します。これらのジェネレータ プロンプトのプレースホルダは、後でフルフィルメントのセッション パラメータに関連付け、実行時にセッション パラメータ値に置き換えられます。
- [参加資格に関するクイズ] ページを開き、体重と年齢の 2 つのフォーム パラメータを追加します。エンティティ タイプとして
@sys.number-integer
を選択し、パラメータを必須としてマークします。How old are you?
やWhat is your correct weight?
などの最初のプロンプト フルフィルメントを指定します。すべての変更を保存します。
- 2 つの新しいカスタム プレースホルダを追加するため、ジェネレータのテキスト プロンプトを変更する前に、まずルート フルフィルメントからジェネレータを削除する必要があります。[保存] をクリックします。
- [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.
」に変更します。[保存] をクリックします。
テキスト プロンプトに年齢と体重のフォーム パラメータを反映させるだけでなく、最後の文も変更して、適格性チェックの公式結果を含むユーザーへの正式なメールを生成できるようにしています。
- [Potential Quiz] ページでルートを選択し、[Fulfillment] ペインの [Generators] セクションを展開します。次に、[Add generator] をクリックし、寄付の利用資格生成ツールを選択します。ジェネレータを選択したら、新しいプロンプト プレースホルダをそれぞれのセッション パラメータに関連付ける必要があります。さらに、出力パラメータをリセットする必要があります。[保存] をクリックします。
- エージェントを再度テストします。適格性チェックでは年齢と体重の両方が考慮され、言い回しが会話調から、人間が関与する可能性がない状態で送ることのできる、より丁寧な回答に変更されました。
9. 完了
これで、この Codelab は終了です。
本日は、適格性クイズのコンテキストでジェネレータについて調査しました。生成担当者が LLM を使用してエージェントの応答を生成し、ナレッジベースを活用すれば十分な情報に基づいた意思決定も行えることがわかりました。もちろん、ジェネレータやデータストアを利用して実装できるユースケースは他にも多数あります。詳しくご紹介したいと思います。
クリーンアップ
この Codelab で使用したリソースについて、Google Cloud アカウントに課金されないようにするには、次のクリーンアップを実行します。
- 不要な Google Cloud 料金が発生しないようにするには、Google Cloud コンソールを使用して、不要になったプロジェクトを削除します。
- 既存の Google Cloud プロジェクトを使用した場合は、作成したリソースを削除して、アカウントに課金されないようにします。詳しくは、アプリを削除する手順をご覧ください。
- Vertex AI Conversation と Dialogflow の API を無効にする場合は、[Discovery Engine API サービスの詳細] ページに移動し、[API を無効にする] をクリックして確定してから、Dialogflow API サービスの詳細ページに移動し、[API を無効にする] をクリックして確定します。
詳細
会話型 AI と生成 AI の詳細については、以下のガイドとリソースをご覧ください。
- Dialogflow CX のドキュメント
- Vertex AI Conversation の概要
- データストア エージェントを作成して使用する
- Vertex AI Conversation のドキュメント
- Google Cloud の生成 AI
ライセンス
この作業はクリエイティブ・コモンズの表示 2.0 汎用ライセンスにより使用許諾されています。