Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Rubyでalexaプログラミング

654 views

Published on

nseg発表資料
Rubyでalexaプログラミング

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Rubyでalexaプログラミング

  1. 1. RubyでAlexaプログラミング @gogoroya
  2. 2. 自己紹介 Twitter @gogoroya 所在 長野市 Ruby歴(というよりRails歴) 1年位 最近やってる事 Node.js, React Native, AWS Lamda, (New) Alexa
  3. 3. Alexaとは Amazonが開発したAIアシスタント。 スマートスピーカ Amazon Echoに搭載。 Amazon Echo 11月発売開始(招待制) これ買った
  4. 4. Alexa Skill プログラミング Alexa Skillとは Alexa対応デバイス(Amazon Echo等)から取得した音声情報を処理するプログラム。 以下の種類がある ・カスタムスキル <= 今日話すやつ    自作アプリを作るスキル ・スマートホームスキル スマートホーム・デバイスの操作に特化したスキル ・フラッシュプリーフィングスキル ニュース配信用(RSS,JSON)のスキル
  5. 5. Alexa Custom Skillのアーキテクチャ OR AWS Lamda Webhock(HTTPS) ※言語等の制約なし Alexa、すき屋で牛丼注文して 承りました Amazon echoから受信した情報をテキスト情報に 変換、整形してLamdaまたはWebhockに処理させる 開発者ポータル
  6. 6. Alexa Skill開発に必要な作業 (1)発話フレーズとIntent&Slotを結びつける設定をする作業 OR AWS Lamda Webhock(HTTPS) ※言語等の制約なし (2)受信したテキスト情報を元に応答を 返す自作プログラムの開発 マグロ食べたい Intent : SusiOrderIntent Slot: Neta: マグロ 開発者ポータル
  7. 7. Alexa開発者ポータルで設定する内容 ・サンプル発話 ユーザがechoに話しかけるフレーズのサンプル インテントに対してサンプル発話を紐づける 例) 下記のような発話で使用をする場合   「牛丼注文して」「卵注文して」 「銀行残高を教えて」 下記のようなIntentを定義する OrderIntent {MyItem} 注文して BankIntent 銀行残高を教えて BankIntent いくら銀行に残ってる ・カスタムスロット 発話内容から部分抽出する情報の型 enum型みたいなやつ。 例) タイプ:MyItem 値: 牛丼、牛乳、白米、卵 ・インテントスキーマ インテントをJsonで定義する 例) { “intents”: [ { “intent”: “OrderIntent” slots: { “name” : “item”, “type”: “MyItem”} } { “intent”: “BankIntent” } ] }
  8. 8. Alexa開発者ポータルで設定する内容(図) 牛丼注文して <インテントスキーマ> { “intents”: [ { “intent”: “OrderIntent” slots: { “name” : “item”, “type”: “MyItem”} } { “intent”: “BankIntent” } ] } <サンプル発話> OrderIntent {MyItem} 注文して BankIntent 銀行残高を教えて BankIntent いくら銀行に残ってる 自作プログラム OR AWS Lamda Webhock(HTTPS) ※言語等の制約なし Intent: OrderIntent slot: item 牛丼 <カスタムスロット> タイプ:MyItem 値: 牛丼、牛乳、白米、卵 注文しました
  9. 9. 自作プログラム部分の処理内容 サービスリクエスト { "session": { ~ }, "request": { "type": "IntentRequest", "requestId": "EdwRequestId.4d~", "intent": { "name": "OrderIntent", "slots": { "item": { "name": "item" “value”: “牛丼” }, } }, ~ }, } } サービスレスポンス { "version": "1.0", "response": { "outputSpeech": { "ssml": "<speak>注文しました</speak>", "type": "SSML" }, "speechletResponse": { "outputSpeech": { "ssml": "<speak>注文しました</speak>" }, "shouldEndSession": false } }, "sessionAttributes": { } } Lamda or Webhock [自作プログラムでやる事 ] 受信したJsonを元に応答内 容を決定し、レスポンスを Jsonで返す Intent Slot 応答内容
  10. 10. Alexa Custom Skill を Rubyでの開発方法
  11. 11. Alexa Custom SkillをRubyで開発する方法 ・自作プログラムのデプロイ環境 下記が効率がいい気がする。 Development環境ではngrokを使ってローカルPCで開発 Product環境ではHerokuへデプロイ ※AlexaからのWebHock先はHTTPSである必要がある ・使用ライブラリ Sinatra: Railsの次位に有名なRunyのWebアプリケーション・フレームワーク ralyxa:Sinatra上で動くAlexa Custom Skill開発用ライブラリ。 Alexaのトレーニング・セミナー(海外)でも使っているらしい。 Amazon公式ブログに情報あり。 https://goo.gl/YQFZYS
  12. 12. Alexa Custom SkillをRubyで開発する方法 牛丼注文して ralyxa こんな構成で開発してみた
  13. 13. Relyxaの使い方(1) (1) 以下のディレクトリ構成を作る main.rb エントリーポイント intent Relyxaがマウントするディレクトリ -- xxx.rb intentディレクトリ以下に各 intentに対する処理を書く -- yyy.rb (2) エントリーポイント(main.rb)には下記を記載する require 'sinatra' require 'ralyxa' post '/' do Ralyxa::Skill.handle(request) end
  14. 14. Relyxaの使い方(2) (3) 各Intent毎の処理をIntentフォルダ以下に書く。 main.rb intent -- xxx.rb -- yyy.rb (3-1) ユーザの返答が必要ない場合は tell()を使う intent "OrderIntent" do tell("承知しました") end (3-2)ユーザの返答をチェックする場合は ask()を使う intent "BankIntent" do ask("山田銀行です。暗証番号を言ってください ") end (3-3) 情報を保存する場合 session_attributes引数にハッシュで指定 intent "SaveIntent" do ask("牛丼を保存しました?", session_attributes: { dataOne: "牛丼" }) end (3-4)保存した情報と取り出す場合 request.session_attribute("xxx")で取得 intent "ReadIntent" do read_data =request.session_attribute("dataOne") ask("保存したデータは: #{ read_data }") end
  15. 15. デモ 擬似 寿司注文アプリを作ってみた。 ・仕様 「Alexa、寿司アプリを開いて」 => 「いらっしゃいませ。寿司屋へようこそ」 「注文をお願いします」 => 「受けたまります。ご注文のネタをおっしゃってください」 「いか、たこ」 => 「ご確認いたします。ご注文は、いか ,たこ ですね。すぐにお持ちします」 「卵焼き、まぐろ」=> 「ご確認いたします。ご注文は、卵焼き ,いか ですねすぐにお持ちします」 「会計お願いします」 => 「お会計を致します。いか 100円。たこ100円。卵焼き100円。 まぐろ100円。合計400円になります。ありがとうございます。」 ・ソースコード https://github.com/goroya/ralyxa_test
  16. 16. Relyxaの感想 ・Rubyで簡単にAlexaアプリを作れる ・Lamdaより学習コストが低い気がする。 ※LamdaでやるならServerless Frameworkを使うと 開発しやすいかも
  17. 17. 蛇足 ・Amazon Echoもってない人はどうするよ? EchoのWebエミュレータがあるよ https://echosim.io/ ・Smart Home Skill作りたいんだけど。 OAuthサーバとかデバイス管理用の仕組みを作らなくてはいけない。 “Node-RED Alexa Home Skill Bridge”を使うと超簡単に作れるよ。 ※ただし、“Node-RED Alexa Home Skill Bridge”ようのSkillは日本のSkillストア では配信されてない。 海外用のSkillストアから使うしかないよ。 https://alexa.amazon.com/spa/index.html
  18. 18. おわり

×