「クラウド研究会」が 9月20日(木)に活動した内容についてお伝えします。

 

今回の活動では、クラウドサービスを活用したチャットボット「ノーツの達人」を作りました。

「ノーツの達人」にノーツの機能や問題について問いかけると、回答として適切な Notes 文書(へのリンク)を教えてくれる、というものです。

 

エンドユーザーがチャットの操作を行うのは IBM Watson Workspace に追加した「スペース」です。

 

IBM Watson Workspace は Slack のようなメッセージングサービスで、Webブラウザの他、PC向けのアプリとスマートフォン向けアプリが用意されています。

「スペース」と呼ばれる部屋を作りメンバーを追加したりすることで、その中でチャットやビデオ・ミーティングによるコミュニケーションが可能です。※本ブログのタイトルにある「ノーツの達人」とは、筆者が作成した「スペース」に付けた名前です。

 

 

IBM Watson Workspace の機能を拡張する「アプリ」を作成するための API 群が IBM Watson Work Services として公開されています。

IBM Watson Workspace と IBM Watson Work Services は IBM ID を登録することで、誰でも利用できます。

ここでは無料版を使っています。無料版でもスペースの追加とアプリの作成はできますのでご心配なく。

 

IBM Watson Workspace から IBM Watson Work Services へアクセスするには、画面左下の歯車アイコンから Developers をクリックします。

 

ここで作成する「アプリ」とは「チャットへ入力された文字を送信」して、「受信したものをチャットに表示」するものです。

 

IBM Watson Work Services に Log In したら、画面右上にある Your Apps から Create new app をクリックしてアプリを作成します。

 

アプリを作成した時に表示される App ID と App secret を忘れずに控えます。これで他のサービスから受信したものをチャットに表示できます。

 

他のサービスへ送信することができるように、追加したアプリの Listen to Events から outbound webhook を追加します。

 

webhook では、送信先の受け口を Webhook URL  に指定します。

このURL には、Node-RED のフロー画面を開いている時に表示される "https://" の後から "mybluemix.net" までの文字列の右側に "/NotesExpertHook" を追加した文字列を指定しました。"/NotesExpertHook" の文字列は、この後 Node-RED のノード「webhook」で指定します。また Events では message-created のみチェックを付けました。そうして保存すると Webhook secret が表示されるので、これも忘れずに控えます。

 

アプリを作成したら IBM Watson Workspace に戻り、作成したスペース名の右に表示されれた歯車アイコン Space settings をクリックして Apps からアプリを追加します。

 

アプリは、チャットへ入力した文字(質問文)を Node-RED へ送信します。※Node-RED については以前の投稿を参照ください

下は、処理の流れを作る Node-RED のフローです。

(前回と同様に)今回も限られた時間で完了させるため、ほぼ完成されたフローを提供していただきました。※フローはテキストから読み込むことが可能

なお、IBM Watson Work Services と連携するためのノード群 node-red-contrib-wws がありますので、今回これを追加しました。

フローでは node-red-contrib-wws の中にある2つのノード「webhook ①」と「sendMessage ⑦」を使います。そしてこれらのノードの設定には、控えておいた App ID、App Secret、Webhook secret が必要です。

 

では、フローを順に見ていきます。

 

「webhook ①」は IBM Watson Workspace から送信された質問文を受けて次のノードへ渡します。

 

「switch ②」では、質問文に「質問」という文字が無ければそこで終了し、有れば Watson NLC (Natural Language Classifier) へ質問文を渡します。※ Watson NLC を含むノード群は以前の活動で追加していました

Watson NLC は、自然言語のテキストを渡すと、あらかじめ学習させておいた内容に近いもののカテゴリを、確度が高い順に並べて返してくれるサービスです。Watson NLC は残念ながら無償のライトアカウントでは利用できません

 

 

今回は Notes のQA集のような Notes データベースと、そこに登録されたデータを使って学習(トレーニング)が済んでいる Watson NLC の環境を準備してくださっていました。感謝感謝。

 

学習した内容が登録されている Notes データベースを見せていただきました。

 

Notes データベースで1つの文書を見ると、分類のキーワードとしての3つの「カテゴリ」と、本文があります。

 

これらの3つのカテゴリごとにトレーニングしているとのこと。つまり1文書あたり3回の学習(トレーニング)を行った、ということのようです。このようにして確度を上げるための工夫をしているのでしょう。

 

話をもとに戻します。

 

今回 Watson NLC にはカテゴリごとに学習した Classifier があります(③)。ですので質問文を3つの Classifier へ渡しています。するとそれぞれの Classifier から分類の結果が確度の高い順に戻ります。

 

3つの Classifier のすべてから最も確度が高いキーワードをピックアップできたら、3つのキーワードを and で繋げた文字列を作ります(④)。学習データが登録されている Domino サーバーと Notes データベースには DAS (Domino Access Services) の設定が済んでいますので、REST でのリクエストが可能です。その文字列を使いビューを検索するため、http request ノードを使い、検索リクエストを送信します(⑤)。

 

検索にヒットした結果から、上位2つの文書の情報(件名、タイトル、3つのカテゴリ)とリンクを作成します(⑥)。それらを sendMessage ノードを使い IBM Watson Workspace へ送信します(⑦)。

 

以上のフローが正しく処理できると IBM Watson Work Services のアプリがそれを受け取り、IBM Watson Workspace のスペースへ表示します。

 

下は、完成した「ノーツの達人」に投稿した質問と、その結果が返ってきたときのスクリーンショットです。

 

 

私は今回初めて IBM Watson Work Services を使いました。

最初は慣れないメニューに戸惑いそうでしたが、ここで行ったことは Watson Workspace のスペースと外部サービスの出入り口を作ることだけでしたし、わかりやすい説明がありほとんど迷うことはありませんでした。

 

Node-RED では、Watson Workspace と Watson NLC を利用するためのノードが用意されていました。ノードを追加すればほぼコーディングなしでサービスを利用できるのですから素晴らしいですね。

 

今回は 2 つのクラウドサービスと Domino サーバーの間を取り持つ Node-RED のフローを提供していただきました。その中にあるノードをひとつひとつ見ていくと、クラウド研究会の活動に参加して Node-RED に慣れてきたからか、理解できていることを実感できました。この成果を新たなサービスの開発に繋げたいと思いました。