入力コンテキストと出力コンテキストはインテントに適用されます。これらのコンテキストが互いに連携して、会話のフローを制御します。
- 出力コンテキストは、アクティブ コンテキストを制御します。インテントが一致すると、そのインテントに構成済みの出力コンテキストがアクティブになります。
- 入力コンテキストは、インテント マッチングを制御します。コンテキストがアクティブな間、Dialogflow では、構成済みのインテントと、現在アクティブなコンテキストのサブセットである入力コンテキストをマッチングする可能性が高まります。
コンテキストを使用すると、次のことが可能です。
- インテント マッチングの順序を制御できます。
- 同じトレーニング フレーズでコンテキスト固有のインテントを作成できます。
たとえば、以下のようなインテントを考えます。
インテントの名前 | トレーニング フレーズ | パラメータ | 入力コンテキスト | 出力コンテキスト | 回答 |
---|---|---|---|---|---|
pet-init | 「どのように見えますか?」 | - | - | - | 「どんなペットが好きですか?」 |
pet-select-dogs | 「犬が好きです」 | - | - | 犬 | 「犬について何が知りたいですか?」 |
pet-select-cats | 「猫が好きです」 | - | - | 猫 | 「猫について何が知りたいですか?」 |
dog-show | 「どのように見えますか?」 | - | 犬 | - | 「これは犬の写真です。」 |
cat-show | 「どのように見えますか?」 | - | 猫 | - | 「これは猫の写真です」 |
エンドユーザーが「I like dogs
」と言った場合:
pet-select-dogs
インテントがマッチングされます。- 出力コンテキストは
dogs
であるため、これがアクティブなコンテキストになります。
エンドユーザーが「I like cats
」と言った場合:
pet-select-cats
インテントがマッチングされます。- 出力コンテキストは
cats
であるため、これがアクティブなコンテキストになります。
エンドユーザーが「What do they look like?
」と言った場合:
dogs
がアクティブなコンテキストの場合:dog-show
インテントがマッチングされます。- エンドユーザーには犬の画像が表示されます。
cats
がアクティブなコンテキストの場合:cat-show
インテントがマッチングされます。- エンドユーザーには猫の画像が表示されます。
- アクティブなコンテキストがない場合:
pet-init
インテントがマッチングされます。- エンドユーザーは、どのようなペットが好きか尋ねられます。
出力コンテキスト
複数の出力コンテキストをインテントに適用できます。インテントが一致すると、インテントに適用された出力コンテキストがアクティブになります。
アクティブなコンテキストのパラメータ参照
出力コンテキストを持つインテントが一致した場合、収集されたパラメータ値は、アクティブなコンテキストのパラメータ参照を含む一時ストレージとして機能できます。コンテキストがアクティブのままである限り、今後のインテント マッチングでこれらの値にアクセスできます。
たとえば、上記のペットの例について、別の例を考えてみます。
インテントの名前 | トレーニング フレーズ | パラメータ | 入力コンテキスト | 出力コンテキスト | 回答 |
---|---|---|---|---|---|
pet-init | 「どのように見えますか?」 | - | - | - | 「どんなペットが好きですか?」 |
pet-select | 「犬が好きです」、「猫が好きです」 | pet | - | pet-chosen | 「$pet について何が知りたいですか?」 |
pet-show | 「どのように見えますか?」 | - | pet-chosen | - | 「#pet-chosen.pet の画像は次のとおりです」 |
エンドユーザーが「I like dogs
」または「I like cats
」と言った場合:
pet-select
インテントがマッチングされます。pet
パラメータは選択したペットタイプに設定されます。- 出力コンテキストは
pet-chosen
であるため、これがアクティブなコンテキストになります。
エンドユーザーが「What do they look like?
」と言った場合:
pet-chosen
がアクティブなコンテキストの場合:pet-show
インテントがマッチングされます。- エンドユーザーが前の会話のターンで
dogs
を選択した場合、エンドユーザーには犬の画像が表示されます。 - エンドユーザーが前の会話のターンで
cats
を選択した場合、エンドユーザーには猫の写真が表示されます。
- アクティブなコンテキストがない場合:
pet-init
インテントがマッチングされます。- エンドユーザーはペットタイプを選択するよう求められます。
有効期間
各アクティブ コンテキストには有効期間があり、コンテキストがアクティブになっている会話のターンの数を定義します。デフォルトの有効期間は、通常のインテントに対して 5 回の会話ターン、フォローアップ インテントに対して 2 回の会話ターンです。任意のコンテキストのデフォルト有効期間をオーバーライドできます。また、すべてのコンテキストはアクティブになってから 20 分後に有効期間が切れます。あるインテントが、すでにアクティブになっている出力コンテキストに一致すると、有効期間と有効期限タイマーがリセットされます。
たとえば、ペット情報エージェントに関する次のインテントの説明について考えてみましょう。
インテントの名前 | トレーニング フレーズ | パラメータ | 入力コンテキスト | 出力コンテキスト | 回答 |
---|---|---|---|---|---|
pet-init | 「どのように見えますか?」、「どのように聞こえますか?」、「大きさはどうですか?」 | - | - | - | 「どんなペットが好きですか?」 |
pet-select | 「犬が好きです」、「猫が好きです」 | pet | - | pet-chosen(有効期間 = 2) | 「$pet について何が知りたいですか?」 |
pet-show | 「どのように見えますか?」 | - | pet-chosen | - | 「#pet-chosen.pet の画像です。他に何か知りたいことはありますか?」 |
pet-audio | 「どのように聞こえますか?」 | - | pet-chosen | - | 「#pet-chosen.pet の鳴き声です。他に何か知りたいことはありますか?」 |
pet-size | 「大きさはどうですか?」 | - | pet-chosen | - | 「#pet-chosen.pet のサイズ表です。他に何か知りたいことはありますか?」 |
次の表に、このペット情報エージェントの対話の例を示します。これは、pet-chosen
コンテキストの有効期間を示しています。
ターン | ダイアログ | 説明 |
---|---|---|
1 | エージェント: どんなペットが好きですか? | pet-init インテントがマッチングされます。 |
2 | ユーザー: 私は猫が好きです。 エージェント: 猫について何を知りたいですか? |
pet-select インテントがマッチングされます。pet-chosen 出力コンテキストがアクティブなコンテキストになります。 |
3 | ユーザー: どのように見えますか? エージェント: 猫の写真です。他に知りたいことはありますか? |
pet-show インテントには pet-chosen 入力コンテキストが含まれているため、一致しています。pet-chosen コンテキストは、1 ターンでアクティブになっています。 |
4 | ユーザー: どのように聞こえますか? エージェント: 猫の鳴き声です。他に何を知りたいですか? |
pet-audio インテントには pet-chosen 入力コンテキストが含まれているため、一致しています。pet-chosen コンテキストは、2 ターンでアクティブになっています。 |
5 | ユーザー: 大きさはどうですか? エージェント: どのペットについて知りたいですか? |
pet-chosen コンテキストがアクティブでなくなったため、pet-init インテントが再び一致しました。 |
入力コンテキスト
コンテキストがアクティブな間、Dialogflow では、構成済みのインテントと、現在アクティブなコンテキストに一致する入力コンテキストをマッチングする可能性が高まります。インテント マッチング ルールの詳細は以下の通りです。
- 一致するためには、インテントの入力コンテキスト リストが、現在アクティブなコンテキスト リストのサブセットである必要があります。これは、入力コンテキストを持たないインテントにも適用されます。
- ルール 1 を満たすインテントの中で、現在アクティブなコンテキスト リストに最も一致する入力コンテキスト リストを持つインテントが一致する可能性が高くなります。
例:
- 入力コンテキストを持たないインテントは、いつでもマッチングされる可能性があります。
- アクティブなコンテキストがない場合、入力コンテキストを持たないインテントだけをマッチングできます。
- コンテキスト「A」と「B」がアクティブな場合、入力コンテキスト「A」と「C」が設定されたインテントは一致しません。
- コンテキスト「A」、「B」、「C」がアクティブな場合、入力コンテキスト「A」と「B」が設定されたインテントが一致します。
- コンテキスト「A」と「B」がアクティブな場合、入力コンテキスト「A」と「B」が設定されたインテントは、入力コンテキストを持たないインテントまたは入力コンテキスト「A」のみが設定されたインテントよりも一致する可能性が高くなります。