【オペレーターのAIアシスタント】Amazon Q in Connectの設定と「コンテンツの検索」をやってみた – Amazon Connect アドベントカレンダー 2023

「Amazon Q in Connect」はコールセンターのオペレーターにとって、優秀なAIアシスタントが横についてくれる激アツな機能です
2023.12.03

こんにちは、洲崎です。
Amazon Connect アドベントカレンダー 2023、3日目の記事です!

クラスメソッドとギークフィードさん、スカイアーチHRソリューションズ さんの有志が募ってチャレンジしている企画になります。

(アドベントカレンダーのカレンダー一覧はこちら↓)

今回はre:Invent 2023のキーノートで発表されたAmazon Q in Connectを触ってみたので紹介します。

Amazon Q in Connect

re:Invent 2023でAmazon Q in Connectが発表されました。(さっそくべこみんさんが速報を書いてくれました)

2023/12/3時点で、対応しているのがUSリージョン・英語のみ(プレビュー)ですが、試しにどんな機能なのか検証してみたところ、「これはよさそうだぞ...」となったので設定方法から紹介します。

プレビュー版のため、今後仕様が変わる可能性があります。
2023/12/8追記:改めてドキュメントを見ると、下記のリージョンがすでに対応されておりました。
利用可能なリージョン: 米国東部 (バージニア北部)、米国西部 (オレゴン)、欧州 (ロンドン)、欧州 (フランクフルト)、アジアパシフィック (シドニー)、アジアパシフィック (東京)

どのような機能なのか3行で説明

Amazon Q in Connectを3行で説明すると以下です。

  • Amazon Q in Connectは生成AIを活用したオペレーターのAIアシスタント機能
  • 「コンテンツの検索」で通話前・通話中・通話後に限らず、設定したデータソースからAmazon Q(生成AI)を利用して自然言語で検索・回答を得ることが可能
  • 「リアルタイムの推奨事項」で通話中・チャット中の会話をリアルタイムで文字起こしして、その内容をAmazon Q(生成AI)で自動検索して回答を得ることが可能

※本記事では2番目の「コンテンツの検索」までを検証します。

Amazon Q in Connectを一言で言うなら

コールセンターのオペレーターの横に、優秀なAIアシスタントがついてくれる激アツな機能です。

やってみる

プレビュー中ですが、バージニアかオレゴンリージョンで利用可能なので、早速バージニアリージョンでやってみます。

事前準備

コンテンツ格納用のS3バケットの作成

Amazon Q in Connectは参照する先として、下記を指定することができます。

  • Amazon S3
  • Microsoft SharePoint Online
  • Salesforce
  • ServiceNow
  • ZenDesk

今回はAmazon Q in Connectから参照するコンテンツを格納する用のS3バケットを作成します。
オブジェクトはhttps://classmethod.jp/english/htmlを格納しました。

Amazon Qを暗号化するためのAWS KMSキー

Amazon Qを暗号化するためのAWS KMSキーを作成します。
キータイプは「対称」で、その他はデフォルトのままで作成します。

(参考)もしAmazon Connect ChatでAmazon Qを利用する場合は下記のポリシーをキーポリシーに追記します。

        {
            "Effect": "Allow",
            "Principal": {
                "Service": "connect.amazonaws.com"
            },
            "Action": [
                "kms:Decrypt",
                "kms:GenerateDataKey*",
                "kms:DescribeKey"
            ],
            "Resource": "*"
        }

Amazon Qの有効化

us-east-1で立ち上げたAmazon Connectインスタンスの左のサイドメニューから「Amazon Q」を開き、「ドメインを追加」をクリックします。

今回は「新しいドメインを作成」にし、任意のドメイン名を入力します。
今回は暗号化についてAWSのマネージドキーを使うので「暗号化設定のカスタマイズ(高度)」のチェックを外して、「ドメインを追加」をクリックします。

ドメインが作成できたら、「統合を追加」をクリックします。

ソースを「S3」で選択し、あらかじめ作成しておいたS3バケットとKMSキーを指定します。

確認画面で「統合を追加」をクリックします。

これで、AWSマネジメントコンソール上の設定は完了です。

Amazon Connect コンタクトフローの組み込み

コンタクトフローで必要なブロックは2つです。

記録と分析の動作を設定 ブロック

通話録音やContact Lensを有効化にする時に使うブロックです。

「分析」のところで「音声分析を有効にする」と、「リアルタイムおよび通話後の分析」にチェックを入れます。

Amazon Q Connect ブロック

Amazon Q in Connectのドメインを指定するブロックです。

ブロックは「設定」の中にあります。

ブロックの設定で作成したAmazon Q in Connectで作成したドメインを選択します。

(余談:ARNはWisdomのままでした)

全体のフロー

上記紹介したブロックを組み込んだコンタクトフローがこちらです。

あくまで検証用で、キューに入って電話が着信したらOK、エラーが起きたら切断(CloudWatch Logsのログを確認)といった形にしています。

コンタクトフローをJSONで出力したので気になる方はご参照ください。

