Slackと Watson Assistant を連携した事例を紹介します。
WATSON ASSISTANT×SLACK BOTWATSON ASSISTANT×SLACK BOTでリモートで働く社員を繋ぐでリモートで働く社員を繋ぐ
View Slide
⾃⼰紹介⾃⼰紹介エンジニアの幸せを⽬指すEC特化型スタートアップ、株式会社ジョーレンのエンジニア。現在は新サービスの企画・営業や、EC-CUBEを利⽤したWebアプリケーション開発に従事しています。また、Watsonの開発の容易さとAPIの充実ぶりに魅せられ、WatsonとWebアプリを使った連携ツールを作ったりしてます。2020年 IBM Champion。また、IBM Cloud User Group(通称:BMXUG)運営の⼀員です。Watson Assistant Slack Botでリモ トで働く社員を繋ぐ
SLACKBOTも社員の⼀員!SLACKBOTも社員の⼀員!Watson Assistant Slack Botでリモ トで働く社員を繋ぐ
弊社で愛されるSLACKBOT弊社で愛されるSLACKBOT弊社には、社員に愛されるSlackbotがおります。その名も「加湿さん」! そもそもの由来は、オフィス環境が乾かない様に、社員に定期的な加湿器への給⽔をリマインドするものだったのですが、現在は社員の⼼も潤す存在に進化しています。Watson Assistant Slack Botでリモ トで働く社員を繋ぐ
どれくらい愛でられているかというと、、、どれくらい愛でられているかというと、、、独⾝男性社員にナンパされてしまうくらいの⼈気ぶりですwWatson Assistant Slack Botでリモ トで働く社員を繋ぐ
もちろんもちろん⼥性社員からも、それなりに好評の様です。Watson Assistant Slack Botでリモ トで働く社員を繋ぐ
システム構成システム構成さて、このSlack上での会話ですが、Watson Assistantを使って会話を成⽴させています。システムのイメージとしてはこの様な感じです。Watson Assistant Slack Botでリモ トで働く社員を繋ぐ
WATSONとSLACKの連携はWATSONとSLACKの連携はノンコーディングでできる!ノンコーディングでできる!⼀⾒、どうやってやるの? となりそうですが、連携⾃体はノンコーディングでOKです。IBM DAの⼾倉さんが、で紹介しているので参考にしてみてください。今回は、SlackとWatson Assistantが連携している前提で、このbotの育て⽅をご紹介します。【Watson×Slack】Watson Assistantを連携させたSlack botを開発する⽅法 (ノンコーディング編)Watson Assistant Slack Botでリモ トで働く社員を繋ぐ
⼿始めの⼀般会話ができるまで⼿始めの⼀般会話ができるまでWatson Assistant Slack Botでリモ トで働く社員を繋ぐ
CONTENT CATALOGを使って⼀般会話のCONTENT CATALOGを使って⼀般会話の意図を理解できる様にする。意図を理解できる様にする。Watson Assistantを起動して、該当のbotを開き、Content Catalogを選択します。ここでは、「よくある⼀般的なトピック」として⼀般を選択(Add to Skill)します。Watson Assistant Slack Botでリモ トで働く社員を繋ぐ
カタログを選ぶとこうなります。カタログを選ぶとこうなります。挨拶や、あなたは誰?というIntentが⾊々と登録されています。Watson Assistant Slack Botでリモ トで働く社員を繋ぐ
DIALOGで応答を定義するDIALOGで応答を定義する上記で定義されたIntentに対して、どの様な返答を返すかはあなた次第です。愛されそうな返事を定義しましょう。 Dialogを選択して、Add to Nodeを押します。Watson Assistant Slack Botでリモ トで働く社員を繋ぐ
回答の定義の仕⽅回答の定義の仕⽅Watson Assistant Slack Botでリモ トで働く社員を繋ぐ
ここでは、「こんにちは」など、挨拶がされたときの返事を定義しています。Watson Assistant Slack Botでリモ トで働く社員を繋ぐ
簡単に会話が定義できます!簡単に会話が定義できます!これだけで、挨拶されたら挨拶を返すbotの完成です。同じ要領で、既にContent Catalogで取り込んだIntentへの返事を定義していきましょう。Watson Assistant Slack Botでリモ トで働く社員を繋ぐ
ユーザーの⽬的を汲み取ってユーザーの⽬的を汲み取って返事をしてみる返事をしてみるWatson Assistant Slack Botでリモ トで働く社員を繋ぐ
「〜をしたよ!だから、褒めて欲しい」という「〜をしたよ!だから、褒めて欲しい」という要求に答える(ENTITYを使う)要求に答える(ENTITYを使う)ある程度、Intentを使ったやりとりができてきたそんなある⽇、とある社員が「掃除をしたよ!(だから褒めて)」とbotに要求してきました。 この場合、通り⼀辺倒な褒め⾔葉では「愛されるbot」にはなれません。「掃除をしたこと」に対する「褒め」を⽤意しましょう。イメージとしては、こんな感じです。Watson Assistant Slack Botでリモ トで働く社員を繋ぐ
ENTITYを使おうENTITYを使おうさて、この様に「〜を」というユーザーの「⽬的語」(この場合は掃除)を捉えるために、Watson AssistantにはEntityという概念があります。Watson Assistant Slack Botでリモ トで働く社員を繋ぐ
ENTITYを定義するENTITYを定義するEntity → My entitiesから Create entityを押して Entityの定義をします。Watson Assistant Slack Botでリモ トで働く社員を繋ぐ
登録内容は⾄って簡単で、今回の「掃除」がキーワードであれば、それを表しそうな⾔葉を⼊れていきましょう。Watson Assistant Slack Botでリモ トで働く社員を繋ぐ
ENTITYを踏まえてDIALOGで返答を定義するENTITYを踏まえてDIALOGで返答を定義するこれは少し、コツが必要です。「褒めて欲しい」という意図をまずは判定する。「褒めて欲しい」という意図をまずは判定する。まずは、「褒めて欲しい」という意図(Inent)を判定します。ただ、この時点では「何に対して」という情報が不⾜しているため、回答が確定できません。この場合は、回答を定義せずに、次の処理(Skip User Input and evaluate child nodes)とします。Watson Assistant Slack Botでリモ トで働く社員を繋ぐ
下記の様なイメージですね。Watson Assistant Slack Botでリモ トで働く社員を繋ぐ
Watson Assistant Slack Botでリモ トで働く社員を繋ぐ
CHILD NODEでENTITYを判定して適切な答えを返すCHILD NODEでENTITYを判定して適切な答えを返す上記のNodeを選択した状態で、Add Child Nodeを押します。Watson Assistant Slack Botでリモ トで働く社員を繋ぐ
ここでは、既に「褒めて欲しい」というIntentは判定済みですので、Entityだけを判定します。この様なイメージです。Watson Assistant Slack Botでリモ トで働く社員を繋ぐ
これで、ユーザが褒めて欲しい対象によって、これで、ユーザが褒めて欲しい対象によって、返答を切り替えることができる様になりました。返答を切り替えることができる様になりました。Watson Assistant Slack Botでリモ トで働く社員を繋ぐ
答えられなかった質問を答えられなかった質問を教育する。教育する。Watson Assistant Slack Botでリモ トで働く社員を繋ぐ
INTENTやENTITYの判定を調整する。INTENTやENTITYの判定を調整する。愛されてくる様になると、本当に様々なタチの悪い呼びかけがbotにされる様になります。こうすると、Intentで判定できなかったり、誤った返答をしてしまうケースが出てきます。これが頻発すると、愛され度も台無しです。ということで、回答をメンテナンスしていきます!Watson Assistant Slack Botでリモ トで働く社員を繋ぐ
メンテナンスをするメンテナンスをするAnalytics → User Conversationsで今まで話しかけられた内容に対して、どの様なIntentやEntityと判定したのか⾒ることができます。Watson Assistant Slack Botでリモ トで働く社員を繋ぐ
修正⽅法修正⽅法右側の鉛筆マークをクリックして正しいIntentやEntityを定義してあげましょう。ちなみに、どのIntentにも該当しなった場合は「Irrelevant」なります。必要に応じて、新しいIntentを⽤意してあげましょう。 修正後は、Saveをクリックしてください。これを繰り返すことで、どんどんと、Watson Assistantは学習を重ね、ユーザーが喜ぶ返事をどんどんと返すことができる様になります。Watson Assistant Slack Botでリモ トで働く社員を繋ぐ
答えられなかった時のリアクションも意外と⼤事答えられなかった時のリアクションも意外と⼤事ちなみに、ちょっと困った⾵の返事をしたりすると、(弊社では)喜ばれます。Watson Assistant Slack Botでリモ トで働く社員を繋ぐ
何にも該当しなかった場合の定義⽅法何にも該当しなかった場合の定義⽅法この様にするためには、 という判定を活⽤しましょう。これは、どれにも当てはまらなかったら、という意図です。何も定義しないと、IntentやEntityに該当しない質問が来た時に、botが黙った様に感じられてしまうので、判定とセットにして忘れずに定義しましょう。Watson Assistant Slack Botでリモ トで働く社員を繋ぐ
FAASを使って、外部とのやりとりをするFAASを使って、外部とのやりとりをする(例:天気予報)(例:天気予報)Watson Assistant Slack Botでリモ トで働く社員を繋ぐ
簡単な外部サービスとの連携簡単な外部サービスとの連携Watson Assistantは外部サービスとの連携も⾮常に簡単になりました。天気予報など、予め、返答を定義できない問いかけに対して、⾮常に有効です。また、この機能を使えばDBへ話しかけられた内容を保管する、なんてこともできちゃいます! 今回は、天気予報を例に書いていきます。アーキテクチャはこの様なイメージです。Watson Assistant Slack Botでリモ トで働く社員を繋ぐ
WEBHOOKSを設定するWEBHOOKSを設定するOptions→Webhooksを選択します。ここに呼び出すAPIのURLやAuthorizationヘッダ情報(IDやパスワード)を定義するだけです。Watson Assistant Slack Botでリモ トで働く社員を繋ぐ
定義したWEBHOOKをDIALOGから呼び出す定義したWEBHOOKをDIALOGから呼び出すDialogのNodeの右上の⻭⾞マークをクリックして、WebhooksをONにするWatson Assistant Slack Botでリモ トで働く社員を繋ぐ
下記の要領で定義をしていきます。APIに渡すパラメータを定義します。(今回は天気予報なので、Parameterにはlocationを設定しています。)Return variable(戻り値の名前)を設定します。Return variableがあった時の返事を定義します。今回は下記の様に定義しましたそうですね。。。今⽇の “@location”の天気は“$webhook_result.response.result.forecast”みたいですよ!を使って、呼び出しに失敗した時の定義をします。Watson Assistant Slack Botでリモ トで働く社員を繋ぐ
ダイアログの⾒た⽬Watson Assistant Slack Botでリモ トで働く社員を繋ぐ
こうすると、呼び出しに成功した時には以下の様な返答が返ってきます。良い感じですね。以前は、Webhookの呼び出しはJSONで定義しなければ⾏けなかったのですが、、、本当に簡単になりました。ちなみに、 で天気予報を取得するときは、IBM Cloud Functionsを利⽤しています。Watson Assistant Slack Botでリモ トで働く社員を繋ぐ
取得コードは下記の通りです。(Node.js)/**** main() 呼 出 実行** @param Cloud Functions 1 受 入** @return 出力 出力 JSON**/var request = require('request');var main = function(params){var options = {json:true,auth:{Watson Assistant Slack Botでリモ トで働く社員を繋ぐ
まとめまとめリモートワークをしていると、ちょっとした雑談相⼿が欲しい時ってありますよね。無駄に話しかけることができて、成⻑を感じられるSlackbotは、社内のコミュニケーションの⼿助けにもなりますし、何よりも機械学習に慣れる良い機会になります!IBM CloudはLite Planという永年無料のプランがあり、このプランでも⼗分にSlackbotは楽しめるので、ぜひ、トライしてみてくださいね!Watson Assistant Slack Botでリモ トで働く社員を繋ぐ
ありがとうございました!ありがとうございました!Watson Assistant Slack Botでリモ トで働く社員を繋ぐ