Amazon LexとAmazon Kendraを日本語で試せるサンプル(Simple Lex Kendra JP)があったのでやってみる

AWSサンプルの「Simple Lex Kendra JP」を利用することで簡単に日本語のFAQチャットボット実装ができました
2023.01.30

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

こんにちは、洲崎です。
Githubのaws-samplesにLexとKendraを日本語で試せるサンプル(Simple Lex Kendra JP)がありましたので、触ってみました。

Simple Lex Kendra JP

Githubに書かれているサンプルシナリオを引用します。

SimpleLexKendra 株式会社という架空の会社のイントラ検索システムを想定しています。/docs ディレクトリにいくつかのドキュメントを配置しています。また、/faq ディレクトリには、FAQ が csv 形式で配置されています。 Amazon Lex v2 のプロジェクトでは、Chatbot 形式で情報システム部に問い合わせを行います。あらかじめよくある問い合わせのフローを定義しておくことで、情報システム部の負担を軽減しています。また、対応方法が不明な問い合わせ (フローとして定義されていない問い合わせ) の場合は、Amazon Kendra を実行して、社内ドキュメントを検索します。 Amazon Kendra のプロジェクトでは、検索フォームから直接社内ドキュメントを検索できます。

すでにサンプルのドキュメントやFAQもあるとのことで、試しやすい内容になっています。

前提条件

このサンプルはCDKを利用する為、Node.jsの実行環境が必要です。
手元の環境が難しいようであればCloud9でも実施可能です。(こちらを参照)
2023/1現在、Amazon Kendraは東京リージョン未対応のため、バージニア北部リージョン(us-east-1)を利用します。
2023/1/30時点の情報です。今後仕様が変わる可能性があります。

デプロイ

GithubのREADME.mdにStep by Stepで丁寧に実装方法が記載されています。

  1. 前提条件の確認
  2. AWS CDK のセットアップ
  3. Amazon Kendra プロジェクトのデプロイ
  4. Amazon Lex v2 プロジェクトのデプロイ
  5. Tech Knowledge

基本この流れでやれば環境を作成することができます。

AWS CDK セットアップ

今回はCloud9ではなく自前の環境でやってみました。
Githubのプロジェクトをgit cloneしてディレクトリ配下に移動します。
CDKのBootStrapをus-east-1リージョンでやっていない場合は下記コマンドを実行します。
npx cdk bootstrap aws://${AWS Account ID}/us-east-1

Amazon Kendra

Amazon Kendra デプロイ

下記コマンドを打ちます。
npx cdk deploy SimpleKendraStack
「Do you wish to deploy these changes (y/n)?」と聞かれるのでyと回答します。
Kendraがデプロイされるまで待ちます。(だいたい40分ほどかかりました)
デプロイが完了するとoutputに以下出力されるのでメモしておきます。

Outputs:
SimpleKendraStack.DataSourceBucketName = simplekendrastack-datasourcebucketxxxxxxxx
SimpleKendraStack.ExportsOutputFnGetAttKendraIndexArn7ABEB122 = arn:aws:kendra:us-east-1:xxxxxxxx:index/xxxxxxxxxxx
SimpleKendraStack.ExportsOutputRefKendraIndex7C32BDCD = xxxxxxxxxxxxxxxxx
SimpleKendraStack.FaqBucketName = simplekendrastack-xxxxxxxxxxxxxxxxx
SimpleKendraStack.IdentityPoolId = us-east-1:xxxxxxxxxxxxxxxxx
SimpleKendraStack.KendraApiEndpointF276F28B = https://xxxxxxxx.execute-api.us-east-1.amazonaws.com/prod/
SimpleKendraStack.KendraIndexId = xxxxxxxxxxxxxxxxx
SimpleKendraStack.KendraSampleFrontend = https://xxxxxxxxxxxx.cloudfront.net

Amazon Kendra 設定

デプロイが完了したらマネジメントコンソールにいき、Kendraを開くと、Indexが作成されています。
作成されたsimple-index-by-cdkをクリックします。

KendraのData sourcesも作成されていますが、EnglishになってるのでJapaneseに変更します。
左メニューからs3-data-sourceをクリックします。

LanguageをJapanese(ja)に変更し、その他は変更せずNextを押していきます。

設定が完了したら、右上のSync nowをクリックして設定完了です。

Outputsで控えたSimpleKendraStack.KendraSampleFrontendのURLを叩くと、Kendraの検索を利用できます。

試しに「パスワードの更新」と入力すると、答えが表示されました!

QAの情報はAmazon S3のバケットに保存されており、OutputのSimpleKendraStack.FaqBucketNameに保存されています。

QAを追加したい場合はS3バケットのディレクトリに追加し、再度npx cdk deploy SimpleKendraStackを実行し、S3のDataSourceのSyncを実行します。
ドキュメントのフォーマットは.txt以外にも.pdf.htmlも可能とのことです。
(サポートされているフォーマットはこちら)

FAQ追加

Amazon KendraでQA以外に、FAQ(よくある質問)も追加できます。
Kendraのコンソールを開き、左メニューからFAQsをクリックします。
右上のAdd FAQをクリックします。

FAQの名前を入力し、languageはJapanese(ja)、FAQ file formatは.csv file - Basicを選択します。
S3はsimplekendrastack-faqbucketでバケットを参照して中にあるsimple.csvを選択、IAMロールもSimpleKendraStack-FaqRoleと検索してサジェストされたものを選択します。

S3バケット

あとは右下のAddをクリックして完了です。
FAQを追加した後に、再度Kendraのサンプルサイトにアクセスします。
試しに「Slack ログイン方法」と検索すると、よくある質問(FAQ)から回答を表示することができました。

これでAmazon Kendraの一通りの検証は終了です。他にもデータソースをS3ではなくLambda経由で連携する方法なども記載されていましたので、興味ある方はやってみてください。

Amazon Lex

Amazon Lex デプロイ

Kendraの時と同じような形で、下記コマンドを実行します。
npx cdk deploy SimpleLexV2Stack
KendraのCDKと依存関係がある為、Kendraのプロジェクトがデプロイ済みであることが前提になります。
Lexデプロイは10分ぐらいでした。デプロイが完了したらOutputsをメモしておきます。

Outputs:
SimpleLexV2Stack.BotAliasId = xxxxxxxxx
SimpleLexV2Stack.BotId = xxxxxxxxx
SimpleLexV2Stack.IdentityPoolId = us-east-1:xxxxxxxxxxxxxxxxxxxxxxxxxxx
SimpleLexV2Stack.LexV2SampleFrontend = https://xxxxxxxxxxx.cloudfront.net

Amazon Lexの検証

Outputsで出たSimpleLexV2Stack.LexV2SampleFrontendのURLを叩くとLexのサンプルサイトが表示されます。
右下のヘッドセットボタンを押すことでチャットボットを開始できます。

試しに「PC交換」と打つことで、以下のやり取りを行うことができました。

また、「パスワード更新」と入力すると、Kendraのindexを参照して回答してくれました!

清掃

CDKでデプロイしている為、destroyコマンドで一斉削除が可能です。下記コマンドを実行します。
npx cdk destroy SimpleKendraStack
念の為、CloudFormationのスタックに残ってないか確認します。

最後に

AWSサンプルの「Simple Lex Kendra JP」を利用することで、気軽に日本語のFAQチャットボットを構築することができました。
KendraとLexを日本語で試してみたいという方はぜひ使ってみてはいかがでしょうか。
またLexまで構築できているため、Amazon ConnectやAmazon Connect Chatとも連携がしやすくなってるところも嬉しいポイントです。

ではまた!コンサルティング部の洲崎でした。