フローを使用してエージェントをビルドする

このガイドでは、Dialogflow CX コンソールを使用して、フローを使用するシャツの注文エージェントをビルドしてテストする方法を説明します。このエージェントを操作するときに、店舗の場所を尋ねる、営業時間を確認する、シャツを注文するといった操作が可能です。

次の図は、このガイドで完成したエージェントを示しています。

エージェント グラフのスクリーンショット

始める前に

このガイドを読む前に、次のタスクを完了してください。

エージェントを作成する

このガイド用のエージェントを作成します。

  1. Dialogflow CX コンソールを開きます。
  2. プロジェクトを作成または選択します。
  3. [Create Agent(エージェントを作成)] をクリックします。
  4. [Build your own] を選択します。
  5. 基本的なエージェント設定に関するフォームに入力します。
    1. 表示名を入力します。
    2. ロケーションを選択します。詳細な位置情報の設定を変更する場合は、[編集] ボタンをクリックします。
    3. タイムゾーンを選択します。
    4. デフォルトの言語を選択します。
    5. 必要に応じて、Cloud Logging を有効にします。
  6. [保存] をクリックします。

(省略可)エージェントのインポート

このガイドでは、シャツ注文エージェントを構築する手順について説明します。

コンソールの手順をスキップするには、エージェントをダウンロードしてインポートします。

デフォルトのフローとインテント

新しいエージェントに対して、次のフローとインテントが自動的に作成されます。

インテントを確認するには、[管理]、[インテント] の順にクリックします。フローを確認するには、[ビルド] をクリックします。

X 項目
Default Welcome Intent Default Welcome Intent には、エンドユーザーの最初の入力と一致することを目的とした「Hi」や「Hello」などのトレーニング フレーズがあります。このインテントは必要に応じて編集できます。
Default Negative Intent Default Negative Intent を使用して、ネガティブ サンプルとして機能するこのインテントにトレーニング フレーズを追加できます。
デフォルトの開始フロー デフォルトの開始フローは唯一のフローとして使用できます。このガイドで使用するフローは、それだけです。より複雑なエージェントの場合は、フローをさらに追加できます。このフローには、インテント要件としてデフォルト ウェルカム インテントが付いたデフォルトのインテント ルートがあります。

デフォルトのウェルカム レスポンス メッセージをテストする

デフォルトのフローとインテントは、ウェルカム メッセージのみで基本的な会話を処理できます。

新しいエージェントをテストするには:

  1. [Test Agent] ボタンをクリックして、シミュレータを開きます。
  2. テキスト フィールドに「hello」と入力して Enter キーを押します。
  3. エージェントがデフォルトのウェルカム メッセージで応答します。
  4. シミュレータを閉じます。

シミュレータのスクリーンショット

エージェントは、このエンドユーザー入力に対して次の手順を実行します。

  1. 入力を指定すると、エージェントはアクティブなデフォルトの開始フローとフローの開始ページのスコープ内の状態ハンドラを評価します。
  2. エージェントは、Default Welcome Intent に一致するルートを特定して実行します。
  3. エージェントは、フルフィルメント レスポンス メッセージの 1 つをランダムに選択し、レスポンス キューに追加します。
  4. ルートに移行ターゲットがないため、アクティブなフローとページは変更されません。
  5. エージェントは、レスポンス キューの内容をユーザーに送信します。

ウェルカム レスポンス メッセージを編集する

ウェルカム レスポンス メッセージを編集するには:

  1. [Build] タブをクリックします。
  2. [Flows] セクションで [Default Start Flow] を選択します。
  3. グラフの [Start Page] ノードをクリックします。
  4. インテント要件として Default Welcome Intent を含むルートを見つけてクリックし、ルート編集パネルを開きます。
  5. [Fulfillment] セクションの [Agent responses] サブセクションで、既存のレスポンス メッセージをすべて削除します。
  6. 唯一のレスポンスとして Hello, this is a shirt ordering virtual agent. How can I help you? を追加します。
  7. [保存] をクリックします。
  8. ルート編集パネルを閉じます。

