Alexa は、スマートスピーカー "Amazon Echo" が搭載する AI です。
最近密かに発足した弊社柏オフィスで、 BGM を流すために導入されました。
せっかくなので独自の「スキル」(後述)も開発してみました。
TRPG で「100面ダイスを1つ振る」ことを「1d100のダイスを振る」と言います。これを Alexa にお願いできるようにしてみました。
デモ動画はこちら。
(声の出演: harukawa )
デモ動画にもあるとおり、 NdM のダイスを振れるようになっています。つまり 1d100 だけでなく、 2d6 も振れるということですね。
Alexa は、肉声でいろんな指示を受け付けてくれます。
- 「アレクサ、静かな音楽を聞かせて」
- 「アレクサ、今日って何日だっけ?」
- 「アレクサ、ジョークをいってみて」
Alexa では、こうした機能のことを「スキル」と呼びます。
Alexa 用語 | iPhone でいうと |
---|---|
Alexa | Siri |
Echo | iPhone |
Alexa Voice Service | iOS |
スキル | アプリ |
スキルは、自分たちで開発することもできます。
開発したスキルは、 Alexa Skills Store を通じて他の Alexa ユーザに公開することもできます。iOS アプリなどと同じですね。公開前に審査があるのも、スマートフォンアプリと似ています。
今回開発した「スキル」は、「ダイスロール」という名前にしています。
「アレクサ、 1d100 のダイスを振って」
というと、100面ダイスを1つ振って結果を教えてくれるスキルです。
さらに、 1d100 に限らず、何面ダイスを何個でも振ってくれるようにしたいのでした。
TRPG 好きのスタッフからは、おまけの機能として出目の合計値が1〜5のときには「クリティカル」だと、96〜100のときには「ファンブル」だと言ってほしいという希望もありました。
これを開発するために、 Alexa の「スキル」の概念をどのように使っていくのか、ひとつずつ見ていきます。
Alexa では、スキルを呼び出すためにユーザがする「発話」は次のように解釈されます。
「発話」とは日常ではあまり使わない言葉ですね。これは言語学に頻出の用語 "utterance" の直訳です。「発音」よりも音としての性質に着目せず、発言よりも内容に着目しない、かなり広い概念です。鳥のさえずりも、政治家の演説も「あっ」みたいなものもすべて utterance に含まれます。
(出展: 『ユーザによる発話 | Amazon Alexa Voice Design Guide』)
「ダイスロール」の発話に当てはめると、次のようになります:
「アレクサ、ダイスロールで、 1d100 のダイスを振って」
1d100
でも 2d6
でも正しく解釈できるようにしたいのでした。Alexa が知っている呼び出し名を聞くと、それに対応したスキルが起動されます。Alexa が「知っている」とは、簡単にいうと「インストール済みの」ということです。
スキルは複数の機能を持つことができます。スキルのひとつの機能が、ひとつの「インテント」に対応します。
インテントは、「スロット」と呼ばれるパラメータのようなものを受け取ることができます。
Alexa とユーザとの対話からインテントが特定されると、インテントが実行される。
インテントは、 AWS Lambda で実装することができます。 Lambda を使うと、サーバを立てなくても API のようなものを実装することができます。 Lambda についての詳しい説明は、この記事の想定する範囲を超えるので深入りしません。
ちなみに、 Lambda を使わなくても、何らかの HTTPS リクエストを受け止める URL を指定しても構いません。自分で管理しているサーバが既にあったり、既存のシステムと密に連携させるような場合には、このほうが簡単かもしれません。
スキルの設定は、 Web ブラウザ上でできます。
この GUI ツールは Alexa Skills Kit 開発者コンソールというものです。長いので、この記事では ASKDC と略すことにします。
Lambda でのインテントの実装も Web ブラウザ上でできます。
これもあまり深入りして説明はしません。 Lambda では Javascript でプログラムを書くことができます。
ASKDC で、インテントが実行されるときに呼び出すべき Lambda の ID (正式には ARN
というもの)を指定します。この ID は Lambda Management Console に表示されています。
Lambda Management Console で、その Lambda を呼び出すべきスキルのスキル ID を指定します。この ID は、 ASKDC に表示されています。
ここまでくれば、 Amazon による審査の上で、開発したスキルを公開することができる。
非公開で試したいときは、メールアドレスを指定して「ベータテスト」をすることができる。
ちなみに、「ダイスロール」スキルはベータテストの状態でデモ動画を収録しています。ブログを公開するときには Amazon Skills Store で公開しておこうと思っていましたが、少し時間がかかるようなので諦めました。
興味のある Alexa ユーザの人は連絡をもらえたらベータテストに招待します。