はじめに
AWS認定資格としてAWS 認定 Alexa スキルビルダーが気がつけば追加されていた。
Amazon Lexならともかく、AlexaってAWSの仲間なの? 的な疑問はさておき、AWSなのにBlackbeltに説明もなく仕様も良くわからん。というのが正直なところ。
資格取得はまあ置いといて、とりあえずカスタムスキルの概略まで頑張って理解した時のメモ。
アカウント管理
AWSな人たちが触れる最初の壁。
Alexa開発視点でまとめると、こうなる?
- AWS 開発者コンソール(Amazon Developer)
- 2019.11現在「Alexa Skills Kit(ASK)」「Alexa Voice Service(AVS)」の開発に対応。
- ASKがAlexaスキルの設定の要となるもの。
- AVSは今回は省略。
- AWSアカウント
- (AWS使いには)おなじみアカウント
- Alexaスキルのバックエンドのリソースを構築・設定するところ。
- 基本はAWS Lambda、EC2/Fargate等でいい感じに処理すればOK。
- AlexaとJSONの受け渡しが出来れば、ぶっちゃけHerokuとかでもOK。
もういよいよAWSじゃないじゃん
Alexaスキル
Alexaのスキルは大きく分けて、下記の3つが代表的。
- スマートホームスキル
-
対応機器を操作する為のAlexaスキル
- 要は、声でのリモコン操作
- スキル名(呼び出し名)を言わなくても使える
- 例:テレビつけて、今日の天気は?
-
対応機器を操作する為のAlexaスキル
- フラッシュブリーフィングスキル
-
在りもののコンテンツを読み上げ/再生する為のAlexaスキル
- RSSをAlexaに読み上げさせたり、音声を再生したり?
-
在りもののコンテンツを読み上げ/再生する為のAlexaスキル
- カスタムスキル
- バックエンドにAWS LambdaやWEBサーバなどの処理部分を開発者が用意し、柔軟な動作をするAlexaスキル。
- Alexaスキルを作りこみたい時は、コレ!
- Alexa スキルビルダー対策としてはこの辺の知識が必要なのかな。
- バックエンドにAWS LambdaやWEBサーバなどの処理部分を開発者が用意し、柔軟な動作をするAlexaスキル。
カスタムスキルの利用例
カスタムスキル周りでは用語がたくさん出てくるが、用語の示す概念を理解するのが難しい。
実例に即して理解を試みたい。結果としてごちゃついたが……
-
ユーザーが「アレクサ、俺の寿司予約くんを起動して、マグロづくしセットを注文して。」とAlexa対応デバイス(Echo)に話しかける
- アレクサ = ウェイクワード
- Alexaを起動させるためのワード。いわゆる「鏡よ鏡」。
- 起動して = 起動フレーズ
- Alexaスキルを起動させるためのワード。後述するスロットや注文フレーズが決まってなくても、起動フレーズさえあればとりあえずAlexaスキルは動く。
- アレクサ = ウェイクワード
-
Echoがデバイス内のAlexaに音声を渡す。
- Alexaは文脈を解析し、呼び出し名、呼び出しフレーズとスロットを抽出する。
- 俺の寿司予約くん = 呼び出し名
- Alexaスキルを呼び出す際の名前。スキル名とは別の概念なので、呼び出し名とスキル名は同じでも別でもいい。
- この例でもわかる通り、家族・来客等の前で呼べる名前にしましょう。
- 注文して。 = 呼び出しフレーズ
- マグロづくしセット = スロット
- 俺の寿司予約くん = 呼び出し名
-
呼び出し名に対応するカスタムスキルが以下を行う。
- 呼び出しフレーズに対応するインテント(発話意図)にスロットを渡す。
- インテントは例えばMySushiReserver-Intentと定義する。
- (インテントの)呼び出しフレーズ:例えば予約するんだ、注文してと定義する。
- この設定の場合、呼び出しフレーズ外の内容を言ってもインテントは呼び出されない
- OK例:「マグロづくしセットを予約するんだ」「マグロづくしセットを注文して」
- NG例:「マグロづくしセットを注文するんだ」「マグロづくしセットを頼んで」
- この設定の場合、呼び出しフレーズ外の内容を言ってもインテントは呼び出されない
- 呼び出しフレーズに対応するインテント(発話意図)にスロットを渡す。
- インテントのインテントスキーマ(対話シナリオの定義のようなもの)に、以下を設定する。
- 標準ビルトインインテント
- ストップ、キャンセル、ヘルプなどの一般的なアクション。
- スロットは一部()を除いて非対応。
- 一部=AMAZON.SelectIntent等。スロットの変更は不可。
- カスタムインテント
- スロットを引数として、バックエンドプログラムの関数(dialogue関数?)を呼び出すアクション。
- スロットは名前、タイプ(型)を指定する。
- 定義するのが面倒ならカスタムスロット設定することで、定義していない言葉をいい感じにスロット化する。
- ただ、カスタムスロットはファジーな作りなのでAmazon的には非推奨っぽい?オウム返しスキルとか有名ですが…
- スロットを引数として、バックエンドプログラムの関数(dialogue関数?)を呼び出すアクション。
- 標準ビルトインインテント
- Alexaは文脈を解析し、呼び出し名、呼び出しフレーズとスロットを抽出する。
-
カスタムインテントではAlexaから受け取ったJSONを、Lambda等のバックエンドが処理。レスポンスをAlexaへJSONで渡す。
- バックエンドの詳細は割愛。
-
インテントスキーマに沿ってAlexaが発話する。
ざっくりこんな感じ、カスタムスキルは絵で描かないと大変ね。