エージェント レスポンスのスクリーンショット

更新されたウェルカム レスポンス メッセージをテストする

更新されたレスポンスをテストするには:

  1. [Test Agent] ボタンをクリックして、シミュレータを開きます。
  2. テキスト フィールドに「hello」と入力して Enter キーを押します。
  3. エージェントが新しいメッセージを返します。
  4. シミュレータを閉じます。

店舗の場所ページ

Dialogflow CX の会話(セッション)は、ステートマシンとして記述し、可視化できます。CX セッションの状態はページで表されます。ページが 1 つしかないため、エージェントはあまり役に立ちません。このセクションでは、店舗の所在地に関する質問を処理する別のページを作成します。

ロケーション インテントを作成する

インテントによっては、1 回の会話ターンにおけるエンドユーザーの意図(含意)を分類します。

エンドユーザーの入力で店舗の場所がリクエストされたときに一致するインテントを作成するには:

  1. [Manage] タブを選択します。
  2. [Intents] をクリックします。
  3. [作成] をクリックします。
  4. インテントの表示名として「store.location」と入力します。
  5. 次のトレーニング フレーズを入力します。
    • Where is the store?
    • Directions
    • Tell me the address
    • Where do I pick up my order?
    • How do I get there?
    • Where is the store located?
    • What street are you on?
    • What is your address?
    • How do I get to your store?
    • Where are you located?
  6. [保存] をクリックします。

インテントのスクリーンショット

ロケーション ページを作成する

新しいページを作成します。このページにエントリ フルフィルメントを追加して、ページがアクティブになるたびに実行されるようにできます。このエントリ フルフィルメントには、店舗の場所を示すレスポンス メッセージが必要です。

店舗のロケーション ページを作成するには:

  1. [Build] タブをクリックします。
  2. [Flows] セクションで [Default Start Flow] を選択します。
  3. [ページ] セクションの 追加 ボタンをクリックします。ページ表示名のテキスト入力が表示されます。
  4. ページの表示名として「Store Location」と入力し、Enter キーを押します。
  5. ページ表示名の横にある more_vert ボタンをクリックします。
  6. [Edit] を選択してページ編集パネルを開きます。
  7. [Entry] フルフィルメントを見つけ、[Edit fulfillment] をクリックします。
  8. [+Add dialogue response] をクリックして、[Agent responses] セクションの [Agent dialogue] フィールドに「Our store is located at 1007 Mountain Drive, Gotham City, NJ.」と入力します。
  9. [保存] をクリックします。
  10. ページ編集パネルを閉じます。

ページのスクリーンショット

フローにロケーション インテント ルートを追加する

次に、[店舗所在地] ページを移行先とするルートを作成します。このルートが呼び出されると、セッションは [店舗検索] ページに移行します。このルートはデフォルトの開始フローに適用されるため、フローがアクティブである限りスコープに含まれます。

単一フローのエージェントの場合、ルートは常にスコープ内になります。会話のどの時点でも、エンドユーザーは店舗所在地を尋ねることができ、このルートが呼び出されます。

ルートを作成するには:

  1. [Build] タブをクリックします。
  2. [Flows] セクションで [Default Start Flow] を選択します。
  3. グラフの [Start Page] ノードをクリックします。これは、デフォルトの開始フローの開始ページです。
  4. 次のインテント ルートを追加します。
    • インテント: store.location
    • 遷移ページ: Store Location
  5. [保存] をクリックします。
  6. インテント ルートの編集パネルを閉じます。

インテント ルートのスクリーンショット

編集パネルを閉じると、新しいページのノードがグラフに表示されます。Start ノードから Store Location ノードへの矢印は、セッションがノード間でどのように遷移するかを示しています。

店舗の場所ページをテストする

