適用対象: SDK v4
ボットが所有する人工知能の量に関係なく、会話を人間に引き継ぐ必要がある場合があります。 このようなハンドオフは、ボットが (AI の制限のために) ユーザーを理解していない場合や、要求を自動化できない場合や、人間のアクションが必要な場合に必要になる場合があります。 このような場合、ボットは会話を渡す必要があるタイミングを認識し、ユーザーにスムーズな移行を提供する必要があります。
Microsoft Bot Framework は、開発者がさまざまなエージェント エンゲージメント プラットフォームと統合できるオープン プラットフォームです。
ハンドオフ統合モデル
Microsoft Bot Framework では、エージェント エンゲージメント プラットフォームと統合するための 2 つのモデルがサポートされています。 ハンドオフ プロトコルは両方のモデルで同じですが、オンボードの詳細はモデルとエージェント エンゲージメント プラットフォームで異なります。
目標は、お客様のシステムとの統合のためのユニバーサル ソリューションを提供するのではなく、ボット開発者とシステム インテグレーターに 共通の言語 と ベスト プラクティス を提供することです。ボット開発者とシステム インテグレーターは、人間と会話型 AI システムを構築します。
エージェントとしてのボット
ボットを エージェントと呼ばれる最初のモデルでは、ボットはエージェント ハブに接続されているライブ エージェントのランクに参加し、要求が他の Bot Framework チャネルから送信されたかのようにユーザー要求に応答します。 ユーザーとボットの間の会話は、人間のエージェントにエスカレートできます。この時点で、ボットはアクティブな会話から離脱します。
このモデルの主な利点は、シンプルさです。既存のボットを最小限の労力でエージェント ハブに追加でき、エージェント ハブはメッセージ ルーティングの複雑さを処理します。
プロキシとしてのボット
2 番目のモデルは、 ボットをプロキシとして知られています。 ユーザーは、ボットが人間のエージェントからの支援が必要であると判断するまで、ボットと直接対話します。 ボットのメッセージ ルーター コンポーネントは、会話をエージェント ハブにリダイレクトし、適切なエージェントにディスパッチします。 ボットはループ内に留まるので、会話のトランスクリプトを収集したり、メッセージをフィルター処理したり、エージェントとユーザーの両方に追加のコンテンツを提供したりできます。
このモデルの主な利点は、柔軟性と制御です。 ボットは複数のチャネルをサポートでき、ユーザー、ボット、エージェント ハブの間での会話のエスカレートとルーティング方法を制御できます。
ハンドオフ プロトコル
プロトコルは、ボットによってチャネルに送信される開始イベントと、チャネルによってボットに送信される状態の更新を中心にしています。
引き継ぎの開始
ハンドオフ開始イベントは、ハンドオフを開始するためにボットによって作成されます。
イベントには次のものが含まれます。
- 適切なエージェントに会話をルーティングするためのハンドオフ要求のコンテキスト。
- 会話のトランスクリプト。エージェントは、ハンドオフが開始される前に顧客とボットの間で行われた会話を読み取ることができます。
ハンドオフ開始イベントの一般的なプロパティを次に示します。
Name: 必須。 name プロパティは "handoff.initiate" に設定する必要があります。
Conversation: 必須。 conversation プロパティは、アクティビティが存在する会話を記述します。 会話は、会話を含める必要があります
Id
値: 省略可能。 value プロパティには、ハブが関連するエージェントに会話をルーティングするために使用できるエージェント ハブ固有の JSON コンテンツを含めることができます。
添付ファイル: 省略可能。 添付ファイル プロパティには、添付ファイルとしてトランスクリプトを含めることができます。 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" : "completed" }
{ "state" : "failed", "message" : "Can't find agent with requested skill" }
ハンドオフ ライブラリ
ハンドオフ ライブラリは、ハンドオフをサポートする Bot Framework v4 SDK を補完するために作成されています。具体的には:
- Bot Framework SDK への追加機能を実装して、エージェントへのハンドオフをサポートします ( エスカレーションとも呼ばれます)。
- ハンドオフ操作を通知するための 3 つのイベントの種類の定義が含まれています。
注
特定のエージェント ハブとの統合は、ライブラリの一部ではありません。