インテント名の重複に注意したLexボットの設計
渡辺です。
Lexのインテントは、ユーザの実行したいアクションを表します。 Alexaと同様に、ユーザの入力した内容を認識し実行されるコマンドのインターフェイスと考えて良いでしょう。 認識部分にはAIが機能し、実行される処理はLambdaで定義します。
今回は、ひとつのAWSアカウントで複数のボットを作成する時に注意したいインテントとスロットの小ネタを紹介します。
インテントはボットと独立して定義される
Lexのダッシュボードを確認すると、メニューにはBots、Intents、Slot types とあります。
ボット(Bots)はアプリケーション的な単位で、例えば予約ボット、注文ボットなど、目的に合わせて作成します。 一方、インテント(Intent)は「ユーザの実行したいアクション」毎に作成します。 通常、インテントはボット毎に作成していきますが、メニューとしては独立しており、全ボットで利用可能なインテントが表示されます。
Lexのインテントはボットの子リソースではなく、独立したリソースで、インテントとボットを紐付けるイメージ であり、名前の付け方に注意する必要があります。
汎用的な名前のインテントに注意する
インテント名は、ユーザの実行したいアクションを連想する名前にするのが基本です。 例えば、ピザの注文であれば「PizzaOrder」、飛行機の予約であれば「FlightReservation」といった名前になるでしょう。 注意したいのは、使い方を説明するような「Help」インテントや、はい/いいえなどの応答を受ける「YesNo」インテントです。
複数のボットがある場合、汎用的な名前のインテントを作成すると、どのボットで有効にするのかという問題が発生します。 ボットに登録しなければ、そのインテントが有効になることはありません。 しかし、インテントにはバックエンドのLambda関数の設定も含まれます。 少なくとも複数のボットに同じインテントを登録することはほとんどないはずです。
したがって、同じAWSアカウントで複数のボットを作成する場合、インテント名の重複に注意してください。 もちろん、ひとつのAWSアカウントでひとつのボットしか作成しない場合は問題ありません。 また、リージョンが異なる場合も、インテントは独立するので問題ありません。
これはカスタムスロット(Custom Slot)も同様です。
まとめ
Lexで複数のボットを作成する可能性がある場合、インテント名は汎用的な名前にしない ことが無難です。 ボット毎にAWSアカウントを分化する ことも有効でしょう。
また、同じAWSアカウントで開発環境と本番環境の両方を運用する場合も同様です。 この場合は「PizzaOrderDev」インテントと「PizzaOrderPrd」インテントを作成するより、AWSアカウントを分割する方がスッキリするでしょう。