Dialogflowを使ったAIアシスタントアプリのプロトタイピング

この記事は Goodpatch Advent Calendar 2017 – Qiita 8日目の記事です。
昨日は @enpipiさん、明日は @koyachiさんの予定です。

僕は普段、Prottと呼ばれるプロトタイピングツールの開発に携わっていて、今年はチーム内でデザインスプリントユーザーテストも経験することができました。
そんな経験を生かして、最近流行りのAIアシスタントをプロトタイピングできる環境を作ってみました。

今回は、このブログでも以前とりあげた
Dialogflow(旧API.AI)を使って、AIアシスタントアプリをプロトタイピングしてみます。

DialogflowでAgentを作成する

DialogflowはGoogleアカウントでサインアップすることができます。
アカウントを作ったらさっそく始めましょう。

Agentの作成

まずはDialogflowでAgentを作成しましょう。
AgentとはDialogflowで作ることが出来る自然言語処理のモジュールです。

Default languageをJapaneseに設定しました。

作成に成功すると、 Default Welcome Intent が作成されます。
このIntentを選択して、User saysに何かキーワードを入れて保存してみましょう。

この状態で、画面右上の Try it nowに試しになにか文字を入れてみると・・・

認識してくれましたね!!

Welcome Intentは、Agentが起動された時に最初に応答するIntentです。
このタイミングで、対応する機能の説明を出力して次に自分で作成するIntentへ繋げるのが一般的な流れのようです。
もちろん、Welcome Intentをスキップして応答することもできます。

Intentを作る

さて、いよいよここからが本番です。
あなたの試したいアイデアをIntentで表現してみましょう。

簡単なプロトタイプであれば、特定のキーワードに対して固定のメッセージを応答するだけで作れてしまいます。
難しく考えなくても、プロトタイピングは検証するユーザーに実際に使っている場面を想起してもらえればいいんです。
(「オズの魔法使い」テストのように実装を前提としない手法も存在します。)

例えばこんな感じ。

Dialogflowは入力メッセージを学習して、Intentと紐付けることができるので、定義していない類似のメッセージであっても応答を返してくれます。
手間をかけなくても、テストしてもらうユーザーに自然な体験を提供できそうですね。

Androidアプリをさくっと作る

さて、Dialogflowの設定はひとまず置いておいて、今度は呼び出す側のアプリを作ります。

Dialogflowは、Google Assistantを始め、LINEやFacebook Messengerとのサービス連携に加えて、SDKを使ったアプリケーションへの組み込みにも対応しています。

Dialogflow SDKs

今回はAndroid SDKを使って簡単なAndroidアプリを作ります。
(自分にとってAndroidで作るのが一番速そうだからです。)

というわけで数時間使って作成したアプリがこちらです。
ChatUIのライブラリを使って、AIエージェント風のアプリを作成しました。
ymegane/DialogflowSample | GitHub

このプロジェクトの gradle.propertiesに定義している、CLIENT_ACCESS_TOKENにトークンを設定します。

Dialogflowのコンソールに戻って、トークンを取得しましょう。

動かしてみる

CLIENT_ACCESS_TOKEN にトークンを設定したらビルドして実行します。

動いていますね・・・!
超かしこそうなAIアシスタント(のプロトタイプ)があっという間に作れてしまいました。

おわりに

冒頭に挙げたデザインスプリントでは短い時間(1日とか)でプロトタイプを作ってユーザーインタビューを実施するという事もあります。
そんな時に、時間をかけずに出来るだけ実際に使っている場面を想像させることができるこのような手法は役に立つことがあるやもしれません。

今回は、Dialogflowの最も基本的な機能だけを使いましたが、EntityやWebhookを使えば、実際に使ってもらえる高度なサービスを作ることも可能です。
もうちょっと使いこなしていきたいですね。

ポエム

2017年はGoogle HomeやAmazon Alexa、LINEのClovaなど、AIアシスタントを搭載したスマートスピーカーと呼ばれる製品が日本に投入された年でした。

