Dialogflow ES の基本

このページでは、Dialogflow ES の基本的な使用方法について説明します。他のドキュメントやクイックスタートに進む前に、このページをお読みください。

ユーザーがテクノロジーを利用できるようにする

従来のコンピュータ インターフェースを正常に機能させるには、インターフェースへの入力が構造化されていて予測可能なものでなければなりません。そのため、不自然な言葉を入力しなければ使用できず、場合によっては使用が難しいこともあります。エンドユーザーがこの構造化された入力を理解できない場合、対処方法がわかりません。インターフェースは、エンドユーザーが使用している自然言語に基づいてエンドユーザーに何が必要なのかを推測することが理想的です。

たとえば、「今日の天気は?」といった簡単なユーザーのリクエストを考えてみましょう。他のエンドユーザーは、次のように質問することもできます。

  • 「今の天気はどう?」
  • 「明日のサンフランシスコの気温は?」
  • 「21 日の天気は?」

このように単純な質問であっても、会話エクスペリエンスを実装するのは簡単なことではありません。自然言語の解釈と処理には、非常に堅牢な言語パーサーが必要です。Dialogflow はこれを処理します。これにより、質の高い会話型のエンドユーザー エクスペリエンスを提供できます。

エージェント

ダイアログ フロー エージェントは、エンドユーザーとの同時会話を処理する仮想エージェントです。これは、人間の言語のニュアンスを理解する自然言語理解モジュールです。Dialogflow は、会話中のエンドユーザーのテキストまたは音声をアプリやサービスが理解できる構造化データに変換します。Dialogflow エージェントは、システムに必要な種類の会話が処理されるように設計および構築されます。

Dialogflow エージェントは、人間のコールセンター エージェントに似ています。予想される会話のシナリオに対処するためにトレーニングを行ってください。トレーニングは、過度に行う必要はありません。

インテント

インテントは、1 回の会話ターンでのエンドユーザーの意向を分類します。エージェントごとに多くのインテントを定義し、複数のインテントを結合して会話全体を処理します。エンドユーザが何かを書いたり読んだりすると(エンドユーザ表現と呼ばれます)、エンドユーザー表現をエージェントの最も適切なインテントとマッチングします。インテントのマッチングはインテント分類とも呼ばれます。

たとえば、天気に関するエンドユーザーの質問を認識し、回答する天気エージェントを作成できます。天気予報の質問のインテントを定義します。エンドユーザーが「天気予報は?」と言うと、Dialogflow によってエンドユーザーの表現と予測インテントがマッチングされます。エンドユーザー表現を使って、目的の天気予報の時間や場所など、有用な情報を抽出するインテントを定義することもできます。この抽出されたデータは、システムがエンドユーザーの天気クエリを実行する上で重要です。

天気をリクエストするエンドユーザー表現からデータを抽出するエージェント

基本的なインテントには次のものが含まれます。

  • トレーニング フレーズ: エンドユーザーの発言に含まれる可能性のあるフレーズのサンプルです。エンドユーザー表現がこれらのフレーズのいずれかと似ている場合、Dialogflow によってインテントがマッチングされます。Dialogflow の組み込み機械学習は他の類似のフレーズと一緒にリストに展開されるため、すべての例を定義する必要はありません。
  • アクション: 各インテントに対してアクションを定義できます。インテントが一致すると、Dialogflow によってシステムにアクションが提供されます。そのアクションを使用して、システムで定義された特定のアクションをトリガーできます。
  • パラメータ: 実行時にインテントが一致すると、Dialogflow はエンドユーザー表現から抽出された値をパラメータとして提供します。各パラメータにはエンティティ タイプというタイプがあります。エンティティ タイプによって、データの抽出方法が指定されます。未加工のエンドユーザー入力とは異なり、パラメータは、ロジックの実行やレスポンスの生成に簡単に使用できる構造化データです。
  • レスポンス: テキスト、音声、視覚的なレスポンスを定義してエンドユーザーに返します。エンドユーザーに回答を提供したり、エンドユーザーに詳細を質問したり、会話を終了したりできます。