ページをテストするには:

  1. [Test Agent] ボタンをクリックして、シミュレータを開きます。
  2. 「What is the store location?」と入力して Enter キーを押します。
  3. エージェントが住所を指定します。
  4. シミュレータを閉じます。

エージェントは、このエンドユーザー入力に対して次の手順を実行します。

  1. 入力を指定すると、エージェントはアクティブなデフォルトの開始フローとフローの開始ページのスコープ内の状態ハンドラを評価します。
  2. エージェントは、store.location インテントに一致するルートを特定して実行します。
  3. ルートにフルフィルメント レスポンス メッセージがないため、エージェントはレスポンス キューに何も追加しません。
  4. エージェントはセッションを [店舗検索] ページに移行します。
  5. エージェントは、[店舗検索] ページのエントリ フルフィルメント レスポンス メッセージをレスポンス キューに追加します。
  6. エージェントは、レスポンス キューの内容をユーザーに送信します。

インライン作成を使用した営業時間ページ

このセクションでは、エンドユーザーからの営業時間の問い合わせに対応する営業時間ページを作成します。以前は、[Build] タブと [Manage] タブからページとインテントを作成していました。このセクションでは、インライン作成を使用してこれらのコンポーネントをより迅速に作成する方法について説明します。

インテント ルート、インテント、ページをインライン作成するには:

  1. グラフの [Start Page] ノードをクリックします。
  2. [ルート] の横にある [追加] をクリックします。インテント ルート編集パネルが開きます。
  3. [インテント] セクションで、[新しいインテント] を選択します。インテント編集パネルが開きます。
  4. 次のトレーニング フレーズを使用して store.hours インテントを作成します。

    • What are your store hours?
    • What time do you close?
  5. [保存] をクリックします。インテント編集パネルが閉じます。

  6. ルート編集パネルの [移行] セクションに移動します。

  7. [ページ] 遷移で、[新しいページ] を選択します。

  8. 表示されたテキスト入力項目に「Store Hours」と入力します。

  9. [保存] をクリックします。新しいページに移動する遷移が追加されたため、新しいページがグラフに表示されます。

  10. ルート編集パネルを閉じます。

  11. 店舗所在地の場合と同様に、営業時間を指定するエントリ フルフィルメントを追加します。

  12. 開いている編集パネルを閉じます。

注文アイテムのページ

次に、フォーム パラメータを使用するページを作成します。新しいシャツの注文をリクエストすると、セッションはこのページに移行し、シャツの注文のサイズと色を収集します。

シャツのサイズのカスタム エンティティ タイプを作成する

エンティティ タイプは、エンドユーザー入力からデータを抽出する方法を制御します。Dialogflow CX には、日付、時刻、色、メールアドレスなどの一般的なデータタイプに一致する、事前に定義されたシステム エンティティが用意されています。特定のデータ用にカスタム エンティティを作成することもできます。

このエージェントでは、シャツの色にシステム エンティティを使用できますが、シャツのサイズにはカスタム エンティティを作成する必要があります。

サイズ エンティティ タイプには、次のエンティティ エントリが必要です。

エンティティ 類義語
小 small, tiny, little
中 medium, regular, average
大 large, big, giant

エンティティを作成するには:

  1. [Manage] タブを選択します。
  2. [エンティティ タイプ] をクリックします。
  3. [作成] をクリックします。
  4. 表示名を size に設定します。
  5. 表に記載されているエンティティ エントリを追加します。
  6. [保存] をクリックします。

インテント パラメータを使用して注文インテントを作成する

エンドユーザーが新しいシャツの注文をリクエストしたときに一致するインテントが必要です。このインテントは、エンドユーザーが最初にその情報を提供した場合に、選択したシャツの色やサイズをキャプチャすることもできます。

