このブログ投稿は、下記5つのパートの3番目の “チャットボットの作成: ステップ2” です。
- 作成するチャットボットの概要説明と必要な準備
- チャットボットの作成: ステップ1(ボットの作成、インテントやエンティティの作成)
- <このブログ投稿>チャットボットの作成: ステップ2(スキルの作成)
- チャットボットの作成: ステップ3(チャットのテストとログの紹介)
- CAI を利用したお客様のプロジェクト事例
チャットボットの作成のステップ2として、“スキル” を作成していきたいと思います。
スキルの作成
スキルとは、会話フローのひとつのブロックであり、この中でユーザーがチャット上に入力した内容に従って処理を行うように設定するものです。
スキルは、1つのスキルだけで対応するようなシンプルなものから、複数作成してスキル同士を連携して、複雑な会話フローを実現することもあります。
ちなみに、英語になりますが、スキルに関する説明がこちらの
サイトに記載されておりますので、スキルについて詳しく知りたい方は、こちらもあわせて参照してみてください。
スキルを作成するには、“Build” タブに行き、“Add Skill” をクリックし、任意のスキル名(ここでは、"translation")を入力、タイプは “Business” を選択して、Add ボタンを押します。
同様にもう一つ “call-trans-api” といったスキルも作成します。
尚、2つ目のスキルを作成すると2つ目のスキルが1つ目のスキルの上に重なって見えない場合があるので、その際は、下の画面のようにドラッグ&ドロップでスキルをずらすようにしてください。
1つ目のスキルの設定
まず最初に作成したスキル “translation” を設定していきたいため、そのスキルをクリックします。
スキルを開いたら、Triggers タブで、前のブログ投稿で作成したインテント(start-translation)が存在したら(is-present)をトリガーの条件として設定します。これにより、CAI が "start-translation" のインテントに合致する文言がチャット上に入力されたと判断したら、このスキルを起動することになります。つまり、チャットで、“翻訳依頼” といった文言を入力すると、このスキルが起動されます。
次に、Requirements タブでこのスキルの Actions タブの内容(後で設定します)を実行するために必要な条件を設定します。
ここでは、前のブログ投稿で作成したエンティティを設定して、このエンティティの値(この例では、“英語”、“ドイツ語”、“フランス語”のどれか)が入力されない限り、Actions タブの内容を実行しないようにします。
入力された場合、任意に設定した変数名(この場合、"targetTrans")で CAI のメモリーにその値が保持されます。
また、このエンティティの存在を CAI がまだ見つけられなかった場合に出力するメッセージを設定するために、“If #tragetTrans is missing” のところの左側の “NEW REPLIES” ボタンをクリックします。
その後に表示される画面で、“SEND MESSAGE” を選択して、“Buttons” をクリックします。
ボタンの設定方法は、下の画面に従って、“Postback” を選択して、“英語”、“ドイツ語”、“フランス語” を表示するように設定してください。
Actions タブでは、Requirements タブで設定した条件が満たされた場合実行する内容を設定します。
下記手順に従って、入力されたエンティティの値が “英語” であった場合、CAI のメモリーのキー名 “targetTransLangKey” (任意に命名した名称)に “en” を設定するようにします。
尚、Actions タブの IF 条件でメモリーの値にアクセスするには、“_memory” といったようにアンダースコア( _ )と “memory” といった文字にピリオド( . )をつけてアクセスします。
同様に、ドイツ語(de)、フランス語(fr)の場合も設定します。
次に、ユーザーに入力を促すためのメッセージ “
翻訳したい内容を入力してください” を出力するように設定します。
さらに、メモリーの設定をするために、UPDATE CONVERSATION の EDIT MEMORY をクリックして、任意に命名したキー名 “isPhrasedAsked” に true を設定します。尚、存在しないメモリーのキー名を指定して値を設定すると、新規にその新しいキーが CAI のメモリー内に作成されます。
このメモリー値は、不要にスキルが起動しないようにするためにわざわざ作成して設定しています。後程利用します。
アクションタブの最後の設定は、2つ目に作成したスキル(call-trans-api)にリダイレクトする設定です。UPDATE CONVERSATION の GO TO からスキル “call-trans-api” をプルダウンメニューから選択し、“Wait for user input” を選択します。これにより、次のスキルへリダイレクトする前にユーザーのインプットを待つようになります。
メッセージの送信、メモリーセット、リダイレクトに関する設定の完成したものはこうなっています。
このスキルの最後の設定として、Triggers タブに戻り、先程設定したメモリー “isPhrasedAsked” が true でない(is-not)場合、このスキルが起動するように設定します。尚、最初のインテントの条件とは AND の条件にします。
2つ目のスキルの設定
次に2つ目のスキル(call-trans-api)を設定していきます。
まず Triggers タブでメモリーのキー “isPhraseAsked” が true に設定されていることを条件とします。
次に、Requirements タブには何も設定せずに、Actions タブに行き、“ADD NEW MESSAGE GROUP” をクリックし、その後 “CONNECT EXTERNAL SERVICE” の “CONSUME API SERVICE” をクリックして、SAP Translation Hub にアクセスする API の設定をします。
SAP Translation Hub へアクセスするには下のスクリーンのように設定します。
Body タブに設定している JSON は SAP Translation Hub の API へ送信するリクエスト内容になります。
{
"sourceLanguage": {{language}},
"targetLanguages": [ {{memory.targetTransLangKey}} ],
"units": [
{
"value": {{nlp.source}}
}
]
}
それぞれの値には、CAI が保持しているデータを渡しています。
CAI が保持しているランタイムデータに関する詳細は、こちらの
サイトを参照してください。
それぞれのキーに設定している値の意味は下記になります。
- "sourceLanguage": 現在の会話の ISO コード (例: ja)
- "targetLanguages": メモリーに設定されている targetTransLangKey の値 (スキル translation の Actions タブで設定した、英語なら "en"、ドイツ語なら "de"、フランス語なら "fr" の値になります)
- "unitis" の下の配列内にある "value": 直前にチャット上に入力されたもの
Response タブでは何も設定せず SAVE ボタンで設定を保存します。
Response タブには、特に何も設定しませんが、この内容はあとで API から返されたデータを扱う際に関係してきますので、下のイメージで簡単に説明しておきます。
次に、“SEND MESSAGE” → “TEXT” をクリックして、翻訳結果を表示するメッセージを作成します。
ここでは、“Enable Markdown syntax” にチェックを入れてマークダウン記法を有効にします。それにより、2つのアスタリスク( ** )で囲んだ部分は Bold 体(太字)で表現されるようになります。(日本語の場合この画面では、Bold 体で表現されませんが、チャット上ではちゃんと Bold 体になります)
その後、“UPDATE CONVERSATION” → “EDIT MEMORY” でここでいったん処理を終了させるために、CAI のメモリー全てをリセットするように設定します。
さらに、“SEND MESSAGE” → “TEXT” で次の処理へ移行する旨を伝えるために、下記のようメッセージを送信するように設定します。
最後に、続けて処理を実行できるように最初のスキルへリダイレクト設定をします。
ここでは、特にユーザーの入力を待つ必要がないため、“Start the skill” を選択します。
Actions タブの全体像は下のようになります。
まとめ
今回はブログ投稿では、2つのスキルを作成して、会話の流れや受けっとったデータに対する処理の設定をしました。
この中で、メッセージの送信方法、CAI のメモリーなどのランタイムデータへのアクセス方法、API へのリクエスト送信・受信方法などを理解してもらえたと思います。
次のブログ投稿では、いよいよこのチャットボットを動かすテストをしたいと思います。
後続のブログ投稿
前のブログ投稿