1. 概要
最終更新日: 2023 年 8 月 7 日
作成するアプリの概要
この Codelab では、Dialogflow CX でシンプルな仮想エージェントを構築、デプロイ、構成し、スキューバ ダイバーの旅行者によるグループ予約とプライベート チャーター便の利用を支援します。仮想エージェントは、生成 AI と Google の最新の生成大規模言語モデル(LLM)を使用して、仮想エージェントの回答を生成します。
学習内容
- 関連する API を有効にする方法
- Dialogflow が intent パラメータからページフォームのパラメータ値を自動的に事前入力する方法
- Dialogflow でイベント ハンドラを構成する方法
- フローで使用される no-match イベント ハンドラとパラメータの入力で生成的フォールバックを有効にする方法
- 基本的な会話のほか、エージェントに固有の会話に対応するための独自のテキスト プロンプトを構成する方法
- 適切なインテントとパラメータの説明を記述し、ユーザー定義のリプロンプトに加えて、必須パラメータのリプロンプト ハンドラを生成する方法
- エージェントをテストして、生成的フォールバックをトリガーする顧客の質問をシミュレートする方法
必要なもの
- Google Cloud プロジェクト
- ブラウザ(Chrome など)
2. 設定方法
Dialogflow CX で生成フォールバック機能を使用する前に、Dialogflow API を有効にする必要があります。
Cloud Console を使用して Dialogflow API を有効にする
- ブラウザで Google Cloud コンソールを開きます。
- Google Cloud コンソールで API ライブラリに移動し、有効にできる API とサービスを参照します。
- [API ライブラリ] ページの上部にある検索バーを使用して
Dialogflow APIを検索し、検索結果のサービスをクリックします。 - [有効にする] ボタンをクリックし、Google Cloud プロジェクトで Dialogflow API を有効にします。
gcloud CLI を使用する(代替)
または、次の gcloud コマンドを使用して API を有効にすることもできます。
gcloud services enable dialogflow.googleapis.com
API が正常に有効になると、次のようなメッセージが表示されます。
Operation "operations/..." finished successfully.
コードを取得する
仮想エージェントをゼロから作成するのではなく、Dialogflow CX コンソールから復元して改善する必要があるエージェントを提供します。
ソースコードをダウンロードするには:
- 新しいブラウザタブを開き、エージェント リポジトリに移動して、コマンドラインからクローンを作成します。
- 初期エージェントが JSON パッケージとしてエクスポートされました。ファイルを解凍し、エージェントの設定を調べ、フロー定義
Liveaboards.jsonを確認して、フローページ、インテント、エンティティを確認します。
3. 新しいエージェントを作成する
Dialogflow コンソールを開く
この Codelab の残りの手順では、Google Cloud プロジェクトとともに Dialogflow CX コンソールを使用します。
- ブラウザで、Dialogflow CX コンソールに移動します。
- 使用する Google Cloud プロジェクトを選択するか、使用する新しいプロジェクトを作成します。
- Dialogflow CX コンソールにエージェントのリストが表示されます。
Dialogflow CX を初めて使用する場合は、Dialogflow CX のドキュメントを参照して、ニーズに応じてプロジェクトと設定を構成する方法をご確認ください。
新しい Dialogflow CX エージェントを作成する
- GitHub リポジトリからダウンロードしたエージェントを復元するには、新しいエージェントを作成する必要があります。Dialogflow CX コンソールで、ページの右上にある [新しいエージェントを作成] をクリックします。

- [独自に作成] オプションを選択します。

