会話をボットから人間に移行する

適用対象: SDK v4

ボットが所有する人工知能の量に関係なく、人間に会話を渡す必要がある場合があります。 このような手渡しは、ボットがユーザーを理解していない場合 (AI の制限のため)、または要求を自動化できないために人間のアクションが必要な場合に必要になる場合があります。 このような場合、ボットは会話を引き渡す必要があるタイミングを認識し、ユーザーにスムーズな移行を提供する必要があります。

Microsoft Bot Frameworkは、開発者がさまざまなエージェント エンゲージメント プラットフォームと統合できるオープン プラットフォームです。

ハンドオフ統合モデル

Microsoft Bot Framework では、エージェント エンゲージメント プラットフォームとの統合のため、2 つのモデルがサポートされています。 ハンドオフ プロトコルはどちらのモデルでも同じですが、オンボードの詳細は、モデル間やエージェント エンゲージメント プラットフォーム間で異なります。

目標は、顧客のシステムとの統合のためのユニバーサル ソリューションを提供するのではなく、ボット開発者やシステム インテグレーターに 共通の言語ベスト プラクティス を提供し、人間と会話型 AI システムをループ内で構築することです。

エージェントとしてのボット

エージェントとして知られる最初のモデルでは、ボットは エージェント ハブに接続されているライブ エージェントのランクに参加し、要求が他の Bot Framework チャネルから送信されたかのようにユーザー要求に応答します。 ユーザーとボットとの間の会話は、人間のエージェントにエスカレートすることができます。この時点で、ボットはアクティブな会話から離脱します。

このモデルのメイン利点は、シンプルさです。既存のボットを最小限の労力でエージェント ハブに追加でき、エージェント ハブはメッセージ ルーティングの複雑さを処理します。

ボットまたは人間のエージェントにメッセージを送信できるエージェント ハブの図。

プロキシとしてのボット

2 つ目のモデルは、 ボットをプロキシと呼びます。 ユーザーは、人間のエージェントからの支援が必要であるとボットで判断されるまで、ボットに直接話しかけます。 会話は、ボットのメッセージ ルーター コンポーネントによってエージェント ハブにリダイレクトされ、そこから適切なエージェントにディスパッチされます。 ボットはこのループ内に留まって、会話のトランスクリプトを収集したり、メッセージをフィルター処理したり、エージェントとユーザーの両方に追加のコンテンツを提供したりすることができます。

このモデルの主な利点は、柔軟性と制御です。 ボットは複数のチャネルをサポートし、ユーザー、ボット、エージェント ハブの間での会話のエスカレートとルーティング方法を制御できます。

エージェント ハブにメッセージをルーティングできるボットの図。

ハンドオフ プロトコル

このプロトコルは、ボットによってチャネルに送信される開始イベントと、チャネルによってボットに送信される状態の更新に関するイベントを中心にしています。

ハンドオフ開始

ハンドオフ開始イベントは、ハンドオフを開始するためにボットによって作成されます。

イベントには次のものが含まれます。

  • 適切なエージェントに会話をルーティングするためのハンドオフ要求のコンテキスト。
  • 会話のトランスクリプト。エージェントは、ハンドオフが開始される前に顧客とボットの間で行われた会話を読み取ることができます。

ハンドオフ開始イベントの一般的なプロパティを次に示します。

  • Name: 必須。 name プロパティは "handoff.initiate" に設定する必要があります。

  • Conversation: 必須。 conversation プロパティは、アクティビティが存在する会話を表します。 会話には、会話 Idを含める必要があります

  • 値: 省略可能。 value プロパティには、ハブが関連するエージェントへの会話のルーティングに使用できるエージェント ハブ固有の JSON コンテンツを含めることができます。

  • 添付ファイル: 省略可能。 attachments プロパティには、添付ファイルとしてトランスクリプトを含めることができます。 Bot Framework では、 トランスクリプト の添付ファイルの種類を定義します。 添付ファイルは、インライン (サイズ制限の対象) または を指定 ContentUrlしてオフラインで送信できます。

    handoffEvent.Attachments = new List<Attachment> {
        new Attachment {
            Content = transcript,
            ContentType = "application/json",
            Name = "Transcript",
        }
    };
    

    注意

    エージェント ハブは、認識できない添付ファイルの種類を 無視する必要があります

ボットは、会話をエージェントに渡す必要が検出されると、ハンドオフ開始イベントを送信して意図を通知します。 SDK for C# には、有効な CreateHandoffInitiation ハンドオフ開始イベントを作成するメソッドが含まれています。

var activities = GetRecentActivities();
var handoffContext = new { Skill = "credit cards" };
var handoffEvent =
    EventFactory.CreateHandoffInitiation(
        turnContext, handoffContext, new Transcript(activities));
await turnContext.SendActivityAsync(handoffEvent);

ハンドオフの状態

ハンドオフ状態イベントは、エージェント ハブによってボットに送信されます。 イベントは、開始されたハンドオフ操作の状態についてボットに通知します。

注意

ボットはハンドオフ状態イベントを処理する 必要はありません 。ただし、拒否 することはできません

一般的なハンドオフ状態イベント フィールドを次に示します。

  • Name: 必須。 name プロパティは "handoff.status" に設定する必要があります。

  • Conversation: 必須。 conversation プロパティは、アクティビティが存在する会話を表します。 会話には、会話 Idを含める必要があります

  • 値: 必須。ハンドオフ操作の現在の状態を表す value プロパティです。 値には次のプロパティがあります。

    • State: 必須。 state プロパティには、次のいずれかの値を指定できます。

      意味
      "accepted" エージェントが要求を受け入れ、会話を制御しました。
      "failed" ハンドオフ要求が失敗しました。 メッセージ プロパティには、エラーに関連する追加情報が含まれている場合があります。
      "完了" ハンドオフ要求が完了しました。
    • Message: 省略可能。 message プロパティはエージェント ハブによって定義されたオブジェクトです。

    値オブジェクトの例を次に示します。

    { "state" : "completed" }
    
    { "state" : "failed", "message" : "Can't find agent with requested skill" }
    

ハンドオフ ライブラリ

ハンドオフ ライブラリは、ハンドオフをサポートする Bot Framework v4 SDK を補完するために作成されました。具体的には:

  • Bot Framework SDK への追加を実装して、エージェントへのハンドオフをサポートします ( エスカレーションとも呼ばれます)。
  • ハンドオフ操作を通知するための 3 つのイベントの種類の定義が含まれています。

注意

特定のエージェント ハブとの統合は、ライブラリの一部ではありません。

その他のリソース