スキルの対話モデルの作成



スキルの対話モデルの作成

Alexa Skills Kitを使って、カスタム対話モデルでスキルを作成することができます。スキルのロジックを実装するだけでなく、ユーザーがそのスキルと対話するための音声インターフェースも定義します。音声インターフェースを定義するには、ユーザーの音声入力を、クラウドベースのサービスで処理可能なインテントに対応付けます。

このマッピングを宣言するためには、以下を入力します。

  1. インテント: インテントとは、ユーザーの音声によるリクエストを満たすアクションのことです。インテントでは、スロットという引数を任意で使用することもできます。
  2. サンプル発話: インテントに対応付けられた、会話に使用されると考えられる一連のフレーズです。これには、よく使われるフレーズができるだけ多く含まれている必要があります。
  3. カスタムスロットタイプ: 使用されると考えられる一般的なスロット値のリストです。カスタムスロットタイプは、Amazonの標準スロットタイプでサポートされていない項目のリストに使用します。
  4. ダイアログモデル(任意): 各インテントを実行するのに必要なすべての情報を収集する、スキルとユーザー間のマルチターンの会話の手順を指定します。情報を集めるための質問用のコードの記述を簡素化できます。

このドキュメントでは、これらの構成要素について定義し、開発者コンソールで作成する方法を説明します。

インテント、スロット、ダイアログについて

このセクションでは、対話モデルの構成要素を簡単に説明します。

インテントとスロット

インテントとは、ユーザーの音声によるリクエストを満たすアクションのことです。インテントでは、スロットという引数を任意で使用することもできます。たとえば、旅行を計画するスキルでは、fromCitytoCitytravelDateという名前のスロットを含むPlanMyTripという名前のインテントを定義することができます。ユーザーが次のように話すとします。

ユーザー: アレクサ、トリッププランを開いて次の金曜日に神戸から京都までの旅行を計画して

Alexaサービスは、トリッププランにPlanMyTripインテントを送ります。その際、fromCityスロットには値「神戸」、toCityスロットには「京都」、travelDateスロットには次の金曜日の日付を指定します。次にAlexaがこの情報を保存し、テキストを送り返して音声に変換します。

スロットはさまざまなタイプで定義されます。上記の例のtravelDateスロットはAmazonの標準AMAZON.DATEタイプを使用して日付(「今日」や「次の金曜日」)を示す単語を日付形式に変換します。fromCitytoCityはどちらも標準[AMAZON.CITY][city]スロットを使用します。旅行でどのようなアクティビティを予定しているかユーザーに尋ねるようこのスキルを拡張した場合、カスタムスロットタイプLIST_OF_ACTIVITIESを追加して、「ハイキング」、「ショッピング」、「スキー」などのアクティビティのリストを参照することができます。

Amazonは、多数のスロットタイプを含むライブラリを標準でサポートしています。たとえば以下のような情報があります。

  • 日付や数値などのデータを変換するタイプ
  • リストの値を認識できるようにするタイプ。たとえば、ファーストネームや都市名などです。

標準タイプにはすべて「AMAZON」というプレフィックスが付きます。

開発者コンソールでインテントとスロットを作成する方法については、インテント、発話、スロットの作成を参照してください。

スキルの設計およびインテントとスロットの識別の詳細については、音声デザインガイドを参照してください。

サンプル発話

サンプル発話は、ユーザーがインテントを呼び出す際に使う単語やフレーズを指定します。各インテントは、複数の発話に対応付けられています。発話では、スロットは波括弧で表されます。たとえば、PlanMyTripの発話では、次のようにtoCityスロットが含まれます。

{toCity}に行きたい

開発者コンソールで発話を作成する方法については、インテント、発話、スロットの作成を参照してください。

正しいサンプル発話を作成するには、ユーザーの発話内容を参照してください。

マルチターンの会話とダイアログモデル

Alexaスキルのユーザーとのダイアログは、Alexaとユーザーの複数回の会話で構成されます。Alexaが質問し、ユーザーが答えるという形式です。会話は、ユーザーのリクエスト全体を表す特定のインテントと結び付けられています。質問と回答の目的は、すべてのインテントの必須スロットの値を取得して確認することです。インテントに必要なすべてのスロット値を取得し、確認が完了するまで会話が続きます。

