ダイアログモデルを使用してあいまい応答を管理する
ダイアログモデルを使うと、スロット値を収集するコードがシンプルになるだけでなく、ユーザーが今対話全体のどこにいるのかをAlexaが理解しやすくなります。Alexaはダイアログのどこにユーザーがいるかを常に把握し、このコンテキスト情報を使って、ユーザーのあいまいな応答をどう処理すればよいかを判断できます。
このドキュメントでは、ダイアログモデルを使ったあいまい応答の処理のしくみと、このしくみをスキルに実装する例をいくつか紹介します。
ダイアログモデルの作成には、開発者コンソールを使用できます。
- ダイアログとあいまい応答について
- ダイアログモデルを使用してスキルでビルトインのはい/いいえインテントを使う
- ブール値を収集するカスタムのはい/いいえスロットを使う
- インテントの単一スロットの発話
- 関連トピック
このドキュメントの対象は、対話モデル(インテント、スロット、サンプル発話)やダイアログモデル(必須スロット、プロンプト、Dialog
ディレクティブ)関連の概念に詳しい開発者を想定しています。これらのトピックの詳細については、以下を参照してください。
ダイアログとあいまい応答について
ダイアログを開始するには、ユーザーが必須のスロットを使って設定されたインテントを呼び出します。ユーザーがスキルと対話して必要なスロット値を提供する間、Alexaはユーザーがそのダイアログフローのどこにいるかを把握し、この情報を使ってユーザーの応答をどこにルーティングするかを適切に判断することができます。
このしくみは、ユーザーが「はい」や「いいえ」などの単語を使う対話のデザインに特に有効です。こうした単語は、会話の中で頻繁に使われ、意味があいまいなため、コンテキストを正しく判断する必要があります。たとえば、「はい」と応答した場合、スキルのダイアログではいくつかの意味に解釈できます。
- スロット値についての確認プロンプトへの応答
- インテント全体についての確認プロンプトへの応答
- ブール値に準ずるカスタムスロットタイプのスロット値
- ビルトインの
AMAZON.YesIntent
を呼び出すためにダイアログ外で聞かれた質問への応答
Alexaは、ユーザーがダイアログのどこにいるかを把握し、これらの各シナリオを処理します。たとえば、ユーザーがダイアログを使用中で、そのダイアログが現在「スロットの確認を行う」ステップ(Dialog.ConfirmSlot
)にあるとします。その場合、「はい」と応答するとスロットの確認にルーティングされます。ユーザーが完全にダイアログ外にいる場合、「はい」の応答は別のAMAZON.YesIntent
インテントと推測されます。
このドキュメントの以降のセクションでは、スキルがこのしくみを活用できるシナリオを紹介します。
ダイアログモデルを使用してスキルでビルトインのはい/いいえインテントを使う
ダイアログモデルでは、単一の具体的なインテントを満たすのに必要な情報を収集するステップを識別します。スキルでは、ダイアログ外のはい/いいえの対話に、ビルトインインテントであるAMAZON.YesIntent
やAMAZON.NoIntent
を使用する場合もあります。Alexaは、ユーザーがダイアログを使用中でない場合、「はい」や「いいえ」の応答をこれらのインテントにルーティングします。
Dialog
ディレクティブの以前のバージョンでは、スキルにダイアログモデルが含まれる場合にAMAZON.YesIntent
とAMAZON.NoIntent
を使用することはできませんでしたが、この制限はなくなりました。たとえば、PlanMyTrip
インテントにダイアログモデルを使用して旅行の計画を行うスキルを考えてみましょう。このダイアログでは、出発地(fromCity
)、目的地(toCity
)、日付(travelDate
)などの変数のスロット値を収集します。ダイアログでは、fromCity
スロットでスロットの確認が必須であると設定されています。
このスキルで完全にダイアログ外のはい/いいえ応答を取得する場合に、AMAZON.YesIntent
とAMAZON.NoIntent
を含めることもできます。
ユーザー: トリッププランに、神戸からの新しい旅行を始めると言って。 (PlanMyTrip
インテントが呼び出され、fromCity
スロットに値「神戸
」が入ります。)
Alexa: 出発地は神戸ですね? (fromCity
スロットの確認プロンプトです。)
ユーザー: はい。 (ユーザーは現在スロットの確認をリクエストするダイアログを使用中なので、この「はい」という応答はfromCity
スロット値を確認するために使われます。)
...(PlanMyTrip
インテントの残りのスロット値を収集して確認するために、ダイアログで追加のステップがやり取りされます。ダイアログが完了すると、スキルはPlanMyTrip
に最終的な応答を送信し、ユーザーのリクエストを実行します。)
Alexa: 旅行を保存しました。別の旅行も計画しますか? (前のダイアログは完了しているため、この質問へのユーザーの応答はダイアログ外であり、PlanMyTrip
インテントとは関連付けられません。)
ユーザー: はい。 (この時点でユーザーはダイアログ外にいるため、この応答はAMAZON.YesIntent
を呼び出します。)
スキルはAMAZON.YesIntent
を適切に処理します...
ブール値を収集するカスタムのはい/いいえスロットを使う
一部のシナリオでは、ダイアログ中にブール値に準ずる値を収集するために、ユーザーから「はい」または「いいえ」の値を取得する必要がある場合があります。ダイアログモデルは特定のインテントに紐づけられており、インテントを変更することはできないため、ビルトインインテントであるAMAZON.YesIntent
インテントとAMAZON.NoIntent
インテントはこのシナリオには適しません。
この場合、関連する値(「はい」、「いいよ」、「オッケー」、「もちろん」など)のカスタムスロットタイプを定義して、スロットにはい/いいえの値を収集できます。ダイアログでこのスロットを使うと、Alexaはダイアログのさまざまなステップ(スロットの要求、スロットの確認、インテントの確認)を区別して、「はい」または「いいえ」の回答を適切にルーティングすることができます。
ユーザーが言う可能性のあるさまざまな語句に対応するには、スロットタイプ定義に同義語を含めます。
{
"types": [
{
"name": "YES_NO_SLOT",
"values": [
{
"id": "TRUE",
"name": {
"value": "はい",
"synonyms": [
"うん",
"いいよ",
"そう",
"おねがい",
"そのとおり"
]
}
},
{
"id": "FALSE",
"name": {
"value": "いいえ",
"synonyms": [
"ううん",
"いや",
"結構です"
]
}
}
]
}
]
}
上記のタイプ定義のサンプルでは、「うん」などの肯定的な応答がすべてスキルに送信されます。
- ユーザーが言った値:"うん"
- 標準的な値:"はい"
- 定義されたID: "TRUE"
同義語の定義とスロット値に解決する方法の詳細については、スロットタイプ値の同義語とIDを定義する(エンティティ解決)を参照してください。スキル内のスロットデータをJSON形式でどう表記するかの詳細については、Slotオブジェクトを参照してください。
ユーザーとの会話中、Alexaはダイアログ内のステップを常に把握し、「はい」と「いいえ」の値を適切にルーティングします。
…対話を開始してfromCity
スロットに「神戸
」を取得するステップです。
Alexa: 出発地は神戸ですね? (fromCity
スロットの確認プロンプトです。)
ユーザー: はい。 (ユーザーは現在スロットの確認をリクエストするダイアログを使用中なので、この「はい」という応答はfromCity
スロット値を確認するために使われます。)
Alexa: この旅行用に旅行保険に加入されますか? (カスタムのYES_NO_SLOT
タイプを使って定義したブール値に準ずるbuyInsurance
スロットの要求です。)
ユーザー: いいえ。 (ユーザーの応答がbuyInsurance
スロットに入ります。)
スキルの対話が続きます...
インテントの単一スロットの発話
多くのスキルでは、他のフレーズがない単一のスロット値のみを言ってインテントを呼び出すのが、ユーザーにとって非常に自然な場合があります。この場合、Alexaはユーザーがダイアログのどこにいるかに応じて発話をルーティングできます。
Dialog
ディレクティブの以前のバージョンでは、スキルにダイアログモデルが含まれる場合に単一のスロット値のサンプル発話を使用することはできませんでしたが、この制限はなくなりました。たとえば、PlanMyTrip
インテントが以下のような発話で設定されたとします。
{toCity}
{toCity}に行きたい
{toCity}への旅行を計画して
...(など)
この場合、ユーザーは以下のようにスキルを呼び出すことができます。
ユーザー: トリッププラン、札幌
ユーザーはまだダイアログを使用していないため、Alexaは発話の「札幌」をtoCity
スロットの値として解決し、toCity
に値を入れてPlanMyTrip
インテントを呼び出します。ダイアログはそこから始まります。
逆に、ユーザーが既にダイアログ内のスロットの要求ステップにいる場合、同じ単一スロットの発話でも値がそのスロットに入るだけでインテントが呼び出されることはありません。
ユーザー: トリッププラン、札幌(スキルが起動し、toCity
に「札幌」が入れられてPlanMyTrip
インテントが呼び出されます。)
Alexa: どこから旅行に出発しますか? (fromCity
スロットの要求プロンプトです。)
ユーザー: 神戸(このあいまいな発話はPlanMyTrip
インテントの発話、fromCity
スロットの発話、toCity
スロットの発話に一致します。)ユーザーは現在fromCity
スロットの要求ステップにいるため、Alexaはこの値をfromCity
に使用します。)
関連トピック
最終更新日: 2022 年 01 月 19 日