コンタクトフロー(クリックすると開きます)
{
    "Version": "2019-10-30",
    "StartAction": "cd756635-c425-41d7-b72b-634335a281cf",
    "Metadata": {
        "entryPointPosition": {
            "x": -24.8,
            "y": -6.4
        },
        "ActionMetadata": {
            "a07d653b-8182-4056-821a-8e5531941719": {
                "position": {
                    "x": 300,
                    "y": 235.2
                },
                "children": [
                    "fe2e024b-f73c-4ba1-a636-82135a0d396b"
                ],
                "parameters": {
                    "WisdomAssistantArn": {
                        "displayName": "arn:aws:wisdom:us-east-1:xxxxxxxxxxx:assistant/xxxxxxxxxxx"
                    }
                },
                "fragments": {
                    "SetContactData": "fe2e024b-f73c-4ba1-a636-82135a0d396b"
                }
            },
            "fe2e024b-f73c-4ba1-a636-82135a0d396b": {
                "position": {
                    "x": 300,
                    "y": 235.2
                },
                "dynamicParams": []
            },
            "cd756635-c425-41d7-b72b-634335a281cf": {
                "position": {
                    "x": 71.2,
                    "y": 81.6
                }
            },
            "edd02b57-c3aa-44e1-baf2-b9bd9c0be2ec": {
                "position": {
                    "x": 74.4,
                    "y": 260
                }
            },
            "a6991d0f-1685-4df9-95c6-0affb1381634": {
                "position": {
                    "x": 791.2,
                    "y": 172
                }
            },
            "4ea0abcf-75ae-4dc0-9880-5751fb9f1c0f": {
                "position": {
                    "x": 808.8,
                    "y": 407.2
                }
            },
            "ab9bb4db-50e1-435d-9bfb-f6f17dce5f83": {
                "position": {
                    "x": 522.4,
                    "y": 164
                },
                "parameters": {
                    "QueueId": {
                        "displayName": "q-in-connect"
                    }
                },
                "queue": {
                    "text": "q-in-connect"
                }
            }
        },
        "Annotations": [],
        "name": "q-in-connect",
        "description": "ContactFlow",
        "type": "contactFlow",
        "status": "published",
        "hash": {}
    },
    "Actions": [
        {
            "Parameters": {
                "WisdomAssistantArn": "arn:aws:wisdom:us-east-1:xxxxxxxxxx:assistant/xxxxxxxxxx"
            },
            "Identifier": "a07d653b-8182-4056-821a-8e5531941719",
            "Type": "CreateWisdomSession",
            "Transitions": {
                "NextAction": "fe2e024b-f73c-4ba1-a636-82135a0d396b",
                "Errors": [
                    {
                        "NextAction": "4ea0abcf-75ae-4dc0-9880-5751fb9f1c0f",
                        "ErrorType": "NoMatchingError"
                    }
                ]
            }
        },
        {
            "Parameters": {
                "WisdomSessionArn": "$.Wisdom.SessionArn"
            },
            "Identifier": "fe2e024b-f73c-4ba1-a636-82135a0d396b",
            "Type": "UpdateContactData",
            "Transitions": {
                "NextAction": "ab9bb4db-50e1-435d-9bfb-f6f17dce5f83",
                "Errors": [
                    {
                        "NextAction": "4ea0abcf-75ae-4dc0-9880-5751fb9f1c0f",
                        "ErrorType": "NoMatchingError"
                    }
                ]
            }
        },
        {
            "Parameters": {
                "FlowLoggingBehavior": "Enabled"
            },
            "Identifier": "cd756635-c425-41d7-b72b-634335a281cf",
            "Type": "UpdateFlowLoggingBehavior",
            "Transitions": {
                "NextAction": "edd02b57-c3aa-44e1-baf2-b9bd9c0be2ec"
            }
        },
        {
            "Parameters": {
                "RecordingBehavior": {
                    "RecordedParticipants": [
                        "Agent",
                        "Customer"
                    ]
                },
                "AnalyticsBehavior": {
                    "Enabled": "True",
                    "AnalyticsLanguage": "en-US",
                    "AnalyticsRedactionBehavior": "Disabled",
                    "AnalyticsRedactionResults": "None",
                    "ChannelConfiguration": {
                        "Chat": {
                            "AnalyticsModes": [
                                "ContactLens"
                            ]
                        },
                        "Voice": {
                            "AnalyticsModes": [
                                "RealTime"
                            ]
                        }
                    }
                }
            },
            "Identifier": "edd02b57-c3aa-44e1-baf2-b9bd9c0be2ec",
            "Type": "UpdateContactRecordingBehavior",
            "Transitions": {
                "NextAction": "a07d653b-8182-4056-821a-8e5531941719"
            }
        },
        {
            "Parameters": {},
            "Identifier": "a6991d0f-1685-4df9-95c6-0affb1381634",
            "Type": "TransferContactToQueue",
            "Transitions": {
                "NextAction": "4ea0abcf-75ae-4dc0-9880-5751fb9f1c0f",
                "Errors": [
                    {
                        "NextAction": "4ea0abcf-75ae-4dc0-9880-5751fb9f1c0f",
                        "ErrorType": "QueueAtCapacity"
                    },
                    {
                        "NextAction": "4ea0abcf-75ae-4dc0-9880-5751fb9f1c0f",
                        "ErrorType": "NoMatchingError"
                    }
                ]
            }
        },
        {
            "Parameters": {},
            "Identifier": "4ea0abcf-75ae-4dc0-9880-5751fb9f1c0f",
            "Type": "DisconnectParticipant",
            "Transitions": {}
        },
        {
            "Parameters": {
                "QueueId": "arn:aws:connect:us-east-1:xxxxxxxxxx:instance/6314c385-404f-41b6-bb56-999340399319/queue/9353c8f8-6439-42c3-a91e-78ce14f8d997"
            },
            "Identifier": "ab9bb4db-50e1-435d-9bfb-f6f17dce5f83",
            "Type": "UpdateContactTargetQueue",
            "Transitions": {
                "NextAction": "a6991d0f-1685-4df9-95c6-0affb1381634",
                "Errors": [
                    {
                        "NextAction": "4ea0abcf-75ae-4dc0-9880-5751fb9f1c0f",
                        "ErrorType": "NoMatchingError"
                    }
                ]
            }
        }
    ]
}

