(第二回)Amazon Lexを使ってチャットボットを作成する~slotの設定~

(第二回)Amazon Lexを使ってチャットボットを作成する~slotの設定~

目次

前回のおさらい
Slotとは?
自動で生成されたスロットを見てみよう
スロットを設定する
次回予告

前回のおさらい

前回はまずチャットボットの立ち上げと、簡単な応答、最後にチャットボットに日本語での応答をさせるところまで行いました。Aという応答にBという返答を返してもらうにはSlotというものが肝になるようだな、ということが見えたところで終わってしまったので、今回はこのSlotの部分をじっくり見ていきたいと思います。牛歩のごとき進捗ですが今回もお付き合いください。

Slotとは?

まずは公式のドキュメントから説明を抜粋します。
Slotとは「スロット –インテントには、0個以上のスロットまたはパラメーターが必要な場合があります。インテント構成の一部としてスロットを追加します。実行時に、Amazon Lexはユーザーに特定のスロット値を要求します。ユーザーは、Amazon Lexがインテントを実行する前に、必要なすべてのスロットに値を提供する必要があります。」

やはり公式のドキュメントは日本語に自動で翻訳されたものなので、なかなか意味が頭に入ってきません。
様々なサイトを参考にさせてもらい、自分なりの解釈になりますが言葉を説明させていただきます。
まず、前提条件として、ボットにはインテント(日本語では意図という意味)が必要です。インテントは、ボットの中に1つ以上必要で、例えばピザとコーラの注文に必要なボットであれば、ピザを注文するインテントとコーラを注文するインテントが必要です。

スロットは、インテントに必要な情報の種類と値の組み合わせのような考え方。例えば、ピザを注文するインテントに必要な、ピザのサイズ、ピザの数といった情報を指します。情報の種類と値の組み合わせとなり、例えばpizza count : 1 やpizza size :largeといったように定義します。

自動で生成されたスロットを見てみよう

自動で生成されたスロットがこの3つです。
試しに、前回と同様にI would like to order some flowersと話してみます。

What type of flowers would you like to order ?と帰ってきました。花の種類のスロットを花を注文するというインテントがユーザに対して求めてきているということです。

知っている花の英語の名前がバラしかなかったのでとりあえずRoseと回答

すると別のスロットがいくつピックアップするかを要求してきます。
ここでスロットを見ると、FlowerType、PickupDateとどんどん情報が蓄積されていることが分かります。

今日ピックアップするよ!と回答するとPickupTimeのスロットが発火します。

今すぐに、と回答すると、インテントの要求する情報が全て集まり。インテントが達成された旨のメッセージが流れました。

スロットを設定してみよう

他のスロットに倣って自分でもスロットを追加してみます。やっと「作っている」感覚になってきました。初期のスロットの例を見ると{}で引き数が渡せるようなので、FlowerCountというものを作って、「How many the {引き数} do you want?」としました。
前回の記事で日本語でもできますよ、といったのですが、既にテンプレで入っているのが全て英語なので、今回追加するものも英語で追加していきます。

ちゃんとHow many the rose do you want?を聞いてくれて、数を答えれば先へ進めました。下の例でいうと全角の3は数字には認識されませんでした。


もう一つ作ってみます。「そのお花は誰にあげるの?」としてみました。

「だれにあげるの?」「あなたにですよ」といいましたが無視されました。ボットがキザな奴が嫌いな訳ではなく、これは上記のようにタイプにLastnameを指定しているのでLastnameに当てはまるものしか受け付けてくれませんでした。田中さんなら通りました。

次回予告

今回はやっとスロットを設定して対話の幅が広がってきました。画面上にはそのほかにも様々な設定値が見えています。次回はResponseという設定を使って。さらに幅を持たせたいと思います。