プログラマ英語学習日記

プログラミングと英語学習のまとめなど

Alexa/GoogleHomeスキル開発してみた

せっかくEchoDot/GoogleHomeを入手したので軽くスキル開発してみました。

もちろん使い物になるレベルでないので非公開ですけど。以下軽く感想です。

チュートリアルにそって進めた+α程度ですが、両方ともほぼ似たような構造/開発手法です。

  • あらかじめ「文章」を多数入力しておく。
  • サーバには「どの種類の文章だったか」がRequestとしてくる
  • レスポンスとしてテキストを返すとしゃべる

という構造。音声/自然言語処理はすべて向こうが処理してくれるので楽ですね。


環境比較

とはいえ、開発しやすさは結構差があると感じました。

  • Echo(Alexa)は基本的にAWSで閉じている。
  • 一方GoogleHomeは、DialogFlowで自然言語処理 / FirebaseFunctoins(他)でロジック

ここが結構大きい差でした。


AlexaはAWS-Lambdaの一段構造なのに対し、GoogleHomeは2段構えなのがつらい。

  • DialogFlow/Firebaseのどっちに問題があるのか分かりづらい
  • Firebaseのデプロイが遅い(笑)

この二つの要因が絡み合い、Typo程度の修正に10分コースになることも珍しくありませんでした。本当にDeployで数分返事がない & 終わっても反映されてないが多発してつらかった。


一方、AWSはそこがシンプルにまとまっていていいですね。書いたIntentに沿った内容が飛んできて返事する、単純でデバッグも楽で、反映も早くて確実。

このレスポンスはありがたいです。ローカルでのテストが難しく単純なデバッグログを仕込んだだけでデプロイ、というのが増えるのでデプロイ速度&ログ反映の速さは大事。


FirebaseFunctionsがnodeなのに対し、AWS-LamdaだとPythonでも書けたのも大きかったかもしれません (JSよりPythonのほうが慣れている)




が、「コードを書くまで」は 圧倒的にGoogleHomeが楽 ですね。AWSになれてないのもありますが、AWSの各種設定のめんどくさいことめんどくさいこと。始まれば楽なんですが。

Googleアカウント持っていれば、利用規約同意+αで開発可能なGoogle Homeと比べると大きな差です。


初めての人が「ちょっとやってみたい」ぐらいならGoogle Home開発のほうがオススメしやすいです。


作ってみて

作ってみた感想としては「本当に設計が難しい」。声でしか返せないので必然的に情報量がものすごい制限されます。

個人的には30文字ぐらいが限度でしょうか?それより長いと聞くのがめんどくさくなります。

また、ユーザ入力も当然ながら音声のみ。

この二つが絡み合い既存UIでは当然の「複数の選択肢を提示し選んでもらう」ということはほぼ不可能です。


ここは今後のスマートスピーカーの課題になりそうですね。どんなに言語処理が発達しても、「入出力の情報量の少なさ」という壁は超えるのは難しそう。

よっぽどユーザの意図をくみ取り、的確に解釈しないと厳しそうです。amazonがEchoにスクリーンを付けた理由が少し理解できました。

逆にいうと、スマホのGoogleAssistantはスクリーンインプットがあるので多彩なことができて面白いです(コードの複雑さが跳ね上がる&AIスピーカーと別コードになるでしょうが...)


個人的にですが、状態遷移図をしっかりかいたほうが楽でした。小さいコードでも。

状態管理が複雑になる上, 次のIntentがどうなるか分からないので、しっかりと図にする&表示するとスッキリして開発しやすくなりました。

スマホなら画面UIにないものは入力不可能ですが、こいつはそうは限りません。


YES/NOを求めるシーンでも「XXを検索して」と来たら答える必要があります。そこでどうするか。再度YES/NOを問うか、検索フェイズに移行するか。

この辺をしっかり決めて設計しないとハマる予感がしました。

状態遷移さえしっかり管理すれば、あとは単純なので混乱なく進めると思います。


とごく簡単なものしか作っていませんがいい勉強になりました。

今のスマートスピーカーに何ができるのか / 何ができないのか / 今後の課題 などなど色々見えてきました。仕組を理解するのはやはりいいですね。

多少でも開発スキルのある方なら苦労はしないと思いますので、一度どちらかにトライされてはいかがでしょう?

ただ二つともほぼ一緒な構造なので、両方やる必要はないと思います(笑)