記事一覧

「Alexa、 1d100 のダイスを振って!」
(6/6/2018)

Alexa (アレクサ)とは

Alexa は、スマートスピーカー "Amazon Echo" が搭載する AI です。

最近密かに発足した弊社柏オフィスで、 BGM を流すために導入されました。

----------2018-06-06-11.22.36-1

せっかくなので独自の「スキル」(後述)も開発してみました。

TRPG で「100面ダイスを1つ振る」ことを「1d100のダイスを振る」と言います。これを Alexa にお願いできるようにしてみました。

デモ動画はこちら。

(声の出演: harukawa

デモ動画にもあるとおり、 NdM のダイスを振れるようになっています。つまり 1d100 だけでなく、 2d6 も振れるということですね。

Alexa で何ができる?

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 での「発話」の解釈

Alexa では、スキルを呼び出すためにユーザがする「発話」は次のように解釈されます。

「発話」とは日常ではあまり使わない言葉ですね。これは言語学に頻出の用語 "utterance" の直訳です。「発音」よりも音としての性質に着目せず、発言よりも内容に着目しない、かなり広い概念です。鳥のさえずりも、政治家の演説も「あっ」みたいなものもすべて utterance に含まれます。

89d5467e-76d4-f95d-eb3a-15e8cbd892c2

(出展: 『ユーザによる発話 | Amazon Alexa Voice Design Guide』

「ダイスロール」の発話に当てはめると、次のようになります:

「アレクサ、ダイスロールで、 1d100 のダイスを振って」

  • ウェイクワード: 「アレクサ」
    • Alexa への呼びかけ。
  • 呼び出し名: 「ダイスロール」
    • スキルの名前。
  • 起動フレーズ: 「で」
    • 直前の語がスキルの名前であることを示す。「を開いて」「で」などがある。
  • スロット値: 「1d100」
    • 引数のようなものです。ここが 1d100 でも 2d6 でも正しく解釈できるようにしたいのでした。
  • 発話: 「のダイスを振って」
    • インテント(後述)を特定するための名前。

Alexa スキルの全体像(「インテント」と「スロット」)

96499481-12e9-7dd8-d9c4-8fe00f6313c9

Alexa が知っている呼び出し名を聞くと、それに対応したスキルが起動されます。Alexa が「知っている」とは、簡単にいうと「インストール済みの」ということです。

スキルは複数の機能を持つことができます。スキルのひとつの機能が、ひとつの「インテント」に対応します。

インテントは、「スロット」と呼ばれるパラメータのようなものを受け取ることができます。

Alexa とユーザとの対話からインテントが特定されると、インテントが実行される。

インテントは、 AWS Lambda で実装することができます。 Lambda を使うと、サーバを立てなくても API のようなものを実装することができます。 Lambda についての詳しい説明は、この記事の想定する範囲を超えるので深入りしません。

ちなみに、 Lambda を使わなくても、何らかの HTTPS リクエストを受け止める URL を指定しても構いません。自分で管理しているサーバが既にあったり、既存のシステムと密に連携させるような場合には、このほうが簡単かもしれません。

Alexa Skills Kit 開発者コンソール (ASKDC)

スキルの設定は、 Web ブラウザ上でできます。

65fe8cd8-15f5-15dc-4a58-52981fff1ef2

この GUI ツールは Alexa Skills Kit 開発者コンソールというものです。長いので、この記事では ASKDC と略すことにします。

Lambda Management Console

Lambda でのインテントの実装も Web ブラウザ上でできます。

2e5dfe4d-7aa9-b04a-4a97-a31c38ceca09

これもあまり深入りして説明はしません。 Lambda では Javascript でプログラムを書くことができます。

スキル(インテント)と Lambda 関数の関連付け

ASKDC で、インテントが実行されるときに呼び出すべき Lambda の ID (正式には ARN というもの)を指定します。この ID は Lambda Management Console に表示されています。

Lambda Management Console で、その Lambda を呼び出すべきスキルのスキル ID を指定します。この ID は、 ASKDC に表示されています。

公開(「ベータテスト」の開始)

ここまでくれば、 Amazon による審査の上で、開発したスキルを公開することができる。

非公開で試したいときは、メールアドレスを指定して「ベータテスト」をすることができる。

ちなみに、「ダイスロール」スキルはベータテストの状態でデモ動画を収録しています。ブログを公開するときには Amazon Skills Store で公開しておこうと思っていましたが、少し時間がかかるようなので諦めました。

興味のある Alexa ユーザの人は連絡をもらえたらベータテストに招待します。