次の図は、インテントのマッチングとエンドユーザーへのレスポンスの基本フローを示しています。

エンドユーザー表現を処理するエージェントとインテント

エンティティ

各インテントのパラメータには、エンドユーザー表現のデータの抽出方法を指定するエンティティ タイプと呼ばれるタイプが含まれます。

Dialogflow では、さまざまなタイプのデータに対応する事前定義のシステム エンティティが提供されています。たとえば、日付、時刻、色、メールアドレスなどを照合するシステム エンティティがあります。カスタムデータを一致させる独自のカスタム エンティティを作成することもできます。たとえば、食料品店エージェントで購入可能な野菜の種類に一致する野菜エンティティを定義できます。

コンテキスト

Dialogflow のコンテキストは、自然言語のコンテキストと似ています。たとえば、誰かが「それはオレンジです」と言った場合、「それ」が何を指しているのかを理解するためにコンテキストが必要になります。同様に、Dialogflow がそのようなエンドユーザー表現を処理するには、インテントを正しく一致させるためにコンテキストが必要になります。

コンテキストを使用すると、会話のフローを制御できます。文字列名で指定される入力コンテキストと出力コンテキストを設定することで、インテントのコンテキストを構成できます。インテントが一致すると、そのインテントに構成済みの出力コンテキストがアクティブになります。コンテキストがアクティブな間、Dialogflow では、構成済みのインテントと、現在アクティブなコンテキストに一致する入力コンテキストをマッチングする可能性が高まります。

次の図は、銀行エージェントのコンテキストを使用する例を示しています。

インテントとコンテキストでやりとりするユーザーの図
  1. エンドユーザーは当座預金口座に関する情報を尋ねます。
  2. Dialogflow によって、このエンドユーザー表現が CheckingInfo インテントとマッチングされます。このインテントには checking 出力コンテキストが含まれているので、コンテキストがアクティブになります。
  3. エージェントはエンドユーザーに、当座預金口座に関する情報の種類を尋ねます。
  4. エンドユーザーは「私の口座残高」と応答します。
  5. Dialogflow によって、このエンドユーザー表現が CheckingBalance インテントとマッチングされます。このインテントには、checking 入力コンテキストが含まれています。この入力コンテキストがインテントと一致するには、アクティブになっている必要があります。同様に、savings コンテキストがアクティブな場合、同じエンドユーザー表現をマッチングする SavingsBalance インテントも存在している可能性があります。
  6. 必要なデータベース クエリが実行されると、エージェントから当座預金残高のレスポンスが送られます。

フォローアップ インテント

フォローアップのインテントを使用すると、インテントのペアのコンテキストを自動的に設定できます。フォローアップ インテントは、関連付けられた親インテントの子です。フォローアップ インテントを作成すると、出力コンテキストが自動的に親インテントに追加され、同じ名前の入力コンテキストがフォローアップ インテントに追加されます。前の会話ターンで親のインテントが一致した場合にのみフォローアップ インテントが一致します。複数レベルのネストされたフォローアップ インテントを作成することもできます。

Dialogflow には、「はい」、「いいえ」、「キャンセル」などの一般的なエンドユーザーの応答に対応する事前に定義されたフォローアップ インテントが数多くあります。カスタムの応答を処理する独自のフォローアップ インテントを作成することもできます。

Dialogflow コンソール

Dialogflow では、Dialogflow コンソールドキュメントに移動コンソールを開く)というウェブユーザー インターフェースが利用できます。このコンソールを使用して、エージェントを作成、ビルド、およびテストします。

Dialogflow コンソールは Google Cloud Platform Console とは異なります(ドキュメントに移動コンソールを開く)。Dialogflow コンソールは Dialogflow エージェントの管理に使用され、GCP Console は GCP 固有の Dialogflow 設定(課金など)およびその他の GCP リソースの管理に使用されます。

