Alexa徹底入門

2019/08/05

自己紹介



お名前:寺原 歩

お会社:(株)情報戦略テクノロジー

お所属:技術戦略推進部                   

得意言語:ECMAScript                    


GitHub:a-terarara                   

今回の資料:https://a-terarara.github.io/lightning-talks_alexa


                  

今日話すこと

  • 1. 今更Alexa?

  • 2. Alexaの始め方

  • 3. Alexa Structure

何故今更Alexa?

先日のモブプロ会の一幕

「Alexaはskillとbackendからなるよ」

「skillには呼び出しとIntentがあってさ~」

「へ~知らんかったわぁ」

先日のモブプロ会の顛末

「もっとAlexaで開発してみたい!」

Alexaの現状と開発者とのギャップ

Alexaを始めとしたVoice User Interface(会話型AI)は2018年8月に成長期、今年は・・・?

出典:ガートナー・ジャパン
https://www.gartner.com/jp/newsroom/press-releases/pr-20180822

2019/7/22週の日本におけるAlexaSkillリリース数







多い?少ない?

スキル内課金始めました



Alexa「スキル内課金の概要」より
https://developer.amazon.com/ja/docs/in-skill-purchase/isp-overview.html

AlexaSkillにはまだチャンスが転がっている?

Alexaの始め方

突然クイズ

Alexaってどーれだ?

実はこの子たちAlexaじゃなくてAmazon Echoなんです。

もとい

スキル開発 基礎トレーニングシリーズを読む

索引 概要
初めてのスキル開発 Tutorial
カスタムスキル Skill・Test・Backend説明
スロットの利用 IntentSlots・同義語
ユーザーとの対話 Session・Reprompt
本格的なスキル開発に向けて ASK CLI・Skill公開

                    所要時間:10分

開発に必要なもの

  • ・メールアドレス(またはAmazonアカウント)

  • 以上

スマホあればechoも不要です

AWSアカウントも不要です

30日間無料枠を勝手に用意してくれます

Alexa Structure

全体

Backendが会話を受け取って処理を行う

Skill

Alexa Skill1つにつき1つの呼び出し名を持っています。

例1:「Alexa天気を教えて」

例2:「Alexaピカチュウを呼んで」

ウェイクワード「Alexa」呼び出し名「天気」

呼び出し名によって呼び出すSkillを切り替えています

Skill

Skill内の会話にはセッションを持ちます

「Alexa、コーヒーショップを開いて」

「何をご注文なさいますか」

「アイスコーヒーください」

「ご注文ありがとうございます」

呼び出し~会話の終わりまでAlexaSkillは待ち受けています

Skill

Skillは複数のインテント=会話パターンを持ちます

例1:「アイスコーヒーください」

例2:「ストローもつけてください」

例3:「3杯お願いします」

あらかじめ会話パターンは定義しておきます

つまりユーザの会話を予測しておかなければなりません

インテント

インテントにはフレーズスロット=可変長の引数を定義できます

例1:「アイスコーヒーください」

例2:「紅茶ください」

フレーズスロット「アイスコーヒー」、「紅茶」

ユーザが自由に発話出来る引数を定義しておき、Backendの処理内容を変えられます

SearchQuery

フレーズスロットは飲み物の種類等Amazon側で予め用意された単語を拾います

自由な単語を拾うためにはSearchQueryを使います

ただし、Alexa側で良い感じな変換処理をかけてくれないので、予想したフレーズと実際の発話フレーズが異なることがあります

例:「コーヒー」⇒「こおひい」

ここまで整理

アカウントリンク

認可フローで別のリソースにアクセスする機能

ユーザ情報取得API

Amazonアカウント情報にアクセスする機能

Skill Connections

別のSkillに連携出来るPreview機能


例:「Alexa、Amazonで〇〇を購入して」

  「注文書をプリンタで印刷して」

   ⇒(別のSkillに情報連携して印刷予約)

声帯の変更

Backendのreturn時にSSML(音声合成マークアップ言語)を定義することで声帯を変更する

エフェクトの変更やmp3を読み上げさせるオプションもある

Backend

BackendはAWS Lambda・・・と思いきや下記の要件を満たせればなんでも良いです。

・Rest API

・I/FはJSON

・エンドポイントは1つ

・SSL通信

つまり言語もサーバも自由に選べます

Moneyless Architecture

I/F

I/Fは全てJSONで処理されます

サンプルリクエスト

{
  "request": {
    "type": "IntentRequest",
    "intent": {
      "name": "HelloWorldWithNameIntent",
      "slots": {
        "firstName": {
          "name": "firstName",
          "value": "terarara",
          "confirmationStatus": "NONE"
        },
      ・・・

HelloWorldWithNameIntentにfirstNameを渡しています

単体テスト

I/F情報を保持しておけば単体テストコードも書けます

const request = {・・・} //JSONをコピペ
describe("お試し", () => {
  it("requestを処理すると注文を受け付ける", () => {
    const response = target(request, res);
    assert.deepEqual(
      res.body.response.outputSpeech.ssml,
      "<speak>ご注文ありがとうございます</speak>"
    );
  });
}

コード管理

AlexaSkillはJSONエクスポートすることでコード管理が可能です

backendは言わずもがな、管理しておきましょう

以上