インテント カバレッジを拡大し、生成フォールバックでエラーを適切に処理

1. 概要

最終更新日: 2023 年 8 月 7 日

作成するアプリの概要

この Codelab では、Dialogflow CX でシンプルな仮想エージェントを構築、デプロイ、構成し、グループ予約やプライベート チャーターを行う旅行中のスキューバ ダイバーを支援します。仮想エージェントは、生成 AI と Google の最新の生成大規模言語モデル(LLM)を使用して仮想エージェントのレスポンスを生成します。

学習内容

  • 関連する API を有効にする方法
  • Dialogflow がインテント パラメータからページフォーム パラメータ値を自動的に事前入力する仕組み
  • Dialogflow でイベント ハンドラを構成する方法
  • フローおよびパラメータ入力時に使用される一致なしイベント ハンドラで生成フォールバックを有効にする方法
  • 基本的な会話状況とエージェント固有の会話状況を処理するように独自のテキスト プロンプトを構成する方法
  • (ユーザー定義の再プロンプトに加えて)必要なパラメータの再プロンプト ハンドラを生成するための適切なインテントとパラメータの説明を記述する方法
  • エージェントをテストし、生成フォールバックをトリガーするお客様の質問をシミュレートする方法

必要なもの

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

2. 設定方法

Dialogflow CX の生成フォールバック機能を使用する前に、Dialogflow API を有効にする必要があります。

Cloud コンソールを使用して Dialogflow API を有効にする

  1. ブラウザで Google Cloud コンソールを開きます。
  2. Google Cloud コンソールで [API ライブラリ] に移動し、有効にできる API とサービスを確認します。
  3. [API ライブラリ] ページの上部にある検索バーを使用して、「Dialogflow API」を検索し、表示されるサービスをクリックします。
  4. [有効にする] ボタンをクリックし、Google Cloud プロジェクトで Dialogflow API を有効にします。

gcloud CLI を使用する(代替)

また、次の gcloud コマンドを使用して API を有効にすることもできます。

gcloud services enable dialogflow.googleapis.com

API が正常に有効になっている場合は、次のようなメッセージが表示されます。

Operation "operations/..." finished successfully.

コードを取得する

仮想エージェントは最初から作成するのではなく、Dialogflow CX コンソールから復元して改善する必要があるエージェントを提供します。

ソースコードをダウンロードするには:

  1. 新しいブラウザタブを開き、エージェント リポジトリに移動して、コマンドラインからクローンを作成します。
  2. 最初のエージェントが JSON パッケージとしてエクスポートされました。ファイルを解凍してエージェント設定を調べ、フロー定義 Liveaboards.json を確認します。最後に、フローページ、インテント、エンティティを確認します。

3. 新しいエージェントを作成する

Dialogflow コンソールを開く

この Codelab の残りのステップでは、Dialogflow CX コンソールと Google Cloud プロジェクトを使用します。

  1. ブラウザで Dialogflow CX コンソールに移動します。
  2. 使用する Google Cloud プロジェクトを選択するか、使用する新しいプロジェクトを作成します。
  3. Dialogflow CX コンソールにエージェントのリストが表示されます。

Dialogflow CX を初めて使用する場合は、Dialogflow CX のドキュメントを参照して、必要に応じてプロジェクトや設定を構成する方法をご確認ください。

新しい Dialogflow CX エージェントを作成する

  1. GitHub リポジトリからダウンロードしたエージェントを復元するには、新しいエージェントを作成する必要があります。Dialogflow CX コンソールで、ページの右上にある [Create new agent] をクリックします。

新しいエージェントを作成する

  1. [Build your own] というオプションを選択します。

オプションを選択

  1. 以下のエージェント設定でフォームに入力し、[作成] をクリックしてエージェントを作成します。
  • 表示名として Divebooker を選択します。
  • ロケーションとして選択: us-central1
  • 使用するタイムゾーンを選択する
  • デフォルトの言語としてen - Englishを選択
  1. Dialogflow によってエージェントが自動的に開きます。まだ終わりではありません。

