SlideShare ist ein Scribd-Unternehmen logo
1 von 18
Downloaden Sie, um offline zu lesen
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
おわり

Weitere ähnliche Inhalte

Ähnlich wie Rubyでalexaプログラミング

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

Ähnlich wie 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
 

Kürzlich hochgeladen

Kürzlich hochgeladen (7)

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 

Rubyでalexaプログラミング