シーン

シーンは、インテントと組み合わせて、会話モデルのもう 1 つの主要な構成要素です。シーンは会話の個々の状態を表し、その主な目的は、会話を論理的なチャンクに整理し、タスクを実行する、ユーザーにプロンプトを返すことです。

シーンの特徴は次のとおりです。

  • ループ実行 - 定義した移行基準を満たすまで、シーンはループ内で実行されます。これにより、単一のシーン内でより効率的に制御ロジックフローを作成できます。
  • ダイアログの分離 - シーンをインテントと組み合わせて使用することで、ダイアログを論理的なチャンクにグループ化できます。これにより、ユーザー リクエストとアクションのレスポンスのペアを簡単に構築できます。
  • インテント一致のスコープ設定 - 一度に有効にできるシーンは 1 つのみであるため、インテント マッチングのスコープを任意のシーンに設定して、対象のシーンがアクティブな場合にのみ一致させることができます。
  • スロット フィル - シーン内でスロットフィルを使用すると、複数のインテントを作成しなくても、入力された複数のユーザー入力を収集できます。
  • シーン条件 - スロット、セッション、ユーザー、ホーム ストレージを確認して、Webhook をトリガーせずにシンプルな条件付きロジックを実行できます。

会話モデルの一部として、シーンをカスタムシーンとして定義できます。アシスタントの会話ロジックには、会話の標準機能を提供するシステムシーンも含まれています。

カスタムシーン

カスタムシーンは、アクションの会話モデルの一部を形成する会話ロジックの構成要素です。カスタムシーンには、開始方法とタイミング(アクティベーション)、実行する会話処理(実行ライフサイクル)、シーンの終了方法(遷移)を定義するステージがあります。

  • アクティベーション - シーンを実行する前に、グローバル インテント マッチまたはシーン遷移によってシーンを有効にする必要があります。
  • 実行 - シーンがアクティブになると、明確に定義されたライフサイクルで実行されます。これにより、スロットフィル、条件チェック、プロンプト生成、Webhook イベントのトリガーなど、さまざまなタスクを実行できます。
  • 遷移 - シーンが定義した条件(インテントのマッチングやスロットフィルの完了など)を満たしたら、別のシーンに移行して、さらにロジックを実行できます。また、[会話を終了] システムシーンに移行して、ユーザーとの会話を終了することもできます。
図 1.一般的なシーンの遷移。グローバル インテントは呼び出し中にシーンをアクティブにします。シーンはユーザー入力を使用してインテントと照合し、そのインテントが別のシーンを遷移してアクティブにします。

活性化

シーンを実行するには、事前にシーンを有効にする必要があります。有効にできるシーンは、常に 1 つのみです。シーンは次の方法で有効にできます。

  • 呼び出し - ユーザー入力がグローバル インテントの言語モデルと一致する場合、シーンを有効にして呼び出しを処理できます。
  • 静的なシーンの遷移 - シーンが遷移の条件を満たしている場合、別のシーンへの遷移を定義できます。
  • 動的シーン遷移 - Webhook ハンドラ内で、プログラムで別のシーンに移行できます。

実行ライフサイクル

シーンがアクティブな場合、明確に定義されたライフサイクル内で実行されます。このライフサイクルは、設定した遷移基準を満たすまでループします。シーンの実行ライフサイクルは、次の順序で実行されるオプションのステージに分割されます。

  1. 開始時 - このステージは、シーンが有効になっているときに 1 回だけ実行されます。Webhook をトリガーするか、シーンの 1 回限りの設定をユーザーに求めることができます。

  2. 条件 - 条件を使用すると、ライフサイクル ステージの続行、Webhook のトリガー、プロンプトの送信の前に、特定の条件を評価できます。このステージでは、実行ループを終了するための遷移条件を定義できます。

  3. スロットフィル - 必要なスロット(入力データ)がすべて収集されるまで、シーンが自動的にユーザーにプロンプトを表示できます。シーンでは、実行ループのたびに 1 つのスロットを求めるプロンプトが表示されます。スロットが 1 つでも欠落している場合、シーンのライフサイクルは最終的にスロットフィル ステージにループバックし、次に必要なスロットを探すプロンプトを表示します。このステージでは、実行ループを終了するための遷移条件を定義できます。

  4. プロンプト - アシスタントはユーザーにプロンプト キューを配信し、キューをクリアします。プロンプト キューは、このステージがキューを最後にクリアしてから集計されたプロンプトのマージされたコレクションです。

  5. 入力 - アシスタントがユーザー入力を消費してシーンに返すので、その入力を処理できます。これには、インテント マッチング(シーン内のグローバル インテントまたはシーンのユーザー インテント)、スロットフィルの続行(完了していない場合)、一致なし、または入力エラーなしの処理などが含まれます。このステージでは、実行ループを終了するための遷移条件を定義できます。移行しない場合、実行ループは条件ステージに戻ります。

図 2. シーン実行のライフサイクル

以下のセクションでは、ライフサイクルの各ステージについて詳しく説明します。

開始時

