Intelligence

コンテキスト管理

効果的なコンテキスト管理が重要なのは、ボットがユーザーとより簡単に、より迅速に、より有用な方法で対話できるようになり、機械的、台本的ではなくなるからです。コンテキストデータはユーザーが早くタスクを完了するのを助け、より自然で人間味のあるやりとりを生み出します。 次の会話を例に見てみましょう。 ユーザー: クレジットカードの年会費はいくらですか? ボット: 初年度は無料で、それ以降は年間XXXドルです。 ユーザー: いいですね、早速申し込みます。 上記の会話では、「申し込む」が「クレジットカード」のコンテキストに存在しています。ここでボットがユーザーに対して、クレジットカードを申し込むのかデビットカードを申し込むのかを尋ねるのは不適切です。FAQの「クレジットカードの年会費」という前のインテントのコンテキストが、「カードを申し込む」というインテントに渡されなければなりません。 Kore.aiのボットプラットフォームでは、コンテキストデータをキャプチャしてさまざまなシナリオで再利用することで、より複雑なユースケースを作成したり、エンタープライズの顧客体験を再定義したりできます。そのようなシナリオをいくつかご紹介します。 インテント間やFAQ間でコンテキストを共有する: 上記のように、ダイアログタスクやFAQなどすべてのインテントのコンテキストを維持しておくと、ユーザーエクスペリエンスを簡単にカスタマイズできます。 コンテキスト重視のFAQ: 特定のインテント (タスクまたはFAQ) は他の特定のインテント (タスクまたはFAQ) がコンテキストに存在する場合にのみ、使用できるようにすることができます。 例: FAQのインテント「食事オプションにはどんなものがありますか」は、「フライトを予約する」タスクがコンテキスト内に存在する場合にのみ使用します。 フォローアップインテント: 現在のインテントのコンテキストは、ユーザーの発話内のそれに続くインテントの特定に使用できます。 例: ユーザーの前のインテントが「プラチナクレジットカードの特典はなんですか」であった場合、ユーザーの発話「手数料はいくらですか」に対してはFAQのインテント「プラチナクレジットカードの手数料はいくらですか」を使用して応答できます。 インテント間でエンティティ値を共有する: エンティティ値または会話フローは、前のインテントのコンテキスト情報を使用して導くことができます。 例: 「天気を調べる」インテント内の「都市名」エンティティは、ユーザーが「フライト状況を調べる」インテントを実行して「目的地の都市」エンティティの値が入力されている場合に、あらかじめ入力しておくことができます。 このドキュメントでは、Kore.aiボットプラットフォームにおけるコンテキスト管理の実装の背景にある概念について説明しています。詳しい手順を説明した例については、こちらを参照してください。 ユースケース例 ユーザー: 私のシンガポール行きのフライトはいつでしたか? ボット: ニューヨーク発、シンガポール行きの便が、6月20日で確定しています。 ユーザー: ビザは必要ですか? ボット: はい、ビジネスまたは観光目的でのシンガポールへの渡航にはビザが必要です。 ユーザー: それでは申請したいです。 ボット: 承知しました。シンガポールの渡航ビザの申請をお手伝いします。滞在期間を教えてください。 上記のような会話を実現するには、次のようなコンテキストオブジェクトを使用できます。 フライト予約の問い合わせが、目的地の都市のエンティティ値を発行 ビザに関するFAQは、予約問い合わせのインテントにより発行されたエンティティ値を使用 ビザの申請には、ビザに関するFAQから「ビザ」と「シンガポール」という用語を使用 上記のようなシナリオを実現するのに、こちらの記事が役立ちます。 実装 コンテキスト管理には、以下のような手順があります。 現在実行されているインテントを示すタグを定義する、出力コンテキスト…

標準応答のデフォルト設定

