メガ エージェント

サブエージェントと呼ばれる複数の Dialogflow エージェントをメガ エージェントと呼ばれる 1 つのエージェントに結合できます。メガ エージェントに対してインテント検出リクエストを実行すると、すべてのサブエージェントが検出され、サブエージェントからの最適なレスポンスが返されます。

メガ エージェントを使用する理由はさまざまです。

  • 管理性の向上: 複数のチームで 1 つのエージェントを構築している場合は、チームごとにサブエージェントを 1 つずつ担当させることで、変更の競合が少な簡素化されます。
  • インテントの増加: エージェントのインテント数が多い場合は、インテント数の制限に近づくことがあります。この場合、複数のサブエージェントと 1 つのメガ エージェントを作成できます。

制限事項

メガ エージェントには次の制限が適用されます。

  • メガ エージェントとそのサブエージェントは、同じリージョンに作成される必要があります。
  • 1 つのリージョン内で、メガ エージェントとそのサブエージェントは、すべて異なる GCP プロジェクトに関連付けられています。
  • メガ エージェントには最大 10 個のサブエージェントを設定できます。
  • Small Talk はメガ エージェントでは機能しません。
  • サブ エージェントのインテントの優先度は、メガ エージェントにリクエストを送信するときのインテント照合には影響しません。
  • Google アシスタントとの統合は、メガ エージェントでは使用できません。
  • パートナー組み込みのテレフォニー統合(AudioCodesAvayaGenesysSignalWireVoximplant)はサポートされていません。
  • メガ エージェントは、フォローアップ インテントとして使用されるフォールバック インテントをサポートしていません。

サブエージェントの作成

サブエージェントは他のエージェントと同様に作成します。エージェントのビルドに必要なインテント、コンテキスト、エンティティなどを追加します。

メガ エージェントの作成または更新

Dialogflow コンソールを使用して、メガ エージェントを作成し、サブエージェントにリンクできます。

Dialogflow は、メガ エージェントのほとんどのエージェント設定を考慮し、メガ エージェントにデータを記録します。次に例を示します。

ウェブ UI

1. メガ エージェントの作成

  1. Dialogflow ES コンソールに移動します。
  2. 左側のサイドバー メニューで [Create Agent] をクリックします(すでに他のエージェントをお持ちの場合は、エージェント名をクリックし、一番下までスクロールして [Create new agent] をクリックします)。
  3. エージェントの名前、デフォルトの言語、デフォルトのタイムゾーン、GCP プロジェクトを入力します。
  4. [Agent Type] を [Mega Agent] に設定します。
  5. [Create] ボタンをクリックします。

2. サブエージェントの追加と管理

  1. 左側のサイドバー メニューで [Sub Agents] をクリックします。
  2. メガ エージェントに追加するサブエージェントを選択します。
  3. サブエージェントの [Environment] はデフォルトで [Draft] に設定されていますが、必要に応じて更新できます。
  4. サブエージェントに関連付けられた [Knowledge Base] を使用する場合は、フィールドを [Excluded] から [Included] に変更します。
  5. [保存] をクリックします。

ロールの設定

メガ エージェントの使用計画に応じて、サブ エージェント プロジェクトで特定のロールを付与する必要があります。これにより、メガ エージェントはサブエージェントを呼び出す権限を持つことができます。これらのロールを設定するには、次の手順に従います。

  1. 通常どおりにメガ エージェントとサブエージェントの GCP プロジェクトを作成し、それぞれに対して「Dialogflow API」が有効になっていることを確認します。
  2. API を使用してメガ エージェントとやり取りする場合は、各サブエージェント プロジェクトに対するロールを、メガ エージェント API 呼び出しに使用するサービス アカウントに付与する必要があります。また、このロールには、インテント呼び出しを検出する権限が必要です。このアクセス権は、プロジェクト所有者、プロジェクト編集者、Dialogflow API 管理者、Dialogflow API クライアントのロールに含まれています。このサービス アカウントのメールアドレスを取得するには:
    1. [IAM サービス アカウント] ページにアクセスします。
    2. メガ エージェントのプロジェクトを選択します。
    3. API 呼び出し用に作成したサービス アカウントを選択するか、目的のロールを持つ新しいサービス アカウントを追加します。設定手順に従って新しいサービス アカウントを作成し、秘密鍵をダウンロードします。
    4. 選択したサービス アカウントのメールアドレスをメモします。これは以下で必要になります。
  3. メガ エージェントの統合を使用する場合、自動的に作成されたメガ エージェントのプロジェクトのservice-project-number@gcp-sa-dialogflow.iam.gserviceaccount.comサービス アカウントには、インテント呼び出しを実行する権限を含む、そのプロジェクトに対するロールが必要です。このアクセス権は、プロジェクト所有者、プロジェクト編集者、Dialogflow API 管理者、Dialogflow API クライアントのロールに含まれています。このサービス アカウントのメールアドレスを取得するには:

    1. IAM メインページにアクセスします。
    2. メガ エージェントのプロジェクトを選択します。
    3. 右側の [Google 提供のロール付与を含みます] オプションを有効にします。
    4. 以下のパターンに一致するサービス アカウントを見つけます。
      service-project-number@gcp-sa-dialogflow.iam.gserviceaccount.com
    5. 選択したサービス アカウントのメールアドレスをメモします。これは以下で必要になります。
  4. サブ エージェント プロジェクトごとに、先ほど収集したメガ エージェント サービス アカウントにロールを付与します。

    1. IAM メインページにアクセスします。
    2. サブエージェントのプロジェクトを選択します。
    3. そのプロジェクトで、メガ エージェントのサービス アカウント メールアドレスに必要なロールを付与します。

