タスクの使用

Prev Next

Classic/VPC環境で利用できます。

タスクを利用すると、ユーザーの質問を理解して最適の返答を提供するだけでなく、ユーザーとの会話を通じて追加情報を収集し、収集された情報に基づいてユーザーのポイント照会や届いた商品の返品といった複雑な会話を行えます。
タスク機能を活用すればより洗練された会話を実現できますが、非常に精巧なエンティティの設計が必要で実行制約に条件があるため、細心の注意を払いながら作成する必要があります。

タスクの概要

タスクを設計する前に知っておくべき概念を説明します。

1. スロットとエンティティの概念
スロットは、ユーザーに埋めてもらうブランクを意味します。チャットボットが質問するスロット(ブランク)をユーザーがすべて埋めると、タスクを実行する準備が完了します。
エンティティは、スロットに入れる内容を決めておくことを意味します。エンティティはスロットとマッピングされます。
例えば、ピザの注文シナリオで、「数量」というスロットに1枚、2枚、3枚といった辞書型データが登録された@ピザの数量単位エンティティがマッピングされているとすると、ユーザーの発話の中から「@ピザの数量単位」エンティティを分析して「数量」スロットを埋めることになります。そのため、タスクで3つのスロットを設定した場合、3つのスロットに含まれるエンティティも3つ定義されている必要があります。

2. タスクの動作方式
タスクの実行において必須のスロットがすべて埋まらないとタスクを実行できないので、チャットボットはスロットがすべて埋まるまで繰り返しユーザーに質問します。スロットがすべて埋まると、チャットボットは最終返答を返してタスクを実行できるようになります。
あらかじめ設定した質問の回数を超えてもスロットが埋まらない場合、チャットボットはタスクを実行できません。そういった場合は最終返答を返せず、聞き返し超過メッセージを返してタスクを終了します。反対に、ユーザーがこれ以上タスクを続けたくないという意思表示をした場合にもタスクを終了できます(タスクを終了キーワードとメッセージが設定されている場合)。

3. タスクと一般会話との間の流れ
タスクのスロットを埋める過程で、ユーザーが他の質問をする場合があります。例えば、ピザを注文する場面であれば、配送料はどう決められるのか、ピザの種類、大量注文が可能かどうかなどについての質問が会話の途中で投げかけられることがあります。ユーザーが、スロットを埋めることと関係ない質問をする場合、しばらくタスクから離脱して他の会話に移動して問い合わせに返答した後、再びタスクに戻るように設計することもできます。

4. 以前のスロットの維持
チャットボットが以前の会話を記憶するコンテキスト機能を活用したタスク設計も可能です。ユーザーが「今日のソウルの天気」を聞いた後、「明日は?」と聞いた場合、ユーザーに地域情報を聞き返さず、ユーザーが言った「ソウル」という地域情報を覚えておいて追加の質問なしに、明日のソウルの天気を教えることができます。そのように設計するには、コンテキストでつながっている以前のタスクから「地域」スロット情報を維持して持ってきます。

タスクの設計

チャットボットのシナリオに応じて、会話の種類を一般会話とタスクの中から選択できます。ピザの注文や届いた商品の返品のように、ユーザーとのインタラクティブな会話で様々な情報を収集するチャットボットを開発する場合は、タスクを活用することをお勧めします。
タスクを通じてスロットを埋める情報をユーザーから受け取って必須スロットがすべて埋まると、チャットボットは最終返答を返します。スロットの値の表現式を用いてユーザー発話を活用した返答を返すことができます。
例えば、ピザの注文シナリオでユーザーにピザの種類、ピザのサイズ、飲み物に関する値を入れてもらう場合、受け取る情報をエンティティで作成し、タスクの作成時にスロットにそのエンティティを関連付けます。チャットボットは、ピザの注文に必要なすべてのスロットが埋まるまでユーザーに入力してもらい、スロットがすべて埋まるとその情報に基づいて注文を受け付けることができます。

タスクの作成