パラメータは、セッション中にエンドユーザーが指定した値を取得して参照するために使用されます。各パラメータには、表示名とエンティティ タイプがあります。未加工のエンドユーザー入力とは異なり、パラメータは構造化データです。そのため、ロジックの実行や回答の生成に利用できます。

トレーニング フレーズの一部にアノテーションを付け、関連するインテント パラメータを構成することによって、インテント マッチングでエンドユーザー データを抽出する方法を制御します。

たとえば、「東京の明日の天気予報は?」というトレーニング フレーズについて考えてみましょう。「tomorrow」には date パラメータ、「Tokyo」には location パラメータをそれぞれアノテーションとして付けることができます。トレーニング フレーズの一部にアノテーションを付けると、Dialogflow CX は、実行時にエンドユーザーが提供する実際の値の例であることを認識します。

「What is the forecast on Friday for Sydney?」(金曜日のシドニーでの予報は?)などのエンドユーザー入力では、Dialogflow CX は「Friday」(金曜日)から date パラメータ、「Sydney」から location パラメータをそれぞれ抽出します。

コンソールでトレーニング フレーズにアノテーションを追加するには、次の手順を行います。

  1. アノテーションを付けるトレーニング フレーズの部分をハイライト表示します。
  2. リストから必要なエンティティ タイプを選択します。
  3. Dialogflow は、次のパラメータ テーブルにパラメータを作成します。

次の手順で order.new という名前のインテントを作成します。

  1. 色を含む各フレーズについて、color パラメータと @sys.color システム エンティティ タイプを使用して色にアノテーションを付けます。
  2. シャツのサイズを含む各フレーズについて、size パラメータと、前に作成した @size カスタム エンティティ タイプを使用してサイズにアノテーションを付けます。

トレーニング フレーズとパラメータは次のようになります。

インテントのスクリーンショット

注文ページを作成する

新しい注文ページを作成します。

  • 表示名: New Order
  • エントリ フルフィルメント: Ok, let's start a new order.

注文ページにフォームを追加する

各ページでフォームを定義できます。これは、ページのエンドユーザーから収集する必要があるパラメータのリストです。エージェントは、必要なすべてのフォーム パラメータ(ページ パラメータとも呼ばれます)を収集するまで、複数の会話ターンでエンドユーザーとやり取りします。フォーム パラメータごとに、エージェントがエンドユーザーに情報をリクエストするために使用するプロンプトも指定します。このプロセスはフォーム入力と呼ばれます。

エンドユーザーがインテント マッチのインテント パラメータを指定すると、インテント パラメータはセッション パラメータになります。ページが最初にアクティブになると、すべてのフォーム パラメータに、同じ名前のセッション パラメータが事前入力されます。したがって、order.new インテントが一致したときにエンドユーザーがサイズまたは色を指定すると、これらの値がフォームに自動的に入力されます。

[新しい注文] ページに、次の 2 つの必須フォーム パラメータを定義します。

必須 表示名 エンティティ タイプ Is list プロンプト
色 @sys.color What color would you like?
size @size ご希望のサイズは?

このフォームを追加するには:

  1. グラフの [New Order] ページをクリックします。
  2. [パラメータ] 追加ボタン をクリックして、パラメータ編集パネルを開きます。
  3. 上記の表で説明されたパラメータを追加します。
  4. [保存] をクリックします。
  5. パラメータ編集パネルを閉じます。

フローに注文インテント ルートを追加する

エンドユーザーが新しい注文を希望したときに、新しい注文ページに移行するルートをデフォルトの開始フローに追加します。

  • インテント: order.new
  • 移行先のページ: 新しい注文

確認ページ

最後のページで注文を確認し、セッションを終了します。

確認ページを作成する

セッション パラメータを使用して注文を確認するレスポンスを表示する確認ページを作成します。

  • 表示名: Order Confirmation
  • エントリのフルフィルメント: You can pick up your order for a $session.params.size, $session.params.color shirt in 7 to 10 business days. Goodbye.

注文ページに条件ルートを追加する

