フローを使用してエージェントを構築する

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

このガイドで作成が完了したエージェントは、コンソールで次のようにグラフ表示されます。

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

始める前に

このガイドを読む前に、次の手順を行ってください。

  1. フローに関する基本事項をご覧ください。
  2. 手順に沿って設定してください。

エージェントを作成する

このガイドで新しいエージェントを作成するには:

  1. Dialogflow CX Console を開きます。
  2. プロジェクトを作成または選択します。
  3. [Create Agent(エージェントを作成)] をクリックします。
  4. [独自に構築] を選択します。
  5. 基本的なエージェント設定に関するフォームに入力します。
    1. 任意の表示名を選択できます。
    2. お好みのロケーションをお選びください詳細な位置情報の設定を変更する場合は、[編集] ボタンをクリックします。
    3. 使用するタイムゾーンを選択します。
    4. エージェントのデフォルト言語を選択します。
    5. 必要に応じて、Stackdriver Logging を有効にします。
  6. [保存] をクリックします。

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

このガイドでは、シンプルなシャツの注文エージェントを作成する手順について説明します。コンソールの手順をスキップしたい場合は、エージェントをダウンロードしてインポートできます。

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

次のフローとインテントは、新しいエージェントに対して自動的に作成されます。[管理]、[インテント] の順にクリックして、インテントを見つけることができます。[ビルド] をクリックするとフローが表示されます。

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

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

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

  1. [Test Agent] ボタンをクリックして、シミュレータを開きます。
  2. テキスト入力項目に hello と入力し、Enter キーを押します。
  3. エージェントは、デフォルトのウェルカム レスポンスを返します。
  4. シミュレータを閉じます。

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

このエンドユーザー入力に対して、エージェントが実施した手順は次のとおりです。

  1. 入力した時点で、デフォルトの開始フローがアクティブなフローであり、フローの開始ページがアクティブなページでした。 アクティブなフローに適用される各状態ハンドラはスコープ内に存在したため、エージェントはそれらを評価しました。
  2. 評価されたルートの 1 つには、インテント要件として Default Welcome Intent があります。入力がこのインテントと一致したため、ルートが呼び出されました。
  3. 呼び出されたルートには、フルフィルメントのレスポンス メッセージが複数あります。エージェントは、そのメッセージをランダムに選択し、レスポンス キューに追加しました。
  4. 呼び出されたルートには遷移ターゲットがないため、アクティブなフローとページは変更されませんでした。
  5. エージェントはレスポンス キューの内容で応答しました。

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

このウェルカム メッセージは変更できます。 ウェルカム レスポンス メッセージを編集するには:

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

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

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

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

  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. [Pages] セクションで追加ボタンをクリックします。 ページ表示名のテキスト入力項目が表示されます。
  4. ページ表示名に「Store Location」と入力して Enter キーを押します。
  5. ページ表示名の横にあるオプションの ボタンをクリックします。
  6. [Edit] を選択してページ編集パネルを開きます。
  7. [Entry] フルフィルメントを見つけ、[Edit fulfillment] をクリックします。
  8. [Agent Says] フィールドに「Our store is located at 1007 Mountain Drive, Gotham City, NJ.」と入力します。
  9. [保存] をクリックします。
  10. ページ編集パネルを閉じます。

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

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

次に、店舗の場所ページが遷移ターゲットとして設定されたルートを作成する必要があります。このルートが呼び出されると、セッションは店舗の場所ページに移行されます。このルートはデフォルトの開始フローに適用されるため、フローがアクティブである限り、スコープに含まれます。シングルフロー エージェントの場合、これはルートが常にスコープ内に存在することを意味します。 会話の任意の時点で、エンドユーザーは店舗の場所を尋ねることができ、このルートが呼び出されます。