Divebooker エージェントを復元する

  1. エージェント リスト ページに戻り、作成したエージェントを特定します。オプション 78d2781c655810e7.png をクリックし、[復元] ボタンをクリックします。
  2. [Upload] オプションを選択し、GitHub リポジトリから以前にダウンロードした ZIP ファイルをドロップまたは選択します。
  3. [Restore] ボタンをクリックして、提供されたエージェントをインポートします。

[Restore] ボタンをクリックして、提供されたエージェントをインポート

頑張りましたね。これでダイビングの予約用の仮想エージェントの作成が完了し、顧客をサポートできるようになりました。次のセクションでは、この機能をテストして、ユーザーからの質問に答えたり予約リクエストをサポートしたりするうえで、この機能がどの程度優れているかを確認します。

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

Dialogflow にはシミュレータが組み込まれており、エージェントとチャットしてバグを発見できます。各ターンで、トリガーされたインテント、エージェントのレスポンス、アクティブなページ、セッション パラメータの正しい値を確認できます。

いくつかのシナリオをテストし、各シナリオについて、エージェントが特定の応答をする理由を調べます。最初のものから始めましょう。

未解決のインテント

  1. Dialogflow コンソールで、エージェント内で [Test Agent] をクリックしてシミュレータを開きます。

[Test Agent] をクリックしてシミュレータを開く

  1. エージェントへの挨拶(Hello など)を入力して「what is a liveaboard?」と尋ねます。質問がどのインテントにも一致せず、「サポート方法がわかりません」などの一般的なプロンプトが表示される表示されます。Simulator で元のレスポンスを調べることで、sys.no-match-default 組み込みイベントが呼び出されたことを確認できます。

エージェントに挨拶して Liveabord とは何かを尋ねる

JSON レスポンスのほぼ一番下までスクロールします。一致するインテントを検索すると、Dialogflow はこれが NO_MATCH であると判断し、no-match イベントを発生させます。

Dialogflow によって sys.no-match-default イベントが発生したことを確認する

  1. [Build] タブに切り替え、[Liveaboards] フローのスタートページを開きます。

[Build] タブに切り替えて、Liveaboards フローのスタートページを開きます。

デフォルトでは、すべてのフローに no-match および no-input 組み込みイベント用のイベント ハンドラがあります。これらのイベント ハンドラは、フローを作成すると自動的に作成され、削除できません。

  1. sys.no-match-default イベント ハンドラをクリックし、[Agent response] セクションまで下にスクロールします。Dialogflow には代替レスポンスのリストが用意されていますが、さまざまな種類のレスポンス メッセージを定義して、テキスト以外のレスポンスをエンドユーザーに提供することもできます。

事前定義されたエージェント レスポンスを確認する

ハッピーパスに進みましょう。

ハッピーパス

この 2 番目のケースでは、来年 7 月にガラパゴス諸島を訪れる 12 人のグループのダイビング クルーズを予約したいダイバーのふりをします。

  1. シミュレータ パネルでリセットのアイコンをクリックして、エージェントとの新しい会話を開始します。

リセットして新しい会話を開始

縦向き表示に変更して UX を改善しましょう

  1. ガラパゴス諸島へのチャーターを予約したい旨を伝え、旅行の詳細を伝えます。以下のまったく同じプロンプトを使用する必要はありません。いろいろと試してみてください。

ハッピーパスをテストする

  1. スタートページを開き、head.send.group.request ルートをクリックします。[Transition] セクションまで下にスクロールします。このセクションでは、このインテントが一致した場合にページを遷移するよう Dialogflow に指示します。

「追加情報の収集」ページへの移行

  1. ルートの定義を閉じて、[Collect More Info] ページを展開します。エントリのフルフィルメントとパラメータのリストに注目してください。

「関連情報の収集」ページ

