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

この記事の対象: SDK v4

ボットがどれくらいの人工知能を持っているかにかかわらず、会話を人間に引き継ぐ必要があるときがあります。 ボットがユーザーを理解しない場合 (AI の限界のため) や、要求を自動化できず、人間の操作が必要とされる場合に、このような引継ぎが必要になる可能性があります。 そのような場合、ボットは、いつ会話の引き継ぎが必要であるかを認識し、ユーザーにスムーズな移行を提供する必要があります。

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

ハンドオフ統合モデル

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

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

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

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

このモデルの主な利点は単純さです。既存のボットを最小限の労力でエージェント ハブにオンボードすることができ、メッセージ ルーティングの複雑な要素はすべて、エージェント ハブによって処理されます。

Diagram of an agent hub that can direct messages to a bot or human agents.

プロキシとしてのボット

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

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

Diagram of a bot that can route messages to an agent hub.

ハンドオフ プロトコル

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

ハンドオフ開始

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

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

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

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

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

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

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

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

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

    Note

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

ボットは、会話をエージェントにハンドオフする必要があることを検出すると、ハンドオフ開始イベントを送信することによって、その意図を通知します。 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);

ハンドオフの状態

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

Note

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

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

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

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

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

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

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

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

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

ハンドオフ ライブラリ

ハンドオフ ライブラリは、 Bot Framework v4 SDK がハンドオフをサポートするのを補完するために作成されています。具体的には次のとおりです。

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

Note

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

その他のリソース