[会話型AI活用]Amazon LexとConnectでシーン別にお花をレコメンドする仕組みを作ってみた

こんにちは。エンジニアの岩間です。

Amazon Connect アドベントカレンダー 2024、23日目の記事です!

クラスメソッドさん、クラウドビルダーズさんとギークフィードのメンバーによるAmazon Connect盛りだくさんのカレンダーです。

ぜひ他の記事もチェックしてみてください。

 

近年、AI技術の進展により、顧客体験を向上させるソリューションが多様化しています。
特に会話型AIは、顧客との対話を自然に行い、適切な提案をリアルタイムで行えることから、さまざまなビジネス領域で注目されています。
Amazon Lexは、AWSが提供する自然言語理解 (NLU) を活用した会話型インターフェース構築サービスであり、チャットボットや音声アシスタントを容易に実現できます。

また、AWSにはAmazon Personalizeのように高度なパーソナライズレコメンドを実現するサービスも存在しますが、顧客のニーズに即した「タイミング」と「内容」を提案することが、競争優位性を高める鍵となってきていると感じております。

そこで今回は、会話型AIの一例として「お花の注文電話」を想定し、Amazon LexAmazon Connectを活用して、シーン別に最適なお花をレコメンドする仕組みを構築してみましたので、その実装手順とポイントをご紹介します。

 

やりたいこと

今回の実装では、Amazon LexAmazon Connectを活用し、電話注文を通じてお客様に最適なお花をレコメンドする仕組みを構築してみます。

 

会話イメージ

以下の画像の通り、お客様が電話音声を通じて「誕生日」「記念日」「感謝」などの用途(Occasion)を伝えると、システムが用途に応じた最適な花をレコメンドする流れを想定しています。

 

 

構成図

構成図に示す通り、システムの流れは次のようになっています。

  1. Amazon Connect
    電話注文のエントリーポイントとして、顧客からの通話を受け付けます。Amazon Connectのフロー内にAmazon Lexを組み込み、会話を通じて顧客の用途(Occasion)をヒアリングします。
  2. Amazon Lex
    会話型AIを担う部分です。お客様のリクエストを自然言語で理解し、「誕生日」「記念日」などの用途を抽出します。
  3. AWS Lambda
    Lexから受け取った用途をもとに、バックエンドロジックを処理します。OccasionをキーにDynamoDBにクエリを行い、花の情報(在庫状況、価格、説明)を取得します。
  4. Amazon DynamoDB
    花のデータベースとして利用します。在庫状況、価格、説明を用途ごとに管理し、適切なレコメンド情報を返します。
  5. 応答生成
    取得したデータをもとに、在庫状況に応じて提案内容を変更します。例えば、在庫がない場合は代替提案も行える仕組みです。

 

実装

それでは早速実装していきましょう。

LambdaとDynamoDB作成(CDK)

まずは、AWS CDKでLambdaとDynamoDBをデプロイしていきます。

※CDKはバージョン2.160.0、言語はTypeScriptで作成していきます。

 

1.  CDK用のディレクトリを作成しその配下で、

  • cdk init sample-app --language typescript
  • cdk bootstrap

を実行します。

 

2. lib/flower-suggestion-stack.tsに以下の記述を追加します。

 

3. 次にlambda/flower-suggestion.tsを作成し、以下の記述を追加します。

 

4. cdk deployコマンドを実行して問題なくデプロイできたらOKです!

 

DynamoDBにデータ追加

次はDynamoDBに花情報のデータを追加していきます。

AWSコンソールでDynamoDBの画面にいき左メニューの「項目を探索」からデータ追加が行えるので、下記の画像のようなデータを追加していきましょう。

 

Lex設定

次はLexの設定をしていきます。

AWSコンソールでLexのページにいきます。

Bot作成

1.  まずはBotを作成します。Lexのページから「Create bot」をクリックします。

 

2. 設定画面に遷移するので、下の画像のように設定します。

 

3. 言語設定は日本語にします。

 

スロットタイプ作成

次はスロットタイプ作成です。

1. 左メニューからSlot typesの画面に移動します(画面のパスで迷子になりがちなので注意です!)。
「Add black slot type」をクリックしてスロットタイプを作成します。

 

2. モーダルが表示されるので、「FlowerType」と入力し保存します。

 

3. Slot type nameが保存できたら、次は以下の画像のように編集していきます。

 

4. 同じ要領でOccasionTypeも登録します。

 

Lambda設定

次はBotの中でLambdaを扱うための設定をします。

1.  左メニューの「Alias」をクリックし、言語:Japaneseをクリックします。

(これまた画面パス迷子になりがちなので注意です!)

 

2. 以下のような画面になるので、CDKで作成したLambda関数を設定して保存します。

 

インテント作成

次にインテントを設定します。

1.  左メニューの「Intents」をクリックすると下の画像のような画面が開くので、「Add empty intent」をクリックします。

 

2. インテント名を入力し追加します。

 

3. インテントの中身は以下の画像のように設定しました。

 

4. Slotsの中身はこうなっています。

 

5. OccasionTypeのslotではAdvanced optionsのボタンから、Lambdaが実行されるように設定しています。

 

6. インテントが設定できたら、画面右上の「Build」を実行して、「Test」します。

 

Amazon Connect設定

そろそろ実装も終盤に差し掛かってきました。最後にAmazon Connect側での設定を行います。

Amazon ConnectでLexを扱うための設定

Amazon ConnectインスタンスにLexのBotを追加します。

1.  Amazon Connect画面からインスタンンスエイリアス名をクリックし、左メニューから「問い合わせフロー」のページにいきます。

2. Amazon Lexのセクションにて先ほど作成したLexのボットとエイリアスを選択し、追加します。

 

 

フロー設定

Amazon Connectのフローに作成したLexを組み込んでいきます。

※Amazon Connectインスタンス作成や通話するまでの設定はこちらの記事で紹介しております

今回は、下の画像のように設定してみました。

 

「顧客の入力を取得する」ブロックにてLexの設定をしています。

 

お疲れ様でした!これで設定は完了です。

最後にテストコールを行い、想定通りの動作になれば成功です!

 

まとめ

今回は、「[会話型AI活用]Amazon LexとConnectでシーン別にお花をリコメンドする仕組みを作ってみた」というテーマで、電話注文におけるシーン別のお花提案システムを紹介しました。

今回はDynamoDBに保存された固定データをベースにお花をレコメンドする形ですが、Amazon Bedrockを利用して大規模言語モデル(LLM)にAPIを投げてみるのも高度なパーソナライズができそうで良さそうだと思いました。

会話型AIの活用により、ビジネスにおける顧客体験をよりスマートに向上させることができます。
ぜひ、皆さんもシーンに応じたAIシステムの構築に挑戦してみてください!

 

ここまでお読みいただき、ありがとうございました!

この記事が気に入ったら
いいね ! しよう

Twitter で

【採用情報】一緒に働く仲間を募集しています

採用情報
ページトップへ