Amazon Connect、Amazon Lex、Amazon Kendraを利用してFAQチャットボットを作成する – Amazon Connect アドベントカレンダー 2022

Amazon Connectに絡むところで、Amazon LexとAmazon Kendraに入門しました
2022.12.20

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、洲崎です。
Amazon Connect アドベントカレンダー 2022、20日目の記事です!
クラスメソッドとギークフィードさんの有志が募ってチャレンジしている企画になります。
(アドベントカレンダーのカレンダー一覧はこちら↓)

今回はAmazon Connect、Amazon Lex、Amazon Kendraを利用してFAQチャットボットを構築します。

はじめにまとめ

  • Amazon Connect、Amazon Lex、Amazon Kendraを利用してノーコードでFAQチャットボットを作成可能
  • Kendraは機械学習を原動力とした高精度で使いやすいエンタープライズ検索サービス
  • Amazon Lex、Amazon Kendraも日本語に対応している

チャットボットの構築パターン

AWSでチャットボットを構築するにあたって、エンドユーザーが質問をする入り口の部分と、チャットボットの中身について検討することが必要です。
入り口について、例えばAmazon Connect、Amazon Connect Chat、Slack、Zendesk、Salesforce、Webアプリケーション等があります。
今回、入り口は視覚的に分かりやすい&Amazon Connectの連携も試せるAmazon Connect Chatを採用します。
チャットボットの中身の選択肢は下記挙げることができます。

  • Amazon Lexのみ
  • Amazon Lex & Amazon Kendra
  • QnAボット

それぞれ内容を解説していきます。

Amazon Lexのみ

Amazon Lexのみでシンプルなチャットボットを作成することができます。
インテントでジョブ(「ホテルの予約」や「航空機の手配」等)を定義し、とスロットでパラメーターを格納していくことで、シナリオベースでチャットボットを作成することができます。
詳細について、下記入門記事がおすすめです。

一方、FAQチャットボット等、参照するデータが多い場合はLexに加えて別の仕組みを導入した方がよいと考えます。
1つの会話で予約受付を完了する(例えば↓の居酒屋予約等)のチャットボットを作成する場合はAmazon Lexのみでも充分有効だと考えています。

Amazon Lex & Amazon Kendra

Amazon Kendraは、機械学習を原動力とした、高精度で使いやすいエンタープライズ検索サービスです。
Amazon LexとAmazon Kendraを連携することで、FAQデータを高速で検索するチャットボットを作成することができます。
連携記事やドキュメントについても複数上がっており、FAQのチャットボットを作成するのであれば有効な選択肢に入ると考えます。

QnAボット

QnAボットは、AWSが提供しているソリューションです。
AWSで用意しているCloudFormationを実行することで、簡単に環境構築することができます。
Amazon Cognitoの認証や、管理者画面、Amazon OpenSearch Searviceによるインデックス等、多機能に及んでいます。

(QnAボットページより参照)
QnAボットについて、AWSからは情報提供を目的としたソリューションになっています。
簡単に試せるので、まずは触ってみたり、アーキテクチャの参考にする点でおすすめです。
弊社のブログでも複数上がってますので参照してください。

今回は本番利用を目指したFAQチャットボットの実装を検討していた為、2つ目に上げているAmazon Lex&Amazon Kendraを検証してみます。

注意事項

2022/12/20現在、Amazon LexとAmazon Kendraは日本語に対応しています。
一方、Amazon LexからAmazon Kendraの連携で利用するAMAZON.KendraSearchIntentEnglish(en_US)のみ対応、リージョンはバージニア、オレゴン、アイルランドのみ対応です。
また、Amazon Kendraは2022/12/20現在、東京リージョン未対応です。
その為、今回の実装はバージニアリージョン、英語(en_US)の設定で行います。

構成図

Amazon Connect、Amazon Lex、Amazon Kendraの構成です。

Amazon Connectはチャット機能を利用する為、チャットのサンプルページをCloudFrontとS3で配置します。
あとはLambda等の利用はなく、各サービス間でシンプルな連携になっています。

やってみる

Amazon Lexボットの作成

Amazon Lexのコンソール画面に移動し、”ボットを作成”をクリックします。
ボット名は任意の名前で、IAMロールは自動作成、児童オンラインプライバシー保護法 (COPPA)は”いいえ”、セッションタイムアウトはデフォルトの5分で進めます。

ボットの言語は”英語”で進めます。

Lexのボットは一つ以上のインテントの作成・サンプル会話が必要になるので、顧客が利用しないようなワードでインテントを一つ作成します。
今回はインテントに「RequiredIntent」、サンプル発話に「Required utterance」と入力しました。

インテントを保存できたら、右上のBuildをクリックします。

yes or noボットの作成

Amazon Kendraで回答した後に「追加で質問ありますか?」といったボットも別で作成します。
ボット名を"yes-or-no"といった形で記載して作成します。

インテントはyesの場合を、サンプル会話を「yes」で入力して作成します。

noの場合も同じく、サンプル会話を「no」にして作成します。

Amazon Kendraの作成

Amazon Kendraのコンソールにいき、”Create an Index"をクリックします。
Index名を入力し、IAMロールは"Create a new role(Recommended)”で作成します。

