アクションとパラメータ

このページでは、アクションとパラメータ設定について、また実行時にインテントが一致したときのそれらの用途について説明します。

このデータがある場所

エージェントを作成する際は、Dialogflow ES コンソール(ドキュメントに移動コンソールを開く)を使用するのが最も一般的です。コンソールの使用方法は次のとおりです。アクションとパラメータのデータにアクセスするには、次の手順を行います。

  1. Dialogflow ES コンソールに移動します。
  2. エージェントを選択します。
  3. 左側のサイドバーのメニューで [Intents] を選択します。
  4. インテントを選択します。
  5. [Action and parameters] セクションまでスクロールします。

アクション フィールドとパラメータ フィールドのスクリーンショット

コンソールではなく API を使用してエージェントを作成する場合は、インテントのリファレンスをご覧ください。API のフィールド名はコンソールのフィールド名と同様です。以下の手順では、コンソールと API の間の重要な違いを説明します。

アクション

action フィールドは、サービス内でのロジック実行時に役立つ便利なフィールドです。

エージェントを作成するときに、このフィールドを任意のテキストに設定できます。

実行時にインテントが一致すると、Dialogflow はフルフィルメント Webhook リクエストまたは API インタラクション レスポンスにアクション値を提供します。これは、サービス内の特定のロジックをトリガーするために使用できます。

パラメータ

実行時にインテントが一致すると、Dialogflow はエンドユーザーの表現から抽出された値をパラメータとして提供します。各パラメータにはエンティティ タイプというタイプがあります。エンティティ タイプによって、データの抽出方法が指定されます。未加工のエンドユーザー入力とは異なり、パラメータは、ロジックの実行やレスポンスの生成に簡単に使用できる構造化データです。

エージェントを作成するときは、トレーニング フレーズの一部にアノテーションを付けることと、関連するパラメータを構成することによってデータの抽出方法を制御します。

以下は、パラメータ構成のフィールドです。「火曜日に部屋を予約する」というトレーニング フレーズの「火曜日」にアノテーションが付いている例が示されています。

  • 必須: インテントを完成させるためにパラメータが必要な場合は、このボックスをオンにします。以下の必須パラメータによるスロット充填のセクションをご覧ください。
  • パラメータ名: パラメータを識別する名前。 例: date
  • Entity: パラメータに関連付けられているエンティティ タイプ。 例: @sys.date
  • Value: ほとんどの場合、$parameter-name のようなパラメータ参照に設定されます。これは、実行時に抽出された値のプレースホルダとして使用されます。ただし、このフィールドを使用して別の値を選択することもできます。下記のパラメータ値とパラメータ参照のセクションをご覧ください。例: $date
  • Is List :値をリストとして返す場合は、このチェックボックスをオンにします。以下のパラメータをリストするセクションをご覧ください。
  • プロンプト: このパラメータが指定されていない場合、エージェントがエンドユーザーに尋ねる質問。このフィールドは、必須フィールドがオンになっている場合にのみ使用されます。以下の必須パラメータによるスロット充填のセクションをご覧ください。
  • デフォルト値: これは、エンドユーザーが指定しない場合のパラメータのデフォルト値です。コンソールでデフォルト値を変更するには、パラメータ行の上にマウスを移動して右側のメニューをクリックする必要があります。

実行時にインテントが一致すると、Dialogflow はフルフィルメント Webhook リクエストまたは API インタラクション レスポンスにパラメータ データを提供します。これらは、パラメータ名からパラメータ値へのマッピングとして提供されます。

エージェントを作成する際には、レスポンスにパラメータ値を含めることができます。下のパラメータ値とパラメータ参照をご覧ください。

パラメータをリストする

コンソールを使用してエージェントを作成するときに Is List オプションをオンにすると、そのパラメータはリストとして構成されます。リストには複数の要素を含めることができます。たとえば、農作物の注文に対応するエージェントには、次のようなエンドユーザー表現が予想されます。

  • 「I want apples」
  • 「I want apples and oranges」
  • 「I want apples, oranges, and bananas」

