Alexaのスキルを書くのは初めてなので、スピーカーの言葉を保存するスキルを書きたいです。
たとえば、「Alexa、save what what say」と言う場合、単語を何らかの文字列で保存する必要があります。
今、私が理解していることから、インテントスキーマは次のようになります。
{
intents:[
"intent" : "SaveIntent"
]
}
のような発話
SaveIntent save
SaveIntent store
この場合、「{whatever I say}」を保存するにはどうすればよいですか?
(可能な値の定義済みリストではなく)自由形式の音声入力をキャプチャするには、Amazon.LITERAL
スロットタイプを使用する必要があります。 リテラルスロットタイプのAmazonドキュメント は、フレーズを取得してソーシャルメディアサイトに投稿するスキルが作成される、あなたと同様のユースケースを説明しています。これは、StatusUpdateインテントを作成することにより行われます。
{
"intents": [
{
"intent": "StatusUpdate",
"slots": [
{
"name": "UpdateText",
"type": "Amazon.LITERAL"
}
]
}
]
}
Amazon.LITERAL
スロットタイプを使用するため、このインテントは任意のフレーズをキャプチャできます。ただし、音声エンジンが実世界のフレーズを適切にキャプチャできるようにするには、ユーザーが言うことを期待する種類に似たさまざまな発話例を提供する必要があります。
説明したシナリオでは、very動的フレーズをキャプチャしようとしていることを考えると、ドキュメントにはいくつかの追加の考慮事項がありますに:
Amazon.LITERALタイプを使用して、スロットに含まれる可能性のある単語数が大きく異なる自由形式のテキストを収集する場合は、次の点に注意してください。
- この全範囲(最小、最大、およびその間のすべて)をカバーするには、非常に大きなサンプルセットが必要です。上記のスロット値ワードのすべてのバリエーションに対処するために、数百以上のサンプルを提供してください。
- ユーザーが一時停止することなくフレーズ全体を発声できるように、スロット内のフレーズは十分に短くしてください。
音声入力が長いと、精度が低下する可能性があるため、スロット値に数単語以上を必要とする音声言語インターフェイスの設計は避けてください。ユーザーが一時停止せずに話すことができないフレーズは、スロットの値には長すぎます。
とはいえ、ここにドキュメントのサンプル発話のサンプルがあります。
StatusUpdateは更新を投稿します{arrived | UpdateText}
StatusUpdateは更新を投稿します{夕食時間| UpdateText}
StatusUpdateが更新を投稿{out at at lunch | UpdateText}
...(4〜10単語のフレーズを示すサンプル)
StatusUpdateは更新を投稿します{今晩食料品店に立ち寄ります| UpdateText}
さまざまな長さの十分な例を提供して、予想されるユーザーの発話の範囲の正確な図を提供する場合、意図は、UpdateText
スロットでアクセスできる実際のユースケースで動的フレーズを正確にキャプチャできます。 。これに基づいて、ニーズに固有のインテントを実装できるはずです。
重要:Amazon.LITERALは2018年10月22日で廃止されます。Amazon.LITERALで構築された古いスキルは引き続き機能しますが、これらの古いスキルを更新する場合、および新しいすべての場合、Amazon.LITERALから移行する必要がありますスキル
Amazon.LITERALを使用する代わりに、カスタムスロットを使用して、Alexaにフリーフローテキストをバックエンドに渡すように仕向けることができます。
これを行うには、この構成を使用できます。
{
"interactionModel": {
"languageModel": {
"invocationName": "siri",
"intents": [
{
"name": "SaveIntent",
"slots": [
{
"name": "text",
"type": "catchAll"
}
],
"samples": [
"{text}"
]
}
],
"types": [
{
"name": "catchAll",
"values": [
{
"name": {
"value": "allonymous isoelectrically salubrity apositia phantomize Sangraal externomedian phylloidal"
}
},
{
"name": {
"value": "imbreviate Bertie arithmetical undramatically braccianite eightling imagerially leadoff"
}
},
{
"name": {
"value": "mistakenness preinspire tourbillion caraguata chloremia unsupportedness squatarole licitation"
}
},
{
"name": {
"value": "Cimbric sigillarid deconsecrate acceptableness balsamine anostosis disjunctively chafflike"
}
},
{
"name": {
"value": "earsplitting mesoblastema outglow predeclare theriomorphism prereligious unarousing"
}
},
{
"name": {
"value": "ravinement pentameter proboscidate unexigent ringbone unnormal Entomophila perfectibilism"
}
},
{
"name": {
"value": "defyingly amoralist toadship psoatic boyology unpartizan merlin nonskid"
}
},
{
"name": {
"value": "broadax lifeboat progenitive betel ashkoko cleronomy unpresaging pneumonectomy"
}
},
{
"name": {
"value": "overharshness filtrability visual predonate colisepsis unoccurring turbanlike flyboy"
}
},
{
"name": {
"value": "kilp Callicarpa unforsaken undergarment maxim cosenator archmugwump fitted"
}
},
{
"name": {
"value": "ungutted pontificially Oudenodon fossiled chess Unitarian bicone justice"
}
},
{
"name": {
"value": "compartmentalize prenotice achromat suitability molt stethograph Ricciaceae ultrafidianism"
}
},
{
"name": {
"value": "slotter archae contrastimulant sopper Serranus remarry pterygial atactic"
}
},
{
"name": {
"value": "superstrata shucking Umbrian hepatophlebotomy undreaded introspect doxographer tractility"
}
},
{
"name": {
"value": "obstructionist undethroned unlockable Lincolniana haggaday vindicatively tithebook"
}
},
{
"name": {
"value": "unsole relatively Atrebates Paramecium vestryish stockfish subpreceptor"
}
},
{
"name": {
"value": "babied vagueness elabrate graphophonic kalidium oligocholia floccus strang"
}
},
{
"name": {
"value": "undersight monotriglyphic uneffete trachycarpous albeit pardonableness Wade"
}
},
{
"name": {
"value": "minacious peroratory filibeg Kabirpanthi cyphella cattalo chaffy savanilla"
}
},
{
"name": {
"value": "Polyborinae Shakerlike checkerwork pentadecylic shopgirl herbary disanagrammatize shoad"
}
}
]
}
]
}
}
}
スロットタイプ Amazon.SearchQuery を使用して試すことができます。だからあなたの意図はこのようなものになるだろう
{
"intents": [
{
"intent": "SaveIntent",
"slots": [
{
"name": "UpdateText",
"type": "Amazon.SearchQuery"
}
]
}
]
}
2018年末現在、SearchQuery
を使用してユーザーの発言を取得しています。
それは動作し、私は本番システムでそれを持っています。
ただし、ユーザーに何かを尋ねてスロットを埋める必要があります。
例えば:
query
という名前のSearchQueryのスロットタイプを定義します(任意の名前を選択します)I want to watch {query}
または{query}
またはI want {query}
などのスロットプロンプトにサンプルの発話を追加しますconst message = 'What movie do you want to watch?'
handlerInput
.responseBuilder
.speak(message)
.reprompt(message)
.addElicitSlotDirective('query')
.getResponse();
(8/5/17)残念ながら、この機能はAmazon.LITERALSの廃止によりAmazonから削除されました。
ただし、、自由形式の入力をキャプチャすることに興味があるかどうかに応じて、1つのWordをキャプチャする入力MODE
、都市、数字、文字、記号などを一度に入力し、それらをメッセージなしで1つの変数にまとめます。
ユーザー入力を収集して連結するように変更できるパスワード入力モードで作業しました。入力は遅くなりますが、ラムダ関数を最適化すると、いくつかの文を入力するための高速なユーザーエクスペリエンスを実現できる場合があります。構造が重要です。コードは簡単に変更できます。
Amazon Alexa Skills Kit(ASK)数字と数字の混合文字列に入力を与える方法?https://stackoverflow.com/a/45515598/8408056