Kore.aiのBotビルダーツールでは、デフォルトのテキスト応答がいくつか用意されています。このセクションではそれらをリストアップし、これらの応答がトリガーされるタイミングについて説明します。標準応答の概要については、こちらを参照してください。 ステートメント メッセージ 定義 ユーザーがある言語での会話を閉じて別の言語に切り替える意思を示した場合 お客様は現在、でBotと会話をしています。 oobにフィールドプロンプトのみが存在する場合 これはアクションタスクやアラートタスクのフィールドプロンプトメッセージです。Koreプラットフォームで使用するためのものです。エンタープライズはこれを変更すべきではありません。次の導入の一環として、Bot開発者はこれを隠します。 言語設定が行われた場合 ユーザが「cheat lang」を使用して言語を切り替えたり、表示されているオプションから言語を選択したりした場合に表示されます。 ユーザーがタスクにアクセスできない場合 開発者がアクセス権を持たないBotタスクにアクセスしようとした場合に表示されます。 ユーザーがアラートを選択 アラートタスクにのみ適用可能 この応答は、アラートが正常に設定されたときに表示され、Botは指定された頻度または時間にタスクを起動します。 ユーザーが現在のアクティビティを破棄/中断 以下のような場合に表示されます。 1. ユーザーが「discard」と言ってタスクを終了した場合 2. タスクが最大試行回数を超えて終了した場合や、LoVで利用できないエンティティや選択肢がある場合、HTTPリクエストでcURLの問題が発生した場合など ユーザーが会話の終了を示唆(例:good night、bye、ttyl) この条件は、「はい、このダイアログの最後に、ダイアログ設定の[フォローアップタスク]リストからタスクを選択して実行するよう、ユーザーに要求します。」というフォローアップタスク設定が行われているダイアログタスクでのみ発生します。Botは、ダイアログの最後にフォローアップインテントの配列をユーザーに提示する時に、このメッセージを表示します。 ユーザーが提供した場所がアクションフィールドで無効 このメッセージは、Botが「Location」タイプのエンティティのユーザー入力を検証できない場合に表示されます。 アラートフィールドの変更 アラートタスクにのみ適用可能 エンドユーザーは、アラートを設定する際にアラートがトリガーされる頻度と共にアラートが必要とするパラメータの値を提供する必要があります。開発者がアラートを設定する前にアラートがユーザーからのすべての値を確認する必要があることを指定した場合、Botはユーザーが値を変更したい時にユーザーにオプションを表示します。 このBotの応答は、ユーザーが変更するために「Yes」と言った場合に表示されます。 フィールドを持たないタスクの変更 アラートタスク、アクションタスク、情報タスクに適用可能です。 アクションタスク、アラートタスク、情報タスクの場合の標準の確認メッセージは、エンティティを変更するオプションで終了します。タスクにエンティティ(フィールド)がない場合、このメッセージが表示されます。 少なくとも1つのオプションフィールドを要求 アクションタスクにのみに適用 アクションタスクを定義する際の詳細設定で、開発者は設定されたすべてのオプションパラメータのうち、少なくとも1つのオプションフィールド(パラメータ/エンティティ)をユーザーに提供することを強制するオプションについて設定を行うことができます。これは、変更のユースケースを処理するためのものです。 このBotの応答は、ユーザーがオプションパラメータのいずれにも値を提供しなかった場合に表示されます。 トピックの再試行制限を超過 これは開発者専用です(開発者モードオン)。 プラットフォームはループ制限のチェックを設定しており、ダイアログ条件の結果同じノードを複数回ループする場合(定義済みの制限値)、タスクは破棄され、このメッセージが開発者に表示されます。 ユニバーサルフォールバック応答 以下の場合に表示されます。 1. ユニバーサルキャッチオール:技術的な理由やその他の理由で、Botがそれ以上の応答を生成できない場合。 2. Botがボレーで実行できるノードの最大数を超えた場合で、ユーザーがBot開発者ではない場合。この場合、Bot開発者には「トピックの再試行制限を超過しました」というメッセージが表示されます。 サーバーが認証に失敗したため、ユーザは再認証が必要 このメッセージは、スクリプトノードの実行中およびAPIコールの実行中、サーバー認証に失敗した場合に表示されます。 ユーザーがオプションのリストから有効なオプションを選択…

サブインテント

