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

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

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

スキルの実行中にユーザーリクエストで送信されたインテントとスロットにアクセスする方法の詳細とコード例については、Alexaから送信されたリクエストを処理するを参照してください。

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

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

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

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

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

1つのスキルに作成できるスロットタイプ数の制限については、対話モデルの制限を参照してください。

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

  1. Alexa開発者コンソールを開いて、ログインします。
  2. スキルタブのスキル名列で、カスタムスキルの名前をクリックします。
  3. 左側のサイドバーから、カスタム>対話モデル>インテントをクリックします。
  4. インテントページで、+インテントを追加をクリックします。
  5. 新しいインテントの名前を入力して、カスタムインテントを作成をクリックします。

    新しいインテントが追加され、インテントのサンプル発話とスロットが表示された詳細ページが開きます。

    カスタムインテントの命名方法の詳細は、インテントとスロット名の要件を参照してください。

  6. 編集ボックスにサンプル発話を入力して、プラス記号(+)をクリックするかEnterを押します。これを繰り返して、よく使用すると思われる発話を登録します。

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

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

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

サンプル発話のルール

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

  • スキルの言語で発話を書きます。たとえば、スキルの日本語バージョンの対話モデルでは、サンプル発話を日本語で記述します。
  • 数値はアラビア数字ではなく、漢数字で書きます(「5」ではなく「五」とします)。英語で発音される数字は、アルファベットで書きます(「ワン」ではなく「one」とします)。
  • アルファベットはすべて小文字にします。
  • アクロニムや、個々に発音されるアルファベットで成り立つ語句(イニシャリズム)は、各文字をピリオドと半角スペースで区切ります(「nba」ではなく「n. b. a.」とします)。
  • 通常は句読点や記号を使用しません(「$10」ではなく「十ドル」、「星3.5」ではなく「星三点五」)。例外は次の通りです。
    • 所有格や短縮形にはアポストロフィを使用します(「romeo's」、「i'm」)。
    • 単語と単語を結合する場合のみハイフンを使用します。それ以外の用途には使用しないでください。

以下は英語やドイツ語など日本語以外に特化した注意点です。

  • ウムラウト(ä、ü、ö)やシャープS(ß)を含む単語は正しいスペルで記述します。たとえば、「buero」ではなく「büro」、「fussball」ではなく「fußball」と書きます。
  • スロット値の単語に所有格のアポストロフィまたはその他同様の句読点(ピリオドやハイフン)を使用する場合は、スロットを定義する波括弧の内側に含めます。閉じ括弧の後に'sを追加しないでください。たとえば次のようなものです。

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

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

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

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

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

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

スロットを作成するには

  1. Alexa開発者コンソールを開いて、ログインします。
  2. スキルタブのスキル名列で、カスタムスキルの名前をクリックします。
  3. 左側のサイドバーから、カスタム>対話モデル>インテントをクリックします。
  4. インテントをクリックして、インテントの詳細ページを開きます。
  5. 発話で、マウスをドラッグしてスロット値を表す単語やフレーズを強調表示します。
  6. ドロップダウンリストで、編集ボックスにスロット名を入力して追加をクリックします。

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

    先ほどの例では、「神戸」が出発する都市を表していることがわかります。そこで、このスロットをfromCityとします。fromCityスロットを定義したら、発話は次の例のようになります。

    次の金曜日に{fromCity}から京都に行きたい

    スロットの命名方法の詳細については、インテントとスロット名の要件を参照してください。

  7. 残りのすべての変数語についても同じ手順を繰り返します。

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

    • fromCity
    • toCity
    • travelDate
    • travelMode
    • activity

インテントの詳細ページのサンプル発話セクションの下のインテントスロットセクションに、追加したスロットが表示されます。発話の単語やフレーズを強調表示するには、新しいスロットを追加するか、既存のスロットを選択します。

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

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

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

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

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

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

  1. Alexa開発者コンソールを開いて、ログインします。
  2. スキルタブのスキル名列で、カスタムスキルの名前をクリックします。
  3. 左側のサイドバーから、カスタム>対話モデル>インテントをクリックします。
  4. インテントをクリックして、インテントの詳細ページを開きます。
  5. サンプル発話セクションの下のインテントスロットセクションで、スロットタイプを選択メニューをクリックします。
  6. 既存のカスタムスロットタイプ、またはいずれかの標準スロットタイプを使用するには、リストからタイプを選択します。
  7. 新しいカスタムスロットタイプを作成するには、カスタムスロットタイプの作成と編集を参照してください。
  8. スロットタイプの変更を保存するには、モデルを保存をクリックします。

複数の値を持つスロットを設定する

複数値を持つスロットを使用して、ユーザーの発話から複数の値を1つのスロットに収集します。たとえば、{toppings}という複数値を持つスロットは、「ペパロニ、マッシュルーム、オリーブのピザがほしい」という発話に使用できます。この発話は、1つの{toppings}スロットに3つの値を持つ配列をスキルに送信します。このスロットを使えば、ユーザーはより自然な発話で複数の値を指定できます。

複数値を持つスロットを設定する

  1. Alexa開発者コンソールを開いて、ログインします。
  2. スキルタブのスキル名列で、カスタムスキルの名前をクリックします。
  3. 左側のサイドバーから、カスタム>対話モデル>インテントをクリックします。
  4. インテントをクリックして、インテントの詳細ページを開きます。
  5. インテントスロットのリストで、変更するスロットを見つけます。

    複数値列は、このスロットが複数の値を収集できるかどうかを表します。

  6. スロットをクリックして、スロットの詳細ページを開きます。
  7. 複数値で、このスロットは複数の値を受け取りますか?オプションを選択します。

複数値スロットの詳細については、Collect Multiple Values in a Slotを参照してください。

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

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

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

  1. Alexa開発者コンソールを開いて、ログインします。
  2. スキルタブのスキル名列で、カスタムスキルの名前をクリックします。
  3. 左側のサイドバーから、カスタム>対話モデル>インテントをクリックします。
  4. インテントをクリックして、インテントの詳細ページを開きます。

  5. サンプル発話セクションの右上隅で、一括編集をクリックします。
  6. 編集ボックスのサンプル発話を編集するか、CSVファイルをウィンドウにドラッグしてコンテンツを読み込みます。

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

インテントおよび発話用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}を出発したいです"
          ]
        }
      ]
    }
  }
}