このルートを作成するには:

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

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

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

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

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

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

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

  1. 入力した時点で、デフォルトの開始フローがアクティブなフローであり、フローの開始ページがアクティブなページでした。 アクティブなフローに適用される各状態ハンドラはスコープ内に存在したため、エージェントはそれらを評価しました。
  2. 評価されたルートの 1 つに、インテントの要件として store.location があります。入力がこのインテントと一致したため、ルートが呼び出されました。
  3. 呼び出されたルートにはフルフィルメント レスポンス メッセージがないため、レスポンス キューに何も追加しませんでした。
  4. 呼び出されたルートには遷移ターゲットがあるため、アクティブなページは [店舗の場所] ページに変更されました。
  5. [店舗の場所] ページにエントリ フルフィルメントがあるため、フルフィルメントのレスポンス メッセージがレスポンス キュー(アドレス)に追加されました。
  6. エージェントはレスポンス キューの内容で応答しました。

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

このセクションでは、営業時間に関するエンドユーザーに関する質問を処理する営業時間ページを作成します。前のセクションでは、[Build] タブと [Manage] タブからページとインテントを作成しました。インライン作成を使用すると、これらのタイプをすばやく作成できます。

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

  1. グラフの [Start] ノードをクリックします。
  2. インテント ルートの追加()ボタンをクリックします。インテント ルート編集パネルが開きます。
  3. [Intent] セクションで、[New intent] を選択します。インテント編集パネルが開きます。
  4. 次のトレーニング フレーズで store.hours インテントを作成します。

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

  6. インテント ルート編集パネルで、[Transition] セクションまで下方向にスクロールします。

  7. [Page] の移行では、[New page] を選択します。

  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. [保存] をクリックします。

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

エンドユーザーが新しいシャツの注文をリクエストした際に照合されるインテントが必要です。このインテントは、エンドユーザーが事前に指定した場合でも、必要に応じて希望のシャツの色やサイズをキャプチャする必要があります。

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

トレーニング フレーズの一部にアノテーションを付ける、および関連するインテント パラメータを構成することで、インテントの照合によってエンドユーザー データを抽出する方法を制御します。たとえば、「What is the forecast tomorrow for Tokyo?」(東京の明日の予報は?)といったトレーニング フレーズを考えてみましょう。「tomorrow」には date パラメータ、「Tokyo」には location パラメータをそれぞれアノテーションとして付ける必要があります。トレーニング フレーズの一部にアノテーションを付けると、会話エージェント(Dialogflow CX)は、実行時にエンドユーザーが提供する実際の値の例であることを認識します。「What is the forecast on Friday for Sydney?」(金曜日のシドニーでの予報は?)などのエンドユーザー入力では、会話エージェント(Dialogflow CX)は「Friday」(金曜日)から date パラメータ、「Sydney」から location パラメータをそれぞれ抽出します。

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

  1. トレーニング フレーズのアノテーションを追加する部分を選択します。
  2. リストから目的のエンティティ タイプを選択します。
  3. 以下のパラメータ表にパラメータが作成されます。

上記の手順と同様のインテントを作成します。このインテントに order.new という名前を付けます。色を含むフレーズごとに、color パラメータと @sys.color システム エンティティ タイプを使用してカラーにアノテーションを付けます。シャツのサイズを含む各フレーズについて、そのサイズに 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.

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

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

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

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

  • 条件: $page.params.status = "FINAL"
  • Agent Says: You have selected a $session.params.size, $session.params.color shirt.
  • Transition Page: Order Confirmation

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

  • 条件: true
  • Agent Says: I'd like to collect a bit more information from you.

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

次の条件ルートを [Confirm Order] ページに追加して、そのページがアクティブになり、そのエントリ フルフィルメントが処理されたら、セッションを終了するようにします。

  • 条件: true
  • 遷移ターゲット: ページ: End Session

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

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

対話 説明
エンドユーザー: こんにちは
エージェント: こんにちは、シャツの注文用の仮想エージェントです。ご用件をお知らせください。
  1. Default Start FlowDefault Welcome Intent ルートが呼び出されます。
  2. この状態ハンドラのフルフィルメント(「Hello, this...」)は、レスポンス キューに追加されます。
  3. エージェントがレスポンス キューをエンドユーザーに送信します。
エンドユーザー: 青色のシャツを購入したいのですが
エージェント: 新規の注文を開始します。
エージェント: もう少し多くの情報を収集する必要があります。
エージェント: ご希望のサイズは?
  1. order.neworder.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. セッションは終了セッションに移行します。

プロダクション

エージェントを本番環境で実行する場合は、必ずプロダクションのベスト プラクティスを実施してください。