人間の会話は、インテントとエンティティを切り替えたり、頻繁に複数のものを組合わせたりといったような、動的なものです。 Kore.ai ボット プラットフォームは、タスク レベルで定義できるサブ インテントを提供します。コンテキストを手動で管理することなく、ダイアログを最も簡単に形成できる方法です。これにより、会話をプライマリ インテントの一部として関連するインテントにシームレスに分けて、そのコンテキスト内に限定して動作させることができます。出力コンテキストが親インテントに追加され、同名の入力コンテキストが新たに生成された子インテントに追加されます。そのため、子インテントは会話の以前の部分で親インテントが一致している場合にのみ一致します。 フォローアップ インテントは、会話中のユーザーの発話やインテントにすぐに対応できない場合に便利なものです。様々なタスクの実行中に発生するものの今まで対応されることのなかった、このようなインテントにアクセスすることができます。これらは FollowupIntents 配列に格納されます。そしてダイアログ フローの最後で、特定されたフォローアップ インテントのリストから選択してタスクを実行するよう、ユーザーに求めるかどうかを選択できます。このリストにアクセスしてダイアログ フローをさらにトレーニングし、改良することもできます。 サブ インテント サブ インテントの定義には 3 通りの方法があります。 インテント ノードをダイアログ タスク内に追加 – このインテントはダイアログ内にあり、さらにコンテキスト内にあるため他のダイアログでは利用できません。(詳細…) 既存のダイアログ タスクを使用 – このインテントは、複数のダイアログで使用することができます。ダイアログをサブ インテントに限定したダイアログとして定義することができます。ユーザーの発話では呼び出されず、ユーザーがヘルプを呼び出す際に表示されるタスクのリストにも表示されません。(詳細…) リンクされたタスクとして – 上記の 2 つのオプションは、サブ インテントがダイアログ フローの一部である場合に使用することができます。サブ インテントをユーザーがダイアログ内のどこからでも呼び出せる場合は、サブ インテント管理および例外オプションを使用します。 リンクされたタスクの例外 特定タスク間の切り替えを行う際に例外が容易になるよう、ダイアログ タスクでリンクしたタスクの例外を使用することができます。あるダイアログ タスクを別のものとリンクさせる場合、カスタマイズされた [一時停止と再開] プロパティを定義してその特定タスクに遷移することができます。さらに、一時停止と再開の規則が一定の条件を満たした場合にのみ有効になるよう、1 つ以上の条件式をエンティティ値またはコンテキストを使って書くこともできます。 例外定義の一環として、エンティティのプリアサイメントおよびポストアサインメントを定義することもできます。 プリアサイメントを使用して、次のインテントに事前入力しておく必要がある現在のコンテキストのパラメータをマッピングすることができます。現在のコンテキスト値をリンクされたタスクに存在するエンティティに渡したり、カスタム値を現在のコンテキスト値に定義したりできます。 ポストアサイメントを使用して、リンクされたタスクのコンテキスト値をリンクされたタスクが呼び出されたメイン タスクにマッピングすることができます。リンクされたコンテキスト値をメイン…

複数インテントの検出

Kore.aiのNLPエンジンは会話を分解してその本質を見極め、1つのメッセージから複数のアクションアイテムやインテントを特定してフォローアップします。ボットは、タスクを連続して論理的な方法で実行することができます。 1つのユーザーの発話から特定された、複数のインテントをNLPエンジンに検出および実行させることができます。初期設定では無効になっていますが、有効に切り替えることができます。設定を有効にすると、NLPエンジンは1つのユーザーの発話における複数のインテントを次のようなキーワードに基づいて特定します。 あとで、 そのあとに 次に それから その前に 最初に 事前に それまでに インテントを実行する順序は、ユーザーの発話の中の「その前に 」、「その後に」、「それから」といった標準的な語句に基づいて決定されます。NLPエンジンにより順序が特定されなかった場合は、インテントは元の発話内の出現順に実行されます。 複数インテントの検出を有効にするには、以下のステップを実行します。 複数インテントを追加するボットを開きます。 サイドナビゲーションパネルにカーソルを合わせ、[自然言語] > [インテリジェンス] をクリックします。 [複数インテントの検出] タブをクリックします。 有効化します。

ボットインテリジェンス

