AWS Summitに参加して
先週、AWS Summitに2日間参加し、さまざまな技術に触れることができました。その中で注目していたサービスの一つが Amazon Connect です。以前から提供されているサービスではありますが、最近では生成AIとの連携により注目を集めているサービスの一つではないかと感じています。そんな中、自治体ブースで AIエージェントとAmazon Connectを使用したデモを見て、「これは面白そうだ」と感じました。
作成したもの
さっそく、同じような仕組みを試してみたくなりましたが、まずは RAGとAmazon Connectを連携した仕組みを検証で構築してみました。以前、Gov-JAWS#2でお話させていただいた下記、 GCAS検索アプリ にて、チャットシステムを用いたGCASドキュメントを検索するためのRAGの仕組みは構築済みであったため、今回は「音声で回答する」仕組みを追加する形で進めました。
※本記事では詳細な設定手順には触れず、構成や仕組みの概要のみを紹介します。
下記のように、電話で「ガバメントクラウドについて教えて下さい。」と質問すると、RAG内に保存されたGCASドキュメントを検索し、例えば「ガバメントクラウドの特徴は●●です。」と音声で回答してくれる仕組みです。
全体の流れ
以下は、ざっくりとした処理の流れです。
- ユーザーがAmazon Connectのコンタクトフローに紐付けた電話番号に発信
- Amazon Connectが応答し、Amazon Lexによって音声をテキストに変換
- Lambda関数を呼び出し、Amazon Bedrock上のナレッジベース(RAG)を検索
- 検索結果を元に音声で回答
構成の詳細
Amazon Connectでは、GUI上で下記のようなコンタクトフローを作成できます。
「ログの記録動作の設定」や「音声の設定」では、CloudWatch Logsへのログ保存や音声の種類などを設定します。
「顧客の入力を取得する」の箇所が今回Amazon Connectで設定するメインの箇所になります。「下記左側の図」で事前に作成したAmazon Lexボットを指定します。「下記右側の図」で「ご質問をお願いします。」といった音声メッセージを定義しており、これが着信時に流れます。
下記は上記、Amazon Connectのフローの中で指定しているLexの設定の一部になります。下記の箇所でLexが呼び出すLambad関数を指定します。このLambda関数がAmazon Bedrockにアクセスして、RAG検索を実行します。
まとめると、下記のような流れになります:
- 着信後、Lexが「ご質問をお願いします」と音声案内
- ユーザーが質問
- Lexが音声を文字起こしし、Lambda関数へ送信
- LambdaがBedrockのナレッジベースから回答を取得し、音声で返答
動作確認
作成したコンタクトフローに電話番号を紐付けて検証しましたが、日本の電話番号取得には時間がかかるため、今回はアメリカの番号を使用しました。検証中に何度も発信すると国際電話料金が発生するため、こちらの記事を参考に、もう1つアメリカの番号を取得し、Amazon Connect同士で通話してテストを行いました。
通話中、「ご質問をお願いします。」と音声が流れるので、「ガバメントクラウドとは?」と話しかけると、音声で回答が返ってきました。Lambdaのログを見ると以下のように記録されています。Lexから質問を受け取ってナレッジベースに問い合わせているのが分かります。
Lex input transcript: ガバメントクラウドとは
Knowledge Base response: ガバメントクラウドとは、公共情報システムの効果的かつ効率的な整備及び運用を推進するため、~~~~~
まとめ
今回は、Amazon Connectから音声をテキスト化し、BedrockのRAGで回答を取得して返す仕組みを検証してみました。AIエージェントとの連携などを加えることで、より実用的な対話システムに進化させていけそうですね。