開始時は、シーンの実行ループを実行しない唯一のステージです。シーンが次の順序で 1 回だけ初期化されます。

  • アシスタント ランタイムは、以前に一致したインテントのスロットを埋めることができる場合、スロットフィル ステージのシーンを準備するために、ここで処理を行います。たとえば、一部のユーザー入力がインテントに一致し、スロットが提供されます。このインテント マッチングによってシーンが有効になり、スロット名が一致すればシーンのスロットを埋めることができます。
  • Webhook が有効になると、イベントを同期的にトリガーし、ウェブサービスからレスポンスが返されるまで待機します。
  • ランタイムは Webhook レスポンスを受信すると、プロンプトのパラメータ参照を解決し、ユーザー サーフェスに基づいてプロンプト候補を選択します。次に、候補のバリアントを 1 つ選択して、後でユーザーに送信します。
  • Webhook レスポンスにプロンプトが含まれている場合、それをプロンプト キューに追加します。静的プロンプトも存在する場合、Webhook プロンプトは、まずプロンプト キューにマージされ、その後に静的プロンプトがマージされます。
  • Webhook レスポンスに遷移が含まれている場合、現在は処理されています。そうでない場合、シーンはスロットフィル ステージに進みます。

条件

条件を使用すると、セッション、ユーザー、スロットのデータで条件が true であるかどうかをチェックできます。たとえば、すべてのスロットが埋まっているかどうかを確認し、それを別のシーンに移行してスロットを処理する基準に設定できます。

  • アシスタントのランタイムは、指定された順序で各条件を評価します。true と評価された最初の条件により、関連するハンドラが実行され、条件の評価が停止します。
  • スロットフィルを行うと、条件 else if scene.slots.status = "FINAL" が条件リストに自動的に追加されます。このオプション条件は、スロット入力が完了したかどうかを確認し、Webhook をトリガーしたり、プロンプト キューにプロンプトを追加したりします。

条件評価の後、シーンで遷移が定義されていない場合は、引き続きスロットフィルが適用されます。

スロットフィル

このステージでは、埋められていない必須スロットを 1 つ挿入するスロット プロンプトを追加します。シーン内にスロットを定義しない場合、このステージは何も実行しません。

  • アシスタント ランタイムは、埋められなかった最初のスロットを選択し、対応するプロンプトをプロンプト キューに追加します。シーンの実行はループするため、後で実行ループがこのステージに戻ると、追加で埋められていないスロットが処理されます。
  • 現在のアクティブなスロットには、シーンの入力ステージで定義されたプロンプトをオーバーライドするエラー処理プロンプトを含めることができます。
  • ユーザーがスロットに入ったら、Webhook をトリガーすることで、ウェブサービスでスロットを検証できます。

プロンプト

アシスタント ランタイムは、ユーザーにプロンプト キューを配信し、キューを消去して、ユーザー入力を使用します。

入力

アシスタント ランタイムは、入力をインテントまたはスロットと照合しようとします。

  • ユーザー インテントが一致する場合、シーンは関連するインテント ハンドラ(ユーザー インテントまたはシステム インテント)を実行します。シーンのインテント ハンドラは、すべてのグローバル インテントよりも優先されます。遷移を定義しなかった場合、シーンの実行は条件ステージをループバックします。
  • スロットが一致した場合は、シーンはスロットフィル ステージに戻ります。
  • システム インテントが一致する場合(入力がない、一致しないなど)は、プロンプト キューにプロンプトを追加し、Webhook または遷移をトリガーできます。一致しないプロンプトが複数定義されている場合、アシスタント ランタイムは、スロットフィル、シーン、グローバル不一致プロンプトの順で最も関連性の高いものを選択します。連続して一致しない場合、対応するイベントが生成されます。

    • no_match_1
    • no_match_2
    • no_match_final

    不一致の各レベル(スロットフィル、シーン、グローバル)が Webhook イベントをトリガーできます。デフォルトでは、3 度目の不一致(No Match)で会話が終了します。

移行

移行は次の段階で行われます。

  • [Conditions] - 定義した条件に基づいて別のシーンに遷移できます。よく確認される条件は、スロットフィルが完了していることです。
  • 入力(ユーザー インテント マッチング) - インテントが一致する場合、別のシーンへの遷移をトリガーできます。
  • 入力(システム インテント マッチング) - システム インテントの一致イベント中に Webhook をトリガーできます。不一致および入力イベントがない場合、シーンはデフォルトで 3 回発生した後に [会話を終了] シーンに移行します。

システムシーン

システムシーンでは、アシスタントが提供する組み込みの会話ロジックを使用して、ユーザー エクスペリエンスに標準の会話フローを追加できます。たとえば、アカウント リンク システムシーンを使用すると、アシスタントが一時的にアカウント リンク フローを引き継いで、ユーザーのアカウントをリンクするために必要な情報が返されます。システムのシーンは、標準のシーンのライフサイクルに沿っていません。

次のリストは、サポートされているシステムシーンとその使用方法を示しています。

  • 会話を終了 - マイクを閉じて、ユーザーとの会話を終了します。このシーンの実行後、アシスタントはユーザー エクスペリエンスの制御を取り戻します。
  • アカウントのリンク - ユーザーをアカウント リンクのフローに案内し、バックエンド サーバー上のユーザーのアカウントをユーザーの Google アカウントにリンクするために必要な情報をアクションに提供します。このシーンの使用方法について詳しくは、アカウントのリンクのドキュメントをご覧ください。
  • 日次更新 - ユーザーによる毎日の更新にアクションを追加するための確認フローを表示します。このシーンの使用方法の詳細については、日次更新のドキュメントをご覧ください。
  • 通知 - アクションから通知を受け取るための確認フローにユーザーを誘導します。このシーンの使用方法の詳細については、プッシュ通知のドキュメントをご覧ください。