Alexaで世界を変えよう

吉田真吾氏(以下、吉田):今日、僕からは「Alexaで世界を変えよう」というタイトルで基本的なところからお話をしたいと思います。

最初に簡単な自己紹介をさせていただきます。吉田真吾と申します。セクションナインという会社を3年ほど経営しています。それ以外に、先週からサイダスという沖縄の会社のCTOとしてジョインして、タレントマネジメントのシステムをメンテナンスしたり、新規で作っています。

先々週にアフリカのルワンダに行ってきて、ルワンダのIT事情をいろいろ見てきて、めちゃくちゃ楽しかったので、もしどこか海外に行きたいと思っている方は、絶対にアフリカに行ったほうがいいと思います。よろしくお願いします。

それ以外の活動では、Serverlessconfなど、サーバレスの技術を使ったコミュニティを運営しています。今年も9月29日にカンファレンスをやろうと思っていますので、イケイケなカンファレンスに行ってみたいという方がいたら、ぜひウォッチしておいてください。

みなさんの中に、Webエンジニアの方がいると思うんですけど、Webエンジニアというのは、インターネットができてからやっとできた職業です。

それ以外にも、開発組織には必ずiOSエンジニアがいると思うんですけど、彼らの職業自体、iPhoneが出た2007年以降にできた職業です。

何の話をしているのかというと、僕らの周りでは日々新しい職業が生まれています。

ちなみに、この『プロフェッショナル』を観られた方はいますか? もし近くに誰か録画している人がいたら、絶対見たほうがいいと思います。

ヒカキンやプロゲーマーの梅原大吾など、新しい職業をプロフェッショナルとしてやっている人に密着してレポートしていて、非常にいろいろと考えながらやっていて大変だなということがよくわかる番組でした。

ここにいるみなさんの大半も、昔存在しなかった職業をやっていると思うんですけど、今やっている職業が20年後・30年後自分がやっている職業かはわかりません。

ということで、ここで「みなさんAlexaをやりましょう」という話につながっていきます。

Alexaスキル

Alexaスキルの基本的な話なんですけど、いろいろなタイプがあります。今からお話しするのは全部カスタムスキルの話なんですけど、それ以外にもフラッシュブリーフィングスキルだったり、ビデオスキルだったり、スマートホームスキルなどがあります。

開発自体は非常に簡単に始められて、おすすめの構成はAmazon開発者ポータルです。みなさん.comだったりco.jpだったり、Amazonのアカウントを持っていると思うので、そこから「developer.amazon.com」や「developer.amazon.co.jp」を叩いてもらうとすぐアクセスができます。

Alexaのレスポンスを返すサーバサイドについては、AWS Lambdaを使うのがいいと思います。こちらもAmazon.comのアカウントがあれば、もう裏側にAWSの領域がありますので、すぐに使い始めることができます。(Amazonのアカウントと)Amazon Echoがあって、それに対して設定を入れることができるAlexaアプリの3つがあればすぐに開発が始められます。

ということで、開発している方がすでに5~6人いらっしゃったので、非常に簡単に始められるということが浸透していると思います。

ここで重要になってくるのは、これら一連のスキルの開発の流れをどうやってデザインするかという部分です。

単純にアカウントをアクティベートして、思いつくままに作っていけばいいかというと、すでに開発した方はわかると思うんですけど、対話のデザインは思いつきで作っていけるほどシンプルではないんですね。

ということで、Amazonが公式に音声デザインガイドを公開しています。なので、Alexaの開発を簡単に始められる環境がありますので、始めていただく際には必ず目を通していただきたいのがこちらの音声デザインガイドです。

音声デザインガイド 1.目的とユーザーストーリーの設定

音声デザインガイドは4つの章で区切られています。

まず1つ目は、目的とユーザーストーリーの設定から始まっています。

(スライド)右側に書いたのは、スキルの目的とスキルの機能です。ここでのスキルの目的は、国内宿泊施設の空室検索・予約のスキル。スキルの機能は空室検索と予約です。

作るにあたっては、デモレベルでは、スキル検索した1件目をそのまま「予約しますか?」と聞くスキルにするという制限を自分で入れました。

これはどんなやり方でもいいと思います。僕はたまたまiPadとApple Pencilがあったので、メモ帳にパパッと書いて始めました。今のところは何を作るのにもiPadとPencilで足りているので、まあ悪くないと思います。

これをやっておかないと、やっぱり後になって、思いつくままにいろいろと機能を足したくなってきます。そうすると「僕が作らなきゃいけなかったのは、こういうシンプルな機能だったはずだ」というところに立ち返る必要があるので、欲張らないためにも、目的とユーザーストーリーの設定をしっかりとしておく必要があります。

音声デザインガイド 2.台本の作成

2つ目は、台本の作成です。こちらの台本も書いてみました。

