SlideShare una empresa de Scribd logo
1 de 18
Descargar para leer sin conexión
RubyでAlexaプログラミング
@gogoroya
自己紹介
Twitter @gogoroya
所在 長野市
Ruby歴(というよりRails歴) 1年位
最近やってる事
Node.js, React Native, AWS Lamda, (New) Alexa
Alexaとは
Amazonが開発したAIアシスタント。
スマートスピーカ Amazon Echoに搭載。
Amazon Echo
11月発売開始(招待制) これ買った
Alexa Skill プログラミング
Alexa Skillとは
Alexa対応デバイス(Amazon Echo等)から取得した音声情報を処理するプログラム。
以下の種類がある
・カスタムスキル <= 今日話すやつ
   自作アプリを作るスキル
・スマートホームスキル
スマートホーム・デバイスの操作に特化したスキル
・フラッシュプリーフィングスキル
ニュース配信用(RSS,JSON)のスキル
Alexa Custom Skillのアーキテクチャ
OR
AWS Lamda
Webhock(HTTPS)
※言語等の制約なし
Alexa、すき屋で牛丼注文して
承りました
Amazon echoから受信した情報をテキスト情報に
変換、整形してLamdaまたはWebhockに処理させる
開発者ポータル
Alexa Skill開発に必要な作業
(1)発話フレーズとIntent&Slotを結びつける設定をする作業
OR
AWS Lamda
Webhock(HTTPS)
※言語等の制約なし
(2)受信したテキスト情報を元に応答を
返す自作プログラムの開発
マグロ食べたい
Intent : SusiOrderIntent
Slot: Neta: マグロ
開発者ポータル
Alexa開発者ポータルで設定する内容
・サンプル発話
ユーザがechoに話しかけるフレーズのサンプル
インテントに対してサンプル発話を紐づける
例)
下記のような発話で使用をする場合
  「牛丼注文して」「卵注文して」
「銀行残高を教えて」
下記のようなIntentを定義する
OrderIntent {MyItem} 注文して
BankIntent 銀行残高を教えて
BankIntent いくら銀行に残ってる
・カスタムスロット
発話内容から部分抽出する情報の型
enum型みたいなやつ。
例)
タイプ:MyItem
値: 牛丼、牛乳、白米、卵
・インテントスキーマ
インテントをJsonで定義する
例) { “intents”: [
{ “intent”: “OrderIntent”
slots: { “name” : “item”, “type”: “MyItem”}
}
{ “intent”: “BankIntent” }
] }
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
値: 牛丼、牛乳、白米、卵
注文しました
自作プログラム部分の処理内容
サービスリクエスト
{
"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
応答内容
Alexa Custom Skill を
Rubyでの開発方法
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
Alexa Custom SkillをRubyで開発する方法
牛丼注文して
ralyxa
こんな構成で開発してみた
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
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
デモ
擬似 寿司注文アプリを作ってみた。
・仕様
「Alexa、寿司アプリを開いて」 => 「いらっしゃいませ。寿司屋へようこそ」
「注文をお願いします」 => 「受けたまります。ご注文のネタをおっしゃってください」
「いか、たこ」 => 「ご確認いたします。ご注文は、いか ,たこ ですね。すぐにお持ちします」
「卵焼き、まぐろ」=> 「ご確認いたします。ご注文は、卵焼き ,いか ですねすぐにお持ちします」
「会計お願いします」 => 「お会計を致します。いか 100円。たこ100円。卵焼き100円。
まぐろ100円。合計400円になります。ありがとうございます。」
・ソースコード
https://github.com/goroya/ralyxa_test
Relyxaの感想
・Rubyで簡単にAlexaアプリを作れる
・Lamdaより学習コストが低い気がする。
※LamdaでやるならServerless Frameworkを使うと
開発しやすいかも
蛇足
・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
おわり

Más contenido relacionado

Similar a Rubyでalexaプログラミング

AWS CLIでAlexaのカスタムスキルをデプロイしている話
AWS CLIでAlexaのカスタムスキルをデプロイしている話AWS CLIでAlexaのカスタムスキルをデプロイしている話
AWS CLIでAlexaのカスタムスキルをデプロイしている話
Yasuyuki Sato
 

Similar a Rubyでalexaプログラミング (11)

Alexa Skills Kitの始め方
Alexa Skills Kitの始め方Alexa Skills Kitの始め方
Alexa Skills Kitの始め方
 
Alexaスキルを作ろう
Alexaスキルを作ろうAlexaスキルを作ろう
Alexaスキルを作ろう
 
Alexa SDK Alexa Salon
Alexa SDK Alexa SalonAlexa SDK Alexa Salon
Alexa SDK Alexa Salon
 
Alexa Skills Kitでプロダクトの可能性を広げる
Alexa Skills Kitでプロダクトの可能性を広げるAlexa Skills Kitでプロダクトの可能性を広げる
Alexa Skills Kitでプロダクトの可能性を広げる
 
自然言語処理サービスとRaspberry PIで自分だけの音声入力デバイスを作ろう
自然言語処理サービスとRaspberry PIで自分だけの音声入力デバイスを作ろう自然言語処理サービスとRaspberry PIで自分だけの音声入力デバイスを作ろう
自然言語処理サービスとRaspberry PIで自分だけの音声入力デバイスを作ろう
 
Amazon AlexaとServerless
Amazon AlexaとServerlessAmazon AlexaとServerless
Amazon AlexaとServerless
 
俺の話を聞け!Lt大会#7
俺の話を聞け!Lt大会#7俺の話を聞け!Lt大会#7
俺の話を聞け!Lt大会#7
 
15分でできるAmazon Alexa Skill開発
15分でできるAmazon Alexa Skill開発15分でできるAmazon Alexa Skill開発
15分でできるAmazon Alexa Skill開発
 
AlexaでスマートホームをDIYする
AlexaでスマートホームをDIYするAlexaでスマートホームをDIYする
AlexaでスマートホームをDIYする
 
AWS CLIでAlexaのカスタムスキルをデプロイしている話
AWS CLIでAlexaのカスタムスキルをデプロイしている話AWS CLIでAlexaのカスタムスキルをデプロイしている話
AWS CLIでAlexaのカスタムスキルをデプロイしている話
 
Build Dockferile with Haskell
Build Dockferile with HaskellBuild Dockferile with Haskell
Build Dockferile with Haskell
 

Rubyでalexaプログラミング