Skip to main content

Amazon Lexを使ってゼネッくまとお話ししよう!

1.はじめに

はじめまして!新入社員の倉橋です。 

本記事では、Amazon Lexについてご紹介いたします。 

Amazon Lexとは、音声やテキストを使った対話型インターフェースをアプリケーションに組み込むためのサービスです。簡単に言うと、チャットボットや音声認識システムを構築するためのツールとして活用されます。 

Amazon Lex には、現在主にV1 (旧バージョン) と V2 (新バージョン) の2つのバージョンが存在します。 

Amazon Lex V1 は以前から提供されていたバージョンで、基本的なチャットボット機能を提供していました。 

一方、Amazon Lex V2 は、より新しいアーキテクチャと機能を持つバージョンとしてリリースされました。現在、新規でボットを作成する場合は、基本的に V2 を利用することが推奨されています。 

そこで、実際にAmazon Lex V2を使用して、ゼネックコミュニケーションの公式キャラクター「ゼネッくま」とお話しできるチャットボットを作ってみました! 

本記事では、Amazon Lexで作成したチャットボットを、CloudFrontを使ってWeb上に公開するまでの流れを紹介します。 

使用サービス 

  • Amazon Lex V2:チャットボット作成 
  • Amazon Cognito:認証管理 
  • Amazon S3 + CloudFront:Webホスティング 

完成版のイメージはこちらです。 

Amazon Lex V2

 


2.Amazon Lex V2でチャットボットを作成

2.1 ボットの新規作成

AWSコンソールから「Amazon Lex」を開きます。 

「ボットの作成」をクリック。基本情報を入力します。 

ボット作成

今回は空のボットから作成しました。 

ボット設定

ここでIAMロールを作成します。 

IAMロール

そのほかの項目は変更せず、次へをクリックします。 

ボットの言語を設定します。ここでは日本語を設定しました。完了をクリックするとボットが作成されます。 

言語追加

2.2 インテントの設定  

ボットの作成が完了したら、インテントを追加の画面に移ります。 

インテントは、「挨拶をしたい」「質問に答えてほしい」など、ユーザーが何をしたいのかをLexが理解するために使います。ここでは、チャットボットとのやり取り(発話と応答)を想定してあらかじめ入力しておきます。インテントは会話の内容ごとに作成します。 

例: 

GreetIntent 

発話例:「こんにちは」「おはよう」 

応答例:「こんにちは!今日はどのようなご用件くま?」 

まず、インテント名を決めます。 

インテント

サンプル発話から、挨拶に関するユーザーの発話を想定して入力します。 

サンプル発話

初期応答で、サンプル発話に対するボットの応答を設定します。 

応答を複数作成した場合、ユーザーの呼びかけに対してランダムに返します。 

初期応答

そのほかの設定は変更せず、インテントを保存します。 

2つ目以降のインテントはこちらから設定します。

インテント2

今回はすべて空のインテントから作成しました。 

作成したインテントの一覧はこちらです。 

挨拶、雑談、サービス説明のインテントを作成しました。 

挨拶、雑談、サービス説明のインテント

FallbackIntentは、デフォルトで作成されています。 

FallbackIntentとは、ユーザーの入力がボットが設定しているどのインテントとも一致しなかった場合に、会話を適切に処理するための特別なインテントです。 

応答はカスタマイズ可能で、予期しない入力に対してエラーメッセージを返して、ユーザーに再入力を促すことができます。 

メッセージグループ

2.3 ビルドとデプロイ 

インテントの作成が完了したら、コンソール右上の「構築」を実行します。 

ビルドとデプロイ

構築が完了したら、Lex コンソール右上の「テスト」でボットに話しかけてみましょう。 

テストボット

 


3.Amazon Cognitoで認証を設定

CloudFrontでチャットボットを公開するには、Cognitoによる認証が必要です。認証がないとLexとの接続ができず、チャットボットがうまく動作しません。 

3.1 Identity Poolの作成 