開発者コンソールを使用して、ダイアログモデルを定義することができます。ダイアログでは以下を確認できます。

  • インテントを実行するために、有効な値を受け取る必要があるスロット。必須のスロットです。
  • Alexaが必須のスロット値を得るためにユーザーに尋ねるプロンプトと、その返答としてユーザーが言う発話。
  • 続行する前に必須スロットをユーザーが確認する必要があるかどうか。
  • 続行する前にインテント全体をユーザーが確認する必要があるかどうか。
  • Alexaがスロットとインテントの確認を求めて話すプロンプト。

スキルでダイアログモデルを使用するには、Dialog.Delegateディレクティブを返してくださいその後、Alexaがその次の手順を判断し、定義されているプロンプトを使用してユーザーに情報を求めます。ユーザーにスロット値と確認を求める独自のコードを作成する代わりに、会話をAlexaに委任することができます。

会話を手動で管理することもできますし、委任と他のオプションを組み合わせて使用することもできます。詳細についてはユーザーとの会話の管理についてを参照してください。

開発者コンソールでダイアログモデルを定義する方法については、必要な情報を収集、確認するためにダイアログを定義するを参照してください。

対話モデルとダイアログモデルを作成する手順

開発者コンソールは、各インテント、スロット、発話、および(任意で)Alexaがユーザーと会話してスロット値を収集、確認するときに使用するプロンプトを定義するように設計されています。

スキルで作成するインテントが決まったら、開発者コンソールでこの手順に従ってください。詳細については、以下のセクションを参照してください。

  1. カスタム対話モデルを含むスキルを作成または編集します
  2. インテントを作成し、最初の発話をいくつか作成しますインテントは、特定のユーザーリクエストのことです(たとえば、旅行に関する情報を収集してリストに保存するPlanMyTripインテントなど)。
  3. 最初の発話を確認し、可変情報を表す単語やフレーズを識別します。これらの単語の新しいインテントスロットを作成し、発話にあるその単語をスロット表記に置き換えます。
  4. 指定のスロットに、適切なスロットタイプを選択または作成します
  5. 各インテントスロットで、リクエストの実行にスロット値が必須かどうかを判断します。Alexaがスロットの情報を引き出すために会話で使用するプロンプトと発話を作成します。
  6. 必須のスロットごとに、スキルがリクエストを完了する前にユーザーが明示的にスロット値を確認する必要があるかどうか決定します確認を求めるためにAlexaが使用するプロンプトを作成します。
  7. インテント全体で、スキルがリクエストを完了する前にユーザーがアクションを明示的に確認する必要があるかどうか決定します。確認を求めるためにAlexaが使用するプロンプトを作成します。
  8. インテントの定義が完了したら、対話モデルとダイアログモデルを保存してビルドします

ダイアログモデルのコンポーネント(必須スロット、スロット確認、またはインテント確認)を含める場合、プロンプトを使って必須のスロットの指定と確認をユーザーに求める処理をAlexaに任せるには、コードがDialog.Delegateを返す必要があります。別のやり方でユーザーの情報を収集および確認する方法については、ユーザーとの会話の管理についても参照してください。

モデルの保存とビルド

対話モデルとダイアログモデルを作成し編集したら、「モデルを保存」ボタンを使用して作業を保存します。モデルのビルドを試行しなくてもデータが保存されます。

対話モデルをテストする準備が整ったら、カスタム>対話モデルのいずれかのセクションに移動してモデルをビルドをクリックし、対話モデルを検証、保存、ビルドします。モデルのビルドには、数分かかる場合があります。引き続き変更を加えることはできますが、ビルドには反映されません。ビルドが完了すると、開発者コンソールに成功メッセージが表示されます。

モデルが正常にビルドされないと、モデルのテストは行えません。

対話モデルとダイアログモデルでJSONコードを表示して編集する

開発者コンソールの使用中に、呼び出し名、インテントスキーマ、サンプル発話、ダイアログモデルをJSON形式で表示できます。このコードに直接変更を加え、それを対話モデルに適用することができます。

JSONエディターをクリックして、モデルのJSONバージョンを表示します。変更を加えるときには、モデルを保存をクリックして変更をモデルに適用します。

対話モデルのJSON形式の詳細については、対話モデルのスキーマを参照してください。