Dialogflow CX の各ページでは、ページのエンドユーザーから収集するパラメータのリストであるフォームを定義できます。エージェントが旅行先を求めていないことに注意してください。最初の入力の一部として渡しており、destination もインテント パラメータであるためです。ページが最初にアクティブになったとき、およびそのアクティブ期間中は、インテント パラメータと同じ名前のフォーム パラメータはすべて自動的にセッション パラメータ値に設定され、対応するプロンプトはスキップされます。

  1. [Manage] タブに切り替えて、[Intents] セクションで [head.send group request] インテントをクリックします。このインテントに提供されたトレーニング フレーズと、トレーニング フレーズの注釈付き部分を確認します。

このインテントに提供されたトレーニング フレーズと、トレーニング フレーズの注釈付き部分を確認します。

  1. 「15 名のダイバーのためにコスタリカへの旅を企画する必要があります」というトレーニング フレーズを考えてみましょう。「コスタリカ」destination と "15" のアノテーションが付けられるnumber-of-guests と一緒に使用されます。トレーニング フレーズの一部にアノテーションを付けると、Dialogflow は、その部分が実行時にエンドユーザーから提供される実際の値の例であることを認識します。最初の入力に「ガラパゴス諸島へのチャーターの提供はありますか?」と入力するのはそのためです。Dialogflow が「ガラパゴス諸島」から destination パラメータを抽出しました。

次に、フォーム パラメータの入力を求められたときに、エージェントに有効な入力を提供しないとどうなるかを見ていきます。

無効な入力値です

  1. シミュレータ パネルでリセットのアイコンをクリックして、エージェントとの新しい会話を開始します。
  2. グループ予約をする意図を表現します。今回はエージェントに行き先を伝えません。目的地を尋ねられたときに、コスタリカ、ガラパゴス、メキシコ以外のランダムな値で回答します。

無効なリンク先を入力してください

  1. [管理] タブで、[リソース] セクションの [エンティティ タイプ] をクリックします。2 つのタブがあります。[System] タブに、エージェントが現在使用しているシステム エンティティが表示されます。[Custom] タブには、このエージェントに固有のデータを照合するために作成されたカスタム エンティティのリストが表示されます。

宛先のカスタム エンティティ

  1. destination エンティティをクリックして、そのエンティティがどの値と一致するかを確認します。ヨーロッパはエントリではなく、類義語でもありません。
  2. フロー図で、フォーム パラメータが含まれる [Collect Additional Info] ページを展開します。destination パラメータをクリックします。
  3. パラメータ パネルで [Reprompt イベント ハンドラ] セクションまで下にスクロールし、[No-match default] イベント ハンドラをクリックします。

このパラメータレベルのイベント ハンドラは、フォームの入力時に無効なエンドユーザー入力を処理することを目的としています。「ヨーロッパ」だから予期しない入力であり、sys.no-match-default イベントが呼び出され、このイベント用に定義された対応する再プロンプト ハンドラが呼び出されました。[エージェントの発言] セクションには、再プロンプト メッセージが 2 つ表示されています。

エンドユーザーが無効な宛先を入力したときに、静的な代替再プロンプト メッセージを表示します。

これで完了です。これらのテストケースは、エージェントが適切に対処することが期待される一般的なシナリオを表しています。ユーザーから、bot が回答できない質問や、bot が対応できないリクエストを行うことがよくあります。ロングテール向けの設計は非常に複雑であり、ほとんどのユーザーが使い慣れている道筋から外れています。会話の中でうまくいかない可能性があるすべてのことと、ユーザーがたどる予期せぬ経路やサポートされていない経路について考えてみてください。

自動音声認識(ASR)の進歩により、ほぼ常にユーザーの発言を正確に把握できるようになりました。しかし、ユーザーが何を指しているのかを判断するのは、依然として困難です。発話は多くの場合、単独では理解できません。コンテキストでしか理解できません。この Codelab の次のセクションでは、Google の最新の生成大規模言語モデル(LLM)を使用して、会話を軌道に乗せ、会話を前進させる方法について説明します。

5. 生成フォールバックを有効にする

生成フォールバック機能とはどのようなものですか?