Cognitoにアクセス → Identity Pool を作成します。 

Identity Pool

「ゲストアクセスを有効にする」にチェックします。 

「ゲストアクセスを有効にする」にチェックします。

ゲストロールの設定で、「新しいIAMロールを作成」を選択します。 

ロール名を入力します。 

新しいIAMロールを作成

プロパティを設定画面で、IDプール名を作成します。 

次の画面に進み、IDプール作成をクリックして完了です。 

IDプール作成

3.2 IAMロールのポリシー設定 

Lex V2 の RecognizeText API を使うため、最低限の許可ポリシーをゲストユーザー用IAMロールに追加します。 

IAM管理画面を開く 

AWSコンソール → 「IAM」 

左メニューから「ロール」を選択します。 

ロール一覧から先ほど作成されたロールを選択してクリックします。 

ロール一覧

インラインポリシーを追加 

「許可」タブ内の「許可を追加」「インラインポリシーを作成」を選択します。 

インラインポリシーを作成

「JSON」を選択し、ポリシーを貼り付けます。 

JSON

貼り付けるポリシーはこちら 

{ 
  "Version": "2012-10-17", 
  "Statement": [ 
    { 
      "Effect": "Allow", 
      "Action": [ 
        "lex:RecognizeText" 
      ], 
      "Resource": [ 
        "arn:aws:lex:ap-northeast-1:YOUR_AWS_ACCOUNT_ID:bot/*" 
      ] 
    } 
  ] 
} 
 

YOUR_AWS_ACCOUNT_IDの部分は12桁のAWSアカウントIDに置き換えてください。 

ポリシー名をつけて保存します。 

 


4.チャットUIの構築

HTML,CSS,JavaScriptを使ってチャットUIを構築します。 

その際次のように認証情報を埋め込みましょう。 

AWS.config.region = 'ap-northeast-1'; 
AWS.config.credentials = new AWS.CognitoIdentityCredentials({ 
  IdentityPoolId: 'ap-northeast-1:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'  // 作成した ID プールの ID 
}); 

 


5.S3 + CloudFrontで公開

S3とCloudFrontを併用することで、パフォーマンスや可用性に優れたコンテンツ配信を行うことができます。 

5.1 S3で静的Webホスティング 

S3バケットを作成します。 

バケットタイプは汎用を選択します。 

任意のバケット名をつけます。 

S3 + CloudFront

その他の設定はデフォルトのまま、バケットを作成します。 

プロパティタブを選択し、静的ウェブホスティングを有効化します。インデックスドキュメントを設定します。 

静的ウェブホスティング

チャットUIのHTMLファイルをアップロードします。 

画像を使用している場合は、画像をHTMLファイルと同じディレクトリにアップロードします。 

チャットUIのHTMLファイルをアップロードします。

5.2 CloudFrontの設定 

CloudFrontディストリビューションを作成します。 

オリジンドメインには作成したS3バケットを選択します。 

そのほかの設定はデフォルトのまま、ディストリビューションを作成をクリックします。 

CloudFrontディストリビューション

ディストリビューションURLでアクセス! 

CloudFrontディストリビューションが作成されると、ディストリビューションドメイン名が発行されます。ここにアクセスすれば、HTTPSで ゼネッくまチャットボットWebサイト を表示可能です。 

ゼネッくまチャットボット

 


6.動作確認

CloudFrontのURLにアクセスします。 

ゼネッくまが応答すれば成功です! 

CloudFrontのURL

 


7.今後の展望

今回、チャットボットの機能はLex内の機能のみで完結させましたが、Lambda関数を利用することでより複雑な会話が可能になります。 

 


8.まとめ

Amazon Lex + Cognito + CloudFrontを使えば、手軽に自分の好きなキャラクターとおしゃべりすることができます。

皆さんもお好きなキャラクターでチャットボットを構築して、キャラクターとの会話を楽しみましょう。 
※「ゼネッくま」は株式会社ゼネックコミュニケーションの登録商標です。

 


9.参考リンク