テスト

設定が完了したら、実際に電話画面で確認してみます。
Amazon Q in Connectはエージェントワークスペースのみ対応です。
下記のURLでインスタンス名を置き換えて接続いただくか、Amazon Connectコンソールからクリックして表示します。
https:// instance name.my.connect.aws/agent-app-v2/

開いてみると、右側にAmazon Qが存在してました!

コンテンツの検索

Amazon Q in Connectは2つの機能があります。
1つ目は「コンテンツの検索」です。
エージェント画面で通話前・通話中・通話後限らず、設定したデータソースのコンテンツからAmazon Q(生成AI)を利用して自然言語で検索することができます。
「Search Amazon Q」のところで、調べたいワードを入力します。

試しに「Where is Hibiya Office」と入力してみました。
すると体感1秒程で、リファレンスとともに正確な内容が返ってきました!

The Hibiya Office of Classmethod, Inc. is located at 26F Hibiya Fort Tower 1-1-1 Nishishimbashi Minato-ku, Tokyo 105-0003 according to the Company Overview document.

翻訳

クラスメソッド株式会社日比谷オフィスの所在地は、会社概要資料によると、〒105-0003 東京都港区西新橋1-1-1 日比谷フォートタワー26階です。

内容は正確で回答文章に対しても自然言語の形で違和感はありません!

結果で表示されたリファレンスをクリックしてみると、ブラウザの別タブで表示されるのかと思いきや、Amazon Connectの画面内でタブが分かれて表示されました。

ブラウザのタブで行ったり来たりせずに、1画面で完結できるのは素晴らしいですね。
現段階で画像イメージは対応していない様なので、今後に期待です。

リアルタイムの推奨事項※今回は紹介のみ

2つ目の機能として、「リアルタイムの推奨事項」があります。
通話中・チャット中の会話をリアルタイムで文字起こしし、その内容をAmazon Q(生成AI)で自動検索する機能です。
早速、通話・チャットの両方で試してみたのですが、やり取りを開始して引っかかるワード(「Office」等)を話してみても、上手く動作しませんでした。。(00:00から進まない)

通話中

チャット中

こちらは現在AWSサポートとやり取りしながら調査中のため、利用できるようになりましたら改めてご紹介します。

今後期待したい拡張機能

触ってみて実際にこの辺りも今後アップデートされると嬉しいなと思ったので記載します。

データソースの拡張

Amazon Q in Connectはデータソースについて下記を指定することができます。

  • Amazon S3
  • Microsoft SharePoint Online
  • Salesforce
  • ServiceNow
  • ZenDesk

Amazon S3に対応しているので、今回のような検証目的であれば簡単にAmazon Q in Connectを試すことができます。

上記以外に、例えばRAGとして利用される「Amazon Kendra」や、同じくre:Invent 2023で発表された「Knowledge base for Amazon Bedrock」なども利用できるようになると生成AIチャットボットとしてより強力なものになるのではと感じました。

言語対応

言わずもがなですが、日本語の対応が待ち遠しいなと思ってます。
内部ではAmazon Qを利用しているので、Amazon Qが日本語対応されればこちらも日本語対応されるはずです。
ぜひ日本語で使いたい!という方は、AWSにリクエストしていきましょう。

最後に

Amazon Q in Connectの設定と「コンテンツの検索」を試してみました。
「コンテンツの検索」は通話前・通話中・通話後に関わらず、気軽にデータソースからAmazon Q(生成AI)を利用して電話画面上で回答を得られるのが非常に良い体験だなと思いました。
オペレーター向けで、従業員体験を向上させるために今後必須になってくる機能だと思います。
今後もAmazon Q in Connectのアップデートがありましたら追いかけていきます。

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

参考