生成フォールバック機能は、Google の大規模言語モデル(LLM)を使用して仮想エージェントのレスポンスを生成する Dialogflow CX 機能です。

メリット

主要なユースケースの間には、ユーザーが理解できない場合にエージェントが言ったことを繰り返す、ユーザーが要求した電話を保留にして会話を要約するなど、いくつかの一般的なユーザー リクエストがあります。最初のテストで、エージェントは「ライブボードとは?」という質問に答えられませんでした。これは、インテントを作成しておらず、スキューバ ダイビングやライブボードに関連する一般的な質問を処理するためのフローを設計していないためです。

堅牢なインテントであっても、エラーの余地はまだあります。ユーザーは、何も言わない(No Input エラー)か、予期しないことを言う(No Match エラー)と、スクリプトから外れてしまうことがあります。エラーの発生を防ぐことは、発生したエラーを処理するよりも効果的ですが、エラーを完全に回避することはできません。「どうすればよいかわかりません」などの一般的なメッセージほとんど実行不可能なソリューションでは不十分な場合がよくあります。エラー プロンプトは、協調の原則に沿ったものにする必要があります。この原則に従えば、効率的なコミュニケーションは、会話の参加者間の協調が下流にあるという前提に基づいています。

次のセクションでは、インテント カバレッジを拡大し、エラー処理を簡素化してカスタマー エクスペリエンスを向上させるために、生成フォールバック機能を構成する方法について説明します。

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

フローやページ、またはパラメータの入力中に使用される、一致しないイベント ハンドラで生成フォールバックを有効にできます。一致しないイベントに対して生成フォールバックが有効になっている場合、そのイベントがトリガーされるたびに、Dialogflow はユーザーに返すレスポンスを生成しようとします。レスポンスの生成に失敗した場合は、代わりに通常の所定のエージェント レスポンスが発行されます。

エージェントで、一致しないイベント ハンドラで生成フォールバックを有効にできます。これは、フロー、ページ、パラメータ フルフィルメントで使用できます。

今後、Liveaboards フローの no-match-default イベント全体で生成フォールバックが有効になります。

  1. フローのスタートページを開きます。
  2. [イベント ハンドラ] で [sys.no-match-default] をクリックします。
  3. [エージェントの応答] で [生成フォールバックを有効にする] をオンにし、[保存] をクリックします。

[エージェントのレスポンス] で [生成フォールバックを有効にする] をオンにする

保存すると、Liveaboard のスタートページで生成フォールバックが有効になります

特定の一致しないイベントの生成フォールバックを有効にする

次に、エージェントが乗客の人数を尋ねたときに、無効な入力を処理するために生成フォールバックを有効にします。

  1. フォーム パラメータが含まれている [Collect More Info] ページを開きます。number-of-guests パラメータをクリックします。
  2. 対象の No-match イベント ハンドラに移動します([Reprompt イベント ハンドラ] セクションまでスクロールして、[No-match default] イベント ハンドラをクリックします)。

ターゲットの No-match イベント ハンドラに移動します([Reprompt イベント ハンドラ] までスクロールして、[No-match] のデフォルト イベント ハンドラをクリックします)。

  1. [エージェント レスポンス] で [生成フォールバックの有効化] をオンにします。

パラメータ number-of-guest で生成フォールバックを有効にする

  1. 最後に [保存] をクリックします。
  2. 同じ手順を繰り返して、destinationemail-address に対して生成フォールバックを有効にします。

これで完了です。予期しないインテントや無効なパラメータ値を処理するための生成フォールバックを有効にしました。次に、LLM に応答方法を指示するテキスト プロンプトを使用して、生成フォールバック機能を構成する方法を確認します。

6. 生成フォールバックを構成する

生成フォールバック機能は、生成されたレスポンスを生成するために、リクエストを大規模言語モデルに渡します。リクエストは、自然言語と、エージェントおよび会話の現在の状態に関する情報を組み合わせたテキスト プロンプトの形式を取ります。この機能は複数の方法で構成できます。

  1. レスポンスの生成に使用する特定の(すでに定義されている)プロンプトを選択します。
  2. カスタム プロンプトを定義します。

