Slide 1

Slide 1 text

WATSON ASSISTANT×SLACK BOT WATSON ASSISTANT×SLACK BOT でリモートで働く社員を繋ぐ でリモートで働く社員を繋ぐ 

Slide 2

Slide 2 text

⾃⼰紹介 ⾃⼰紹介 エンジニアの幸せを⽬指すEC 特化型スタートアップ、 株式会社ジョーレンのエンジニア。 現在は新サービスの企画・営業や、EC-CUBE を利⽤したWeb アプリケーション開発に従事 しています。また、Watson の開発の容易さとAPI の充実ぶりに魅せられ、Watson とWeb ア プリを使った連携ツールを作ったりしてます。 2020 年 IBM Champion 。また、IBM Cloud User Group( 通称:BMXUG) 運営の⼀員です。 Watson Assistant Slack Bot でリモ トで働く社員を繋ぐ 

Slide 3

Slide 3 text

SLACKBOT も社員の⼀員! SLACKBOT も社員の⼀員! Watson Assistant Slack Bot でリモ トで働く社員を繋ぐ 

Slide 4

Slide 4 text

弊社で愛される SLACKBOT 弊社で愛される SLACKBOT 弊社には、社員に愛されるSlackbot がおります。その名も「加湿さん」! そもそもの由来 は、オフィス環境が乾かない様に、社員に定期的な加湿器への給⽔をリマインドするもの だったのですが、現在は社員の⼼も潤す存在に進化しています。 Watson Assistant Slack Bot でリモ トで働く社員を繋ぐ 

Slide 5

Slide 5 text

どれくらい愛でられているかというと、、、 どれくらい愛でられているかというと、、、 独⾝男性社員にナンパされてしまうくらいの⼈気ぶりですw Watson Assistant Slack Bot でリモ トで働く社員を繋ぐ 

Slide 6

Slide 6 text

もちろん もちろん ⼥性社員からも、それなりに好評の様です。 Watson Assistant Slack Bot でリモ トで働く社員を繋ぐ 

Slide 7

Slide 7 text

システム構成 システム構成 さて、このSlack 上での会話ですが、Watson Assistant を使って会話を成⽴させています。 システムのイメージとしてはこの様な感じです。 Watson Assistant Slack Bot でリモ トで働く社員を繋ぐ 

Slide 8

Slide 8 text

WATSON と SLACK の連携は WATSON と SLACK の連携は ノンコーディングでできる! ノンコーディングでできる! ⼀⾒、どうやってやるの? となりそうですが、連携⾃体はノンコーディングでOK です。 IBM DA の⼾倉さんが、 で紹介しているので参考にしてみてください。 今回は、Slack とWatson Assistant が連携している前提で、このbot の育て⽅をご紹介しま す。 【Watson×Slack 】Watson Assistant を連携させたSlack bot を開発する ⽅法 ( ノンコーディング編) Watson Assistant Slack Bot でリモ トで働く社員を繋ぐ 

Slide 9

Slide 9 text

⼿始めの⼀般会話ができるまで ⼿始めの⼀般会話ができるまで Watson Assistant Slack Bot でリモ トで働く社員を繋ぐ 

Slide 10

Slide 10 text

CONTENT CATALOG を使って⼀般会話の CONTENT CATALOG を使って⼀般会話の 意図を理解できる様にする。 意図を理解できる様にする。 Watson Assistant を起動して、該当のbot を開き、Content Catalog を選択します。ここで は、「よくある⼀般的なトピック」として⼀般を選択(Add to Skill) します。 Watson Assistant Slack Bot でリモ トで働く社員を繋ぐ 

Slide 11

Slide 11 text

カタログを選ぶとこうなります。 カタログを選ぶとこうなります。 挨拶や、あなたは誰?というIntent が⾊々と登録されています。 Watson Assistant Slack Bot でリモ トで働く社員を繋ぐ 

Slide 12

Slide 12 text

DIALOG で応答を定義する DIALOG で応答を定義する 上記で定義されたIntent に対して、どの様な返答を返すかはあなた次第です。愛されそう な返事を定義しましょう。 Dialog を選択して、Add to Node を押します。 Watson Assistant Slack Bot でリモ トで働く社員を繋ぐ 

Slide 13

Slide 13 text

回答の定義の仕⽅ 回答の定義の仕⽅ Watson Assistant Slack Bot でリモ トで働く社員を繋ぐ 

Slide 14

Slide 14 text

ここでは、「こんにちは」など、挨拶がされたときの返事を定義しています。 Watson Assistant Slack Bot でリモ トで働く社員を繋ぐ 

Slide 15

Slide 15 text