インテントの検出

インテントを検出するには、他のインテント検出リクエストと同様にリクエストを呼び出し、メガ エージェントのプロジェクト ID を使用します。Dialogflow はすべてのサブエージェントを考慮し、サブエージェントから最適なレスポンスが返されます。

たとえば、次のサブエージェントについて考えてみます。

サブエージェント インテント トレーニング フレーズ
注文 書籍 「書籍を購入したい」
「カートに書籍を追加する」
帽子 「帽子を買いたい」
「帽子が欲しい」
口座 残高 「残高は?」
「口座の残高は?」
住所 「住所を変更したい」
「引っ越しした」

エンドユーザーが「帽子を買いたい」と言うと、メガ エージェントに送信されたインテント検出リクエストの結果は、Orders エージェントの Hats インテントと一致します。

インテント検出リクエストに 1 つ以上のサブエージェントを指定するには、QueryParameterssubAgents フィールドを設定します。たとえば、このリクエストの REST JSON は次のようになります。

{
  "queryInput": {
    "text": {
      "text": "reserve a meeting room for six people",
      "languageCode": "en-US"
    }
  },
  "queryParams": {
    "subAgents": [
       {"project": "projects/sub-agent-1-project-id"},
       {"project": "projects/sub-agent-2-project-id"}
    ]
  }
}

イベントの呼び出し

Webhook サービスからイベントを呼び出すには、トリガーするインテントのサブエージェントを指定します。次のイベント名の形式を使用します。

sub-agent-project-id.event-name

たとえば、サブエージェントのプロジェクト ID が 123、目的のインテントのイベント名が alarm の場合、イベント名に 123.alarm を使用します。

イベントにサブエージェントを指定しない場合、イベントは以前一致したインテントを含むサブエージェントに返されます。

出力コンテキストの設定

Webhook サービスから出力コンテキストを設定するには、コンテキストが属するサブエージェントを指定します。形式は次のようにします。

projects/mega_agent_project_id/agent/sessions/session_id/contexts/sub_agent_project_id.context_name

たとえば、セッションが projects/mega_agent_project_id/agent/sessions/session_id で、プロジェクト ID sub_project_1 のサブエージェントに music_context という名前のコンテキストを設定する場合、次の名前の出力コンテキストを設定できます。

projects/mega_agent_project_id/agent/sessions/session_id/contexts/sub_project_1.music_context

コンテキスト名にサブエージェント接頭辞を指定しない場合、システムはそれをメガ エージェントのコンテキストとみなします。

コンテキストの有効期間

コンテキストがアクティブになると、通常はコンテキストの有効期間によって、コンテキストが非アクティブになるまでの会話のターン数が決まります。基本的に、アクティブなコンテキストのランタイムの有効期間は、会話のターンがアクティブになるたびに減少します。

この動作はメガ エージェントによって異なる場合があります。会話中に、異なるサブエージェントからのインテントが、会話ターンごとに一致する可能性があります。サブエージェントのインテントが一致し、インテントに出力コンテキストがある場合、このコンテキストの有効期間は、同じサブエージェント内のインテントがさらに一致する場合にのみ減少します。

たとえば、インテントの一致がサブエージェント A で発生し、インテントにはコンテキストをアクティブ化する出力コンテキストがあります。サブエージェント B のインテントが一致しても、サブエージェント A から発信されたアクティブなコンテキストのランタイムの有効期間は減少しません。

バージョンと環境

メガ エージェント レベルのバージョンと環境により、メガ エージェントのフォールバック インテントのさまざまなスナップショットを作成し、さまざまなメガ エージェントの環境ごとに異なる Webhook と Text-to-Speech の設定を指定できます。

メガ エージェントの [サブエージェント] コンソール ページの設定は、メガ エージェントのバージョンと環境に含まれません。メガ エージェント リクエストでは、常にその時点でそのページで指定されたサブエージェント環境がトリガーされます。