優秀で印象に残るボットには、ごく自然で人間味のある会話の流れがあります。しかし自然な会話とは、ときにほとんどのボットに事前定義されているはずの直線的なインテント解決の道筋を外れてしまうこともあるものです。さらに複雑なことに、ユーザーが合理的な結果にたどり着く前に他の新しいタスクを開始してしまうこともよくあります。そうなるとボットは、ユーザーの求める結果が得られるよう、もともとの文脈を損ねることなく会話を別の方向に誘導しなければなりません。 Kore.aiのボットプラットフォームは、割り込みや説明など、人間の会話におけるほぼすべてのニュアンスにボットが対応できるようにします。そして、ダイアログのターン定義やユーザーのためのコンテキストの切り替え体験を完全にコントロールできるようにします。 ダイアログ管理 割り込みとコンテキストの切り替え – プラットフォームは、一次停止および再開機能の詳細な制御をボット、タスク、そしてノードレベルで可能にします。詳細… ユーザーへのエンティティ値の修正許可 – ユーザーがエンティティの値を修正したいと思うのはよくあることですが、ボットはそのような状況にも対応します。修正後のダイアログに対する動作はコントロールすることができます。詳細… 複数インテント検出の有効化 – ユーザーの1つの発話から特定される複数のインテントを検出して実行できるよう、NLPエンジンの機能を強化することができます。詳細… ユーザーの発話からの特定ワードの除外 –  ユーザー入力内の、タスクの解釈に必要のないワードやフレーズにマークをつけると、ボットがユーザー入力に対してより早く対応でき、正確なタスク認識率を向上させることができます。  詳細… コンテキスト管理 ボットは本来ステートレスですが、人々の会話は相手との関係と、お互いのことをどれだけ知っているかによって大きく違ってきます。そのため、チャットボットの開発者は、会話の文脈や自然な流れを維持しながらさまざまな変数を追跡するのに苦労しています。 Kore.aiならあらゆるシナリオに合わせて文脈データをキャプチャして再利用できるため、より複雑なユースケースを作成したり、エンタープライズの顧客体験を再定義したりすることができます。 プラットフォームは、ほぼすべての複雑で多様なコンテンツ切り替えシナリオを効果的かつ効率的に処理します。コンテキストの切り替えを有効または無効にしたり、コンテキストデータを渡すことでタスク間の条件付き除外を追加したりすることができます。詳細… タスクの作成時には、プラットフォームに用意されているセッション変数や自分で定義したカスタム変数、変数の範囲を定義するコンテキストにアクセスすることができます。詳細… センチメント管理 センチメント分析とトーン処理で条件付きフローをトリガーして、ユーザーとボットの会話を誘導します。Kore.aiで構築されたボットは、ユーザーや電話をかけてきた人の感情状態を分析し、その反応をモデル化して優れたサービスを提供します。

ダイアログ管理

人間の会話は曲がりくねっているのが特徴で、2 つの方向が同じになることはありません。自然な会話とは、ボットに事前定義された直線的なインテント解決の道筋を外れてしまうこともよくあるものです。ユーザーが別の会話を開始する前に、ボット がユーザー インテントを合理的な結果に導くことができるようにすることが理想ですが、必ずしもそうとは限りません。 たとえば、次のような会話を考えてみましょう。 これにはボットが現在のインテントを続行するためのエンティティ値が含まれており、同時に新しいユーザーの要件やインテントも提示しています。 ボットは文脈データと会話の継続性を失わずに、ユーザーがタスクを一時停止し、別のタスクを開始して完了させ、元のタスクにシームレスに戻れるよう考慮しなければなりません。 Kore.ai では、ボット、タスク、ノード レベルでの一時停止と再開機能を細かく制御することができ、コンテキストの切り替えルールと動作をコントロールできます。また、タスク切り替え体験を定義するための幅広いオプションを与えることで、インテント フローの割り込みを処理できます。 オプションのうち、[一時停止と再開] オプションはボット、タスク、ノード レベルで設定でき、さまざまなビジネス要件に合わせて設定がレイヤー化されていることを確認できます。また、タスク間でコンテキスト データを渡す機能を使用して、タスク間に条件付き例外を追加することもできます。 続くセクションでは、以下について説明しています。 さまざまな一時停止と再開の設定、 ボット、タスク、ノード レベルでのセットアップの階層。 一時停止と再開 [一時停止と再開] オプションでは、ユーザーが別のタスクに切り替えるかどうか、どのように切り替えるか、また終了の方法を選択することができます。一時停止と再開の設定はボット レベル、またはタスクやダイアログ レベルで行うことができます。このセクションでは、ボット レベルでの設定について説明します。「一時停止と再開の階層」セクションで説明したように、これらの設定はタスク レベルでオーバーライドすることができます。 一時停止と再開の設定は、[自然言語] > [インテリジェンス] > [割り込みの管理] ページからアクセスできます。 このプラットフォームでは、以下の 3 つのカテゴリの下に 一時停止と再開のオプションが用意されています。

デフォルトの会話