簡単に会話が定義できます! 簡単に会話が定義できます! これだけで、挨拶されたら挨拶を返すbot の完成です。同じ要領で、既にContent Catalog で取り込んだIntent への返事を定義していきましょう。 Watson Assistant Slack Bot でリモ トで働く社員を繋ぐ 

Slide 16

Slide 16 text

ユーザーの⽬的を汲み取って ユーザーの⽬的を汲み取って 返事をしてみる 返事をしてみる Watson Assistant Slack Bot でリモ トで働く社員を繋ぐ 

Slide 17

Slide 17 text

「〜をしたよ!だから、褒めて欲しい」という 「〜をしたよ!だから、褒めて欲しい」という 要求に答える (ENTITY を使う ) 要求に答える (ENTITY を使う ) ある程度、Intent を使ったやりとりができてきたそんなある⽇、とある社員が「掃除をし たよ!( だから褒めて) 」とbot に要求してきました。 この場合、通り⼀辺倒な褒め⾔葉で は「愛されるbot 」にはなれません。「掃除をしたこと」に対する「褒め」を⽤意しまし ょう。イメージとしては、こんな感じです。 Watson Assistant Slack Bot でリモ トで働く社員を繋ぐ 

Slide 18

Slide 18 text

ENTITY を使おう ENTITY を使おう さて、この様に「〜を」というユーザーの「⽬的語」( この場合は掃除) を捉えるために、 Watson Assistant にはEntity という概念があります。 Watson Assistant Slack Bot でリモ トで働く社員を繋ぐ 

Slide 19

Slide 19 text

ENTITY を定義する ENTITY を定義する Entity → My entities から Create entity を押して Entity の定義をします。 Watson Assistant Slack Bot でリモ トで働く社員を繋ぐ 

Slide 20

Slide 20 text

登録内容は⾄って簡単で、今回の「掃除」がキーワードであれば、それを表しそうな⾔葉 を⼊れていきましょう。 Watson Assistant Slack Bot でリモ トで働く社員を繋ぐ 

Slide 21

Slide 21 text

ENTITY を踏まえて DIALOG で返答を定義する ENTITY を踏まえて DIALOG で返答を定義する これは少し、コツが必要です。 「褒めて欲しい」という意図をまずは判定する。 「褒めて欲しい」という意図をまずは判定する。 まずは、「褒めて欲しい」という意図(Inent) を判定します。ただ、この時点では「何に対 して」という情報が不⾜しているため、回答が確定できません。この場合は、回答を定義 せずに、次の処理(Skip User Input and evaluate child nodes) とします。 Watson Assistant Slack Bot でリモ トで働く社員を繋ぐ 

Slide 22

Slide 22 text

下記の様なイメージですね。 Watson Assistant Slack Bot でリモ トで働く社員を繋ぐ 

Slide 23

Slide 23 text

Watson Assistant Slack Bot でリモ トで働く社員を繋ぐ 

Slide 24

Slide 24 text

CHILD NODE で ENTITY を判定して適切な答えを返す CHILD NODE で ENTITY を判定して適切な答えを返す 上記のNode を選択した状態で、Add Child Node を押します。 Watson Assistant Slack Bot でリモ トで働く社員を繋ぐ 

Slide 25

Slide 25 text

ここでは、既に「褒めて欲しい」というIntent は判定済みですので、Entity だけを判定しま す。この様なイメージです。 Watson Assistant Slack Bot でリモ トで働く社員を繋ぐ 

Slide 26

Slide 26 text

Watson Assistant Slack Bot でリモ トで働く社員を繋ぐ 

Slide 27

Slide 27 text

これで、ユーザが褒めて欲しい対象によって、 これで、ユーザが褒めて欲しい対象によって、 返答を切り替えることができる様になりました。 返答を切り替えることができる様になりました。 Watson Assistant Slack Bot でリモ トで働く社員を繋ぐ 

Slide 28

Slide 28 text

答えられなかった質問を 答えられなかった質問を 教育する。 教育する。 Watson Assistant Slack Bot でリモ トで働く社員を繋ぐ 

Slide 29

Slide 29 text

INTENT や ENTITY の判定を調整する。 INTENT や ENTITY の判定を調整する。 愛されてくる様になると、本当に様々なタチの悪い呼びかけがbot にされる様になりま す。こうすると、Intent で判定できなかったり、誤った返答をしてしまうケースが出てき ます。これが頻発すると、愛され度も台無しです。 ということで、回答をメンテナンスしていきます! Watson Assistant Slack Bot でリモ トで働く社員を繋ぐ 

Slide 30

Slide 30 text

メンテナンスをする メンテナンスをする Analytics → User Conversations で今まで話しかけられた内容に対して、どの様なIntent や Entity と判定したのか⾒ることができます。 Watson Assistant Slack Bot でリモ トで働く社員を繋ぐ 

Slide 31

Slide 31 text

