Amazon Lex V2 で Selective Conversation Log Capture を実行する

こんにちは!最近元気な挨拶を心がけているMasedatiです。

2023年度のAWSのアップデートを見直していたらAmazon Lexに関する以下の記事を見つけました。

Selective Conversation Log Capture は、セキュリティやプライバシー上の懸念から会話型ログをデフォルトで有効にできない場合に、お客様がトラブルシューティングや詳細な会話分析を行うために役立ちます。…

…この機能により、ユーザーが提供した承認や法的同意など、最も関連性の高いデータのみがキャプチャされ、アーカイブされます。

いったいどのような機能なのでしょうか?詳しく見ていきたいと思います。

Amazon Lexとは?

Amazon Lexとは、Amazon Alexa と同じ会話型エンジンを搭載した、音声やテキストを使用して任意のアプリケーションに対話型インターフェイスを構築するサービスです。チャットボットと呼べばイメージしやすいでしょうか。

Amazon Lexではサンプルボットが公開されており、以下は花屋を想定したチャットボットです。
ユーザの注文に対して自動応答を行っています。

なお、Amazon LexにはV1とV2がありますが、今回Selective Conversation Log Captureが使用できるのはV2のみのため、以降はAmazon Lex V2とします。

 

Selective Conversation Log Captureとは?

Amazon Lex V2 は、会話のテキストログを Amazon CloudWatch Logs に保存することができます。また、会話のオーディオログを S3 バケットに保存することができます。

すべてのログを保存できるのはありがたいですが、これまでは「ログを保存しない or ログをすべて保存する」の2択だったため、ログを保存する場合、会話の中の機密情報(クレジットカード番号、セキュリティコード)もログの中に含まれる可能性がありました。

今回導入された「Selective Conversation Log Capture」は、有効化することでログを一部保存することができるようになります。

具体例

Selective Conversation Log Capture有効化前のログはこちらです。

そして、Selective Conversation Log Capture有効化後のログはこちらです。

明らかに少なくなってますね。

 

やってみた

では、花屋のサンプルボットを利用して、「Selective Conversation Log Capture」を導入してみましょう。

ボットの作成

Amazon Lexのページから「ボットを作成」ボタンをクリックします。

「例から開始」を選択し、サンプルボットとして、「OrderFlowers」を選択します。

ボットの名前を入力し、IAMロールを作成します。

児童オンラインプライバシー保護法は「いいえ」を選択します。

児童オンラインプライバシー保護法 (COPPA) の対象となるボットでは、会話ログを使用することはできません。
会話ログの記録 - Amazon Lex
Amazon Lex V2 ボットを使用してユーザーとの会話を記録する方法を説明します。

その他の設定項目はデフォルトとし、「次へ」ボタンを押します。

言語を選択し、チャットボイスの声優さんを選択後、完了ボタンを押します。
声が素敵だと思ったので、私はTomokoさんを選びました。

サンプルで作られる会話の流れは以下のようになっています。

Selective Conversation Log Captureを有効化する

今回は、新たに会話内容(顧客注文の最終確認)を追加し、その会話内容(スロット)のみログを保存してみます。
既存会話内容のログにセンシティブ情報(クレジットカード番号等)があり、「顧客注文の最終確認のみ記録する」必要があると仮定します。

事前準備としてスロットタイプを定義する必要があります。
スロットタイプとは、スロット内のデータの認識と処理方法を定義するものです。
今回最終確認に対して、「はい/いいえ」の答えが期待されるので、以下のように作成します。

事前準備ができたところで、「スロットを追加」ボタンを押し、新しい会話を追加しましょう。

事前準備で作成したスロットタイプを指定し、以下のようにスロットを設定・追加します。

  • 名前:CustomerCheck
  • スロットタイプ:CustomerCheck
  • プロンプト:{FlowerType} を {PickupDate} の {PickupTime} に受け取りますか?

スロットが追加できたら「インテントを保存」後、インテントリストに戻ります。

デプロイ>エイリアスを選択後、デフォルトで作成されているエイリアスを選択します。

「会話ログを管理」を押します。

テキストログを有効化し、Selectively log utterancesに✓を入れます。ログを保存するCloudWatchロググループを選びます。
なお、オーディオログは無効としました。

インテントに戻り、初期応答→詳細オプションをクリックします。

Selective Conversation Log Captureを有効にするインテントとスロットに基づいて、Session attributesに以下の形式で記載します。

[x-amz-lex:enable-text-logging:intent:slot] = "true"

今回ログを保存するインテント名が[OrderFlowers]、スロット名が[CustomerCheck]なので、以下のように記載しました。

[x-amz-lex:enable-text-logging:OrderFlowers:CustomerCheck] = "true"

公式ドキュメントにはx-amz-lex:enable-text-logging:intent:slotと記載されてましたが、エラーがでました。
[x-amz-lex:enable-text-logging:intent:slot]が正しいようです。

インテントを保存後、Buildし、Testしてみましょう。

新しい会話が追加されました。

ログを確認する(再掲)

では、CloudWatchログを確認してみましょう。

Selective Conversation Log Capture有効化前のログはこちらです。

上記会話のすべてのやりとりが保存されています。

そして、Selective Conversation Log Capture有効化後のログはこちらです。

“content”に表示されている内容は、該当会話でのユーザへの返答ですので、今回Selective Conversation Log Captureを有効化したCustomerCheckスロットのログのみ保存されています。

今回は該当箇所のテキストログのみを保存しましたが、すべての会話をテキストログとして保存し、該当箇所のみオーディオログとして保存することもできます。

 

感想

一昔前のアップデート内容でしたが、皆様のお役に立てれば幸いです。

タイトルとURLをコピーしました