現状は、文脈の理解に限界があることや、利用できる機能を使う側が事前に把握しておく必要がある点など、一般の方がイメージするAIアシスタント(アイアンマンのJarvisみたいな)になるには、まだまだ越えるべきハードルが様々存在する分野だと思っています。

ただ、今の製品でも一旦使える環境を作ってしまえばかなり便利に使えることは確かです。
先日はかなりの安価でGoogle Homeが売られているのを目の当たりにして、これはひょっとすると本当に普及してしまうのかもしれない、と思ってしまいました。

今後も発展が楽しみな分野です。

家中の家電をスマート家電化する「Nature Remo」が便利!!

今週半ば、Nature Remoが到着したので感想を。

http://nature.global/

我が家では引っ越しに際してスマート化を(勝手に)推進しています。
先日のGoogle Homeもその一環でした。
(そう言えば、引っ越しています。)

今のところ我が家に存在するそれ的なものは、
– Google Home
– Google Chromecast
– PHILIPS Hue
でした。これに今回Nature Remoが加わります。

Nature Remoでエアコンを操る

Nature Remoは家庭のリモコン信号を記録して、スマホアプリなどから家電を操作することが出来るガジェットです。
最近のエアコンや電灯にはこういったスマホからの操作に対応しているものもありますが、専用の機器/アプリが必要なのに対して、Nature Remoを使えば今使っている家電をまとめて操作することが可能になります。
例えば、外出先から自宅が暑いから/寒いから予めエアコンつけておこう、みたいなことが簡単にできます。

と言いつつも実際スマホアプリからイチイチ家電操るのは意外と面倒なのですが、Nature RemoはIFTTTに対応しているので、様々な条件に応じて自動的に設定した家電を操作することが可能になります。これがマジ便利。

IFTTTで時間で明るさを変える

IFTTT(いふと)は、この界隈では代わりが効かないくらいの定番自動化サービスです。
「XXXしたらYYYする」という条件を、対応した様々なサービスを紐付けることで実現します。

我が家では、
– 日没とともに、夜用の暗めの設定に照明の設定を変更
– 20時になったら明るさをさらに落とす
みたいな設定をIFTTTとNatureRemoを使って設定してみました。
子どもの眠気を誘うには明るさは大事な条件らしいですね。

もちろんこのような微妙な明るさ調節を行うには、対応した照明とリモコンが必要なのですが、そこは引っ越しパワーで購入済みでした。
また、Hueなど高度な設定が可能なスマート照明に比べると安価に実現できると思います。(うちにはHueもあるんだけど)

Google Homeで素早くEテレをつける

Google Home(Google Assistant)とNature RemoをIFTTTで連携させると、声を使って家電を操作することが可能になります。
我が家ではテレビのリモコンを記憶させて、Google Assistantと連携させることで、「ねぇGoogle、Eテレが見たい」と話しかけるだけで、Eテレが見られる環境が整いました。
自分が見たくなくても子どもは見たいので最高ですね。
なお、有事の際は、NHKが見たいといえばすぐにテレビが見られます。

まとめ

Nature Remoには温度センサー、室温センサー、照度センサーなどさまざまなセンサーが内蔵されているのですが、今のところ有効に活用する機能は提供されていません。
リアルな要望としては、「朝6時に10度を下回っていたらエアコンをON」みたいなことをやりたいのですが、提供されているサービスだけで実現することは難しそうです。
まだ正式発売されたばかりの製品なので、これからの発展に期待したいところです。
余力があれば、公開されているAPIを使って自作するのもいいかもしれません。

手軽に手持ちのリモコン機器をスマート家電化できる製品として、めちゃくちゃ満足度が高い製品だと思いました。
正直Google Homeより買ってすぐに使いみちのあるいい製品だと思います。両方あれば、より遊べますが。

今後に発展に期待しています!