タスクを作成する方法は以下のとおりです。

  1. 会話情報の入力を参考にして会話を作成します。
  2. 会話情報領域上部の [高度な設定] ボタン > [会話の種類] タブで会話の種類を タスク に変更します。
    chatbot-chatbot-chatbot-chatbot-3-6_task01_ja
  3. 質問を登録します。
    • タスクを実行できる質問です。ユーザーがその質問を入力するか、チャットボットが類似の質問と判断する場合、そのタスクは実行されます。
    • ユーザーの発話の中にスロットを埋める情報が既に揃っている場合、チャットボットはそのスロットを自動で埋めてからタスクを開始します。例えば、ピザの種類、ピザのサイズ、飲み物のスロットを埋めるタスクで、ユーザーが「ポテトピザを注文して」という質問を入力した場合、ピザの種類スロットを自動で埋めてからピザのサイズと飲み物のスロットだけ埋めることになります。
      chatbot-chatbot-chatbot-chatbot-3-6_task02_ja
  4. スロット情報を入力します。
    チャットボットはスロットの登録順にスロットの情報を埋めます。しかし、チャットボットが埋めるスロットの順番と関係なしに、ユーザーは他のスロットを先に埋めたり、一度に複数のスロットを埋める場合、チャットボットは既に埋められたスロットに対してユーザーに聞かずに次のスロットを埋めるように誘導します。
    • 必須:必須のチェックボックスをクリックすると、そのスロットが埋まらない場合はタスクの実行に失敗し、最終返答を返しません。必須のチェックボックスをクリックしない場合、その情報が揃わなくてもタスクは進みます。
    • スロット:スロットの名前を入力します。タスクの中で重複しない値を入力します。
    • エンティティ:スロットとマッチングするエンティティを選択します。ドメインエンティティとシステムエンティティのいずれも利用できます。
    • 値:ユーザーが埋めたスロットの値を最終返答に挿入して返すことができます。埋められたスロットの値を使用するための表現式を入力します。
    • 聞き返し質問:スロットを埋めるために聞く質問を入力します。チャットボットは並べられたスロット順に聞き返し質問を行いながら、スロットを埋めていきます。
      chatbot-chatbot-chatbot-chatbot-3-6_task03_ja
  5. スロット情報の入力が完了すると、[追加] ボタンをクリックします。
  6. スロットの詳細設定を指定するには、その他の設定 アイコンをクリックします。
  7. 最終返答を登録します。
    • 返答を登録する方法は、返答の入力をご参照ください。
      chatbot-chatbot-chatbot-chatbot-3-6_task04_ja
  8. タスク終了メッセージを設定します。
    • タスクの実行中にユーザーが直ちに会話を終了させたい状況が発生した場合、ユーザーが強制的にタスクを止められるようにタスク終了キーワードとメッセージを設定します。
    • タスク終了メッセージを設定する方法は、タスク終了メッセージの登録をご参照ください。

最終返答でアクションメソッドV1.0を呼び出す場合
そのタスクで埋められたエンティティをX-KAA-USERENTITYヘッダに持たせて一緒に渡します。X-KAA-USERENTITYヘッダにエンティティのkeyの値を持たせてUTF-8にURLエンコードして渡すことになりますが、このとき、エンコードされる前のエンティティのkeyは以下の形式に沿っています。

"エンティティ名 = ユーザーが入力した単語"

