効果的なコンテキスト管理が重要なのは、ボットがユーザーとより簡単に、より迅速に、より有用な方法で対話できるようになり、機械的、台本的ではなくなるからです。コンテキストデータはユーザーが早くタスクを完了するのを助け、より自然で人間味のあるやりとりを生み出します。
次の会話を例に見てみましょう。
ユーザー: クレジットカードの年会費はいくらですか?
ボット: 初年度は無料で、それ以降は年間XXXドルです。
ユーザー: いいですね、早速申し込みます。
上記の会話では、「申し込む」が「クレジットカード」のコンテキストに存在しています。ここでボットがユーザーに対して、クレジットカードを申し込むのかデビットカードを申し込むのかを尋ねるのは不適切です。FAQの「クレジットカードの年会費」という前のインテントのコンテキストが、「カードを申し込む」というインテントに渡されなければなりません。
Kore.aiのボットプラットフォームでは、コンテキストデータをキャプチャしてさまざまなシナリオで再利用することで、より複雑なユースケースを作成したり、エンタープライズの顧客体験を再定義したりできます。そのようなシナリオをいくつかご紹介します。
- インテント間やFAQ間でコンテキストを共有する: 上記のように、ダイアログタスクやFAQなどすべてのインテントのコンテキストを維持しておくと、ユーザーエクスペリエンスを簡単にカスタマイズできます。
- コンテキスト重視のFAQ: 特定のインテント (タスクまたはFAQ) は他の特定のインテント (タスクまたはFAQ) がコンテキストに存在する場合にのみ、使用できるようにすることができます。
例: FAQのインテント「食事オプションにはどんなものがありますか」は、「フライトを予約する」タスクがコンテキスト内に存在する場合にのみ使用します。 - フォローアップインテント: 現在のインテントのコンテキストは、ユーザーの発話内のそれに続くインテントの特定に使用できます。
例: ユーザーの前のインテントが「プラチナクレジットカードの特典はなんですか」であった場合、ユーザーの発話「手数料はいくらですか」に対してはFAQのインテント「プラチナクレジットカードの手数料はいくらですか」を使用して応答できます。 - インテント間でエンティティ値を共有する: エンティティ値または会話フローは、前のインテントのコンテキスト情報を使用して導くことができます。
例: 「天気を調べる」インテント内の「都市名」エンティティは、ユーザーが「フライト状況を調べる」インテントを実行して「目的地の都市」エンティティの値が入力されている場合に、あらかじめ入力しておくことができます。
このドキュメントでは、Kore.aiボットプラットフォームにおけるコンテキスト管理の実装の背景にある概念について説明しています。詳しい手順を説明した例については、こちらを参照してください。
ユースケース例
ユーザー: 私のシンガポール行きのフライトはいつでしたか?
ボット: ニューヨーク発、シンガポール行きの便が、6月20日で確定しています。
ユーザー: ビザは必要ですか?
ボット: はい、ビジネスまたは観光目的でのシンガポールへの渡航にはビザが必要です。
ユーザー: それでは申請したいです。
ボット: 承知しました。シンガポールの渡航ビザの申請をお手伝いします。滞在期間を教えてください。
上記のような会話を実現するには、次のようなコンテキストオブジェクトを使用できます。
- フライト予約の問い合わせが、目的地の都市のエンティティ値を発行
- ビザに関するFAQは、予約問い合わせのインテントにより発行されたエンティティ値を使用
- ビザの申請には、ビザに関するFAQから「ビザ」と「シンガポール」という用語を使用
上記のようなシナリオを実現するのに、こちらの記事が役立ちます。
実装
コンテキスト管理には、以下のような手順があります。
- 現在実行されているインテントを示すタグを定義する、出力コンテキスト
- 後に続くインテント検出のスコーピングのための出力コンテキストタグを抽出する、インテント前提条件
- 関連するインテントを検出するための、インテント検出ルール
- FAQから用語やノードを特定するコンテキストタグを使用した、KC-コンテキストインテント検出
- フローをカスタマイズする、会話フロー
出力コンテキスト
コンテキストタグを生成して、ボットの動作とユーザーエクスペリエンスを管理するコンテキストオブジェクトに保存することができます。プラットフォームはコンテキストオブジェクトをダイアログタスクやFAQのように、ユーザーインテントごとに作成します (コンテクストオブジェクトについては、こちらを参照してください)。
デフォルトのコンテキストタグ:
インテント名、エンティティ名、FAQの用語/ノード名は、デフォルトで発行されます。
カスタムコンテキストタグ:
さらに、以下を定義してコンテキストオブジェクトに含めることができます。
- コンテキストタグ – NLP設定から、ダイアログ、アクション、アラート、情報タスクおよびエンティティのコンテキストタグを追加できます。
- エンティティ値 – キャプチャしたエンティティ値を、エンティティノードごとに発行するかどうかを指定するオプションを設定します。
- FAQの検索にコンテキストタグを使用する – コンテキストタグを使用してナレッジグラフのパスを候補にするかどうかを指定できます。
ダイアログタスク
プラットフォームは、ユーザーが実行したときのダイアログタスクの詳細の発行に対応しています。
- インテント名は、タスク実行の開始時にすべてのダイアログタスクのコンテキストタグとして発行されます。
- ダイアログタスクの [NLPプロパティ] タブから、タグを追加することができます。
- 出力コンテキストタグは、スクリプトノード、高度なプロンプト、[スクリプトを実行] オプションなどのJavaScriptが記述されている箇所なら
contextTags.add(string value)
を使用してどこからでも発行することができます。
その他のタスク
プラットフォームは、ユーザーが実行したときのアクション、アラート、および情報タスクの詳細の発行に対応しています。
- タスク名は、タスク実行の開始時にすべてのアクションアラートおよび情報タスクのコンテキストタグとして発行されます。
- タスクの作成時には、[その他のオプション] でタグを追加することができます。
または一般設定からも可能です。
- また、
contextTags.add(string value)
を使用して、プリプロセッサやポストプロセッサから出力コンテキストタグを発行することもできます。
エンティティ
エンドユーザーからキャプチャしたエンティティ値は、以下に基づいて発行することができます。
- キャプチャしたエンティティ値の自動発行スイッチ。エンティティ値タグは、以下のセクションのように発行されます。
- タグを追加するオプションがあります。
ナレッジ グラフ
インテント前提条件
インテント前提条件は、インテントとFAQのインテント検出範囲を定義するのに使用できます。これらは、インテント/FAQを検出して実行するために満たす必要のある条件のセットです。
ダイアログタスク
ダイアログインテントのインテント前提条件で、ダイアログ検出のタイミングを定義することができます。たとえば、コンテキスト内の特定のタグが使用可能になった場合、ダイアログ検出の用途のためにのみダイアログを有効にすることができます。
- ダイアログインテントを使用可能にするために、1つ以上のインテント前提条件を追加することができます。
- 前提条件付きのダイアログインテントは、定義された前提条件が満たされた場合にのみ検出されます。
- 前提条件のセット付きのインテントはサブインテントとして扱われ、ダイアログレベルの [一時停止と再開] 設定からリンクされたタスクの例外の動作の一部となります。
その他のタスク
アクション、アラートおよび情報タスクのインテント前提条件で、タスク検出のタイミングを定義することができます。たとえば、コンテキスト内の特定のタグが使用可能担った場合、タスク検出の用途のためにのみタスクを有効にすることができます。
- タスクインテントを使用可能にするために、1つ以上のインテント前提条件を追加することができます。
- 前提条件付きのタスクインテントは、定義された前提条件が満たされた場合にのみ検出される必要があります。
ナレッジグラフ
ナレッジグラフのインテント前提条件は、用語と関連付けることができます。
インテントの検出
コンテキストインテント検出は、以前に実行されたインテントにより設定された出力コンテクストを使用した関連インテントを検出するのに役立ちます。
タスク
トレイトと同様に、出力コンテキストタグを使用して、文脈に関連するインテントを特定する「ルール」を定義できます (詳しくは、こちらを参照してください)。
ナレッジグラフ
プラットフォームは出力コンテキストタグを使用して、開発者により設定されたフラグに基づいてナレッジグラフエンジンでのインテント検出を向上させます。フラグは、コンテキストタグにレッジグラフ内のパスを修飾させます。用語はコンテキストタグを使用して抽出され、ユーザーの発話内に存在する他の用語とまとめられます。 統合された用語リストは、パスの修飾に使用されます。
これは、次のようにして設定できます。
- 左側のパネルの [自然言語] > [トレーニング] から、[しきい値と設定] を選択します。
- ナレッジグラフをクリックします。
- [コンテキストパスを修飾する] を [はい] に設定します。
会話フロー
コンテキストオブジェクトで使用できるコンテキストタグは、会話フローのカスタマイズに使用することができます。
以下の目的に使用できます。
- エンティティ値の事前設定
- 遷移条件の定義
- カスタム会話フロー
コンテキストタグにアクセスするには、スクリプトを以下のように記述します。
- 現在のコンテキストから:
context.currentTags.tags
- 前のコンテキストから:
context.historicTags[0].tags