Amazon Lexでチャットボットを作ってみよう

今回はAmazon Lexを使った簡単なチャットボットを作ってみようと思います。

LexはAmazon Echoに搭載されているAlexaと同じ技術を使用し、音声変換やテキストの意図認識をすべてやってくれるので簡単に高性能なチャットボットを作る事が出来ます。

それでは始めてみましょう。

 

目次

概要
Amazon Lex
Intentの追加
Utteranceの追加
Slotの追加
Lambda関数の作成
Fulfillmentの追加
ビルド&テスト
最後に

 

概要

今回作るチャットボットは以下の二つの機能を搭載しようと思います。

①特定の人の名前、出身国、年齢の登録
②上記で登録した情報を名前指定で呼び出し

具体的な流れとしては

①ユーザが情報を追加したいとLexに呼びかける
→対話形式でLexが情報を聞き出す
→LexがLambdaに情報を渡す
→LambdaがDynamoDBに書き込む

②ユーザが○○の情報が欲しいとLexに呼びかける
→Lexが○○の情報をLambdaに聞き出す
→LambdaがDynamoDBから○○の情報を引き出しLexに渡す
→Lexがユーザーに情報を教える

の様な形にしてみましょう

 

 

ではチャットボットの作成に取り掛かりましょう。

 

Amazon Lex

Lexの基本的な動作はUtteranceを聞き取り、対応したIntentを呼び出して
Slotに応じた処理を行う事になります。

例えば今回の機能①の場合は……

・ユーザーが「情報の追加をしたい!(Utterance)」とbotに話しかける
botが情報追加の機能(Intent)を呼び出し、名前等の情報(Slot)をユーザーから聞き出す
・聞き出した情報を元に処理を行う

のような流れになります。

 

Intentの追加

Lexのコンソールページより「Create」→「Custom bot」でbotを作成しましょう。
今回はテキストベースでの会話となりますのでOutput VoiceはNoneにします。

 

 

次に作成したbotにIntentを追加します。

 

Editorのタブから「Create Intent」→「Create new intent」
で適当に名前を指定して「Add」しましょう。

まずは情報を登録する機能を追加したいからaddinfoと名付けてみます。

 

 

Utteranceの追加

情報の追加を行う時に呼びかけるフレーズを「Sample Utterances」に追加していきます。

 

 

ここで登録したフレーズ、もしくはLexが登録されているフレーズの事だと思うフレーズを呼びかけたらこのaddinfoのIntentが呼び出されます。

 

Slotの追加

次はSlotの追加をしましょう。

今回追加したい情報は名前、出身国、年齢の三つなので、Name, Country, Ageを追加しましょう。

Slot typeはLexが参考にする辞書の様なものです。
適切なSlot typeを選択する事によって読み取りの精度を上げたり、
文字列を数値に変換などなどしてくれます。

PromptはLexがユーザーからSlotの値を聞き出すためユーザーに投げかける質問です。

後は全部必須項目なのでRequiredにチェックを入れておきましょう

 

 

最後にFulfillmentでLambda関数を設定すれば終わり
……ですが、 まだLambda関数を作っていないのでそちらを作成しましょう

 

Lambda関数の作成

Lambdaを作成する時は下記のリンクとサンプルの設計書等を参考にして作りましょう。

Lambda 関数の入力イベントとレスポンスの形式:

https://docs.aws.amazon.com/ja_jp/lex/latest/dg/lambda-input-response-format.html

getinfoのintentが聞き出したslotの値を保存したいので、
この関数ではlexから送られてきたslotをDynamoDBに書き込みます。

後程作るintentでは、lexから送られてきた名前の情報をDynamoDBから聞き出して、
それをlexに投げ返す処理を入れます。
(iamロールでの権限追加も忘れない様にしましょう)
Lambda側でテスト実行し、問題なさそうでしたら再びLexの方に戻りましょう

 

Fullfilmentの追加

Fullfilmentより「AWS Lambda function」を選択し、先程作成した関数を選択しましょう。

Lambdaの処理でLexにレスポンスを返してない場合は
「Goodbye message」か「Follow-up message」を
設定する事によってユーザーにメッセージを返せます。

後は同じように他のIntentを追加し、適切な処理をLambda関数に追加していきましょう。

 

ビルド&テスト

ここまで来たら後はビルドするだけです。
上の方にある「Build」ボタンを押しましょう。

ビルドが完了したらいよいよテストです。

画面右の「Test Chatbot」をクリックし、実際にUtteranceを入力し、試してみましょう。

 

 

問題無く情報の登録と呼び出しが出来ましたね。

ちなみにUtteranceにもSlotを追加出来ますので、下記の様なUtterance等を追加したら

ユーザーが楽出来るかもしれません

 

 

最後に

Lex自体の仕組みは物凄くシンプルで設計を簡単に出来る上、Lambdaとの連携も容易なので
アイディア次第によっては楽に面白い物が作れそうです。

今は残念ながらAmazon Lexは英語にしか対応していないですが、
Echoも国内で販売開始された事もあり、そう遠く無いうちに日本語が対応されるのを期待したいですね。