@koyachiさんの予定です。僕は普段、Prottと呼ばれるプロトタイピングツールの開発に携わっていて、今年はチーム内でデザインスプリントやユーザーテストも経験することができました。そんな経験を生かして、最近流行りのAIアシスタントをプロトタイピングできる環境を作ってみました。今回は、このブログでも以前とりあげたDialogflow(旧API.AI)を使って、AIアシスタントアプリをプロトタイピングしてみます。DialogflowでAgentを作成するDialogflowはGoogleアカウントでサインアップすることができます。アカウントを作ったらさっそく始めましょう。Agentの作成まずはDialogflowでAgentを作成しましょう。AgentとはDialogflowで作ることが出来る自然言語処理のモジュールです。languageをJapaneseに設定しました。saysに何かキーワードを入れて保存してみましょう。Intentは、Agentが起動された時に最初に応答するIntentです。このタイミングで、対応する機能の説明を出力して次に自分で作成するIntentへ繋げるのが一般的な流れのようです。Intentをスキップして応答することもできます。Intentを作るさて、いよいよここからが本番です。あなたの試したいアイデアをIntentで表現してみましょう。簡単なプロトタイプであれば、特定のキーワードに対して固定のメッセージを応答するだけで作れてしまいます。難しく考えなくても、プロトタイピングは検証するユーザーに実際に使っている場面を想起してもらえればいいんです。(「オズの魔法使い」テストのように実装を前提としない手法も存在します。Dialogflowは入力メッセージを学習して、Intentと紐付けることができるので、定義していない類似のメッセージであっても応答を返してくれます。手間をかけなくても、テストしてもらうユーザーに自然な体験を提供できそうですね。Androidアプリをさくっと作るさて、Dialogflowの設定はひとまず置いておいて、今度は呼び出す側のアプリを作ります。Messengerとのサービス連携に加えて、SDKを使ったアプリケーションへの組み込みにも対応しています。SDKを使って簡単なAndroidアプリを作ります。(自分にとってAndroidで作るのが一番速そうだからです。)というわけで数時間使って作成したアプリがこちらです。ChatUIのライブラリを使って、AIエージェント風のアプリを作成しました。gradle.propertiesに定義している、CLIENT_ACCESS_TOKENにトークンを設定します。Dialogflowのコンソールに戻って、トークンを取得しましょう。トークンを設定したらビルドして実行します。動いていますね・・・!超かしこそうなAIアシスタント(のプロトタイプ)があっという間に作れてしまいました。おわりに冒頭に挙げたデザインスプリントでは短い時間(1日とか)でプロトタイプを作ってユーザーインタビューを実施するという事もあります。そんな時に、時間をかけずに出来るだけ実際に使っている場面を想像させることができるこのような手法は役に立つことがあるやもしれません。今回は、Dialogflowの最も基本的な機能だけを使いましたが、EntityやWebhookを使えば、実際に使ってもらえる高度なサービスを作ることも可能です。使いこなしていきたいですね。Alexa、LINEのClovaなど、AIアシスタントを搭載したスマートスピーカーと呼ばれる製品が日本に投入された年でした。現状は、文脈の理解に限界があることや、利用できる機能を使う側が事前に把握しておく必要がある点など、一般の方がイメージするAIアシスタント(アイアンマンのJarvisみたいな)になるには、まだまだ越えるべきハードルが様々存在する分野だと思っています。今の製品でも一旦使える環境を作ってしまえばかなり便利に使えることは確かです。Homeが売られているのを目の当たりにして、これはひょっとすると本当に普及してしまうのかもしれない、と思ってしまいました。今後も発展が楽しみな分野です。Homeでごみ収集日botを動かしましたコメントを残す物欲の秋ですね。Homeを買ったので遊んでみました。HomeとはGoogleが発売したスマートスピーカーです。スマートスピーカーとは、話しかけることで、インターネットを通じてさまざまな機器と連携したり、ニュースや天気予報なんかを教えてくれる機器の総称です。競合としては、AmazonのEchoやLINEのClovaなんかが挙げられます。ちなみに今のところシェアはEchoが1位です。Homeで出来ることこちらのビデオをどうぞ。HomeにはGoogleアシスタントと呼ばれるAIが搭載されていて、様々な問いかけに答えてくれます。個人的にはリラックスする音楽かけて〜でいい感じに流してくれるのが気に入りました。今後、連携サービスが増えていくみたいですね。http://japanese.engadget.com/2017/10/04/ai-google-home/それと、スマホのGoogleアシスタントやSiriは結構声を張らないと認識してくれない印象なのですが、こいつは割とボソボソ喋っても認識してくれます。日常に溶け込むと言う点でこれはありがたかったです。Homeアプリが手軽に作れると聞いて、触ってみました。Googleを使用します。この連携のはじめの一歩には、こちらの記事を参考にさせて頂きました。Qiitaapi.aiは自然言語処理をいい感じにやってくれてAPI化してくれるサービスです。Googleが買収したので、Googleアシスタントとの連携も簡単。プロジェクトを作るとGCP/Firebaseにも同名でプロジェクトが作られます。今日は燃えるゴミの日です。みたいな会話が出来るbotです。api.aiについて調べました。大きくEntitiesとIntentsと呼ばれる2つの概念と、外部サービスとのIntegrationが存在します。EntitiesAI用のデータベースみたいなものです。みたいなヒモ付ができます。ここで定義した単語を次のIntentsでのトリガーに使用することができます。Intentsトリガーとレスポンスを定義します。げんきあらかじめ定義したいくつかの単語をフックして特定の返答をする例です。みたいなEntitiyが定義されていて、言語解析に使用できます。tryEntitiesで定義した人生という単語と、子育てや仕事などを紐付けて返答が返ってきました。JSONで見ると、このように解析されています。"4d5fe34c-59d7-49f8-808a-8e6a77418fae"}発せられた特定のワードをフックして動作するbotのようなものが作れそうです。Integrations入力と出力に外部サービスが使えます。Messengerなどとも連携できます。ゴミの日bot本題に戻って、ゴミの日botです。何ゴミの日?僕の住んでいる住所に限定するのであれば、今日と言う単語から曜日を拾ってしまえば単純なマッピングから何ゴミの日か返せばよさそうです。思って調べたところ、「今日は」から日時は取れるけど曜日が取れませんでした。見てみると、条件分岐も1つのIntentでの定義はできないようです。(複数のIntentを組み合わせればできる気もします。)api.aiはシンプルに言語解析のハブのようなイメージなのだなーと改めて理解しました。そこで、外部サービスとの連携を試します。API.AIようはWebhookです。Intentsで解析した結果をJsonで外部サービスに渡すことができます。今のところ、現在地の天気を取得するような高度なことをしたければこれを使う想定のようです。今回はこんな構成にしてみました。functions今の日時の自分の地域のゴミ予定を返すだけのAPIを作りました。Assistantから要求を受けたら、api.aiでリクエストを受けて、Webhookで今日と明日のごみ収集予定を返すことができました。Google側の設定も多少必要ですが、今回は端折ります。振り返ってみると、これくらいならapi.aiは不要な感じがしますが、Slackなんかとも連携するのであれば便利そうです。Googleを使うと、ユーザーの文脈をいい感じに取得できます。デバイスの位置情報から適切な地域のゴミ予定を返すログインさせて場所を設定させる火曜日は?みたいな自然な問いかけに対応するなどなど、色々可能性はありそうです。Googleは今回はDRAFT機能を使ってテストアプリとして動作させました。正式なアプリとして配布するには申請が必要です。情報が少なすぎて、まだ良くわかっていません。申請時に、他のアプリとトリガーワードが被ってたりするとまずそうな雰囲気を感じました。(つよいトリガーワードをとったベンダーが勝つみたいなのありそうです。)取り急ぎ、奥さんにやや喜ばれたので成功ということにしておきます。