- 以下のエージェント設定でフォームに入力し、[作成] をクリックしてエージェントを作成します。
- 表示名として [
Divebooker] を選択する - ロケーションとして [
us-central1] を選択する - 使用するタイムゾーンを選択する
- デフォルトの言語として
en - Englishを選択する
- Dialogflow でエージェントが自動的に開きます。まだ終わりではありません。
Divebooker エージェントを復元する
- エージェントのリストのページに戻り、先ほど作成したエージェントを確認します。オプション
をクリックし、[復元] ボタンをクリックします。 - [アップロード] オプションを選択し、GitHub リポジトリからダウンロードした ZIP ファイルをドロップするか選択します。
- [復元] ボタンをクリックして、提供されたエージェントをインポートします。
![エージェントの復元 [復元] ボタンをクリックして、提供されたエージェントをインポートします。](https://codelabs.developers.google.com/static/codelabs/dialogflow-generative-fallback/img/3138bca53ee07296.png?hl=ja)
これで完了です。顧客をサポートするためのダイビング予約向けの仮想エージェントを構築できました。次のセクションではこのエージェントをテストし、どの程度適切にユーザーからの質問に回答して予約リクエストに対応できるかを確認します。
4. エージェントをテストする
Dialogflow には、エージェントとのチャットでバグを発見するための組み込みのシミュレータが用意されています。ターンごとに、トリガーされたインテント、エージェントの回答、アクティブなページ、session パラメータに対する正しい値を確認できます。
ここからはいくつかのシナリオをテストし、各シナリオでエージェントが特定の回答を提供している理由を確認します。最初から見ていきましょう。
未解決のインテント
- Dialogflow コンソールで、エージェント内から [Test Agent] をクリックして、シミュレータを開きます。
![エージェントをテスト [Test Agent] をクリックしてシミュレータを開く](https://codelabs.developers.google.com/static/codelabs/dialogflow-generative-fallback/img/3403f06a0797b842.png?hl=ja)
- エージェントへの挨拶(「
Hello」など)を入力し、「what is a liveaboard?」と質問します。質問がどのインテントにも一致しないため、「申し訳ありませんが、お手伝いできる方法がわかりません」のような汎用的なプロンプトが表示されます。シミュレータで元の回答を調べると、sys.no-match-default 組み込みイベントが呼び出されたことを確認できます。

JSON の回答のほぼ末尾までスクロールします。一致するインテントを検索する際、Dialogflow はこれを NO_MATCH として検出し、no-match イベントを報告します。

- [ビルド] タブに切り替え、「ライブアボード」フローの [スタートページ] を開きます。
![スタートページ [ビルド] タブに切り替え、「ライブアボード」フローの [スタートページ] を開きます。](https://codelabs.developers.google.com/static/codelabs/dialogflow-generative-fallback/img/39533ebcd79847b9.png?hl=ja)
デフォルトでは、各フローに no-match と no-input の組み込みイベントのイベント ハンドラがあります。これらのイベント ハンドラはフローの作成時に自動的に作成され、削除することができません。
- [sys.no-match-default] イベント ハンドラをクリックし、[エージェントの回答] セクションまで下にスクロールします。Dialogflow では代替の回答のリストが提供されますが、さまざまな種類の回答メッセージを定義して、テキスト以外の回答をエンドユーザーに提供することもできます。

ハッピーパスに進みましょう。
ハッピーパス
2 つめのケースでは、来年の 7 月にガラパゴス諸島を訪れる 12 人のグループのダイビング クルーズを予約してみましょう。
- [シミュレータ] パネルでリセット アイコンをクリックして、エージェントとの新しい会話を開始します。


- ガラパゴス諸島へのチャーター便を予約したい旨と、旅行の詳細をエージェントに伝えます。以下のプロンプトをそのまま使用する必要はありません。いろいろと自由に試してみてください。

- スタートページを開き、head.send.group.request ルートをクリックします。[遷移] まで下にスクロールします。このセクションでは、このインテントが一致した場合に遷移するページを Dialogflow に指示します。
![ページの切り替え [情報をさらに収集] ページに移行する](https://codelabs.developers.google.com/static/codelabs/dialogflow-generative-fallback/img/25084ca6dd570a9c.png?hl=ja)
- ルートの定義を閉じ、[情報をさらに収集] ページを開きます。エントリのフルフィルメントとパラメータのリストが表示されます。
![[情報をさらに収集] ページ [情報をさらに収集] ページ](https://codelabs.developers.google.com/static/codelabs/dialogflow-generative-fallback/img/4bcde721b26e3756.png?hl=ja)
Dialogflow CX の各ページでフォームを定義できます。これは、ページのエンドユーザーから収集する必要があるパラメータのリストです。エージェントから目的地を尋ねられなかったのは、最初の入力の一部として目的地を提供したからです。また、destination は intent パラメータでもあります。ページが最初にアクティブになると、アクティブな期間中にインテント パラメータと同じ名前のフォーム パラメータが自動的にセッション パラメータ値に設定され、対応するプロンプトがスキップされます。
- [管理] タブに切り替え、[インテント] セクションの head.send group request インテントをクリックします。このインテントに提供されているトレーニング フレーズと、トレーニング フレーズの注釈が付いた部分を確認します。

- 「15 人のダイバーが参加するコスタリカへの旅行を計画する必要があります」というトレーニング フレーズについて考えてみましょう。「コスタリカ」には destination、「15」には number-of-guests の注釈が付けられます。トレーニング フレーズの一部にアノテーションを付けると、Dialogflow は、実行時にエンドユーザーが提供する実際の値の例であることを認識します。そのため、「ガラパゴス諸島へのチャーター便はある?」という最初の入力に対し、Dialogflow は「ガラパゴス諸島」から destination パラメータを抽出しました。
次に、エージェントにフォーム パラメータを求められたときに、有効な入力を提供しないとどうなるかを確認します。
無効な入力
- [シミュレータ] パネルでリセット アイコンをクリックして、エージェントとの新しい会話を開始します。
- 団体予約をしたいことを伝えます。今回は、エージェントに目的地を伝えないでください。目的地を尋ねられたら、コスタリカ、ガラパゴス、メキシコ以外の場所を伝えます。

- [管理] タブで、[リソース] セクションの [エンティティ タイプ] をクリックします。2 つのタブが表示されます。[システム] タブには、エージェントが使用しているシステム エンティティが表示されます。[カスタム] タブには、このエージェント固有のデータと一致するように作成されたカスタム エンティティのリストが表示されます。

- destination エンティティをクリックして、エンティティが一致する値を確認します。「ヨーロッパ」はエントリの 1 つでも、類義語でもありません。
- フロー図で、フォーム パラメータを含む [情報をさらに収集] ページを開きます。destination パラメータをクリックします。
- [パラメータ] パネルで [リプロンプト イベント ハンドラ] セクションまで下にスクロールし、[No-match default] イベント ハンドラをクリックします。
このパラメータ レベルのイベント ハンドラは、フォーム入力時の無効なエンドユーザー入力を処理することを目的としています。「ヨーロッパ」は予期せぬ入力であるため、sys.no-match-default イベントと、このイベントに定義された対応するリプロンプト ハンドラが呼び出されました。[エージェントの発話:] セクションに 2 つの代替のリプロンプト メッセージが表示されます。

これで完了です。これらのテストケースは、エージェントが適切に処理することが期待される一般的なシナリオを示しています。多くの場合、ユーザーは bot が回答できない質問をしたり、対応できないことをリクエストしたりします。ほとんどのユーザーがたどる一般的な経路から外れたロングテールをデザインするのは非常に複雑です。会話で起こり得るすべての問題のほか、ユーザーがたどる可能性のある予想外、または未対応の経路について考えてみましょう。
自動音声認識(ASR)の進歩により、ユーザーが話したことはほぼ正確に把握できるようになりました。しかし、ユーザーが何を意味しているかを判断することは依然として難題です。発話は分離した状態で理解できないことが多く、文脈の中でしか把握できません。この Codelab の次のセクションでは、Google の最新の生成大規模言語モデル(LLM)が、会話を元の流れに戻して先に進めるのにどう役立つかを確認します。
5. 生成的フォールバックを有効にする
生成的フォールバック機能とは
生成的フォールバックは、Google の大規模言語モデル(LLM)を使用して仮想エージェントの回答を生成する Dialogflow CX の機能です。
どう役立つのか
主要なユースケースとしては、ユーザーが理解できなかった場合にエージェントの発言を繰り返す、ユーザーが要求したときに会話を保留にする、会話を要約するなど、やや一般的なユーザー リクエストが数多くあります。最初のテストで、エージェントは「ライブアボードとは何?」という質問に答えられませんでした。これは、この質問に対するインテントを作成しておらず、スキューバ ダイビングとライブアボードに関連する一般的な質問に対処するためのフローを設計していなかったからです。
インテントが堅牢であっても、エラーが発生する可能性はあります。ユーザーが沈黙状態(入力なしエラー)になったり、予期せぬことを発言(一致なしエラー)したりして、スクリプトから外れることがあります。エラーが発生してから処理するよりも、エラーが発生しないようにするほうが望ましいものの、エラーを完全に回避することはできません。「申し訳ありませんが、お手伝いできる方法がわかりません」のような汎用的なプロンプトや、同様の最低限に実行可能な解決策は、多くの場合に十分ではありません。エラー プロンプトは、協調の原理に沿っていることが望ましいでしょう。この原理では、効率的なコミュニケーションは会話の参加者による暗黙のうちの協調という前提に基づいています。
次のセクションでは、生成的フォールバック機能を構成してインテント カバレッジを拡大し、エラー処理を簡素化してカスタマー エクスペリエンスを向上させる方法について見ていきます。
フロー全体の no-match イベントで生成的フォールバックを有効にする
生成的フォールバックは、フロー、ページ、パラメータの入力で使用できる no-match イベント ハンドラで有効にできます。不一致イベントに対して生成的フォールバックが有効になっている場合、そのイベントがトリガーされるたびに、Dialogflow はユーザーに返される生成レスポンスを生成しようとします。回答を生成できなかった場合は、代わりにエージェントの規則的な所定の回答が提供されます。
フロー、ページまたはパラメータのフルフィルメントで使用できる no-match イベント ハンドラでエージェントの生成的フォールバックを有効にできます。
まず、全体的な「ライブアボード」フローの no-match-default イベントで、生成的フォールバックを有効にすることから始めます。
- フローの [スタートページ] を開きます。
- [イベント ハンドラ] で sys.no-match-default をクリックします。
- [エージェントの回答] で [生成的フォールバックの有効化] をオンにして、[保存] をクリックします。
![生成的フォールバックを有効にする [エージェント レスポンス] で [生成的フォールバックの有効化] をオンにします。](https://codelabs.developers.google.com/static/codelabs/dialogflow-generative-fallback/img/18fadd423fd862a2.png?hl=ja)

特定の不一致イベントで生成的フォールバックを有効にする
エージェントが乗客の数を尋ねたときの無効な入力に対処するために、生成的フォールバックを有効にします。
- フォーム パラメータが含まれる [情報をさらに収集] ページを開きます。number-of-guests パラメータをクリックします。
- ターゲットの No-match イベント ハンドラに移動します([リプロンプト イベント ハンドラ] セクションまで下にスクロールし、No-match default イベント ハンドラをクリックします)。
![参加者の数パラメータ - リプロンプト イベント ハンドラ セクション ターゲットの不一致イベント ハンドラに移動します([リプロンプト イベント ハンドラ] セクションまで下にスクロールし、[不一致のデフォルト] イベント ハンドラをクリックします)。](https://codelabs.developers.google.com/static/codelabs/dialogflow-generative-fallback/img/3b057a7a0f55fc4f.png?hl=ja)
- [エージェント レスポンス] で [生成的フォールバックの有効化] をオンにします。

- 最後に [保存] をクリックします。
- 上記の手順を繰り返して、destination と email-address で生成的フォールバックを有効にします。
これで完了です。予期せぬインテントや無効なパラメータ値に対処するために、生成的フォールバックを有効にしました。次は、LLM に応答方法を指示するテキスト プロンプトを使用して、生成的フォールバックを構成する方法を学びます。
6. 生成的フォールバックを構成する
生成的フォールバック機能は、回答を生成するために大規模言語モデルにリクエストを渡します。リクエストは、エージェントと会話の現在の状態に関する情報と自然言語が混在するテキスト プロンプトの形式をとります。この機能は複数の方法で構成できます。
- 回答の生成に使用する特定の(すでに定義されている)プロンプトを選択する。
- カスタム プロンプトを定義する。
定義済みのプロンプトの選択
- Dialogflow CX コンソールで、[エージェント設定] をクリックします。

- [ML] タブに移動し、[生成 AI] サブタブに移動します。
![生成 AI のサブタブ [生成 AI] サブタブ](https://codelabs.developers.google.com/static/codelabs/dialogflow-generative-fallback/img/2f7d82f75a8cd2f4.png?hl=ja)
この機能には、デフォルト(表示されない)とサンプル(独自のプロンプトを記述する際のガイド)の 2 つのテンプレート プロンプトが用意されています。
- [例] テンプレートを選択し、プルダウンの右側にある [編集] ボタンをクリックして確認します。
仮想エージェントは、事前定義されたプロンプトで以下のような基本的な会話の状況に次に例を示します。
- ユーザーに開始と終了の挨拶をする。
- ユーザーが理解できなかった場合に発言を繰り返す。
- ユーザーからリクエストされた場合に会話を保留にする。
- 会話を要約する。
Divebooker エージェントの具体的なテキスト プロンプトを定義してみましょう。
7. 独自のプロンプトを定義する
- 以下のプロンプトをコピーして、[テキスト プロンプト] の領域に貼り付けます。
You are a friendly agent that likes helping traveling divers.
You are under development and you can only help
$flow-description
At the moment you can't help customers with land-based diving and courses. You cannot recommend local dive shops and diving resorts.
Currently you can $route-descriptions
The conversation between the human and you so far was:
${conversation USER:"Human:" AGENT:"AI"}
Then the human asked:
$last-user-utterance
You say:
- [新しいテンプレートとして保存] を選択し、新しいプロンプトを新しいテンプレートとして保存します(新しいテンプレート名を選択)。次に、パネルの右下にある [保存] をクリックします。

- 新しく作成されたプロンプトを実際にアクティブにするには、設定を保存する必要があります。

独自のテキスト プロンプトを作成する際は、明確かつ簡潔で規範的なものにします。LLM へのプロンプトの作成方法は、LLM の回答の質に大きな影響を与える可能性があります。LLM は指示に従うようにトレーニングされているため、プロンプトが正確な指示に似ているほど、より良い結果が得られる可能性が高くなります。プロンプトを作成し、得られた結果に基づいて繰り返しながら改善していきます。
効果的なプロンプトを作成するには、次のベスト プラクティスを実践してください。
- LLM が実行するタスクについて、明確かつ簡潔な説明を過不足なく提供します。完全で短いものにしてください。
- プロンプトは具体的かつ明確に定義し、不明瞭または曖昧な表現は避けるようにします。
- 複雑なタスクは、扱いやすくなるように小さなステップに分解します。そうすることで、モデルが一度に 1 つのことに集中できるようになり、エラーや混乱の発生を低減することができます。
- 回答の質を高めるために、プロンプトに例を追加します。LLM は、この回答方法の例のコンテキストから学習します。
プロンプトを作成する際は、生成する必要があるコンテキストの種類の自然言語の説明に加えて、次のプレースホルダも使用できます。
$conversation: ユーザーの最後の発話を除く、エージェントとユーザー間の会話。ターンの接頭辞(「人間」、「AI」、「あなた」、「エージェント」など)は、テキスト プロンプトで調整できます。$last-user-utteranceユーザーの最後の発話。$flow-descriptionアクティブなフローの説明。$route-descriptionsアクティブなインテントのインテントの説明。
最初のテキスト プロンプトが完成したので、次のタスクではフローとインテントに適切な説明を追加します。
8. フローとインテントの説明を追加する
フローの説明の追加
- 「ライブアボード」フローに説明を追加するには、[フロー] セクションのフローにカーソルを合わせてフローの設定にアクセスします。
![「ライブアボード」フローの設定へのアクセス [フロー] セクションのフローにカーソルを合わせて、フローの設定にアクセスします。](https://codelabs.developers.google.com/static/codelabs/dialogflow-generative-fallback/img/bc11c47cb4e972db.png?hl=ja)
- オプション
ボタンをクリックします。 - [フローの設定] を選択し、次の説明(または同様の説明)を追加します:
search, find and book liveaboards。

- [保存] をクリックします。
インテントの説明の追加
- 次に、head.send.group.request インテントに適切な説明を追加します。[管理] タブに切り替え、[リソース] セクションの [インテント] を選択し、head.send.group.request インテントを選択します。
- 次の説明文を追加します:
assist users with group or full charter reservations. Initially collect travel details including departure period, destination, number of guests (min 4 max 15 people), contact details. The destination must be one of the following in the Pacific: Costa Rica, Mexico, Galapagos Islands
説明には、ボートに乗船できる最小人数と最大人数など、重要な情報が含まれています。これを覚えておきましょう。
- [保存] をクリックします。
これで完了です。 フローとパラメータのフルフィルメントの両方の no-match イベント ハンドラで生成的フォールバックを有効にしました。また、回答を生成するために生成的フォールバック機能が大規模言語モデルに渡す独自のテキスト プロンプトも定義しました。
次のセクションではエージェントを再テストし、前と同じ難しい質問にどう回答できるか確認します。
9. エージェントを再テストする
仮想エージェントで生成的フォールバックを構成して有効にしたので、同様の難しい質問にエージェントがどう回答するかを確認します。
[Test Agent] をクリックして、シミュレータを再度開きます。

再度、ライブアボードとライブアボード ダイビングについて、エージェントに質問します。以降のすべての会話では、ユーザー定義のメッセージと生成された回答が赤いボックスで強調表示されます。

一般的なリプロンプトではなく、有益な回答が得られましたか?これで、エージェントに実行してもらうタスクの明確かつ簡潔な説明をテキスト プロンプトとフローの説明で提供すると、特定のインテントを作成しなくても、詳細な質問に回答するという点で bot がはるかにスマートになります。顧客は、エージェントから実用的でない回答ではなく、より情報に基づいた回答が提供されることを評価するでしょう。
ここでは、エージェントに挑戦してみましょう。まだスキューバ ダイバーの認定を受けていないので、ダイビングの講習を探すのを手伝ってもらえるかどうか質問してみます。

現時点では、ダイビングの講習についてのサポートがエージェントに組み込まれていません。エージェントはどのようにしてこれを知るのでしょうか?テキスト プロンプトでは、エージェントが対応できることとできないことを明確に示しました。「現時点では、あなたは陸ベースのダイビングや講習について顧客に対応したり、地元のダイビング ショップやダイビング リゾートをおすすめすることはできません。」
ここで、理想的なシナリオを再テストし、会話を充実させます。エクスペリエンスがどう変化したかを確認してみましょう。


フロー設計に従ってインテントを照合したり、パラメータを収集しようとしたりする際、Dialogflow は設計時に定義されたフルフィルメントを表示します。ユーザーがスクリプトから外れて旅行の詳細の要約をリクエストしたり、電話番号の提供を申し出たりすると、生成的フォールバックが機能します。
良い傾向です。理想的なシナリオを再テストしました。ライブ対応のエージェントとの会話にできるだけ近い自然で快適な会話ができたでしょうか。
残念ながら会話がうまくいかないこともありますので、別のテストをしてみましょう。今回は、参加者の人数を尋ねられたら、15 より大きい数を答えてください。


ここでは注目すべき点がいくつかあります。
- 20 が有効な数値ではないのはなぜでしょう。それは、インテントの説明で「エージェントは、出発の時期、目的地、参加者の数 ***(最小 4 人、最大 15 人)****、連絡先などの情報を収集します*」と許可される参加者の数を制限しているためです。LLM が返した「申し訳ありませんが、対応できるのは 15 人までのグループ予約です」という回答は、参加者の人数に関する制限と完全に適合しています。これをさらに強化するのが、4~15 の範囲に含まれる数字のみに一致するカスタムの RegExp エンティティである number-of-guests です。
- ユーザーは 15 人のダイバーの旅行を希望しているため、会話は続きます。自然な会話ではよくあることですが、人は頻繁に考えを変えます。エージェントが協力的で、サポートがスムーズに進むようにユーザーを優しく誘導していることに注目してください。
会話デザインでは、会話の半分をスクリプト化し、残りの半分を誰もが介入して対応できる十分に堅牢なものにします。ロングテールを対象にデザインする場合は、ダイアログの各ステップでユーザーが話す可能性がある内容に焦点を当てて、ルート、ハンドラ、パラメータを定義する必要があります。Google が Dialogflow CX に生成的フォールバックを追加したのはこれが理由です。この機能によって、実装の詳細よりも会話デザインの原則に重点を置き、堅牢な会話エクスペリエンスをユーザーに提供できるようになっています。
もう一度テストしてみましょう。今回は、予約可能な目的地のリストに含まれない場所(モルディブなど)で、もう一度 bot に挑戦してみます。次に、バックグラウンドで何が起こっているのかを簡単に見ていきます。

なお、destination パラメータの no-match イベントで生成的フォールバックも有効にしているため、リクエストが大規模言語モデルに送信されて回答が生成されます。[エージェントの発話:] の規則的な所定の回答は無視されます。
以下のテキストボックスは、大規模言語モデルに送信されるリクエストの形成にプレースホルダがどのように役立つかを理解するのに役立ちます。
これは、Dialogflow で構成したカスタムのテキスト プロンプトで、プレースホルダが太字で強調表示されています。
You are a friendly agent that likes helping traveling divers.
You are under development and you can only help
$flow-description
At the moment you can't help customers with land-based diving and courses. You cannot recommend local dive shops and diving resorts.
Currently you can $route-descriptions
The conversation between the human and you so far was:
${conversation USER:"Human:" AGENT:"AI"}
Then the human asked:
$last-user-utterance
You say:
下のテキストボックスには、大規模言語モデルが受け取った入力と、ユーザーに返される生成された回答を含む出力が表示されています。
llm_input: You are a friendly agent that likes helping traveling divers. You are under development and you can only help search, find and book liveaboards. At the moment you can't help customers with land-based diving and courses. You cannot recommend local dive shops and diving resorts. Currently you can assist users who are looking for a group reservation or a full charter. Initially collect travel details including departure period, destination, number of guests (min 4 max 15 people), contact details. The destination must be one of the following in the Pacific: Costa Rica, Mexico, Galapagos Islands. The conversation between the human and you so far was: Human: Hi, my name's Alessia AI Hi Alessia, what can I help you with today? Human: Can you help me find a nice boat for myself and my family? AI To assist you with that I need to collect the details of your travel and then we'll get back to you with an offer shortly. Where would you like to go? We can organize a charter in Costa Rica, Galapagos Islands and several locations around Mexico Then the human asked: The kids want to go to the Maldives llm_output: You say: I'm sorry Alessia, we can only help you with liveaboards in Costa Rica, Galapagos Islands and several locations around Mexico.
以前のテストと同様に、ユーザーに返される回答は、インテントの説明の一部として提供した「目的地は、太平洋のコスタリカ、メキシコ、ガラパゴス諸島のいずれかである必要があります」という情報に従ってモデルによって生成されます。
禁止されたフレーズのリストを変更する
生成的フォールバック機能は、以下の複数の方法で構成できます。
- 回答の生成に使用する特定の(すでに定義されている)プロンプトを選択する。
- カスタム プロンプトを定義する。
- 禁止されたフレーズのリストを変更する。
最初の 2 つについてはすでに確認しましたので、3 つ目について見てみましょう。
- エージェントの設定 で [ML] タブに移動し、[生成 AI] サブタブに移動します。
- [禁止フレーズ] セクションで、次の文をリストに追加します。
Dangerous countryHateful placeMedical assistance- [保存] をクリックします。
- リセット アイコンをクリックして、最後のシナリオをもう一度テストします。世界中の美しいダイビング スポットを提案する代わりに、禁止フレーズのいずれかを入力します。

プロンプトと生成された回答は、禁止フレーズのリストと照合されます。禁止フレーズとは、生成 AI で禁止されているフレーズのことです。禁止されたフレーズや安全でないと考えられるフレーズが入力に含まれている場合、生成は失敗し、同じフルフィルメントの [エージェントの発話:] に規則的な所定の回答が提供されます。
素晴らしいですね。生成された回答が大きな違いを生み出すさまざまな会話の状況について確認しました。今後もぜひテストを続けてください。
10. 完了
この Codelab は以上です。くつろぎの時間!

仮想エージェントを正常に作成し、フローで使用される no-match イベント ハンドラとパラメータの入力で生成的フォールバックを有効にしました。
適切なフローとインテントの説明を生成的フォールバック機能と組み合わせることで、エージェントは「申し訳ありませんが、お手伝いできません」や「無効なオプションが入力されました」といった汎用的なプロンプトではなく、具体的かつ協力的な回答を提供できるようになります。大規模言語モデルによって生成されたエラー プロンプトでは、次はうまく行くようにユーザーを優しく誘導したり、可能なことについての期待をリセットしたりすることができます。
ぜひ、他の会話をテストしたり、Dialogflow CX と生成 AI に関連するその他の機能を試したりしてみてください。
クリーンアップ
この Codelab で使用したリソースについて、Google Cloud アカウントに課金されないようにするには、次のクリーンアップを行います。
- Dialogflow CX コンソールに移動し、作成したすべてのエージェントを削除します。
- Google Cloud コンソールで、[API とサービス] ページに移動し、Dialogflow API を無効にします。
参考資料
会話型 AI と生成 AI について引き続き学習するには、以下のガイドとリソースを参考にしてください。
- Dialogflow CX のドキュメント
- 生成的フォールバックのドキュメント
- Google Cloud の生成 AI
- PaLM の概要
ライセンス
この作業はクリエイティブ・コモンズの表示 2.0 汎用ライセンスにより使用許諾されています。
![生成的フォールバックのデフォルトのテキスト プロンプト テンプレート プルダウンの右側にある [編集] ボタンをクリックして確認します。](https://codelabs.developers.google.com/static/codelabs/dialogflow-generative-fallback/img/example.png?hl=ja)