条件を使用して、ルートを呼び出すかどうかを決定できます。条件は、フォームが完了しているかどうかを確認する目的で一般的に使用され、または評価時に常に呼び出されるように構成されます。

コンソールで条件を設定するには、条件の設定のドキュメントをご覧ください。

次のルートを注文ページに追加します。これは注文ページのフォームに情報を入力したときに呼び出されるルートです。この条件ルートは、エンドユーザーへのレスポンスでパラメータ参照を使用し、セッションを [注文確認] ページに移行します。

  • 条件: $page.params.status = "FINAL"
  • エージェントの発話: You have selected a $session.params.size, $session.params.color shirt.
  • 遷移ページ: Order Confirmation

次のルートを注文ページに追加します。このルートは、ページがアクティブで条件ルートが評価されている間、会話ターンごとに実行されます。前述の条件が評価されて呼び出されると、ページは非アクティブになるため、この true 条件ルートは評価されません。

  • 条件: true
  • エージェントの発話: I'd like to collect a bit more information from you.

セッションを終了する条件ルートを作成する

[注文確認] ページに次の条件ルートを追加して、ページがアクティブになり、エントリ フルフィルメントが処理された後にセッションを終了します。

  • 条件: true
  • 遷移先のページ: End Session

完了したエージェントをテストする

次のダイアログでエージェントをテストします。

対話 説明
エンドユーザー: こんにちは
エージェント: こんにちは、シャツの注文用の仮想エージェントです。ご用件をお知らせください。
  1. Default Start Flow の Default Welcome Intent ルートが呼び出されます。
  2. この状態ハンドラのフルフィルメント(「Hello, this...」)は、レスポンス キューに追加されます。
  3. エージェントがレスポンス キューをエンドユーザーに送信します。
エンドユーザー: 青色のシャツを購入したいのですが
エージェント: 新規の注文を開始します。
エージェント: もう少し多くの情報を収集する必要があります。
エージェント: ご希望のサイズは?
  1. デフォルトの開始フローの order.new インテント ルートが評価されます。
  2. order.new インテントが照合され、color インテント パラメータが「blue」に設定されます。
  3. セッションが [New Order] ページに移行し、color インテント パラメータがセッション パラメータになります。
  4. [新しい注文] ページには、エントリ フルフィルメント(「新規の注文を...」)が表示され、レスポンス キューに追加されます。
  5. color セッション パラメータは、同じ名前のフォーム パラメータに入力するために使用されます。
  6. [New Order] ページの true 条件ルートが評価され、呼び出されます。これには、レスポンス メッセージ(「I'd like to collect...」)があり、レスポンス キューに追加されます。
  7. ページのフォームは入力されていないため、エージェントはサイズ プロンプト(「What size...」)を使用し、これをレスポンス キューに追加します。
  8. エージェントがレスポンス キューをエンドユーザーに送信します。
エンドユーザー: large
エージェント: 大きなサイズの青色のシャツを選択されました。
エージェント: ご注文いただいた大きなサイズの青色のシャツは、7~10 営業日以内にお受け取りいただけます。さようなら。
  1. エンドユーザー入力は、前の会話ターンでエージェントによって要求された size パラメータを満たします。
  2. [新しい注文] ページのフォーム補完ルートが評価され、呼び出されます。 フルフィルメント(「大きなサイズの...」)があり、レスポンス キューに追加されます。このレスポンスのパラメータ参照は、エンドユーザーによって指定された実際の値に解決されます。
  3. セッションが [注文確認] ページに移行します。
  4. [注文確認] ページには、エントリのフルフィルメント(「ご注文いただいた...」)が表示され、レスポンス キューに追加されます。
  5. エージェントがレスポンス キューをエンドユーザーに送信します。
  6. セッションは終了セッションに移行します。

本番環境用の準備

エージェントを本番環境で実行する前に、本番環境のベスト プラクティスを実装します。