スキルの対話モデルの作成
Alexa Skills Kitを使って、カスタム対話モデルでスキルを作成することができます。スキルのロジックを実装するだけでなく、ユーザーがそのスキルと対話するための音声インターフェースも定義します。音声インターフェースを定義するには、ユーザーの音声入力を、クラウドベースのサービスで処理可能なインテントに対応付けます。
このマッピングを宣言するためには、以下を入力します。
- インテント: インテントとは、ユーザーの音声によるリクエストを満たすアクションのことです。インテントでは、スロットという引数を任意で使用することもできます。インテントは、インテントスキーマと呼ばれるJSON構造で指定されます。
- サンプル発話: インテントに対応付けられた、会話に使用されると考えられる一連のフレーズです。これには、よく使われるフレーズができるだけ多く含まれている必要があります。
- カスタムスロットタイプ: 使用されると考えられる一般的なスロット値のリストです。カスタムスロットタイプは、Amazonの標準スロットタイプでサポートされていない項目のリストに使用します。
- ダイアログモデル(任意): 各インテントを実行するのに必要なすべての情報を収集する、スキルとユーザー間のマルチターンの会話の手順を指定します。情報を集めるための質問用のコードの記述を簡素化できます。
このドキュメントでは、これらの構成要素について定義し、開発者コンソールで作成する方法を説明します。
- インテント、スロット、ダイアログについて
- 対話モデルとダイアログモデルを作成する手順
- モデルを保存してビルドする
- 対話モデルとダイアログモデルでJSONコードを表示して編集する
- 以前のバージョンの対話モデルを使用する
- テストして対話モデルを改善する
- 対話モデルの制限
- 関連トピック
インテント、スロット、ダイアログについて
このセクションでは、対話モデルの構成要素を簡単に説明します。
インテントとスロット
インテントとは、ユーザーの音声によるリクエストを満たすアクションのことです。インテントでは、スロットという引数を任意で使用することもできます。たとえば、旅行を計画するスキルでは、fromCity
、toCity
、travelDate
という名前のスロットを含むPlanMyTrip
という名前のインテントを定義することができます。ユーザーが次のように話すとします。
ユーザー: アレクサ、トリッププランを開いて次の金曜日に神戸から京都までの旅行を計画して
Alexaサービスは、トリッププランにPlanMyTrip
インテントを送ります。その際、fromCity
スロットには値「神戸」、toCity
スロットには「京都」、travelDate
スロットには次の金曜日の日付を指定します。次にAlexaがこの情報を保存し、テキストを送り返して音声に変換します。
スロットはさまざまなタイプで定義されます。上記の例のtravelDate
スロットはAmazonの標準AMAZON.DATE
タイプを使用して日付(「今日」や「次の金曜日」)を示す単語を日付形式に変換します。fromCity
とtoCityはどちらも標準AMAZON.Cityスロットを使用します。旅行でどのようなアクティビティを予定しているかユーザーにたずねるようこのスキルを拡張した場合、カスタムスロットタイプLIST_OF_ACTIVITIES
を追加して、「ハイキング」、「ショッピング」、「スキー」などのアクティビティのリストを参照することができます。
Amazonは、多数のスロットタイプを含むライブラリを標準でサポートしています。たとえば以下のような情報があります。
標準タイプにはすべて「AMAZON
」というプレフィックスが付きます。
開発者コンソールでインテントとスロットを作成する方法については、インテント、発話、スロットの作成を参照してください。
スキルの設計およびインテントとスロットの識別の詳細については、 Alexaデザインガイドを参照してください。
サンプル発話
サンプル発話は、ユーザーがインテントを呼び出す際に使う単語やフレーズを指定します。各インテントは、複数の発話に対応付けられています。発話では、スロットは波括弧で表されます。たとえば、PlanMyTrip
の発話では、次のようにtoCity
スロットが含まれます。
{toCity}に行きたい
開発者コンソールで発話を作成する方法については、インテント、発話、スロットの作成を参照してください。
正しいサンプル発話を作成するには、Alexaデザインガイドを参照してください。
マルチターンの会話とダイアログモデル
Alexaスキルのユーザーとのダイアログは、Alexaとユーザーの複数回の会話で構成されます。Alexaが質問し、ユーザーが答えるという形式です。会話は、ユーザーのリクエスト全体を表す特定のインテントと結び付けられています。質問と応答を使用して、スロット値を収集、検証、確認します。ダイアログモデルで定義されたルールに従い、インテントに必要なすべてのスロット値を取得し、確認が完了するまで会話が続きます。
開発者コンソールを使用して、ダイアログモデルを定義することができます。ダイアログモデルは次を識別します:
- インテントを実行するために、有効な値を受け取る必要があるスロット。必須のスロットです。
- Alexaが必須のスロット値を得るためにユーザーにたずねるプロンプトと、その返答としてユーザーが言う発話。
- 続行する前に必須スロットをユーザーが確認する必要があるかどうか。
- 続行する前にインテント全体をユーザーが確認する必要があるかどうか。
- Alexaがスロットとインテントの確認を求めて話すプロンプト。
- ユーザーが提供したスロット値が有効であるとして合格する必要のあるスロット検証ルール。必須のスロットと必須ではないスロットのどちらにもこのルールを使用できます。
- ユーザーの応答がスロットの検証を通らなかった場合に、Alexaが修正値を求めて発話するプロンプト。
スキルでダイアログモデルを使用するには、Dialog.Delegateディレクティブを返してください。その後、Alexaがその次の手順を判断し、定義されているプロンプトを使用してユーザーに情報を求めます。ユーザーにスロット値と確認を求める独自のコードを作成する代わりに、会話をAlexaにデリゲートすることができます。
会話を手動で管理することもできますし、デリゲートと他のオプションを組み合わせて使用することもできます。詳細についてはユーザーとの会話の管理についてを参照してください。
開発者コンソールでダイアログモデルを定義する方法については、必要な情報を収集、確認するためにダイアログを定義するを参照してください。
対話モデルとダイアログモデルを作成する手順
開発者コンソールは、各インテント、スロット、発話、および(任意で)Alexaがユーザーと会話してスロット値を収集、確認するときに使用するプロンプトを定義するように設計されています。
スキルで作成するインテントが決まったら、開発者コンソールの次の高レベルのステップを完了してください。詳しくは、各ステップのリンクをクリックしてください。
- カスタム対話モデルを含むスキルを作成または編集します。
- インテントを作成し、最初の発話をいくつか作成しますインテントは、特定のユーザーリクエストのことです(たとえば、旅行に関する情報を収集してリストに保存する
PlanMyTrip
インテントなど)。 - 最初の発話を確認し、可変情報を表す単語やフレーズを識別します。これらの単語の新しいインテントスロットを作成し、発話にあるその単語をスロット表記に置き換えます。
- 指定のスロットに、適切なスロットタイプを選択または作成します。
- 各インテントスロットで、リクエストの実行にスロット値が必須かどうかを判断します。Alexaがスロットの情報を引き出すために会話で使用するプロンプトと発話を作成します。
- 必須のスロットごとに、スキルがリクエストを完了する前にユーザーが明示的にスロット値を確認する必要があるかどうか決定します。確認を求めるためにAlexaが使用するプロンプトを作成します。
- それぞれのスロット(必須かどうかにかかわらず)に対し、ユーザーに許容値を提供するよう求める検証ルールを定義する必要があるかどうか判断します。ルールを設定し、Alexaが訂正値を求めるために使用するプロンプトを記述します。
- インテント全体で、スキルがリクエストを完了する前にユーザーがアクションを明示的に確認する必要があるかどうか決定します。確認を求めるためにAlexaが使用するプロンプトを作成します。
- インテントの定義が完了したら、対話モデルとダイアログモデルを保存してビルドします。
ダイアログモデルのコンポーネント(必須スロット、スロット確認、またはインテント確認)を含める場合、プロンプトを使って必須のスロットの指定と確認をユーザーに求める処理をAlexaに任せるには、コードが Dialog.Delegateディレクティブを返す必要があります。別のやり方でユーザーの情報を収集および確認する方法については、ユーザーとの会話の管理についても参照してください。
モデルを保存してビルドする
対話モデルとダイアログモデルを作成し編集したら、モデルを保存ボタンを使用して作業を保存します。これによりデータが保存されますが、モデルはビルドされません。
対話モデルをテストする準備ができたら、カスタムの対話モデルに移動します。モデルをビルドをクリックして対話モデルを検証、保存、ビルドします。引き続き変更を加えることはできますが、ビルドには反映されません。
ビルドには2種類あります。
- クイックビルド – クイックビルドは数秒間で完了します。これにより、スキルのテストを開始することができます。クイックビルドが正常に完了すると、開発者コンソールでメッセージが表示されます。クイックビルドの後、サンプル発話の大部分(すべてではありません)が正しく動作します。完全ビルドを行うまで、次の機能をテストすることはできません。
- ダイアログモデル
- FallbackIntent
- サンプル発話とスロット値で指定されていないもの。
- 完全ビルド – 完全ビルドには1分ほどかかります。完全ビルドが完了すると、モデルはすべてビルドされ、テストの準備が完了します。
テストを実施できるようにするには、クイックビルドか完全ビルドのいずれかで、モデルを正常にビルドする必要があります。ビルドの各ステージが完了すると、開発者コンソールに成功メッセージが表示されます。Alexa Skills Kitコマンドラインインターフェース(ASK CLI)のget-skill-statusコマンドまたはスキル管理API(SMAPI)のGETスキルステータスリクエストを使用して、ビルドのステータスを確認することもできます。
対話モデルとダイアログモデルでJSONコードを表示して編集する
開発者コンソールの使用中に、呼び出し名、インテントスキーマ、サンプル発話、ダイアログモデルをJSON形式で表示できます。このコードに直接変更を加え、それを対話モデルに適用することができます。
JSONエディターをクリックして、モデルのJSONバージョンを表示します。変更を加えるときには、モデルを保存をクリックして変更をモデルに適用します。
対話モデルのJSON形式の詳細については、対話モデルのスキーマを参照してください。
以前のバージョンの対話モデルを使用する
対話モデルに変更を加えてビルドするたびに、開発者コンソールはその変更をバージョンとして保存します。開発者コンソールを使用して、対話モデルを以前ビルドしたバージョンに戻すことができます。
バージョンを表示して以前のビルドバージョンに戻すには:
- 開発者コンソールのビルドタブで、カスタム、対話モデルの任意のセクションに移動します。
- ページの上部にあるモデルのバージョンを表示をクリックします。
- バージョンを選択して、バージョンを選択をクリックします。
- 元に戻すをクリックします。
テストして対話モデルを改善する
スキルをビルドする際、対話モデルをテストして改善することができます。
- Alexaがスキルに間違ったインテントを送信する原因となる発話の競合を確認します。
- 発話プロファイラーを使うと、個々の発話をテストできます。発話を入力し、インテントやスロットがどのように解決されるかを確認できます。
- NLU評価ツールを使うと、作成したセットで対話モデルをバッチテストできます。このツールでは、予想されるインテントやスロットに発話をマッピングしたセットを作成します。作成したら、評価を実行し、スキルの自然言語理解(NLU)モデルが予想したとおりにうまく機能するかをテストします。この評価ツールは、対話モデルの見直しテストに特に有効です。
これらのツールはエンドポイントを呼び出さないため、対話モデルをビルドしたらいつでも使用できます。
対話モデルの制限
カスタムスキルの対話モデルには以下の制限があります。
- スキルのインテント数 – 250
- スロットタイプとインテントの合計数 – 350
- 1つのスロット値に使用できる文字数 – 140
- スロット値の同義語に使用できる文字数 – 140