ユーザーが「Alexa、お泊り予約を開いて、2月11日の神戸の空室を教えて」と言うと、Alexaが「50件ほど見つかりました。最も安いのは〇〇ホテルのシングルルームです。詳細を開きますか?」と答えます。

ユーザーが「はい」と答えて、Alexaが「1件目は〇〇ホテルのシングルルーム。喫煙可。評価は星いくつ。値段はいくらいくらです。予約しますか?」と答えるように、シナリオを書いていきました。

ここで重要なのは、今書いたような内容を声に出して言うことです。たぶんみなさん、(デモを聞いて)Alexaのレスポンスちょっと長いと感じたと思います。

なので、どのぐらいが気持ちいいレスポンスの長さかということを、シナリオを書き換えながら詰めていく必要があります。

こうすると、思いつきで実装して、使い心地のあまり良くないスキルになることを防止することができます。

音声デザインガイド 3.対話フローの作成

台本がここまでできたら、次に対話のフローを作成します。対話のフローもいろいろなフローチャートの書き方があると思います。

僕はたまたまiPadのお絵かきアプリで、まず一番始めに「お泊り予約」というスキルの呼び出し名から始まってヘルプ案内、検索機能と予約機能というフローを配置していきました。

僕のシナリオで「機能」と言っている部分は、Alexaのスキルでいう「インテント」になります。

さらに「2月11日」や「神戸」などは、ユーザーの発話から取る値なので、「スロット」という値にして変数化して、対話フローにプロットしました。

これを繰り返していくと、このスキルで実現しなければいけないフローチャートができあがります。あとはこれを実装するだけです。

音声デザインガイド 4.スキル構築のための準備

先ほど言っていたスキルの呼び出し名のところはこちら(「お泊まり予約」)です。3つある機能(「Help案内」「検索」「予約」)がそれぞれインテントになります。そのあたりを作っていくと、裏側のサーバサイドでLambdaのハンドラーに設定されていく値になります。

この(緑色の)スロットはvalueなんですけど、Lambdaでいうと、このあたりはSwitch-Caseを使うと、スロットにいろいろな値があってもプログラマブルに処理の分岐をさせることができます。こちらは詳しくやっていった中でわかることなので、別に覚えておく必要はないと思います。ここまでやると実際に止まることなく、あとは開発すればいいだけです。

大事なこと

大事なことは、いきなりバックエンドを実装する以前に、対話モデルや会話体験を設計して作り込む必要があるということです。

ここまでやってしまえばそのあと困らないし、作ったものがクソすぎる認定を受けずに済むので、ぜひやっていただければと思います。

僕もよく言っていますし、最近あちこちで言われているのは、こういうことをやる人たちはやっぱり新しい考え方ですし、新しくチャレンジや工夫をしなければいけない人たちなので、新しい職業だなと思っています。彼らのことをVUIデザイナーと(呼びたいと思います)。

なので10年後に、この中の何割かはもしかしたらVUIデザイナーになっているかもしれません。今はそんな人がいるのかいないのかよくわからない状態ですけど、きっと職業として確立するのではないかなと思っています。

これは自動音声応答システム(IVR)とは丸っきり違うと思っています。

発話した言葉を単に理解して次のコマンドにつなげるわけではなくて、その発話の内容の意味や文脈を理解するアシスタントのように振る舞える会話体験を設計して、作り込む必要があると感じています。

毎回お話しするんですけど、実際にサーバサイドを作っていく中で、対話のステート制御が重要かなと思っています。

Alexa内で妖精を育てる「エコちっち」

こちらも毎回お見せしているんですけど、「エコちっち」という育成ゲームを作っています。

もう3ヶ月も4ヶ月も経つのに、いつまで経ってもパブリッシュしないのでまだかまだかと言われるんですけど、ちょこちょこと手を加えては「うーん、まだ満足いかないな」と思いながら、まだスキルの公開にまでいたっていないという……すみません、近々がんばって仕上げて公開したいと思っています。

この「エコちっち」はコンセプトが非常にわかりやすくて、Alexaの中で妖精を育てる育成ゲームです。

インテントとしては、これは卵から生まれる妖精なんです。ごはんをあげたり、ダンスをするとゲージが増えていって、みなさんが昔やったことのある“アレ”の音声コマンド版を作っています。

ちょっと簡単なデモをやってみます。

(デモ開始)

吉田:Alexa、エコちっちが元気か教えて。

Alexa:エコちっちは、まだ卵のままみたいです。卵を温めますか?

吉田:はい。

(音楽が流れる)

Alexa:新しいエコちっちが誕生しました。がんばってお世話しましょうね。

(デモ終了)

吉田:……みなさんそんなに難しい顔して聞かなくて大丈夫ですよ(笑)。もう1ついきましょうか。

(デモ開始)

吉田:Alexa、エコちっちでごはんを食べさせて。

Alexa:ごはんを食べさせてあげますか?