ほとんどの場合、Dialogflow コンソールを使用してエージェントをビルドする必要がありますが、Dialogflow API を使用して高度なシナリオ用のエージェントを作成することもできます。

ユーザーによる統合の操作

Dialogflow は、Google アシスタント、Slack、Facebook メッセンジャーなどの一般的な会話プラットフォームと統合されます。このようなプラットフォームのエージェントを作成する場合は、さまざまな統合オプションのうちの 1 つを使用する必要があります。直接的なエンドユーザー インタラクションが処理されるため、エージェントの作成に専念できます。各統合は、エンドユーザー インタラクションをプラットフォーム固有の方法で処理します。詳細については、統合プラットフォームのドキュメントをご覧ください。

統合のためのフルフィルメント

デフォルトで、エージェントは、一致したインテントに静的レスポンスで応答します。統合のいずれかのオプションを使用している場合は、フルフィルメントを使用してより動的なレスポンスを提供できます。インテントのフルフィルメントを有効にすると、Dialogflow は、定義されたサービスを呼び出してそのインテントに応答します。たとえば、エンドユーザーが金曜日にヘアカットの予定を入れる場合、サービスはデータベースをチェックし、金曜日の空き情報をエンドユーザーに返します。

インテントには、フルフィルメントを有効にする設定があります。インテントがシステムによるアクションまたは動的レスポンスを必要とする場合は、インテントに対してフルフィルメントを有効にします。フルフィルメントが有効でないインテントが一致した場合、Dialogflow ではそのインテントに対して定義されている静的レスポンスが使用されます。

フルフィルメントが有効であるインテントが一致した場合は、Dialogflow から Webhook サービスにそのインテントに関する情報をリクエストします。システムは、必要なアクションを実行し、続行する方法に関して Dialogflow に応答します。フルフィルメントが有効な場合、インテントに定義した静的レスポンスは、Webhook サービスが失敗した場合にのみ使用されます。次の図は、フルフィルメントの処理フローを示しています。

フルフィルメントのフローを示す図
  1. エンドユーザーが表現を入力または発声します。
  2. Dialogflow がエンドユーザー表現をインテントにマッチングさせ、パラメータを抽出します。
  3. Dialogflow は Webhook サービスに Webhook リクエスト メッセージを送信します。このメッセージには、一致インテント、アクション、パラメータ、インテントに定義されたレスポンスに関する情報が組み込まれます。
  4. サービスが、データベース クエリや外部 API 呼び出しなど、必要に応じてアクションを実行します。
  5. サービスから Webhook レスポンス メッセージが Dialogflow に送信されます。このメッセージには、エンドユーザーに送信する必要があるレスポンスが含まれています。
  6. Dialogflow からエンドユーザーにレスポンスが送信されます。
  7. エンドユーザーがレスポンスを確認または聞き取ります。

ユーザーによる API の操作

統合オプションのいずれかを使用していない場合は、エンドユーザーと直接対話するコードを記述する必要があります。会話ターンごとに Dialogflow の API を直接操作し、エンドユーザーの表現を送信してインテント一致を受け取る必要もあります。次の図は、API を操作するときの処理フローを示しています。

API のフローを示す図
  1. エンドユーザーが表現を入力または発声します。
  2. サービスはこのエンドユーザー表現を Dialogflow にインテント検出リクエスト メッセージとして送信します。
  3. Dialogflow は、サービスにインテント検出レスポンス メッセージを送信します。このメッセージには、一致インテント、アクション、パラメータ、インテントに定義されたレスポンスに関する情報が組み込まれます。
  4. サービスが、データベース クエリや外部 API 呼び出しなど、必要に応じてアクションを実行します。
  5. サービスによってエンドユーザーにレスポンスが送信されます。
  6. エンドユーザーがレスポンスを確認または聞き取ります。