最終返答でアクションメソッドV2.0を呼び出す場合
そのタスクで出現したエンティティをuserInfo.taskEntitiesに持たせて渡します。

 "userInfo": {
    "id": "ユーザーid",
    "key": "ユーザーkey",
    "query": "ユーザーが入力した質問",
    "entities": {
      "エンティティコード1": "ユーザーが入力した単語1",
      "エンティティコード2": "ユーザーが入力した単語2"
    },
    "taskEntities": {
      "エンティティ名1": "ユーザーが入力した単語1",
      "エンティティ名2": "ユーザーが入力した単語2"
    }

スロットのその他の設定

その他の設定画面で、スロットに対する具体的な設定を変更できます。

選択肢の設定タブ
スロットを埋めるための選択肢を、Quick replyの形で表示できます。選択肢は最大10個まで表示できます。

  • 代表語の選択:エンティティの代表語リストを読み込んで選択肢として表示
  • テキストの入力:選択肢を直接テキストで入力して選択肢として表示
  • 既存の聞き返し選択肢:他のタスクの選択肢を読み込んで選択肢として表示

chatbot-chatbot-3-6_setting01_ja

スロットの設定タブ
ユーザーが応答したエンティティでそのスロットに埋める前に、スロットの設定タブに入力されたURLを用いて検証します。検証に成功した場合にのみスロットを埋めることができ、失敗した場合にはスロットを埋めません。

chatbot-chatbot-3-6_setting02_ja

スロット検証のリクエスト形式は以下のとおりです。

{
  "userInput": "ユーザーが入力した発話です",
  "represent": "ユーザーが入力した値の代表語です",
  "filledEntity": {
    "今まで埋まったエンティティ名1": "エンティティ1",
    "今まで埋まったエンティティ名2": "エンティティ2"
  },
  "userKey": "ユーザー識別のためにハッシュされたキー値です。アクションメソッドで呼び出す際にヘッダに入っているuserKeyと同じです"
}

スロット検証の応答形式は以下のとおりです。

  • valid:検証に成功(true)したか、失敗(false)したかです。検証に成功した値でのみスロットを埋めることができます。
  • recover:スロットの検証に失敗した場合に聞き返し回数を差し引くかどうかを設定します。trueの場合は聞き返し回数を差し引きません。
{
  "message": "ユーザーに応答するメッセージです。",
  "valid": true,
  "recover": false
}

聞き返しの設定タブ

  • 聞き返し質問:聞き返し回数が超過した場合、代わりに応答するメッセージを入力します。必須スロットの場合、聞き返し回数を超過してスロットを埋めるのに失敗したら、最終返答を返しません。その代わり、[聞き返しの設定] タブに入力された聞き返し回数の超過メッセージを返します。聞き返し回数の超過メッセージが入力されていない場合は、現在のユーザー発話とマッチングされる返答または失敗メッセージを返します。
  • 聞き返し回数:聞き返し質問を返す回数を指定できます。チャットボットは、スロットを埋めるために設定された回数だけ、ユーザーに繰り返し質問します。

chatbot-chatbot-3-6_setting03_ja

値のタイプ
ユーザーが埋めたスロットの値を最終返答または聞き返し質問に読み込んで使用する際に、どんな方式で使用するかを選択できます。

  • 代表語置換値:ユーザーが応答した値ではない代表語に置換した値を読み込んで使用します。代表語置換値は、辞書型エンティティの場合にのみ使用できます。
  • Normalize値:パターン型エンティティでNormalize文法を活用してパターンを定義した場合に選択できるオプションです。ユーザーが返した値ではなく、指定したテキストに置換して使用します。Normalize値は、パターン型エンティティの場合にのみ使用できます。
  • ユーザー応答値:ユーザーが応答した値をそのまま読み込んで使用します。
    例えば、「@ピザ」エンティティに「代表語:コンビネーションピザ」、類義語:「コンビネーション」、「コンビピザ」 を登録し、その他の設定 > 値タイプの設定タブで「代表語置換」を選択した場合、ユーザーが「コンビピザ」と応答してピザスロットを埋めるとチャットボットは最終返答として「『コンビピザ』のご注文をいただきました。」の代わりに、「『コンビネーションピザ』のご注文をいただきました。」と応答することができます。
  • デフォルト値:デフォルト値は必須スロットの場合にのみ有効になります。ユーザーが必須スロットを埋めなかった場合、タスクを失敗させずに入力されたデフォルト値で代わりにスロットを埋めることができます。例えば、「@ピザの枚数」エンティティにデフォルト値として 「1枚」 が登録されている状態で、ユーザーがピザの枚数スロットを埋められなかった場合、スロットにデフォルト値の「1枚」が自動保存されます。
    chatbot-chatbot-3-6_setting04_ja

以前の会話のスロットの維持タブ
スロットをすべて埋めた後コンテキストが維持されたなら、チャットボットは埋められたスロット情報を削除せずに記憶し、他のタスクに活用することができます。コンテキストでつながっている会話に登録されたスロットのみ維持することができます。そのため、維持したいスロットが登録された会話が、コンテキストでつながるように設計される必要があります。
chatbot-chatbot-3-6_setting05_ja

タスク終了メッセージ

タスクの実行中にユーザーがタスク終了キーワードを入力すると、タスクを直ちに終了してタスク終了メッセージを返すように設定できます。タスク終了キーワードはタスクの実行中にのみ動作し、一般会話中には動作しません。終了キーワードは最大10件まで登録できます。exactで同じ質問が入力された場合にのみ動作します。

タスクの設計例

ピザ注文タスクの実行中にFAQ返答で応答

ピザの注文タスクの実行中にユーザーがFAQ会話に登録されている質問を入力した場合、しばらくそのタスクから離脱してFAQ会話で返答を見つけて返した後、再びタスクに戻るようにシナリオを構成することができます。FAQ返答会話とピザの注文タスク会話を作成した後、ピザの注文タスクにはタスクから離脱するを有効にし、FAQ会話にはタスクに割り込むとタスクに復帰するを有効にします。

エンティティを作成する
ピザ、ピザのサイズ、ピザの枚数、飲み物のエンティティを作成します。

  • エンティティを作成する方法は、エンティティをご参照ください。
    chatbot-chatbot-3-6_entity01_ja

アクションメソッドを作成する
ユーザーにより埋められたスロット情報を含めて呼び出すアクションメソッドを作成します。

  • アクションメソッドの作成方法は、アクションメソッドをご参照ください。
  • このシナリオでは、スロット情報を取得してピザを注文するアクションメソッドを作成します。
    chatbot-chatbot-3-6_action01_ja

タスクを作成する
エンティティとアクションメソッドを活用した会話を作成します。

  1. 会話情報の登録を参考にして会話を作成します。
  2. 会話情報領域の 高度な設定 ボタンをクリックし、[会話の種類] タブで会話の種類を タスク に変更します。
  3. ピザ注文の意図が含まれた質問を入力します。
    • <例> ピザを注文するよ、ピザはどんなものがあるのなど
  4. タスク領域にピザ、ピザのサイズ、ピザの枚数、飲み物のエンティティを用いてスロットを追加します。
    • ピザ、ピザのサイズ、ピザの枚数のエンティティは必須スロットに指定
    • 飲み物エンティティは任意スロットに指定
    • 聞き返し質問には、そのスロットを埋めるためにユーザーに質問する文を入力
      chatbot-chatbot-3-6_task06_ja
  5. 各スロットのその他の設定アイコンをクリックして選択肢の設定、聞き返しの設定などをチャットボットサービスに合わせて行います。
    chatbot-chatbot-3-6_setting01_ja
  6. [高度な設定] ボタン > [タスクの流れ] タブで タスクから離脱する を有効にします。
    • ユーザーがタスクと関係ないメッセージを入力する場合、そのタスクから離脱して他の会話で返答を見つけて返す設定
  7. 最終返答の登録時に選択肢型返答タイプを選択し、「はい」選択肢の返答部分に${ピザの注文}アクションメソッドを呼び出すように指定します。
    chatbot-chatbot-3-6_task07_ja

FAQ会話を作成する

配達料に関する問い合わせという意図の会話を作成します。

  1. 新しい会話を作成して質問と返答を入力します。
    chatbot-chatbot-3-6_sample1_ja
  2. [高度な設定] ボタン > [タスクの流れの設定] タブで、タスクに割り込むタスクに復帰する を有効にします。
    • タスクの実行中にユーザーにより配達料関連の質問が入力された場合、その会話で返答を見つけて返した後、再びタスクに戻る設定

ビルドとテスト
チャットボットをビルドしてテストを行います。
ピザの注文タスクの実行中に配達料関連の質問が入力された場合、配達料について返答して再びピザの注文タスクに戻るのかテストを行う方法は、以下のとおりです。

  1. 会話モデルのビルド をクリックしてビルドを完了ます。
  2. ビルドが完了すると、手動テスト をクリックします。
  3. ピザの注文タスクをテストします。
    chatbot-chatbot-3-6_sample2_ja

以前の会話のスロットを維持して天気情報を応答

ユーザーが「今日のソウルの天気は」と質問し、スロットをすべて埋めてチャットボットから返答を得たとします。ユーザーが「明日は?」と聞いた場合、チャットボットが地域情報を聞き返さず以前のスロットで埋められた地域スロットを覚えておいて活用したら、ユーザーに聞き返さずに自然な感じでその地域の明日の天気を教えることができます。
コンテキストを活用して以前の会話のスロットを維持する会話例です。

エンティティを作成する
日付、都市のエンティティを作成します。

アクションメソッドを作成する
ユーザーにより埋められたスロット情報を含めて呼び出すアクションメソッドを作成します。
chatbot-chatbot-3-6_sample3_ja

タスクを作成する

  1. 会話情報の入力を参考にして会話を作成します。
  2. [高度な設定] ボタン > 会話の種類をタスクに設定します。
  3. [高度な設定] ボタン > コンテキストの設定 タブで、Outputコンテキストに地域ごとの天気を入力します。
    chatbot-chatbot-3-6_sample4_ja
  4. 天気確認の意図が含まれた質問を入力します。
  5. 前の段階で作成された日付、地域のエンティティを用いてタスク領域にスロットを追加します。
    chatbot-chatbot-3-6_sample5_ja
  6. 日付、都市のエンティティを必須スロットに指定します。
  7. その他の設定アイコンをクリックして選択肢の設定、聞き返しの設定などを行います。
  8. 最終返答として天気アクションメソッドを呼び出すように指定します。
    chatbot-chatbot-3-6_sample6_ja

もう一つのタスクを作成する

  1. 新しいタスクを作成してInputコンテキストに地域ごとの天気を入力します。
    chatbot-chatbot-3-6_sample7_ja
  2. 「ソウルは?」、「ニューヨークは?」のような都市情報のみが含まれる質問を入力します。
    chatbot-chatbot-3-6_sample8_ja
  3. 前の段階で作成された日付、都市のエンティティを用いてスロットを追加します。
    • 日付、都市のエンティティを必須スロットに指定します。
    • 聞き返し質問や回数、聞き返しの選択肢など様々なスロット情報を、意図したチャットボットサービスに合わせて入力します。
      chatbot-chatbot-3-6_sample9_ja
  4. 「日付」スロットのその他の設定画面で、以前の会話のスロットを維持するように設定します。
    chatbot-chatbot-3-6_sample10_ja
  5. 最終返答で${天気}アクションメソッドを呼び出します。
    chatbot-chatbot-3-6_sample11_ja
  6. 学習を完了し、完成した天気タスクのテストを行います。