スキルの対話モデルの作成
Alexa Skills Kitを使って、カスタム対話モデルでスキルを作成することができます。スキルのロジックを実装するだけでなく、ユーザーがそのスキルと対話するための音声インターフェースも定義します。音声インターフェースを定義するには、ユーザーの音声入力を、クラウドベースのサービスで処理可能なインテントに対応付けます。
このマッピングを宣言するためには、以下を入力します。
- インテント: インテントとは、ユーザーの音声によるリクエストを満たすアクションのことです。インテントでは、スロットという引数を任意で使用することもできます。インテントは、インテントスキーマと呼ばれるJSON構造で指定されます。
- サンプル発話: インテントに対応付けられた、会話に使用されると考えられる一連のフレーズです。すべてのサンプル発話は、関連性があり、文法的に正しく、選択したロケールの言語で、エラーのない応答をユーザーに提供する必要があります。よく使われるフレーズをできるだけ多く含めてください。
- カスタムスロットタイプ: 使用されると考えられる一般的なスロット値のリストです。カスタムスロットタイプは、Amazonの標準スロットタイプでサポートされていない項目のリストに使用します。
- ダイアログモデル(任意): 各インテントを実行するのに必要なすべての情報を収集する、スキルとユーザー間のマルチターンの会話の手順を指定します。ダイアログモデルにより、情報を集めるための質問用のコードの記述を簡素化できます。
このドキュメントでは、これらの構成要素について定義し、開発者コンソールで作成する方法を説明します。
インテント、スロット、ダイアログについて
このセクションでは、対話モデルの構成要素を簡単に説明します。
インテントとスロット
インテントとは、ユーザーの音声によるリクエストを満たすアクションのことです。インテントでは、スロットという引数を任意で使用することもできます。たとえば、旅行を計画するスキルでは、fromCity
、toCity
、travelDate
という名前のスロットを含むPlanMyTrip
という名前のインテントを定義することができます。ユーザーが次のように話すとします。
ユーザー: アレクサ、トリッププランを開いて次の金曜日に神戸から京都までの旅行を計画して
Alexaサービスは、トリッププランにPlanMyTrip
インテントを送ります。その際、fromCity
スロットには値「神戸」、toCity
スロットには「京都」、travelDate
スロットには次の金曜日の日付を指定します。次にAlexaがこの情報を保存し、テキストを送り返して音声に変換します。
スロットはさまざまなタイプで定義されます。上記の例のtravelDate
スロットはAmazonの標準AMAZON.DATE typeタイプを使用して日付(「今日」や「次の金曜日」)を示す単語を日付形式に変換します。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コマンドまたはスキルマニフェストREST API(SMAPI)のGETスキルステータスを使用して、ビルドのステータスを確認することもできます。
対話モデルとダイアログモデルでJSONコードを表示して編集する
開発者コンソールの使用中に、呼び出し名、インテントスキーマ、サンプル発話、ダイアログモデルをJSON形式で表示できます。このコードに直接変更を加え、それを対話モデルに適用することができます。
JSONエディターをクリックして、モデルのJSONバージョンを表示します。変更を加えるときには、モデルを保存をクリックして変更をモデルに適用します。
対話モデルのJSON形式の詳細については、対話モデルのスキーマを参照してください。
以前のバージョンの対話モデルを使用する
対話モデルに変更を加えてビルドするたびに、開発者コンソールはその変更をバージョンとして保存します。開発者コンソールを使用して、対話モデルを以前ビルドしたバージョンに戻すことができます。
バージョンを表示して以前のビルドバージョンに戻すには:
- 開発者コンソールのビルドタブで、カスタム、対話モデルの任意のセクションに移動します。
- ページの上部にあるモデルのバージョンを表示をクリックします。
- バージョンを選択して、バージョンを選択をクリックします。
- 元に戻すをクリックします。
テストして対話モデルを改善する
スキルを作成する際、スキルコードを記述する前に、対話モデルをテストして改善することができます。詳細については、対話モデルのテストを参照してください。
対話モデルの制限
カスタムスキルの対話モデルには以下の制限があります。
- サイズ – 1.5MB
- スキルのインテント数 – 250
- スロットタイプとインテントの合計数 – 350
- 1つのスロット値に使用できる文字数 – 140
- スロット値の同義語に使用できる文字数 – 140
インテントとスロット名の要件
- インテント名とスロットタイプ名には、英字(大文字小文字の区別なし)とアンダースコアのみを指定できます。数字、スペース、特殊文字は使用しないでください。
注: ビルトインインテントとビルトインスロットタイプは、
AMAZON
名前空間を使用します。これらのビルトイン項目の名前には、ピリオド文字を使用します。たとえば次のように使用します。AMAZON.HelpIntent
。この表記は、AMAZON
名前空間を指定する場合には有効ですが、その他のコンテキストでは無効です。カスタムインテント名とカスタムスロットタイプ名にピリオドを使用することはできません。 - インテント名とスロット名は、同じ対話モデル内で重複することはできません。インテントと同じ名前をスロット名に使用することはできません。
- インテント名とスロット名では大文字と小文字が区別されないため、インテント名「ABC」とスロット名「abc」を同時に使用することはできません。
- 同一のスロットタイプとエンティティであれば、同じ名前のスロット名を複数のインテントで使用できます。たとえば、複数のインテントに
travelDate
スロットという名前を使用できます。各インテントで共通して旅行の日付を表す、AMAZON.Date
タイプのスロットです。 -
ビルトインインテントの
AMAZON.SelectIntent
には4つのスロットがあります。AMAZON.SelectIntent
を対話モデルに含める場合、それらのスロット名をカスタムインテントの名前として使用することはできません。たとえば、インテントにListPosition
という名前を付けることはできません。同じスロットタイプを使用している場合は、カスタムインテントでスロットにスロット名を使用できます。たとえば、カスタムインテントのスロット名に
ListPosition
使用する場合は、スロットタイプをAMAZON.Ordinal
にする必要があります。AMAZON.SelectIntent
スロットの詳細については、AMAZON.SelectIntent
スロットを参照してください。
関連トピック
- インテント、発話、スロットの作成
- カスタムスロットタイプの作成と編集
- 必要な情報を収集、確認するためにダイアログを定義する
- 発話をテストして対話モデルを改善する
- 自然言語理解(NLU)モデルのバッチテスト
- スロット値の検証
- Alexaデザインガイド
- 開発者コンソールを使用したスキルの作成と管理
- スキルのビルド
最終更新日: 2023 年 11 月 15 日