トレーニング フレーズにリスト パラメータを追加する場合、フレーズには 1 つ以上のパラメータの例を含めることができ、それぞれにアノテーションを付けます。

リスト パラメータ アノテーションのスクリーンショット

単一のトレーニング フレーズで同じパラメータを持つ 2 つ以上の単語またはフレーズにアノテーションを付けると、[リストである] オプションが自動的に有効になります。このオプションを無効にしてもアノテーションが同じであれば、このアノテーションを含むページを開くと、[Is List] が自動的に再確認されます。

多言語エージェントの場合、[リストである] オプションは言語に固有ではありません。

パラメータ値とパラメータ参照

パラメータ参照は、実行時に抽出されたパラメータ値を保持する変数です。エージェントを作成するとき、インテント レスポンス、パラメータ プロンプト、およびパラメータの [Value] フィールドでパラメータ参照を使用できます。

たとえば、インテント レスポンスで $parameter-name を使用できます。Dialogflow がユーザーに応答すると、パラメータ参照は実行時に抽出されたパラメータ値に置き換えられます。この方法は、エンドユーザーが提供した情報を要約するのに役立ちます。たとえば、インテント レスポンスは、「あなたのために $ date に部屋を予約しました」のようになります。

基本的なパラメータ参照

関連付けられたエンティティによって抽出されたパラメータ値を参照するには、次の形式を使用します。

$parameter-name

たとえば、パラメータ名が date の場合は、$date として参照できます。

元の値のパラメータ参照

テキストが特定のエンティティに一致すると、容易に処理できるテキストに変換されることがあります。たとえば、エンドユーザーの発話中の単語「apples」は、果物のエンティティについては「apple」として抽出されることがあります。エンドユーザーが記述または記述したとおりにパラメータ値を参照するには、次の形式を使用します。

$parameter-name.original

たとえば、パラメータ名が date の場合、元の値を $date.original として参照できます。

曖昧な日付のパラメータ参照

パラメータが @sys.date システム エンティティに関連付けられ、エンドユーザーが部分的な日付(月、日、年を指定しない)を指定すると、Dialogflow は将来の日付と最も近い日付を照合します。ただし、この日付のバリエーションを取得することもできます。

明示的な部分一致を取得できます。ここで、Dialogflow は次の形式を使用して、不明な部分を U に置き換えます。

$parameter-name.partial

次の形式を使用して、過去の最も近い日付を取得できます。

$parameter-name.recent

たとえば、今日の日付が 2021 年 8 月 11 日の場合、パラメータ名は date で、ユーザーは「8 月 13 日」と発話します。

パラメータ リファレンス 解決された値
$date 2021-08-13
$date.partial UUUU-08-13
$date.recent 2020-08-13

複合エンティティのパラメータ参照

複合エンティティは、別のサブ エンティティを含むエンティティです。パラメータのサブ エンティティの値を参照するには、次の形式を使用します。

$parameter-name.sub-entity-name

たとえば、パラメータ名が move、サブ エンティティ名が direction である場合、サブ エンティティの値は $move.direction として参照できます。

アクティブなコンテキストのパラメータ参照

コンテキストは、パラメータ値の一時ストレージとして機能します。アクティブなコンテキストから取得したパラメータ値を参照するには、次の形式を使用します。

#context-name.parameter-name

たとえば、パラメータ名が room で、reservation がアクティブなコンテキストである場合、パラメータ値を #reservation.room として参照できます。

イベント パラメータのパラメータ参照

イベント パラメータを参照するには、次の形式を使用します。

#event-name.parameter-name

たとえば、パラメータ名が duration、イベント名が alarm である場合、イベント パラメータを #alarm.duration として参照できます。

Parameter Value フィールド

Value フィールドのパラメータ参照は特別な意味を持ちます。このフィールドの内容は、インテント レスポンスとパラメータ プロンプトの $parameter-name の解決値を決定します。Dialogflow は、次の順序でパラメータ データを処理します。

  1. 関連付けられたエンティティを使用して、エンドユーザー表現からパラメータ値を抽出します。
  2. パラメータの Value フィールドのコンテンツを解決します。
  3. パラメータの Value フィールドの解決されたコンテンツに $parameter-name を設定します。たとえば、Value フィールドが $parameter-name に設定されていない場合、$parameter-name の値が別の値に再設定されます。
  4. インテント レスポンスやパラメータ プロンプトのコンテンツを解決する

