インテント、発話、スロットの作成



インテント、発話、スロットの作成

このドキュメントでは、スキルのインテント、スロット、サンプル発話を作成する方法について説明します。インテントとは、ユーザーの音声によるリクエストを満たすアクションのことです。インテントでは、スロットという引数を任意で使用することもできます。サンプル発話は、インテントに対応付けられた、会話に使用されると考えられる一連のフレーズです。

新しいカスタムインテントを作成する

新しいカスタムインテントを作成するには、名前とユーザーがこのインテントを呼び出すときに使用する発話のリストを指定します。まずすべてのフレーズを書き出してから、後でフレーズのスロットを指定します。

たとえば、旅行を計画するインテントの場合(PlanMyTrip)、以下のような発話を作成できます。

金曜日に旅行に行きます
京都に行きたい
次の金曜日、神戸から京都に行きたい
神戸から京都にドライブしています
京都でハイキングするためにドライブ中です
...(など)

適切なサンプル発話を作成するための推奨事項については、以下を参照してください。

新しいカスタムインテントを作成するには、以下の手順に従います。

  1. 左側のサイドバーから、カスタム>対話モデル>インテントの横の追加をクリックします。
  2. カスタムインテントを作成オプションを選択します。
  3. 新しいインテントの名前を入力して、カスタムインテントを作成をクリックします。新しいインテントが追加され、インテントのサンプル発話とスロットが表示された詳細ページが開きます。
  4. 編集ボックスにサンプル発話を入力して、プラス記号をクリックするかEnterを押します。これを繰り返して、よく使用すると思われる発話を登録します。

    • ユーザーがインテントを言う際に変化する単語やフレーズを含む発話を登録してください。上記の例では、「金曜日」、「大阪」、「神戸」、「次の木曜日」などの単語やフレーズです。
    • サンプル発話は一意にする必要があります。複数のインテントに重複するサンプル発話を対応付けすることはできません。
  5. 以下で説明されているように、発話のスロットを指定します。
ビルトインライブラリ

Alexa Skills Kitには、ユーザーが使用できるビルトインインテントの大規模なライブラリが含まれているため、自分でライブラリを作成する必要がありません。ビルトインインテントの発話は作成する必要がないため、開発が簡単になります。

ビルトインインテントライブラリは開発者コンソールから検索できます。上記の説明に従って新しいインテントを作成します。ただし、Alexaのビルトインライブラリから既存のインテントを使用オプションを選択してください。追加するビルトインインテントごとに、インテントを追加をクリックします。

インテント名の要件

インテントの名前には、英字(大文字小文字の区別なし)とアンダースコアのみを指定できます。数字、スペース、特殊文字は使用できません。インテントの名前は、スキーマのどのスロット名とも重複しないようにしてください。

ビルトインインテントAMAZON名前空間を使用するため、ピリオドが含まれます。例: AMAZON.HelpIntentこの表記は、AMAZON名前空間を指定する場合にのみ適用されます。他のインテント名ではピリオドは使用できません。

たとえば、GetZodiacHoroscopeIntentは有効ですが、Get Zodiac Horoscope IntentZodiac.GetHoroscopeIntentGet2015HoroscopeIntentは無効です。

サンプル発話のルール

