Edited at

Google I/O 2017 Dialogflow(旧:API.AI) のセッションのベーグル注文を日本風で試してみる #dialogflow

More than 1 year has passed since last update.


Google I/O 2017 API.AI セッション

Google I/O 2017 API.AIのセッションでベーグルを注文するデモが行われました。Google Assistant、Slackなどのチャットベースでベーグルを注文していきます。こちらのデモをそのまま紹介してもいいのですが、ベーグルではなくお寿司を注文するデモに変更したいと思います。一部日本語では対応できない機能もありますが、別の方法で対応してみたいと思います。

API.AIの紹介とデモはこちらで見れます。

Building Rich Cross-Platform Conversational UX with API.AI (Google I/O '17)


ベーグル注文の会話例

ユーザー「お腹が空いた」

Bot「私はベーグル注文システムです。どんなベーグルが食べたいですか?」

ユーザー「プレーンがいいです」

Bot「かしこまりました。一緒に飲み物はいかがでしょうか。」

ユーザー「もちろん、飲みたいです!」

Bot「かしこまりました。これからベーグルをお届けいたします。」


下準備



  • API.AIにサインアップorログイン


    • Googleアカウントを使用します。



  • Create new agentで新しいagentを作成


    • sushi-order-demoという名前にします。

    • 言語は日本語を選択します。

    • 入力が終わったらSaveを押します



Screen Shot 0029-05-26 at 14.41.10.png


Intentsの作成

Intents > Create Intentsで新しいIntentsを作成します。Intentsはユーザーのアクションにどう対応するかを定義する場所です。


  • Intents nameに「Sushi Order」と入れます

  • User saysに「お寿司が食べたい」と入れます

  • Text Responseに「へい、かしこまりました!」と入れます

  • 入力が終えたらSaveを押します。

Screen Shot 0029-05-26 at 15.02.48.png

Screen Shot 0029-05-26 at 15.07.01.png


#とりあえずテスト!

左のテキスト入力欄に「お寿司が食べたい」と入れてみましょう、すると「へい、かしこまりました!」と返答してくれます。 ※マイクを選択すれば音声入力もできます。

Screen Shot 0029-05-26 at 15.21.20.png


わさびの有無を尋ねる機能を追加しよう

さび有りかどうかを注文を確定する前に必ず決めてもらうようにします。


Entityの作成

Entitiesで新しいEntityを作成します。Entityは物事(時間や住所)などを特定するための辞書のようなものです。API.AIでは基本的な時間や住所はデフォルトで登録されています。今回は寿司の種類やさびの有無を特定するために使用したいと思います。

以下のようにサビの有無を登録します。

Screen Shot 0029-05-26 at 16.13.00.png

※わさびの有無のようにYes or Noで済むことはIntentsに[Add follow up intent]をすると簡単に作成できるのですが、まだ日本語では対応していないみたいです。。。


Intentsに追加

IntentsのSushi Orderに戻ります。User saysに「さび抜きでお願いします」と入力してください。するとActionの中にWasabiが追加されます。追加を確認したら以下の情報を追加します。

- Action nameに「order」

- REQUIREDにチェック

- PROMPTSに「さびはどうさないますか?」

Screen Shot 0029-05-26 at 15.59.02.png


#テスト

先ほどと同じように左のテキスト入力欄に「お寿司が食べたい」と入れてみましょう、すると今度は「さびはどうさないますか。」と聞かれます。

Screen Shot 0029-05-26 at 16.01.14.png

「さび抜きでと言ってみる。」

Screen Shot 0029-05-26 at 16.01.58.png


肝心の寿司の内容を決める機能を追加しよう


Entityの作成

新しいEntityに寿司のメニューを追加していきます。お好きなものを入れていきましょう。

Screen Shot 0029-05-26 at 16.06.23.png


Intentsに追加

先ほどと同じようにMenuのEntityも追加します。ここで気をつけたいことはREQUIREDだけではなく、IS LISTにもチェックを入れ複数に注文に対応できるようにします。


  • REQUIREDにチェック

  • IS LISTにチェック

  • PROMPTSに「何を食べたいですか?」

Screen Shot 0029-05-26 at 16.14.18.png


テスト

まぐろとサーモンをさび入りで注文してみます。


「お寿司が食べたい」

Screen Shot 0029-05-26 at 16.16.28.png


「さび有りで!」

Screen Shot 0029-05-26 at 16.17.00.png


「まぐろとサーモンをお願いします。」

Screen Shot 0029-05-26 at 16.17.17.png


Slackで試してみよう

api.aiではFacebookやSlackなどのメッセージングBotに簡単に対応できます。本当はGoogle Assistantで試したかったのですが、現在は日本語未対応なのでSlackで実行してみたいと思います。


IntegrationsのSlackをOnにしてください。

Screen Shot 0029-05-26 at 16.21.47.png


TEST IN SLACK を選択し好きなSlackに登録してください。

Screen Shot 0029-05-26 at 16.22.46.png

Screen Shot 0029-05-26 at 16.24.07.png


登録が終わるとBotが登録され簡単にテストができます。

Screen Shot 0029-05-26 at 16.32.05.png


おまけ

もし意図した反応が無かった時はトレーニングをすることで頭が良くなります。

例えば「寿司食べたい」に反応しなかったとします。

Screen Shot 0029-05-26 at 16.36.00.png

TrainingのWhat's the sound of a tieから「寿司食べたい」を選択します。

Screen Shot 0029-05-26 at 16.38.14.png

そしてClick to Assign から Sushi Orderを選択しAPPROVEを押します。

Screen Shot 0029-05-26 at 16.39.00.png

もう一度「寿司食べたい」と入れてみましょう。意図した返答があれば成功です!

Screen Shot 0029-05-26 at 16.45.20.png


ネクストチャレンジ

API.AIのイベントをCloud functionsで受け取りユーザーにテキストを返してみる


参考リンク


API.AIの記事