ここでは、「I want to buy a small shirt」というエンドユーザー表現に対する並べ替えの影響を示すいくつかの例を示します。

パラメータ参照の場所 設定されたコンテンツ 解決されたコンテンツ
Parameter Value フィールド $size S
インテント レスポンス サイズ「$size」を選択しました サイズ S を選択しました
パラメータ参照の場所 設定されたコンテンツ 解決されたコンテンツ
Parameter Value フィールド $size.original
インテント レスポンス サイズ「$size」を選択しました サイズ「small」を選択しました
パラメータ参照の場所 設定されたコンテンツ 解決されたコンテンツ
Parameter Value フィールド $size S
インテント レスポンス サイズ「$size.original」を選択しました サイズ「small」を選択しました

必須パラメータによるスロット充填

エージェントを作成する際、必要に応じてパラメータをマークできます。エンドユーザーがそれぞれの必須パラメータにデータを提供するまで、インテントは完成しません。

必須パラメータ フィールドのスクリーンショット

実行時にインテントが一致すると、Dialogflow エージェントは、エンドユーザーが各必須パラメータにデータを提供するまでエンドユーザーから情報を収集し続けます。このプロセスをスロット充填と呼びます。

スロット充填用の Webhook が有効になっていないと、Dialogflow はエンドユーザーから必要なデータをすべて収集するまで Webhook リクエストを送信しません。

Dialogflow は、スロット充填の各ステップの API 対話レスポンスを送信します。これらのスロット充填のそれぞれのレスポンスについて、インテントとアクションが同じになり、これまでに収集されたパラメータが提供されます。

エージェントを作成する場合、エージェントがエンドユーザーからパラメータ データを取得するために使用するプロンプトを表示します。プロンプトのバリエーションを提供することもできるため、エージェントは常に同じ質問をするとは限りません。

パラメータ プロンプトのスクリーンショット

たとえば、衣料品店のエージェントが以下の必須パラメータを使用しているとします。

  • 服の種類
  • quantity
  • size

インテントを完成させると、以下のようになります。

ユーザー: T シャツを探しているのですが。
エージェント: 何枚お探しですか?
ユーザー: 3
エージェント: 何色がよろしいですか?
ユーザー: 黒
エージェント: サイズはどうされますか。
ユーザー: M サイズ
エージェント: かしこまりました。M サイズの黒い T シャツを 3 枚ですね。

エンドユーザーが 1 つの式に複数のパラメータのデータを渡すと、Dialogflow は提供されたデータを収集し、欠落したデータの取得を続行します。たとえば、エンドユーザーが「黒い T シャツを 3 枚ください」と言った場合、Dialogflow はユーザーにサイズを尋ねます。

パラメータに順序を付ける

エージェントを作成する場合、パラメータに順序を付けることができます。これによって、不足しているデータについてエンドユーザーに回答を促す質問の順序が決まります。

コンソールを使用してエージェントを作成する際、パラメータの上にカーソルを合わせると、右側に並べ替えアイコンが表示されます。このアイコンをドラッグすると、リスト内のパラメータの位置を変更できます。

プロンプト内のパラメータ参照

エージェントを作成する際は、プロンプトでパラメータ参照を使用できますが、プロンプトの前の必須パラメータへの使用に限られています。たとえば、color パラメータが quantity パラメータの前にある場合、How many $color t-shirts would you like to buy? というプロンプトを使用して quantity パラメータを入力できます。

スロット充填をキャンセルする

エンドユーザーが「Cancel」、「Stop it」、「That's enough」などの終了フレーズを言うと、エージェントは「Okay、cancelled」と応答し、スロット充填のコンテキストをクリアします。

API を使用している場合、スロット フィリングがキャンセルされると、DetectIntentResponse.queryResult.cancelsSlotFilling フィールドは true に設定されます。詳細については、Sessions タイプの detectIntent のドキュメントをご覧ください。