吉田:はい。

(音楽が流れる)

吉田:基本的にはさっきと一緒です。

Alexa:エコちっちは、ごはんをいっぱい食べて、すっかり満足したみたいです。

(デモ終了)

こまった!対話のフロー制御

今、2回デモをしましたけど、前のデモと後のデモは同じに聞こえるじゃないですか。実は処理の流れ的に、2つの状態を行き来させています。

少し細かい話になるんですけど、僕は一番はじめに状態確認をしました。これがデフォルトの状態です。

デフォルトの状態では、(Alexaは)「お腹が空いています」ではなくて「まだ卵のままです」と言っていました。「卵を孵させてあげますか?」と聞かれて、卵を孵させました。2回目のデモでは、一発でごはんを食べさせてあげました。

何の話をしているのかというと、ユーザーが「はい」と言ったときに、何に対する「はい」なのかわからないといけないので、事前にステートをセットしておかないといけません。突然「はい」と言われても、ステートを持っていないと。

なので対話のフローを制御してあげる必要があります。

「ステートを制するものが対話モデルを制す」

いろいろなツールで、いろいろなやり方があると思うんですけど、Alexaスキルのつくりでいうと、ステートの定義ができるのでSDKを使います。

このSDKの中で、今、リセットについて聞いていたら、リセットモードをセットしてユーザーに返してあげる。「トイレに連れていってあげますか?」と聞いた場合は、トイレットモードにしてあげて、それをユーザーに返してあげる。

ということをすると、ユーザーから「はい」とリクエストが飛んできたときに、何に対する「はい」なのかをプログラム上、別のハンドラーにルーティングすることができます。これを知っておくと、Alexaスキルを作るときに便利だと思います。

ということで、僕は「ステートを制するものが対話モデルを制す」と思っています。

今、何に対して「はい」と言ったかということは、人間は直前の文脈を全部覚えているので、簡単に会話をやっているんですけど。

Alexaスキルは超ステートレスなので、前回は何と言ったかという、セッションの状態を持たせておくことが難しいので、そのセッションにステートを持たせておくことで実現することができます。

なので、複雑だけど気持ち良い会話をやろうすると必ずこの壁にぶつかると思うので、ぜひ覚えておくといいと思います。

直近でLambdaの話をいくつか話しましたけど、この中に「プログラムをいきなりやるのは敷居が高い」という人もいると思います。

コードが書けない人のための「Storyline」

そういう人のためにあるのが、今日のワークショップなどで使ってもらいたい「Storyline」というスタートアップのSaaSのサービスです。

そもそもAlexaスキルというのは、僕がお話ししたような本家Alexaのコンソールで開発していく方法もあれば、今日ご紹介する「Storyline」を使う方法もありますし、Googleの「Actions on Google」と「Dialogflow」を使ってA作ることもできます。

「Actions on Google」と「Dialogflow」はもっといろんなことができるので、Alexaのために使うのはちょっとtoo muchかなというようなツールなので、Alexaスキルが作れればいいだけであればあまりおすすめはしないんですけど。

簡単なスキルを作るのであれば「Storyline」が一番とっつきやすくて簡単にできると思うので、後ほどワークショップで体験していただけるとうれしいなと思います。

どれぐらい簡単かというと、「Storyline」にログインして「作ります」と言って、「ここからスタートします」というブロックを作って、「Alexaがこう言います。ユーザーがこう返します。ユーザーがこう返したら、次はこのブロックに飛んでいきます」みたいに、レゴブロックのように組み合わせて矢印をどんどんつないでいくことで、どんどん対話フローが作っていけます。

最後には、Alexa側にアップロードすることもできて、レスポンスを返すAPI、サーバサイドをここに設定するんですけど、サーバサイドを「Storyline」がホストしてくれるので、Lambdaのコーディングを一切する必要がなく「Storyline」のほうでサーバサイドを全部やってくれるという便利なサービスです。

ただし「エコちっち」のレベルのステート制御は難しいです。ある程度の「Storyline」ができる限界があるので、それを知ったうえで使うには非常に便利だと感じています。

僕の話のまとめとしては、新しい職業が生まれています。なので今、VUIがお金にならないと。もう趣味の範囲だと思っている人も多いと思うんですけど、これが実際にお金を生んで職業として確立していくと思っているので、みなさんも趣味の範囲だけではなくて、専門的にやりたいとなったら、どんどんやってお金を稼いでいけばいいんじゃないかなと思います。

その中で重要なのは、対話のデザインだと思います。先ほど言ったステート制御のように、人間の会話は文脈を理解しながら会話が進んでいくので、それを再現できるようにプログラムのほうでいろいろ工夫してあげる必要があるというお話でした。

少し早めに終わるかたちになりましたけど、お楽しみいただけましたでしょうか? ご清聴ありがとうございました。

(会場拍手)