今回はAmazon LexというAWSが提供するフルマネージド型人工知能 (AI) サービスと組み合わせたチャットボットアプリを開発します。記事は全部で3回に分けており、1回目になるこの記事ではアプリの概要と、Amazon Lexの設定を完了するところまでを紹介します。

完成したアプリは次のようになります。アプリのトップ画面にチャットが表示されます。
チャットでやり取りする内容は、複数あるMonacaプランの中からユーザーへ最適なプランを案内するシナリオとなっています。

ここではサンプルのためチャットとのやり取りはシンプルとなっていますが、AWSの設定画面で複雑なやり取りも可能です。

Amazon Lexについて

Amazon Lex は、音声やテキストを使用した会話型インターフェイスを構築するための AWS のサービスです。Amazon Alexa と同じテクノロジーを利用し、音声またはテキストのインターフェイスを使用するアプリケーションをすばやく構築できます。

利用する技術・ライブラリ

このアプリで利用している技術やライブラリは次の通りです。
フロントエンドではAWSが提供している「Sample Amazon Lex Web Interface」を使い、Monacaのプロジェクトに組み込みます。

バックエンド

  • Amazon Lex (AWS): V2
  • Lambda (AWS): Node.js 14.x
  • Cognito (AWS)

フロントエンド

仕様

このアプリの仕様は次の通りです。

  1. トップ画面には、前面にチャット画面を表示する
  2. チャットボットは、Monacaプランの提案をする
  3. チャットボットは、Monacaプラン決定のために受け答えをする

プラン決定のロジックは次のようにします。

  1. ソースコードやストレージの暗号化に興味がある場合、企業向けプラグインが使える「Enterpriseプラン」を提案
  2. 興味がない場合、法人利用の場合「Businessプラン」を提案
  3. 法人利用でない場合は、「Proプラン」を提案

ユーザーの回答による条件分岐は、AWSの別サービスである「Lambda」が担当します。Lambdaについては、次回の記事で解説します。

Amazon Lexでチャットボット作成

AWS ConsoleでAmazon Lexでチャットボットを作成していきます。
AWSのアカウントはあらかじめ作成しておいてください。
また、記事ではAWSのリージョンは東京リージョンを使用する前提で作成していきます。

下記のURLにアクセスして、「Get Started」ボタンをクリックしてください。

https://ap-northeast-1.console.aws.amazon.com/lex/home?region=ap-northeast-1

ここからは画面の言語を日本語に切り替えることができるので、画面下部の「English (US)」をクリックして「日本語」を選択してください。

「ボットを作成」をクリックします。

「ボットの設定」画面では「ボット名」に任意のボット名を入力します。

「IAM アクセス許可」の項目は「基本的な Amazon Lex 権限を持つロールを作成します。」を選択します。

「児童オンラインプライバシー保護法 (COPPA)」は、今回は「13歳未満」のユーザーを対象にしないため「いいえ」を選択します。

「アイドルセッションタイムアウト」「詳細設定 - オプション」は、デフォルト設定のままにしておきます。
それでは「次へ」ボタンをクリックしてください。

「ボットに言語を追加」では、言語を選択に「日本語 (JP)」を選択し、「音声による対話」「インテント分類信頼スコアのしきい値」はデフォルトのままにします。「完了」ボタンをクリックしてください。

Amazon Lex スロットの作成

今回のボットでは、質問に対して「はい」「いいえ」で回答します。回答で使用する「スロット」を作成します。

Lexに組み込まれているスロットにはイエス/ノーを扱うスロットが無いので、「カスタムスロット」を作成します。チャットが求める質問によっては、数値・期間・電話番号など、組み込み済みのスロットも利用できるので慣れてきたら試してみるといいでしょう。

 それではカスタムスロットを作成していきます。
「ボットのバージョン」→「ドラフトバージョン」→「言語」セクションの「Japanese (Japan)」をクリックします。

「スロットタイプを表示」をクリックします。
「スロットタイプを追加」ドロップダウンの「空のスロットタイプを追加」をクリックします。スロットタイプ名は「YesOrNo」とし、「追加」ボタンをクリックしてください。

「スロッタタイプ値の解決」は「yes」か「no」のみを値とするので、「スロット値に制限」を選択してください。
「スロット値」には「yes」「no」を入力し、右側のテキストボックスにはそれぞれに関係する値を入力します。

入力が完了したら画面下部の「スロットタイプを保存」をクリックしてください。

Amazon Lexインテントの作成

次にボットの会話の準備をしていきます。最終ゴールにあたる「インテント」を作成しましょう。

インテントは、ユーザーが実行したいアクションを表します。このアプリのインデントは、最適なプラン選んでもらうことです。チャットではこのインテントを達成するために、質問を2つ用意します。

  1. 法人でのご利用ですか?
  2. アプリのソースコードやストレージの暗号化に興味はありますか?

では、「言語: 日本語 (JP)」に戻り、「インテントを表示」をクリックします。

「NewIntent」をクリックします。

インテント名を「SuggestMonacaPlan」に変更します。

サンプル発話にはこのインテントを起動するためのサンプルを入力します。
ここでは次の3つを入力しました。

  1. どのようなプランがありますか
  2. プランを契約したいです
  3. プランを選びたいです

いよいよ質問を設定していきます。
「スロットを追加」をクリックし、下記の内容でスロットを追加します。

スロット名 スロットタイプ プロンプト
IsForEnterprise YesOrNo 法人でのご利用ですか?
UseEnterprisePlugins YesOrNo アプリのソースコードやストレージの暗号化に興味はありますか?

「確認プロンプトと応答拒否」「フルフィルメント」はデフォルトのままにしておきます。「応答を閉じる」のメッセージに次の内容を入力します。

法人利用 {IsForEnterprise} エンタープライズプラグインの興味: {UseEnterprisePlugins}

メッセージ中の「{IsForEnterprise} 」と「{UseEnterprisePlugins}」には、ユーザーの返答に応じたスロットの値が設定されます。
このメッセージは最終的にはLambda側で返すメッセージに置き換えられるのですが、それは次回解説します。

入力が完了したら画面下部の「インデントを保存」ボタンをクリックしてください。

テスト

これですべての設定が完了したので、画面下部の「構築」をクリックしてください。

構築が完了したら「テスト」クリックをクリックしてみてください。

AWSコンソールにチャットのUIが表示されます。「検査」を押すと、現在のスロットに設定されている値などを確認することができます。質問に回答していくことで、このスロットに値が設定されていくことがわかります。

では、「メッセージを入力してください」テキストエリアに、「こんにちは」と入力し、エンターキーを押してみてください。スロットに設定した質問の「法人でのご利用ですか?」が表示されます。

この質問に回答すると、「アプリのソースコードやストレージの暗号化に興味はありますか?」という2つ目の質問が表示されます。
さらに回答すると、全ての必須スロットの値が満たされるので、「応答を閉じる」で設定したメッセージが表示されます。


今回の記事ではAmazon Lexの設定方法を紹介しました。次回はLambdaと組み合わせる方法を紹介します。