開発者が詳細なコードを書かなくても、プラットフォームがユーザーの発話に応答できる場面がいくつかあります。たとえば、: ユーザー インテントが検出されない場合やボットが理解できない場合の、デフォルトのダイアログ 特定の質問やあいさつ、エラーおよび警告のシナリオなどへの標準応答 イベント ハンドラで特定の共通ボット イベントを定義することができます。詳細については、こちらをご覧ください。 これらはプラットフォームによりデフォルトで設定されていますが、ビジネス要件に応じてカスタマイズすることができます。このドキュメントでは、そのようなカスタマイズについて説明しています。 デフォルト ダイアログ Kore.ai の自然言語処理がユーザーのインテントを決定できない場合、ダイアログ タスクを実行するか標準のエラー メッセージを表示するかを選択することができます。デフォルトでは、エラー メッセージを表示するように設定されています。[自然言語] > [デフォルトの会話] セクションで、[デフォルト ダイアログ] タブを選択してデフォルトのダイアログ タスクを定義します。たとえば、ボットからライブ エージェントへ会話を切り替えたり、ボットとの会話でユーザー インテントが決定できない場合は、メイン メニューのような汎用ダイアログを実行したりすることができます。デフォルト ダイアログ タスクが定義されていない場合は、標準エラー メッセージや「標準応答」セクションで定義されているカスタマイズが使用されます。以下の図は、銀行ポータル ボットで、ユーザー インテントが決定できない場合にアカウント ヘルプの取得ダイアログ タスクを実行するように設定されたボットビルダーの、「デフォルト ダイアログ」セクションの例です。 デフォルト ダイアログの定義 以下の手順を完了するには、デフォルト ダイアログとして選択できる 1 つのダイアログがあらかじめ定義されている必要があります。 [自然言語] > [デフォルトの会話] タブで、「デフォルト ダイアログ」セクションを選択します 「ユーザーのインテントを理解できない場合」のセクションで、[ダイアログ タスクを自動的に実行] を選択します。 表示されている [デフォルト ダイアログ タスク]…

エンティティの変更

ユーザーがタスクの実行中に設定を変更する状況が何度も見られます。 例えば、ユーザーはフライトの予約中に旅行の日程を変更したり、目的地を変更したりする場合があります。 エンティティの変更は、このようなシナリオのための機能です。この機能を使用することで、お客様はユーザーによるエンティティ値の変更や変更後のダイアログの動作制御を可能にします。 エンティティの変更プロセスは、3つの段階に分けることができます。 変更の識別:エンドユーザーが変更を望んでいることの識別は、Botの組み込みNLP機能によって行われます。 エンティティの変更:変更の意図を識別すると、現在のタスクは一時停止され、変更フローがトリガーされます。ユーザーの発話に基づいて、次の3種類の変更フローが考えられます。 ユーザーがエンティティ名(またはエンティティの同義語)を参照した場合、エンティティ値の入力を求められます。例えば、「I want to change the destination」というユーザーの発話により、目的地エンティティのプロンプトがトリガーされます。同じエンティティノードがダイアログ内に複数回存在する場合、ユーザーが既に入力した最新のエンティティノードが変更されます。 ユーザーがエンティティ値を指定すると、それに応じてエンティティが更新されます。例えば、「I want to fly to JFK」というユーザーの発話により、目的地のエンティティ値が変更されます。値がダイアログ内の2つ以上のエンティティと互換性がある場合、ユーザーは変更するエンティティの選択を促されます。 ユーザーがエンティティとその値の両方を参照した場合、エンティティが更新されます。例えば、「change my destination to JFK」というユーザーの発話により、目的地のエンティティ値が変更されます。 変更後の動作:エンティティが正常に変更された後、Botが設定できる3つのダイアログ実行フローがあります。 ダイアログは、エンティティの接続を評価することで、変更されたノードから再実行することができます。 ダイアログは、変更が識別または作成されたノードから再開することができます。 ダイアログは、ダイアログ内に存在する指定されたノードから再開することができます。 注: この機能はバージョン6.4のリリースで導入されました。 この機能はすべての言語でサポートされているわけではありません。詳細はこちらを参照してください。 Implementation Kore.aiプラットフォームでは、次の2つのレベルでエンティティの変更の動作を定義することができます。 Botレベル タスクレベル Botレベル Botレベルのエンティティの変更の動作を設定する 自然言語 > インテリジェンスオプションからエンティティの変更を選択します。エンティティの変更はデフォルトでは無効になっています。 エンティティの変更を許可を選択すると、様々なダイアログの再開オプションが利用可能になります。 変更済みのエンティティからダイアログを再実行 – 変更済みエンティティの接続を評価してダイアログを再開するには、このオプションを使用します。さらに以下を選択することができます。 下流で取得されたエンティティの値を削除 – 識別されたエンティティと変更の間に取得されたすべてのエンティティを削除します。 以前に表示されたメッセージの表示のスキップ – メッセージノードからのメッセージのみ。 変更識別ノードからダイアログを再開…