サンプル発話を作成する際には、以下のルールに従ってください。

  • 数値はアラビア数字ではなく、漢数字で書きます(「5」ではなく「五」とします)。
  • アクロニムや、個々に発音されるアルファベットで成り立つ語句は、各文字を半角スペースで区切ります(「nba」ではなく「n b a」とする)。
  • 通常は句読点や記号を使用しません(「$10」ではなく「十ドル」、「星3.5」ではなく「星三点五」)。例外:
    • 略語は半角スペースで区切ります(「n b a」、「e t a」)。
    • 所有格や短縮形にはアポストロフィを使用します(「romeo's」、「i'm」)。
    • 単語と単語を結合する場合のみハイフンを使用します。それ以外の用途には使用しないでください。
  • ウムラウト(ä、ü、ö)やシャープS(ß)を含む単語は正しいスペルで記述します。たとえば、「buero」ではなく「büro」、「fussball」ではなく「fußball」と書きます。
  • スロット値の単語に所有格のアポストロフィまたはその他同様の句読点(ピリオドやハイフン)を使用する場合は、スロットを定義する波括弧の内側に含めます。閉じ括弧の後に'sを追加しないでください。例:

    • 所有格の場合
      • 使用可:"martini's"{Drink}のカスタム値、"tell me a {Drink} ingredients"をサンプル発話に使用します(アポストロフィがスロットの波括弧の中に入っています)
      • 使用不可:"{Drink}'s ingredients"(アポストロフィが波括弧の外に出ています)
    • ハイフンでつながれた値
      • 使用可:editor-in-chiefをカスタム値、{Position}をサンプル発話に使用します(ハイフンでつながれた値がスロットの波括弧の中に入っています)
      • 使用不可:editorをカスタム値、{Position}-in-chiefをサンプル発話に使用する場合(ハイフンでつながれた値がスロットの波括弧の外に出ています)

注:テストの実行中、新しくサンプル発話を追加しなければならないことがよくあります。新しく追加したサンプル発話は、テスト可能になるまでに少し時間がかかることがあります。特に、呼び出し名を含む発話(「アレクサ、<呼び出し名>で双子座の運勢を調べて」など)はその可能性が高いです。

インテントのスロットを指定する

発話をいくつか作成したら、変数情報を表す単語またはフレーズに注目してください。これらがインテントのスロットになります。たとえば、前述の発話の変数をで強調表示します。

金曜日に旅行に行きます
京都に行きたい
次の金曜日神戸から京都に行きたい
神戸から京都ドライブしています
京都でハイキングするためにドライブ中です

これらの単語またはフレーズごとにスロットを作成し、元の単語を波括弧({ })に入れたスロット名に置き換えます。

  1. 左側のナビゲーションでインテントをクリックして、インテントの詳細ページを開きます。
  2. 発話で、スロット値を表す単語またはフレーズを強調表示します。
  3. 表示されたドロップダウンリストで、編集ボックスにスロット名を入力して追加をクリックします。

    インテントの新しいスロットが作成され、発話内の元の値が波括弧に入ったスロット名({ })に置き換えられます。

    上記で示した例では、「神戸」が出発する都市を表していることがわかります。そこで、このスロットをfromCityとします。発話は以下のようになります。

    次の金曜日、{fromCity}から京都に行きたい
  4. 残りのすべての変数語についても繰り返します。

    PlanMyTripインテントでは、スロットは最終的に以下のようになります。

    • fromCity
    • toCity
    • travelDate
    • travelMode
    • activity

追加する各スロットは、サンプル発話のインテントスロットに表示されます。発話の単語やフレーズを強調表示するには、新しいスロットを追加するか、既存のスロットを選択します。

たとえば、前述の一連の発話は以下のようになります。

{travelDate}に旅行に行きます 
{toCity}に行きたい 
{travelDate}{fromCity}から{toCity}に行きたい 
{fromCity}から{toCity}{travelMode}ドライブしています
{toCity}{activity}するために{travelMode}中です

スロットタイプをスロットに割り当てる

すべてのスロットには、ユーザー入力がどのように処理され、スキルに渡されるかを決めるスロットタイプがあります。スロットの割り当ては、インテントの詳細ページまたはスロットの詳細ページから行うことができます。スロットタイプを割り当てる際には、次のことが可能です。

  • 標準スロットタイプを使用できます。ビルトインタイプには、日付などのデータを変換するタイプ、大都市などのよく使用される値のリストを認識するタイプがあります。これらのタイプを拡張して値を追加することもできます。
  • カスタムスロットタイプを作成できます。この場合、スロットタイプ名とカスタム値のリストを指定します。