定義済みのプロンプトを選択する

  1. Dialogflow CX コンソールで [Agent Settings] をクリックします。

エージェント設定に移動

  1. [ML] タブに移動し、[生成 AI] サブタブに移動します。

[生成 AI] サブタブ

この機能には、2 つのテンプレート プロンプトがあらかじめ用意されています。デフォルト テンプレート(非表示)と、独自のプロンプトの作成をガイドするサンプル テンプレートです。

  1. [Example] テンプレートを選択し、プルダウンの右側にある [編集] ボタンをクリックして内容を調べます。

テンプレートのプルダウンの右側にある [編集] ボタンをクリックして、内容を調べます。

仮想エージェントは、事前定義されたプロンプトを使用することで、基本的な会話の状況に対処できます。例:

  • ユーザーに開始の挨拶と終了の挨拶をします。
  • ユーザーが理解できなかった場合は、エージェントの発言を繰り返します。
  • ユーザーからリクエストされた場合は、会話を保持します。
  • 会話を要約します。

Divebooker エージェント向けの特定のテキスト プロンプトを定義してみましょう。

7. 独自のプロンプトを定義する

  1. 下のプロンプトをコピーして [テキスト プロンプト] 欄に貼り付けます。
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:
  1. [Save as a new template] を選択し、新しいプロンプトを新しいテンプレートとして保存(新しいテンプレート名を選択)して、パネルの右下にある [Save] をクリックします。

エージェント専用のカスタム テキスト プロンプトを作成し、新しいテンプレートとして保存します。

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

新しい設定を保存します。

独自のテキスト プロンプトを記述する際は、明確かつ簡潔で、規範的な内容にしてください。LLM に対するプロンプトの作成方法は、LLM の回答の品質に大きく影響します。LLM は指示に従うようにトレーニングされているため、プロンプトが正確な指示のように見えるほど、より良い結果が得られる可能性が高くなります。得られた結果に基づいてプロンプトを作成し、イテレーションして改善します。

効果的なプロンプトを作成するには、次のベスト プラクティスに従ってください。

  1. LLM に実行させたいタスクを明確かつ簡潔に説明します。必要ありません。完全性と長さを心がけます。
  2. また、プロンプトは具体的で明確に定義し、あいまいな表現やあいまいな表現を避ける必要があります。
  3. 複雑なタスクを小さく、管理しやすい断片に分割します。タスクを小さなステップに分割することで、モデルは一度に 1 つのことに集中し、エラーや混乱が生じる可能性を減らすことができます。
  4. 回答の質を高めるには、プロンプトに例を追加してください。LLM は回答方法について、例からコンテキスト内で学習します。

プロンプトを作成する際は、どのようなコンテキストを生成すべきかを自然言語で説明するだけでなく、次のプレースホルダも使用できます。

  • $conversation エージェントとユーザー間の会話(ユーザーの最後の発話を除く)。ターンのプレフィックスは調整できます(例:「人間」「AI」「あなた」、「エージェント」)。
  • $last-user-utterance: ユーザーの最後の発話。
  • $flow-description: アクティブ フローのフローの説明。
  • $route-descriptions: アクティブなインテントのインテントの説明。

最初のテキスト プロンプトが用意できたので、次のタスクは、フローとインテントの説明が適切であることを確認することです。

8. フローとインテントの説明を追加する

フローの説明を追加する

  1. Liveaboards フローに説明を追加するには、[Flows] セクションのフローにカーソルを合わせ、フロー設定にアクセスします。

[Flows] セクションのフローにカーソルを合わせると、フローの設定にアクセスできます。

  1. オプション 78d2781c655810e7.png ボタンをクリックします。
  2. [フローの設定] を選択し、search, find and book liveaboards のような説明を追加します。

Liveaboards フローに説明を追加する

  1. [保存] をクリックします。

