IBM Watson ConversationはチャットボットのようなUIサービスを簡単に作成できるサービスです。
サービス内容も興味深いのですが、実は、プログラミング環境としても面白いものです。また変更がすぐにチャットに反映されわかりやすいので、実はプログラミング初心者にも良い入門教材かもしれません。
私も初心者ですが、情報を整理してまとめつつ学んでいきますので、一緒に慣れていきましょう。まず第一回は環境のセットアップとDialog の理解から始めます。
Conversationサービスの作成と利用
IBM Watson Conversationの利用には、Bluemixアカウントが必要です。お持ちでない方は無料アカウントを作成してください。
Bluemixのカタログで「Watson」カテゴリにある「Conversation」をクリックします。
サービス名を入力し「作成」でConversationサービスが作成されます。
作成されたサービスの「管理」メニューにある「Lunch tool」アイコンからIBM Watson Conversationツールを起動します。
ワークスペースの新規作成
IBM Watson Conversationツールが起動したら上部にある「Create」ボタンでワークスペースを新規作成します。
ワークスペース名を入力して「Create」ボタンでワークスペースが新規作成されます。
Dialogの新規作成
新規作成したワークスペースをクリックして開き、Dialog のタブを選択すると以下のように表示されます。
ここの文章は翻訳されていないので、簡単に訳しておきます。
Dialog がまだ作成されていません
Dialog は intents(意図)、entities(要素,エンティティ)、あなたのアプリケーションからのcontext(文脈)を使用して、それぞれのユーザーの入力にresponse(応答)を返します。あなたのユーザーが何を入力すれば、あなたのbot(ボット,自動応答プログラム)がどのように返答するのか、Dialogを作成して定義してください。
「Create」で新しい Dialog の作成を開始すると、以下の画面になります。
初期状態の確認
Dialog は空ではなく、既に2つのノードが定義されていますね。作業を始める前に、この2つのノードを確認しておきましょう。
ようこそ(welcome)ノード
Dialog も他の多くの開発環境と同様に、処理は上から下に、そして左から右へと流れていきます。なので会話が開始されると、最初に実行されるノードはいちばん上にある「ようこそ」と表示されたノードになります。
ノードをクリックしてノードの詳細画面を表示してみます。
condition(実行条件)
最初のセクションは「If bot recognizes:」で、これはノードの前提条件を設定するところです。
上にある赤枠、"welcome" をみてみましょう。これがこのノードのconditionで、このノードの実行条件を設定しています。ここに記載された条件が成立していればこのノードは実行されますし、条件が成立していなければノードはスキップされます。
condition(実行条件)とは何でしょう?より理解を深めるため、右側にある+アイコンをクリックしてみます。
+アイコンで追加の入力欄が表示されますが、その下に簡単なヘルプもあります。welcome についても記載がありますので、全体を訳しておきましょう。
以下による選択:
# intents (意図)
@ entities (要素,エンティティ)
$ context variables (文脈における変数)
共通の条件:
welcome システムによって会話が開始された時に条件が成立する
anything_else 利用者の入力が全く条件にあわなかった時に成立する
"welcome" が指定されたこのノードの実行条件は「会話が開始した時」のようです。
respond(実行内容)
そして条件が成立した時、実行される内容が二番目の「Then respond with:」のセクションで定義されています。
今回は「いらっしゃいませ。ご用件を入力してください。」という文が指定されていますので、これがそのまま利用者に表示されます。
右側にあるアイコンから「Open JSON editor」を選択すると、実行内容の定義が JSON 形式で編集できます。より高度な処理を記載したい場合に利用する、感じでしょうか。
finally(実行後の対応)
最後のセクション「And finally」は、ノードの実行後にどうするか、を設定するところです。
選択肢はシンプルで、以下の2つしかありません。
今回、選択されている "Wait for user input" は、そのままの意味で「利用者の入力を待つ」ことを示しています。
それに対して "Jump to..." は、他のノードへの移動を指定します。これはもう少し先で説明します。
その他(anything_else)ノード
では、もうひとつ定義されているノードに移動しましょう。さきほどのノードと違うところを中心に見ていきます。
condition(実行条件)
condition(実行条件)は "anything_else" が指定されており、これは先ほどのヘルプにありましたね。「利用者の入力が全く条件にあわなかった時に成立する」でした。
最後にこの "anything_else" ノードがあるのは、Dialog 定義では必須のことのようです。
respond(実行内容)
respond(実行内容)ですが、今回は文章が二種類登録されているのが注目点です。複数の返答文が登録されている場合、これらのなかのひとつが選択され、ユーザーに表示されるようです。
複数の返答がある場合、その下にその選択条件が示されています。このノードでは "sequential(連続的な)" つまり用意された文書を順に選択して表示してくれるようです。
これは "random(無作為の)" に変更することができ、この場合は順番ではなく、ランダム(無作為)に返答が選ばれるようです。ただ無作為でも、同じ返答が連続することはないそうです。
finally(実行後の対応)
このセクションは同じ "Wait for user input" なので説明を省略します。
会話の実行例
さて、この初期状態のままで、まず会話を試してみましょう。右上のチャットアイコンをクリックします。
チャット用の領域(Try it out)が表示されますが、ここで左側に注目です。会話を実行していくなかで、現在、選択されているノードがわかるようになっています。
いまこの状態は最初の「ようこそ」ノードのfinallyで指定された "Wait for user input" で入力待ちしている状態ですね。
では、適当に何か入力してみましょう。処理が先に進みます。
特に他の処理もないので、anything_else 条件が成立し、最後の「その他」ノードの実行になりました。"sequential"の設定どおり、最初の返答文が表示されています。
そして finallyで指定された "Wait for user input" でまたもや入力待ちをしています。
では、また適当に何か入力してみましょう。処理が先に進みます。といってもこの先に処理は無いので、最初(一番上)に戻ります。
処理が進みました… が、また「その他」ノードに戻ってきていますね。これはどうしてでしょうか?
勘の良い方は予想通り!だと思いますが、私は最初、ここで驚かされました… 処理は最初に戻ったのに、「ようこそ」ノードではなく、「その他」ノードにまた戻っているのはどうして?かと。
これ、実はconditionによる結果なんですね。処理は確かに最初に戻り、一番上にある「ようこそ」ノードから実行されそうになりました。しかし「ようこそ」ノードのconditionは "welcome" でした。これは会話の最初にしか成立しない条件なのです。
つまり処理は最初に戻ったのですが、「ようこそ」ノードは条件があわずスキップされたわけです。だから二番目の「その他」ノードが実行の対象になったのです。
というわけで実行された「その他」ノードですが、二度目の実行なので "sequential"の設定どおり、二番目の返答文が表示されています。
そして finallyで指定された "Wait for user input" でまたもや入力待ちになります。
以降は同じ流れで、入力するたびに「その他」ノードの返答文が順に表示されていくだけ、になります。
これで初期ノード2つをだいたい理解できましたね。
まとめ
以上、今回は Dialog の初期ノード2つの説明だけで終わってしまいました。
しかしノードの3つの構成要素、condition(実行条件)、respond(実行内容)、finally(実行後の対応)は説明できましたし、実行の様子を観察する方法も紹介できました。スタート地点としては必要十分でないかとおもいます。
次回 からはDialogの実際の設定をいろいろ試していきましょう!