修正⽅法 修正⽅法 右側の鉛筆マークをクリックして正しいIntent やEntity を定義してあげましょう。ちなみ に、どのIntent にも該当しなった場合は「Irrelevant 」なります。必要に応じて、新しい Intent を⽤意してあげましょう。 修正後は、Save をクリックしてください。 これを繰り返すことで、どんどんと、Watson Assistant は学習を重ね、ユーザーが喜ぶ返 事をどんどんと返すことができる様になります。 Watson Assistant Slack Bot でリモ トで働く社員を繋ぐ 

Slide 32

Slide 32 text

答えられなかった時のリアクションも意外と⼤事 答えられなかった時のリアクションも意外と⼤事 ちなみに、ちょっと困った⾵の返事をしたりすると、( 弊社では) 喜ばれます。 Watson Assistant Slack Bot でリモ トで働く社員を繋ぐ 

Slide 33

Slide 33 text

何にも該当しなかった場合の定義⽅法 何にも該当しなかった場合の定義⽅法 この様にするためには、 という判定を活⽤しましょう。これは、どれにも 当てはまらなかったら、という意図です。何も定義しないと、Intent やEntity に該当しない 質問が来た時に、bot が黙った様に感じられてしまうので、判定とセットにして忘れずに 定義しましょう。 Watson Assistant Slack Bot でリモ トで働く社員を繋ぐ 

Slide 34

Slide 34 text

FAAS を使って、外部とのやりとりをする FAAS を使って、外部とのやりとりをする ( 例:天気予報 ) ( 例:天気予報 ) Watson Assistant Slack Bot でリモ トで働く社員を繋ぐ 

Slide 35

Slide 35 text

簡単な外部サービスとの連携 簡単な外部サービスとの連携 Watson Assistant は外部サービスとの連携も⾮常に簡単になりました。天気予報など、予 め、返答を定義できない問いかけに対して、⾮常に有効です。また、この機能を使えば DB へ話しかけられた内容を保管する、なんてこともできちゃいます! 今回は、天気予報 を例に書いていきます。アーキテクチャはこの様なイメージです。 Watson Assistant Slack Bot でリモ トで働く社員を繋ぐ 

Slide 36

Slide 36 text

WEBHOOKS を設定する WEBHOOKS を設定する Options→Webhooks を選択します。ここに呼び出すAPI のURL やAuthorization ヘッダ情報(ID やパスワード) を定義するだけです。 Watson Assistant Slack Bot でリモ トで働く社員を繋ぐ 

Slide 37

Slide 37 text

定義した WEBHOOK を DIALOG から呼び出す 定義した WEBHOOK を DIALOG から呼び出す Dialog のNode の右上の⻭⾞マークをクリックして、Webhooks をON にする Watson Assistant Slack Bot でリモ トで働く社員を繋ぐ 

Slide 38

Slide 38 text

下記の要領で定義をしていきます。 API に渡すパラメータを定義します。( 今回は天気予報なので、 Parameter にはlocation を設定しています。) Return variable( 戻り値の名前) を設定します。 Return variable があった時の返事を定義します。今回は下記の様に定義 しました そうですね。。。今⽇の “@location” の天気は “$webhook_result.response.result.forecast” みたいですよ! を使って、呼び出しに失敗した時の定義をします。 Watson Assistant Slack Bot でリモ トで働く社員を繋ぐ 

Slide 39

Slide 39 text

ダイアログの⾒た⽬ Watson Assistant Slack Bot でリモ トで働く社員を繋ぐ 

Slide 40

Slide 40 text

こうすると、呼び出しに成功した時には以下の様な返答が返ってきます。 良い感じですね。以前は、Webhook の呼び出しはJSON で定義しなければ⾏けなかったの ですが、、、本当に簡単になりました。 ちなみに、 で天気予報を取得するときは、IBM Cloud Functions を 利⽤しています。 Watson Assistant Slack Bot でリモ トで働く社員を繋ぐ 

Slide 41

Slide 41 text

取得コードは下記の通りです。(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 でリモ トで働く社員を繋ぐ 

Slide 42

Slide 42 text

まとめ まとめ リモートワークをしていると、ちょっとした雑談相⼿が欲しい時ってありますよね。 無駄に話しかけることができて、成⻑を感じられるSlackbot は、社内のコミュニケーショ ンの⼿助けにもなりますし、何よりも機械学習に慣れる良い機会になります! IBM Cloud はLite Plan という永年無料のプランがあり、このプランでも⼗分にSlackbot は楽 しめるので、ぜひ、トライしてみてくださいね! Watson Assistant Slack Bot でリモ トで働く社員を繋ぐ 

Slide 43

Slide 43 text

ありがとうございました! ありがとうございました! Watson Assistant Slack Bot でリモ トで働く社員を繋ぐ   