Agent Assist バックエンド モジュールの基本

Agent Assist にバックエンド モジュールが導入されました。これは、Agent Assist をシステムに統合するためのすぐに使えるオプションです。バックエンド モジュールには、Cloud Pub/Sub インターセプタ サービスと UI コネクタ サービスが含まれています。インターセプタは、Cloud Pub/Sub トピックを使用して Dialogflow からの機能関連のイベント通知を処理し、UI コネクタがそれらをエージェントのデスクトップ UI に push します。UI コネクタは、エージェント デスクトップからのフィードバック シグナルもサポートし、Dialogflow に送信します。

バックエンド モジュールの構造

バックエンド モジュールのコンポーネント

バックエンド モジュールで Agent Assist をシステムに統合するには、次の Google プロダクトが必要です。

  • Cloud Pub/Sub
  • Cloud Pub/Sub インターセプタ
  • Memorystore for Redis
  • UI コネクタ

Cloud Pub/Sub

Cloud Pub/Sub トピックは、会話プロファイルで構成されます。Agent Assist は、返信文候補、新しいメッセージ、新しい認識結果通知、会話のライフサイクル関連イベントをトピックに公開します。返信文候補は HumanAgentAssistantEvent の形式で、新しいメッセージと会話のライフサイクル イベントはどちらも ConversationEvent の形式で送信されます。会話プロファイルごとに、これらの 4 種類のイベント メッセージが異なるトピックにパブリッシュされます。たとえば、会話ライフサイクル イベント メッセージは {"conversation":"projects/your-project-id/locations/global/conversations/your-conversation-id","type":"CONVERSATION_STARTED"} で、会話の開始を示します。

Cloud Pub/Sub インターセプタ

Cloud Pub/Sub インターセプタは Cloud Run にデプロイされます。この Cloud Run サービスの各コンテナ インスタンス(サーバー)の機能は、次のように他のインスタンスと同一です。

  • HTTP リクエストを使用して、Cloud Pub/Sub トピックによって投稿されたイベント メッセージを処理する。
  • 受信したメッセージを Redis Pub/Sub チャネルにパブリッシュします。これは、会話名と UI コネクタ サーバー ID に固有です。チャネルの形式は {connector_id}:{conversation_name} です。

Redis

Redis は Memorystore for Redis を使用して、次の処理を行います。

  • マッピング <conversation_name, connector_id> に、各会話の UI コネクタ サーバー ID 情報を記録します。
  • Redis Pub/Sub メカニズムを使用して、Cloud Pub/Sub インターセプタによってパブリッシュされたイベント通知を、対応する UI コネクタ サーバーに転送します。

UI コネクタ

UI コネクタは、RESTful Dialogflow API プロキシと SocketIO WebSocket エンドポイントを公開し、Agent Assist から送信された Dialogflow メッセージをストリーミングするアプリケーションです。UI コネクタは Cloud Run にデプロイされます。WebSocket 接続はステートフルであるため、エージェント デスクトップは接続が終了するまで Cloud Run 上の同じコンテナに接続された状態を保持します。したがって、すべての UI コネクタ サーバーは異なる会話を処理し、処理する会話の個別の Redis Pub/Sub チャネル({connector_id}:*)にサブスクライブします。各 UI コネクタ サーバーのタスク:

  • エージェント デスクトップのカスタマイズされた認証方法をサポートします。
  • エージェント デスクトップのカスタマイズされたトークンを認証した後に、一時的な JWT を生成します。Dialogflow API または WebSocket 接続にリクエストを送信する際、UI コネクタは元のエージェント トークンを確認する代わりに、接続された JWT を検証します。
  • 指定された会話名に基づいて、認証済みのエージェント デスクトップとの SocketIO WebSocket 接続を確立します。
  • 処理する会話の Redis Pub/Sub チャネルにイベント メッセージをサブスクライブします。
  • エージェント アシスト イベントを受信すると、デスクトップ UI にプッシュします。

Secret Manager

UI コネクタは、認証されたエージェント デスクトップ用の一時 JWT を生成するために JWT シークレット キーを必要とします。この秘密鍵は Secret Manager に保存されます。

ディレクトリ

コード リポジトリのディレクトリ構造の概要は次のとおりです。リポジトリにアクセスできない場合は、権限について Google の担当者にお問い合わせください。

.
├── cloud-pubsub-interceptor
│   ├── Dockerfile: Builds Docker image for Cloud Pub/Sub interceptor deployment on Cloud Run.
│   ├── main.py: A starter for flask app.
│   ├── requirements.txt
│   └── unit_test.py: Unit test code for Cloud Pub/Sub interceptor.
└── ui-connector
    ├── auth.py: Handles JWT validation and registration.
    ├── config.py: Configures variables about authentication, logging and CORS origins.
    ├── dialogflow.py: Includes Dialogflow utilities for handling conversations at runtime.
    ├── Dockerfile: Builds Docker image for UI connector deployment on Cloud Run.
    ├── main.py: A starter for flask app.
    ├── requirements.txt
    ├── templates
    │   └── index.html: A simple interactive demo.
    └── unit_test.py: Unit test code for UI connector.

次のステップ

この統合方法の開始方法については、バックエンド モジュールのインストール ガイドをご覧ください。