インテントの説明を追加する

  1. 次に、head.send.group.request インテントにわかりやすい説明を追加しましょう。[Manage] タブに切り替え、[Resources] セクションで [Intents] を選択して、[head.send.group.request] インテントを選択します。
  2. 説明として「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」を追加します。

説明文には、ボートに乗れる乗客の最小数と最大数などの重要な情報が含まれています。次の点に注意してください。

  1. [保存] をクリックします。

以上で設定は完了です。フローとパラメータ フルフィルメントの両方で、一致しないイベント ハンドラでの生成フォールバックが有効になっている。また、生成フォールバック機能が大規模言語モデルに渡して生成レスポンスを生成する独自のテキスト プロンプトも定義しました。

次のセクションでは、エージェントを再テストして、以前と同じ難しい質問にどのように答えられるかを確認します。

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

仮想エージェントで生成フォールバック フォールバックを構成して有効にしたので、よく似た質問をして、レスポンスがどのように処理されるかを確認してみましょう。

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

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

ライブボードとダイビングについてエージェントに再度質問します。ここからは、すべてのダイアログにユーザー定義のメッセージと、生成された回答が赤いボックスでハイライト表示されている様子に注目しましょう。

エージェントを再度テストし、ライブボードについてもう一度尋ねる

一般的な再プロンプトではなく、有益な情報を含むレスポンスが得られましたか?これでエージェントに実行させたいタスクを(テキスト プロンプトとフローの説明で)明確かつ簡潔に記述すると、bot は特定のインテントを作成せずに詳細な質問に答える場合に、よりスマートになります。どうしても対応できない回答をする代わりに、エージェントが豊富な情報に基づいた回答を提供できることを、お客様は高く評価するでしょう。

まだ認定ダイバーになっていないので、恥ずかしがらずにエージェントと競い合って、スキューバ ダイビング コースを見つけるのに役立つかどうかを尋ねてください。

 スキューバ ダイビング コースを探すために役立つかどうかをエージェントに尋ねる

そうです、現時点ではスキューバ コースを支援するエージェントを設計していません。エージェントはそれをどのようにして知ることができますか?テキスト プロンプトに、エージェントがサポートできることと、サポートできないことを明確に概説しています。「現在のところ、陸地でのダイビングやコースは提供しておりません。地元のダイビング ショップやダイビング リゾートをおすすめすることはできません。」

次に、ハッピーなシナリオをもう一度テストし、会話を充実させます。エクスペリエンスがどのように変わったか見てみましょう。

楽しいシナリオをもう一度試し、創造性を発揮して会話をしましょう

楽しいシナリオをもう一度試し、創造性を発揮して会話をしましょう

Dialogflow がフロー設計に沿ってインテントのマッチングやパラメータの収集を試みた際に、設計時に定義されたフルフィルメントが表示されます。ユーザーが旅行の詳細の要約をリクエストしたり、電話番号の提供を提案したりすると、生成フォールバック機能が機能します。

良い傾向です。ハッピーなシナリオを再度テストできました。ライブ対応のエージェントとできるだけ近く、快適で自然な会話ができたことを願っています。

残念なことに、会話でうまくいかないことがあるかもしれません。別のテストを行いましょう。今度はゲストの数として 15 より大きい数を入力するよう求められます。

ゲストの人数を 16 人以上にする

ゲストの人数を 16 人以上にする

ここで指摘しておくべき点がいくつかあります。

  1. 20 が有効な数値でないのはなぜですか?インテントの説明で許容されるゲスト数に上限が設定されているため、「エージェントは出発時間、目的地、ゲスト数などの情報を収集します***(最小 4 人、最大 15 人)*** *、連絡先情報*」と記載します。をタップします。LLM から「申し訳ありませんが、グループ予約は 15 名までサポートできます」という生成レスポンスが返されます。宿泊人数の制限と完全に一致しています。これをさらに強制するために、number-of-guests は 4 ~ 15 の範囲に含まれる数値のみに一致するカスタムの正規表現エンティティです。
  2. 結局のところ、ユーザーは 15 人のダイバーへのオファーを望んでいるので、会話は続きます。これは自然な会話中によく起こり、私たちはよく考えを変えるものです。エージェントが協力的であり、適切なパスへとユーザーを優しく誘導している点に注目してください。

