必要な情報を収集、確認するためにダイアログを定義する
ダイアログモデルは、プロンプト、およびスロット値とインテントを修正、検証、確認するユーザーの発話を識別します。ダイアログモデルを使用して、Alexaが会話の中で次の手順を決め、さらに詳しい情報をユーザーに求めることができるようにします。ダイアログをDialog.ElicitSlot
などのDialog
ディレクティブを使用して手動で管理する場合、ダイアログモデルも精度を向上させます。
- ダイアログモデルのコンポーネント
- 必須のスロットとプロンプトを指定する
- スロットの確認を有効にする
- インテントの確認を有効にする
- 検証ルールを定義する
- スキルとインテントのオートデリゲートを有効または無効にする
- インテントスロットの順序を設定する
- ダイアログモデルのJSON(対話モデルのスキーマ)
- 関連トピック
ダイアログモデルのコンポーネント
ダイアログモデルには4つのコンポーネントがあります。
- 必須のスロットとプロンプト: 必須のスロットとは、ユーザーのリクエストを実行するためにスキルに必須の情報のことです。たとえば、
PlanMyTrip
インテントが旅の詳細をリストに保存するためには、少なくとも出発地(fromCity
)、目的地(toCity
)、日付(travelDate
)が必要です。Alexaがスロット値を求める順序を制御することができます。 - スロットの確認プロンプト: 任意で、必須のスロットを要確認として指定することもできます。これは、次に進む前にユーザーが「はい」または「いいえ」の回答でスロット値を確認する必要があるということです。頻繁に確認を求められるとユーザーは煩わしく感じるかもしれないため、このプロンプトは慎重に使用してください。
- インテントの確認プロンプト: インテント全体で確認を必須と指定することができます。商品を注文したり、予約を行ったりするスキルでよく使われます。このプロンプトは通常、事前に入力されたすべての情報をユーザーに何度も返して、確認できるようにします。このプロンプトもユーザーを煩わせないよう、 慎重に使用する必要があります。
- スロット検証ルールとプロンプト: ユーザーが提供したスロット値が有効であるとして合格する必要のある検証ルール一式を設定できます。値が検証に通らなかった場合は、Alexaはユーザーの作成したプロンプトを使用して、訂正値を求めます。必須のスロットと必須ではないスロットのどちらにもスロット検証ルールを使用できます。
ダイアログモデルには、 ダイアログをAlexaにオートデリゲートするかどうかを示すフラグも含まれています。これにより、Alexaはこれらのプロンプトを使用して、スキルにリクエストを送信する前に、必要なすべての情報をユーザーから収集します。
必須のスロットとプロンプトを指定する
スロットが必須な場合、ユーザーのリクエストを完了する前に、スキルに有効な値を用意しておく必要があります。
プロンプトと発話を定義してこれらの必要なスロット値を収集します。これらのプロンプトと発話を使用して、ユーザーからスロット値を収集するには、ダイアログをAlexaにデリゲートします。
セクション | 説明 | 例 |
---|---|---|
Alexaの音声プロンプト |
Alexaがユーザーにスロット値をたずねる質問です。
|
|
ユーザーの発話 |
プロンプトで提供される質問に回答するためにユーザーが話す可能性のある発話。
|
|
上記の例では、fromCity
スロットを使用すると次のような会話になります。
ユーザー: アレクサ、トリッププランで、金曜日の旅行を計画したい(この発話には、1つの必須のスロット(travelDate
)の値が含まれていますが、fromCity
とtoCity
がありません。)
トリッププラン: 出発地はどこですか? (fromCity
に対して定義されているAlexaプロンプトの1つ。)
ユーザー: 神戸から出発します
必須のスロットのプロンプトと発話を編集するには、次のようにします。
-
左側のナビゲーションで、インテントとそのスロットのリストを見つけ、スロット名をクリックします。
特定のインテントの詳細ページから開始する場合、サンプル発話の下のインテントスロットを見つけて、ダイアログを編集リンクをクリックします。
- スロット入力の下の、このインテントを完了させるために、このスロットは必須ですか?オプションを有効化します。
- Alexaの音声プロンプトとユーザーの発話セクションに入力します。
スロットの確認を有効にする
スロットの確認が必要な場合、スキルはユーザーが「はい」または「いいえ」でスロット値を確認するよう求める必要があります。
プロンプトのセットを定義して、この確認をユーザーから取得します。ユーザーとのダイアログでこれらのプロンプトを使用するには、ダイアログをAlexaにデリゲートします。
セクション | 説明 | 例 |
---|---|---|
Alexaの音声プロンプト |
Alexaがユーザーにスロット値を確認するための質問です。 |
|
上記の例では、fromCity
スロットを使用すると次のような会話になります。
ユーザー: アレクサ、トリッププランで金曜日に神戸から京都への旅行を計画したい(この発話にはすべての必須のスロット(fromCity
、toCity
、travelDate
)が含まれています。)
トリッププラン: 出発地は神戸ですね? (fromCity
スロット値の確認プロンプトです。)
ユーザー: はい。
対話は続きます…
必須のスロットの確認を有効にするには、次のようにします。
-
左側のナビゲーションで、インテントとそのスロットのリストを見つけ、スロット名をクリックします。
特定のインテントの詳細ページから開始する場合、サンプル発話の下のインテントスロットを見つけて、ダイアログを編集リンクをクリックします。
-
スロットの確認の下のこのスロットには確認が必要ですか?オプションを有効化します。
注: 確認を必須とするには、スロット自体も必須でなければなりません。 -
Alexaの音声プロンプトセクションにプロンプトを入力します。
インテントの確認を有効にする
インテント全体で確認が必要な場合、スキルはインテントのアクションを「はい」か「いいえ」で確認するようユーザーに求める必要があります。
プロンプトのセットを定義して、この確認をユーザーから取得します。ユーザーとのダイアログでこれらのプロンプトを使用するには、ダイアログをAlexaにデリゲートします。
セクション | 説明 | 例 |
---|---|---|
Alexaの音声プロンプト |
Alexaがユーザーにインテント全体を確認するための質問。
|
|
上記の例を使用したPlanMyTrip
インテントでは、次のような会話になります。
…インテントを呼び出し、ユーザーにfromCity
、toCity
、travelDate
をたずねるやり取りを行いました。
トリッププラン: 4月21日の神戸から京都への旅行を保存します。よろしいでしょうか? (インテントの確認プロンプト)
ユーザー: はい。
インテントの確認を有効にするには、次のようにします。
- 左側のナビゲーションでインテントをクリックして、インテントの詳細ページを開きます。
- インテントの確認の下で、このインテントには確認が必須ですか?を有効にします。
- インテントのAlexaの音声プロンプトに入力します。
検証ルールを定義する
スロット検証では、スロット値の検証ルールを作成できます。Alexaはそれらのルールに違反するユーザー応答をチェックし、入力不可の値が入力された場合は、プロンプトを表示します。
さまざまなタイプのスロットに適応できるルールがいくつかあります。すべてのルールやスロット検証の動作について詳しくは、 スロット値の検証を参照してください。
ユーザーとのダイアログでこれらの検証ルールとプロンプトを使用するには、ダイアログをAlexaにデリゲートします。
検証ルールを作成するには:
-
左側のナビゲーションで、インテントとそのスロットのリストを見つけ、スロット名をクリックします。
または、特定のインテントのページから、サンプル発話の下のインテントスロットセクションでスロットを見つけて、ダイアログを編集リンクをクリックします。
- スロットタイプフィールドの下で検証を選択します。
- 検証ルールを作成で、使用するルールを選択して「+」記号をクリックします。
- リストにはスロットのタイプに関連する検証ルールだけが表示されます。
- ルールの詳細については、検証ルールを参照してください。
- 比較対象の値など、ルールに固有の追加フィールドを入力します。これはルールによって異なります。検証ルールを参照してください。
-
ルールの下に、ユーザーに新しい値を要求するためにAlexaが表示するプロンプトを少なくとも1つ入力します。
波括弧(
{ }
)にスロット名を含めることができます。これにより、Alexaは検証に失敗した値を繰り返して聞き直すことができます。 - 対話モデルは必ず保存してビルドしてください。
スキルとインテントのオートデリゲートを有効または無効にする
デリゲートの動作やサンプルについて詳しくは、 Alexaにダイアログをデリゲートするを参照してください。
すべてのスキルには、スキルレベルのオートデリゲート設定があります。このオプションは有効または無効にできます。オートデリゲートは、新しいスキルではデフォルトで有効になっています。
ダイアログモデルのある各インテントには、ダイアログデリゲートのルール設定があります。これは次の3つのオプションのうちいずれかに設定できます:
- オートデリゲートを有効化:スキル全体のデリゲートルールに関係なく、このインテントにオートデリゲートを使用します。
- オートデリゲートを無効化:全体のデリゲートルールに関係なく、このインテントにオートデリゲートを使用しません。
- スキル設定にフォールバック:スキル全体にオートデリゲートを使用します。最初にダイアログモデルをインテントに追加すると、これはそのインテントのデフォルトになります。
インテントのダイアログデリゲートのルール設定は、常にスキルレベルのオートデリゲート設定より優先されます。たとえば、オートデリゲートがスキルで有効になっているが、ダイアログデリゲートのルールが特定のインテントで無効になっている場合は、そのインテントではデリゲートは使用されません。
スキル全体のオートデリゲートオプションを設定する
スキルレベルのオートデリゲートオプションを、使用を予定しているほとんどのインテントに適用する場合は、必要に応じて、インテントレベルでオプションを上書きします。
- 開発者コンソールで、ビルド>カスタム>インターフェースに移動します。
- オートデリゲートオプションを有効または無効にし、インターフェースをクリックします。必ずモデルをビルドをクリックして対話モデルを再ビルドしてください。
ユーザーの対話モデルのJSONのオートデリゲートオプションを設定することもできます。
スキルレベルのオートデリゲート設定は、ダイアログモデルのないインテントでは無視されます。
インテントに使用するスキルのオートデリゲートルールを上書きする
ダイアログデリゲートのルールオプションは、ダイアログモデルのないインテントでは無効になります。
- 左側のナビゲーションでインテントをクリックして、インテントの詳細ページを開きます。
- ダイアログデリゲートのルールで、このインテントに使用するルールを選択します。
インテントのユーザーの対話モデルのJSONのオートデリゲートオプションを設定することもできます。
インテントスロットの順序を設定する
Alexaが各必須のスロット値を求める順序を制御することができます。この順序は、インテントの詳細ページのインテントスロットセクションに表示されます。
- 左側のナビゲーションで、インテントとそのスロットのリストを見つけ、スロット名をクリックします。
- インテントスロットで、スロットの順序を確認します。スロットをドラッグして順序を変更します。
ダイアログをAlexaにデリゲートするときに、Alexaはスロット順序を使用してダイアログの次の手順を決めます。
ダイアログモデルのJSON(対話モデルのスキーマ)
JSONエディタでダイアログモデルのJSON表現の確認や編集ができます。interactionModel.dialog.intents
プロパティには、ダイアログモデルで各インテントのダイアログ設定を表すオブジェクトの配列が含まれます。interactionModel.prompts
プロパティには、指定されたプロンプトを表すオブジェクトの配列が含まれます。スロットのユーザーの発話はこの構造には含まれません。発話は、interactionModel.languageModel.intents
の一部として定義されます。
この例では、いくつかの必須スロットのあるPlanMyTrip
インテントのダイアログとプロンプトを示しています。fromCity
スロットもスロットの確認を使用し、インテント全体がインテントの確認を使用します。
簡潔に表現するため、languageModel
プロパティは示していません。対話モデルJSONの詳細については、対話モデルのスキーマを参照してください。
{
"interactionModel": {
"dialog": {
"delegationStrategy": "SKILL_RESPONSE",
"intents": [
{
"name": "PlanMyTrip",
"delegationStrategy": "ALWAYS",
"confirmationRequired": true,
"prompts": {
"confirmation": "Confirm.Intent.1096343369896"
},
"slots": [
{
"name": "travelDate",
"type": "AMAZON.DATE",
"confirmationRequired": false,
"elicitationRequired": true,
"prompts": {
"elicitation": "Elicit.Slot.924477721275.367201351270"
},
"validations": [
{
"type": "isInDuration",
"prompt": "Slot.Validation.792776084863.1060909439418.1047786686510",
"start": "P1D",
"end": ""
}
]
},
{
"name": "toCity",
"type": "AMAZON.CITY",
"confirmationRequired": false,
"elicitationRequired": true,
"prompts": {
"elicitation": "Elicit.Slot.924477721275.885841590425"
}
},
{
"name": "fromCity",
"type": "AMAZON.CITY",
"confirmationRequired": true,
"elicitationRequired": true,
"prompts": {
"confirmation": "Confirm.Slot.186469474087.1029396093044",
"elicitation": "Elicit.Slot.924477721275.191955839720"
}
},
{
"name": "travelMode",
"type": "LIST_OF_TRAVEL_MODES",
"confirmationRequired": false,
"elicitationRequired": true,
"prompts": {
"elicitation": "Elicit.Slot.924477721275.266137038000"
}
},
{
"name": "activity",
"type": "LIST_OF_ACTIVITIES",
"confirmationRequired": false,
"elicitationRequired": true,
"prompts": {
"elicitation": "Elicit.Slot.924477721275.1297414747229"
}
}
]
}
]
},
"prompts": [
{
"id": "Elicit.Slot.924477721275.367201351270",
"variations": [
{
"type": "PlainText",
"value": "この旅行はいつですか?"
},
{
"type": "PlainText",
"value": "いつ旅行に行きますか?"
},
{
"type": "PlainText",
"value": "何日に旅行に行きますか?"
}
]
},
{
"id": "Elicit.Slot.924477721275.885841590425",
"variations": [
{
"type": "PlainText",
"value": "旅行の行き先を教えてください。"
},
{
"type": "PlainText",
"value": "旅行先はどちらですか?"
},
{
"type": "PlainText",
"value": "どちらにお出かけですか?"
}
]
},
{
"id": "Elicit.Slot.924477721275.191955839720",
"variations": [
{
"type": "SSML",
"value": "<speak><emphasis level='strong'>どこから</emphasis>旅行に出発したいと考えていましたか</speak>"
},
{
"type": "PlainText",
"value": "どこから旅行に出発しますか?"
},
{
"type": "PlainText",
"value": "出発地はどこですか?"
}
]
},
{
"id": "Elicit.Slot.924477721275.266137038000",
"variations": [
{
"type": "PlainText",
"value": "どうやって{toCity}に行きますか?"
}
]
},
{
"id": "Elicit.Slot.924477721275.1297414747229",
"variations": [
{
"type": "PlainText",
"value": "この旅行ではどんなアクティビティを計画していますか?"
},
{
"type": "PlainText",
"value": "{toCity}ではどんなことをする予定ですか?"
}
]
},
{
"id": "Confirm.Intent.1096343369896",
"variations": [
{
"type": "PlainText",
"value": "{travelDate}の{fromCity}から{toCity}への旅行を保存しますがよろしいでしょうか?"
},
{
"type": "PlainText",
"value": "{travelDate}に{fromCity}から{toCity}への旅行でよろしいでしょうか?"
},
{
"type": "PlainText",
"value": "{travelDate}の{fromCity}から{toCity}への旅行を保存します。よろしいですか?"
}
]
},
{
"id": "Confirm.Slot.186469474087.1029396093044",
"variations": [
{
"type": "PlainText",
"value": "旅行は{fromCity}から出発でよろしいでしょうか?"
},
{
"type": "PlainText",
"value": "{fromCity}からの出発と聞こえましたが合っていますか?"
},
{
"type": "PlainText",
"value": "{fromCity}から出発でよろしいですか?"
},
{
"type": "PlainText",
"value": "{fromCity}から出発とおっしゃいましたか?"
}
]
},
{
"id": "Slot.Validation.792776084863.1060909439418.1047786686510",
"variations": [
{
"type": "PlainText",
"value": "過去の日付の旅行は計画できません。未来の日付を教えてください"
},
{
"type": "PlainText",
"value": "未来の日付を教えてください"
}
]
}
]
}
}
関連トピック
- Dialogインターフェースのリファレンス
- スキルの対話モデルの作成
- インテント、発話、スロットの作成
- カスタムスロットタイプの作成と編集
- 発話をテストして対話モデルを改善する
- スロット値の検証
- Alexaデザインガイド
- 開発者コンソールを使用したスキルの管理
- スキルのビルド