技術ブログ
技術ブログ
2018年11月02日
このエントリーをはてなブックマークに追加

Watson AssistantのContextを使って情報を記憶する!

本記事はWatsonシリーズ3回目になります。
過去記事はリンクを参照ください。

  1. Watson Assistantことはじめ
  2. Watson AssistantとSlack連携 
  3. Watson AssistantのContextを使って情報を記憶する!←今ここ

はじめに

皆さんこんにちは。 日商エレクトロニクスの北川です。
Watsonライフ楽しんでいますか?触ったことが無い方は是非、上のリンクを参考にWatsonを触ってみてください!

さて前回までで、WatsonとSlackを使っての簡単なチャットボットの作成が出来るようになったと思います。
そこで新しく問題になるのが、話している内容の記憶では無いでしょうか?
前回作成したWatsonとの会話は基本的に下記のような流れです。

しかし、これでは直前の情報以外はWatsonが保持できません。

 

(画像参照元)
https://www.ibm.com/developerworks/jp/cognitive/library/cc-watson-chatbot-conversation/index.html

この問題を解決し、ユーザから得た情報を保持するための領域が今回ご紹介する「context」です。
プログラムでいうと変数ですね。
Foodなどの変数(context)を用意して、Food = 和食 とすることで、後の会話でFoodを呼び出せるようになります。
説明するよりも、一度使ってみたほうが早いので、早速contextを使ってみましょう!

Watson AssistantでContextを使う

今回作るもの

今回はご飯の種類と食べに行きたい人数を聞いてそれを記憶して話すことが出来るボットを作りましょう!
これが出来てやっと普通のチャットボットと言えるのではないでしょうか!?

Contextを使ったチャットボットを作る

 

Workspaceの作成

とりあえずワークスペースを作成します。
ワークスペースやIntent、Entityなどの作り方は飛ばしながら説明しますので、
わからない方は第1回を参照しながら作ってみてください。
名前は適当につけます。

 

ご飯要求受け付けを実装

ユーザからのご飯要求に対応するIntentを作成します。

Dialogでご飯受け付けのnodeを作成します。

 

contextの作成

ここで今回の主役の登場です。
赤枠の部分をクリックしてcontext editorを開いてください。

そこで、食べ物のジャンルと人数用のcontextを作成します。

これでcontextの箱が出来ました!

では次からそれぞれの箱に情報を入れていきましょう!

 

食ジャンル受け付けを実装

Entityで食事の種類を作成します。

 

Dialogでご飯要求の子nodeを作成します。
ここで食ジャンルの受け付けとcontextへの代入を行います。

プログラミングしたことある人ならピンとくると思いますが、
Then set contextでFoodGenreの箱に「食事の種類」の値を代入しています。
洋食が食べたいとユーザが言っていたらFoodGenreには洋食が代入されるわけですね。
contextの値は <?$FoodGenre?> で呼び出せます。

ピンとこない人は一度「Try it out」で動かしてみてください。直ぐに理解できると思います。

 

人数の受け付けの実装

4人などの人数が入力された際に受け付けます。
まずはIntentで人数を示すIntentを登録します。

次にEntityで数字の受け付けを行います。
いつもはMyEntityからEntityを作っていますが、今回はWatsonが事前に持っているEntityを使います。
このようにWatsonが事前に持っているものは非常に柔軟性があるので、一度確認してみることをおすすめします。

それでは、Dialogにて食ジャンル受け付けnodeの更に子nodeとして、
人数確認nodeを追加します。
このnodeは人数のIntentと数のEntityを含むテキストが来たときに反応します。
5人とかですね。数字だけだと反応しません。

ここで人数のcontextに数を代入し、出力として先程保存した食ジャンルと一緒に出力します。

 

実際に動かしてみる

ではテストしてみましょう。
Try it outからチャットを打っていきます。

 

 

はい!うまく情報の保持と出力が出来ましたね!
また右上のManage Contextから現在のcontextの内容が確認できます。

まとめ

情報を保持出来るチャットボットを作ることが出来ました。
予約や検索などのチャットボットを作る際は、日時や場所など複数の情報を覚えていき、
最終的にその情報をまとめて1つのアウトプットを導き出す必要があります。

シナリオは多種多様ありますが、その土台となる動きは今回の応用で作っていくことが出来るのではないかと思います。
ぜひともいろいろなシナリオを作ってみてください!

次回予告

contextを利用することで、特定の情報を抽出し保存できるようになりました。
これで何が出来るようになったかというと。。。
REST APIのKeyにValueとしてcontextを渡すことが出来るようになったんですよ!!
それでは次回はWatson AssistantとREST API連携をお見せできればと思います!!

このエントリーをはてなブックマークに追加

この記事を書いた人

KitagawaYusuke

PROプランのすべての機能を
30日間無料でお試し

新規無料登録いただくとPROプランのすべての機能を
30日間無料でお試しいただけます。
クレジットカードなど決済情報の登録は不要です。

各プランの詳細はこちらからご確認ください。