あとはデフォルトのまま進みつつ、料金プランは"Developer edition"を選択します。

KendraのIndex作成は30分ほど時間がかかるので、その間に別作業を行います。

S3にFAQデータを追加

Amazon S3のコンソールに行き、”バケットを作成”をクリックします。
バケット名はグローバルで被らない名前を入力し、他はデフォルトのままで作成します。

AWSブログにあるサンプルFAQデータのhelp-desk-faq.csvworkdocs-faq.csvをダウンロードして作成したS3バケットにアップロードします。
※FAQのcsvデータについて、下記のカラム形式であれば他のものを用意いただいても大丈夫です。

Question,Answer,URL
Where is the Help Desk?,2nd floor; room 201 (two rights after you get out of the elevators).,<document url>

KendraのIndexの作成が完了したら、サイドメニューにある”FAQs”をクリックします。

Add FAQsをクリックし、FAQ nameと作成したS3バケットを指定し、IAMロールもRecommendedで作成します。
S3バケットのcsvは1つしか選べない為、まずは片方のcsv(画像はhelp-desk-faq.csv)を選択してください。

無事作成ができたら、もう片方のcsvも同じ手順で作成します。
二つ登録できたら、KendraのIndex画面に戻り、FAQ countが正しくなっていることを確認します。

この段階でFAQの検索を試したい方はサイドメニューにある"Search indexed content"をクリックすることで試すことができます。
試しに「Where is the Help Desk」と入力すると、2つ回答が表示されました。

これでAmazon Kendraの設定は完了です。

Amazon LexでAmazon Kendra連携のインテント作成

Lexのコンソールに戻り、Kendraの連携を行います。
作成したボットのインテント画面に写り、”インテントを追加”から"組み込みインテントを使用”をクリックします。

組み込みインテントはAMAZON.KendraSearchIntentで、インテント名を入力、Amazon Kendra インデックスは作成したインデックスを指定します。

ほとんどデフォルトのままで、最後の応答のところに下記文言を追加します。
((x-amz-lex:kendra-search-response-question_answer-answer-1))
この文言はKendraの検索で返ってきたメッセージを表示させるレスポンス文になります。
詳細についてはこちらをご確認ください。

入力できたら”インテントを保存”をクリックし、右上のBuild”をクリックします。
Buildが終わったら、隣のTestボタンを押してLexからKendraを利用できるかテストしてみましょう。
試しに「Where is the Help Desk」と入力すると、Kendraに保存した回答が返ってきます。

Amazon ConnectでLexの設定

最後に、Amazon Connectに作成したLexを設定します。
Amazon Connectのコンソールに飛んで、Amazon Connectインスタンスを作成します。
作成できたら、サイドメニューの”問い合わせフロー”をクリックし、Amazon Lexの部分に作成したボットを選択します。
今回二つボットを作成しているので、HelpDeskBotyes-or-noの両方を追加してください。

Amazon Connectのフロー

Amazon Connectのコンソールに入り、問い合わせフローを設定します。
全体のサンプルフローはこのような形で作成しました。

設定すべきポイントをいくつか上げます。
音声の設定
音声の設定はAmazon Lexの言語で設定した音声と合わせるのと、”言語属性を設定”のところは必ずチェックをいれます。

顧客の入力を取得する
”顧客の入力を取得する”でAmazon Lexボットを選択し、作成したKendraのインテント名を入力します。

さらにもう一つ”顧客の入力を取得する”ブロックをつなげて置き、yes-or-noボットとyes と noのインテントを設定します。

初めにKendraでQA回答をおこなってから、追加の質問があるか?(yesの場合はKendraに、noの場合は切断)といったフローとなります。
保存を押して、公開をクリックします。

Amazon Connect Chatの設定


こちらは他の記事で記載してますので、割愛します。
CloudFrontとS3を利用してAmazon Connect Chatのサンプルページを作成できますので、参考にしてください。

テスト

設定が完了したのでテストしてみます。
Customerが二つの質問を行った後に、もうQAはないので終了、といったシナリオでやってみます。

  • Bot:how can i help you
  • Customer:Where is the Help Desk?
    • Bot:2nd floor; room 201 (two rights after you get out of the elevators)
  • Bot:next question?
    • Customer:yes
  • Bot:how can i help you
  • Customer:What time does the Help Desk open?
    • Bot:,Our hours are from 11am to 2pm
  • Bot:next question?
    • Customer:no
  • Bot:thanks!

テスト動作のキャプチャは以下になります。

Amazon Connect Chatから、Amazon Lexを通って、Amazon KendraのFAQを参照・自動回答することができました!

最後に

Amazon Connect、Amazon Lex、Amazon Kendraを利用してFAQチャットボットを構築してみました!
触っているうちに仕組みも分かってきて非常に楽しかったです。
AI系のサービスとAmazon Connectの連携もしやすいことも分かったので、今後も積極的にAmazon LexやAmazon Kendraも触っていきます。
今回はAmazon LexからAmazon Kendraの連携で利用するAMAZON.KendraSearchIntentが英語飲み対応でしたが、今後の日本語化に期待です。

明日の「Amazon Connect アドベントカレンダー 2022」の記事にもぜひ期待してください。
ではまた!コンサルティング部の洲崎でした。

参考