会話の設計では、対話の半分のスクリプトをスクリプトに記述し、残りの半分は誰でも介入して行動できる程度に堅牢であることを願っています。ロングテール向けに設計する場合、デベロッパーは、ダイアログの各ステップでユーザーが何を言えばよいかに焦点を当て、ルート、ハンドラ、パラメータを定義する必要があります。そのため、Dialogflow CX に生成フォールバック機能を追加しました。この機能により、デベロッパーは実装の詳細ではなく、会話デザインの原則に集中できるようになり、堅牢な会話エクスペリエンスをユーザーに提供できます。

もう一つテストを行いましょう。今度は、モルディブなど、利用可能な目的地のリストにない場所を使用して、もう一度 bot によるチャレンジを行います。その後、その裏で何が起こっているかを簡単に見ていきます。

モルディブなど、利用可能な目的地のリストに含まれていない場所で 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.

以前に実施したテストと同様に、ユーザーに返されるレスポンスはモデルによって生成され、インテントの説明の一部として提供した情報を使用します。「目的地は太平洋のコスタリカ、メキシコ、ガラパゴス諸島のいずれかである必要があります」

禁止されたフレーズのリストを変更する

生成フォールバック機能は、複数の方法で構成できます。

  1. レスポンスの生成に使用する特定の(すでに定義されている)プロンプトを選択します。
  2. カスタム プロンプトを定義します。
  3. 禁止フレーズのリストを変更します。

ここまで、最初の 2 つの方法を見てきました。3 つ目を見てみましょう

  1. [Agent Settings] で、[ML] タブに移動し、[Generative AI] サブタブに移動します。
  2. [禁止フレーズ] で、リストに次の文を追加します。
  3. Dangerous country
  4. Hateful place
  5. Medical assistance
  6. [保存] をクリックします。
  7. リセット アイコンをクリックして、最後のシナリオを再度テストします。世界中にある美しいダイビングの目的地を指定するのではなく、禁止されているフレーズのいずれかを入力します。

禁止されているフレーズのいずれかをテストする

プロンプトと生成されたレスポンスは、禁止フレーズのリストと照合されます。禁止フレーズとは、生成 AI で禁止されているフレーズのことです。入力に禁止フレーズ、または安全でないとみなされたフレーズが含まれている場合は、生成に失敗し、代わりに(エージェントが同じフルフィルメントで発言している)通常の所定のレスポンスが発行されます。

お疲れさまでした。ここまで、生成的な回答が大きな違いを生む、さまざまな会話的な状況を取り上げてきました。テストは自由に続けてください。

10.完了

この Codelab はお疲れさまでした。くつろぐ時間です!

コンボチル

仮想エージェントが正常に作成され、フロー中とパラメータ入力時に使用される no-match イベント ハンドラで生成フォールバックが有効になりました。

生成フォールバック機能を適切なフローとインテントの説明と組み合わせることで、「サポート方法がわかりません」のような一般的なプロンプトではなく、エージェントの具体的で協力的なレスポンスを提供できます。または「無効なオプションが入力されました」。大規模言語モデルによって生成されたエラー プロンプトは、ユーザーを成功パスに優しく誘導したり、何が実現可能で何が不可能かについての期待をリセットしたりします。

必要に応じて他の会話的な状況をテストし、Dialogflow CX生成 AI に関連する利用可能な他の機能をお試しください。

クリーンアップ

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

  • Dialogflow CX コンソールに移動し、作成したエージェントをすべて削除します。
  • Google Cloud コンソールで [API とサービス] ページに移動し、Dialogflow API を無効にします。

参考資料

会話型 AI と生成 AI について引き続き学習するには、以下のガイドとリソースを参考にしてください。

ライセンス

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