スロットタイプを割り当てるには、以下の手順に従います。

  1. 左側のナビゲーションでインテントをクリックして、インテントの詳細ページを開きます。
  2. サンプル発話のインテントスロットで、スロットタイプを選択メニューをクリックします。

    または、スロットの詳細ページを開くこともできます。左側のナビゲーションでインテントとスロットのリストを指定します。スロット名をクリックします。

  3. 既存のカスタムスロットタイプ、またはいずれかの標準スロットタイプを使用するには、リストからタイプを選択します。
  4. 新しいカスタムスロットタイプを作成するには、カスタムスロットタイプの作成と編集を参照してください。
  5. モデルを保存をクリックしてスロットタイプの変更を保存します。

サンプル発話を一括で編集またはアップロードする

一括編集を使用して、サンプル発話をすばやくアップロードまたは編集できます。一括編集で編集する場合は、波括弧で囲んだスロットを手動で発話に含めます。

発話を一括で編集または読み込むには

  1. 左側のナビゲーションでインテントをクリックして、インテントの詳細ページを開きます。
  2. サンプル発話セクションの右上で、一括編集をクリックします。
  3. 編集ボックスのサンプル発話を編集するか、CSVファイルをウィンドウにドラッグしてコンテンツを読み込みます。

    • 1行ごとに1つの発話を入力します。
    • CSVファイルを読み込むと、編集ボックスに表示される既存の発話と置き換えられます。
    • 下のCSVにはヘッダーが含まれますを選択して、テキストフィールドに表示される一番上の行を除外します。
    • 送信をクリックしないと、発話の変更は保存されません。
  4. 送信をクリックします。

インテントおよび発話用JSON(対話モデルのスキーマ)

JSONエディターですべてのインテントと発話のJSON表現の確認や編集ができます。interactionModel.languageModel.typesプロパティにはインテントオブジェクトの配列が含まれています。特定のインテントでは、samplesプロパティにサンプル発話の配列が含まれています。インテントにスロットが含まれる場合、slotsプロパティにはスロットオブジェクトの配列が含まれています。ダイアログモデルの一部としてスロットにユーザー発話が定義されている場合、スロットオブジェクトにはsamplesプロパティも含まれています。

この例では、PlanMyTripインテントのintentオブジェクトの一部を示します。インテントの発話は、interactionModel.languageModel.intents[].samplesにあります。各スロットにはそれぞれのsamples配列があります。簡潔に表現するため、interactionModelおよびlanguageModelの他のプロパティは示していません。対話モデルJSONの詳細については、対話モデルのスキーマを参照してください。

{
  "interactionModel": {
    "languageModel": {
      "intents": [
        {
          "name": "PlanMyTrip",
          "slots": [
            {
              "name": "travelDate",
              "type": "AMAZON.DATE",
              "samples": [
                "{travelDate}に旅行に行きたい",
                "{travelDate}に",
                "{travelDate}"
              ]
            },
            {
              "name": "toCity",
              "type": "AMAZON.US_CITY",
              "samples": [
                "{toCity}に行きます",
                "{toCity}"
              ]
            },
            {
              "name": "fromCity",
              "type": "AMAZON.US_CITY",
              "samples": [
                "{fromCity}",
                "{fromCity}から出発します"
              ]
            },
            {
              "name": "travelMode",
              "type": "LIST_OF_TRAVEL_MODES",
              "samples": [
                "{travelMode}をします",
                "{travelMode}"
              ]
            },
            {
              "name": "activity",
              "type": "LIST_OF_ACTIVITIES",
              "samples": [
                "{activity}",
                "{activity}をする予定です"
              ]
            }
          ],
          "samples": [
            "{toCity}",
            "{travelDate}に{fromCity}から{toCity}に行きたい ",
            "{toCity}に行きたい",
            "{travelDate}に旅行に行きます",
            "{fromCity}から{toCity}に{travelMode}しています",
            "{activity}をするために{toCity}に{travelMode}中です",
            "旅行を計画します",
            "{toCity}への旅行を計画します",
            "{fromCity}からの旅行を計画します ",
            "{travelDate}に出発したいです ",
            "{travelDate}に出発したいです ",
            "飛行機で{fromCity}を出発したいです"
          ]
        }
      ]
    }
  }
}