一般的なガイドライン - Amazon Lex V1

Amazon Lex V2 を使用している場合は、代わりに Amazon Lex V2 ガイドを参照してください。

 

Amazon Lex V1 を使用している場合は、ボットを Amazon Lex V2 にアップグレードすることをお勧めします。V1 には新機能を追加されませんので、すべての新しいボットには V2 を使用することを強くお勧めします。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

一般的なガイドライン

このセクションでは、Amazon Lex を使用する際の一般的なガイドラインについて説明します。

  • リクエストの署名 – Amazon Lex のすべてのモデル構築および、「API リファレンス」で説明されているランタイム API オペレーションは、署名 V4 を使用してリクエストを認証します。リクエストの認証の詳細については、『』の「署名バージョン 4 の署名プロセスAmazon Web Services 全般のリファレンス」を参照してください。

     

    PostContent では、Amazon Lex は「Amazon Simple Storage Service (S3) API リファレンス」の「Signature Calculations for the Authorization Header: Transferring Payload in a Single Chunk」(AWS Signature Version 4) で説明している未署名のペイロードオプションを使用します。

     

    未署名のペイロードオプションを使用する場合は、ペイロードのハッシュを正規リクエストに含めないでください。代わりに、リテラル文字列の「UNSIGNED-PAYLOAD」をペイロードのハッシュとして使用します。また、ヘッダーを名前 x-amz-content-sha256 および値 UNSIGNED-PAYLOADPostContent に含めます。

     

  • Amazon Lex でユーザーの発話からスロット値をキャプチャする方法について以下の点に注意してください。

     

    Amazon Lex では、ユーザーがスロットタイプ定義で指定した列挙値を使用して機械学習モデルをトレーニングします。次のサンプル発話で GetPredictionIntent というインテントを定義したとします。

    "Tell me the prediction for {Sign}"

    {Sign} はカスタムタイプ ZodiacSign のスロットです。これには列挙値が 12 個 (AriesPisces) あります。「次の運勢を教えてください: ...」というユーザーの発話を受け取ると、Amazon Lex はこの後に星座が続くと予測します。

     

    PutSlotType オペレーションを使用して valueSelectionStrategy フィールドを ORIGINAL_VALUE に設定するか、コンソールで [Expand values] (値の拡張) を選択した場合にユーザーが「次の運勢を教えてください: 大地」と言うと、Amazon Lex では「大地」を ZodiacSign と推論し、それをクライアントアプリケーションまたは Lambda 関数に渡します。スロット値をフルフィルメントアクティビティで使用する前に、それが有効な値であることを確認する必要があります。

     

    PutSlotType オペレーションを使用して valueSelectionStrategy フィールドを TOP_RESOLUTION に設定するか、コンソールで [Restrict to slot values and synonyms] を選択すると、スロットタイプに定義済みの値のみが返されます。例えば、ユーザーが「次の運勢を教えてください: 地球」と言うと、この値はスロットタイプの定義済みの値に含まれていないため、値として認識されません。スロット値のシノニムを定義すると、スロット値と同じように認識されますが、シノニムの代わりにスロット値が返されます。

     

    Amazon Lex から Lambda 関数を呼び出すか、クライアントアプリケーションとの会話の結果を返す場合、スロット値の大文字と小文字の区別は保証されません。例えば、AMAZON.Movie の組み込みスロットタイプに対する値を引き出す場合、ユーザーが「Gone with the wind」と言うか入力すると、Amazon Lex が返す値は「Gone with the Wind」、「gone with the wind」、または「Gone With The Wind」になることがあります。テキストでのやり取りの場合、スロット値の大文字と小文字は、valueResolutionStrategy フィールドの値に応じて入力したテキストまたはスロット値と一致します。

     

  • 頭字語を含むスロット値を定義する場合は、次のパターンを使用します。

    • ピリオドで区切られた大文字 (D.V.D.)

    • スペースで区切られた大文字 (D V D)

     

  • Amazon Lex では、Alexa Skills Kit でサポートされている組み込みスロットタイプ AMAZON.LITERAL はサポートしていません。ただし、Amazon Lex では、この機能を実装するために使用できるカスタムスロットタイプの作成をサポートしています。前の箇条書きで説明したように、カスタムスロットタイプ定義外の値をキャプチャできます。自動音声認識 (ASR) と自然言語理解 (NLU) の精度を向上させるには、さらに多様な列挙値を追加します。

     

  • 組み込みスロットタイプの AMAZON.DATEAMAZON.TIME では、絶対的な日時と相対的な日時の両方をキャプチャします。相対的な日時は、Amazon Lex がリクエストを処理しているリージョンで解決されます。

     

    組み込みスロットタイプ AMAZON.TIME で、ユーザーが時間を午前か午後かを指定しない場合、時間があいまいであるため、Amazon Lex はユーザーに再度時間を指定するよう求めます。プロンプトは、絶対時間を引き出すように使うことをお勧めします。例えば、「ピザはいつお届けしますか? 6 PM または夕方 6 時のように指定できます」というプロンプトを使います。

     

  • ボットで紛らわしいトレーニングデータを提供すると、Amazon Lex がユーザー入力を理解する能力が低下します。次の例を検討してください。

     

    ボットに 2 つのインテント (OrderPizzaOrderDrink) があり、両方に「私は注文したい」という発話が設定されているとします。この発話は、ボットの言語モデルの構築時に Amazon Lex が学習できる特定のインテントにはマッピングされません。その結果、この発話をユーザーがランタイムに入力すると、Amazon Lex は高い信頼性におけるインテントを選択できません。

     

    別の例として、ユーザーから確認を得るためのカスタムインテント (MyCustomConfirmationIntent など) を定義し、このインテントに「はい」と「いいえ」の発話を設定するとします。Amazon Lex はまた、ユーザーの確認について認識するための言語モデルがあることに注意してください。これにより、競合する状況が生じます。ユーザーが「はい」と答えた場合、これは従来のインテントに対する確認なのか、新しく作成されたカスタムインテントをユーザーがリクエストしているのかが不明です。

     

    通常、サンプルの発話を指定する場合は、特定のインテントや (必要に応じて) 特定のスロット値にマッピングする必要があります。

     

  • ランタイム API オペレーションの PostContentPostText では、必須パラメーターとしてユーザー ID を使用します。開発者は、これを API で説明されている制約を満たす任意の値に設定できます。このパラメーターを使用してユーザーのログイン情報、メールアドレス、社会保障番号などの機密情報を送信しないでください。この ID は、ボットの会話を一意に識別するために使用します (ピザの注文者は複数いる場合があります)。

     

  • クライアントアプリケーションで Amazon Cognito を認証に使用する場合は、Amazon Cognito のユーザー ID を Amazon Lex のユーザー ID として使用できます。ボットに設定されたすべての Lambda 関数には、Amazon Lex が代わりに Lambda 機能を呼び出すユーザーを識別できる独自の認証方法を保持している必要があります。

     

  • ユーザーの意図をキャプチャして会話を中止するインテントを定義することをお勧めします。例えば、サンプルの発話 (「何も必要ない」、「終了」、「バイバイ」) を使用してインテント (NothingIntent) を定義できます。スロットやコードフックとしての Lambda 関数は設定されません。これにより、ユーザーは適切に会話を終了できます。