人前で話すメンター AI アシスタント
このリポジトリに関連するブログ投稿は次の場所にあります: Amazon Bedrock を使用した生成 AI ベースの仮想アシスタントを使用して人前で話すスキルを向上させる
警告
この例は実験のみを目的としており、本番環境には対応していません。このサンプルの展開にはコストが発生する可能性があります。インフラストラクチャが不要になった場合は、最後に記載されている手順に従って必ずインフラストラクチャを削除してください。
Amazon Bedrock で GenAI ベースの仮想アシスタントを使用して人前で話すスキルを向上させる
人前で話すことは、専門的なプレゼンテーション、学術的な場、個人の成長など、今日の世界では重要なスキルです。しかし、多くの人は、人前で話すときの不安、自信のなさ、効果的なコミュニケーションのなさに苦しんでいます。パブリック スピーキング コーチを雇うには費用がかかり、利用できる人数も限られています。現在、ラージ言語モデル (LLM) の出現により、生成 AI を活用した仮想アシスタントを、さまざまな背景や場所の個人だけでなく、あらゆる規模の組織も使用して、音声のリアルタイム分析や領域の識別の恩恵を受けることができるようになりました。改善のための意見や、音声配信を強化するための提案。
このリポジトリでは、Amazon Bedrock を利用した仮想アシスタントを紹介します。これは、プレゼンテーションの音声を文字に起こし、言語の使用、文法上の誤り、つなぎ言葉、単語や文章の繰り返しなどを検査し、推奨事項を提供するだけでなく、厳選されたバージョンを提案することができます。プレゼンテーションを改善するためにユーザーの音声を編集します。このソリューションは、コミュニケーション スキルを磨き、自信を高め、最終的には個人がより効果的で影響力のある講演者になれるように支援します。企業、教育機関、政府機関、ソーシャル メディアの著名人など、さまざまな分野の組織がこのソリューションを活用して、従業員、学生、人前で話す活動に自動化されたコーチングを提供できます。
このソリューションは Python のみで記述されており、CDK テンプレートを使用して必要なインフラストラクチャを AWS にデプロイします。
ソリューションの概要
このソリューションは 4 つの主要コンポーネントで構成されます。
- ユーザー認証用の Amazon Cognito ユーザープール - 認証されたユーザーには、オーディオ/ビデオ録画をアップロードするための Public Speaker Mentor AI Assistant Web ポータルへのアクセスが許可されます。
- オーディオ/ビデオ録画をアップロードするために Streamlit を使用して作成されたシンプルなウェブポータル - アップロードされたファイルは、後の処理、取得、分析のために Amazon Simple Storage Service (Amazon S3) バケットに保存されます。
- Amazon Transcribe を使用して音声をテキストに変換し、AI プロンプトチェーンで Amazon Bedrock を呼び出して音声の推奨事項を生成し、提案を書き換える処理を調整する AWS Step Functions ワークフロー。
- Amazon Simple Notice Service (Amazon SNS) は、Amazon Bedrock が生成した推奨事項を含む電子メール通知をユーザーに送信します。
このソリューションは、Amazon Transcribe を利用して、自動音声認識による音声からテキストへの変換を行います。ユーザーが音声ファイルまたはビデオファイルをアップロードすると、Amazon Transcribe がその音声をテキストに書き起こし、それが入力データとして Amazon Bedrock でホストされている Anthropic Claude 3.5 Sonnet モデルに渡されます。このソリューションは、文字起こしされたテキストとともに 2 つのプロンプトを Amazon Bedrock に送信します。最初のプロンプトは、言語の使用法、文法上の誤り、つなぎ言葉、単語と文の繰り返し、および音声のその他の側面に関するフィードバックと推奨事項を生成するためのものです。 2 番目のプロンプトは、ユーザーの元のスピーチの厳選されたバージョンを取得するためのものです。これら 2 つのプロンプトに対して Amazon Bedrock を使用して AI プロンプトチェーンが実行され、高度に厳選された応答が提供されます。最終的に、このソリューションは両方のプロンプトからの出力を統合し、Amazon Bedrock を使用して導き出された包括的な推奨事項をユーザーの Web ページに表示し、結果をユーザーに電子メールで送信します。現在、このソリューションは英語でのユーザー音声のみをサポートしています。
建築
次の図は、ソリューション アーキテクチャを示しています。
アーキテクチャを段階的に見てみましょう。
- ユーザーは、Amazon Cognito ユーザープール認証メカニズムを利用して、Public Speaker Mentor AI Assistant Web ポータル (ユーザーのローカルデスクトップでホストされる Streamlit アプリケーション) に対して認証します。
- ユーザーはオーディオ/ビデオ ファイルを Web ポータルにアップロードします。ファイルは暗号化された Amazon S3 バケットに保存されます。
- S3 サービスは、バケットに保存されたファイルごとに s3:ObjectCreated イベントをトリガーします。
- Amazon EventBridge は、このイベントに基づいて AWS Step Functions ワークフローを呼び出します。
- AWS Step Functions ワークフローは、AWS SDK 統合を利用して Amazon Transcribe を呼び出し、StartTranscriptionJob を開始して、S3 バケット、プレフィックス パス、オブジェクト名を MediaFileUri パラメータに渡します。ワークフローは、文字起こしジョブが完了するのを待ち、文字起こしを別の S3 バケット プレフィックス パスに保存します。
- 次に、AWS Step Functions ワークフローは、最適化された統合を利用して Amazon Bedrock の InvokeModel API を呼び出します。これにより、Anthropic Claude 3.5 Sonnet モデル、システム プロンプト、最大トークン、および文字起こしされた音声テキストが API への入力として指定されます。システム プロンプトは、Claude に、間違った文法、単語や内容の繰り返し、つなぎ言葉の使用、およびその他の推奨事項を特定して、音声を改善する方法についての提案を提供するように指示します。
重要
StepFunctions のペイロード サイズ制限である 256 KB に遭遇しないように、Step Functions で AWS Lambda の最適化された統合を使用して、Bedrock 推論パラメータのペイロードを S3 バケットに保存します。 AWS Lambda 関数は必要なペイロードを作成し、指定された S3 バケットに保存します。次に、Step Functions は、Bedrock InvokeModel API のinput
パラメータで S3 バケット パスを使用します。このオプションのフィールドは、Amazon Bedrock の Step Functions との最適化された統合に固有です。これにより、256 KB を超えるペイロードを渡すことができます。
- Amazon Bedrock から応答を受信した後、AWS Step Functions ワークフローはプロンプトチェーンを利用して Amazon Bedrock への別の入力を作成し、以前の文字起こしされた音声、モデルの以前の応答を組み込んで、音声を書き直すための提案を提供するようにモデルにリクエストします。
- 最後に、ワークフローは Amazon Bedrock からのこれらの出力を組み合わせて、ログインしているユーザーの Web ページに表示されるメッセージを作成します。
- 最後に、Step Functions ワークフローは SNS Publish に最適化された統合を呼び出し、Bedrock が生成したメッセージを含む電子メールをユーザーに送信します。
- Streamlit アプリケーションは Step Functions にクエリを実行し、出力結果を Cognito ユーザーの Web ページに表示します。
ステップ関数ステートマシン
次の図は、Step Functions ステート マシンのワークフローを示しています。ここからステートマシン定義に相当する Amazon States Language (ASL) にアクセスすることもできます - PublicSpeakingMentorAIAssistantStateMachine ASL
インストール
前提条件
Public Speaker Mentor AI Assistant ソリューションを実装するには、次の前提条件を満たしている必要があります。
ソリューションをデプロイし、Streamlit アプリケーション Web ポータルを実行するために、以下の AWS サービスに対する十分な AWS Identity and Access Management (IAM) 権限を持つ AWS アカウント。
- アマゾンの岩盤
- Amazon 文字起こし
- AWS ステップ関数
- AWSラムダ
- Amazon イベントブリッジ
- アマゾンコグニート
- アマゾンSNS
- アマゾンS3
- Amazon CloudWatch
- AWSクラウドフォーメーション
希望の AWS リージョンの Amazon Bedrock で Anthropic の Claude 3.5 Sonnet に対してモデル アクセスが有効になっています
AWS CLI (コマンドラインインターフェイス)、最新バージョンの AWS CDK (2.159.0 以降)、Python 3.8 以降、および Git がインストールされたローカル デスクトップ環境。
必要な AWS 認証情報と希望の AWS リージョンを使用した AWS CLI のセットアップ。
重要
Anthropic Claude 3.5 Sonnet CDK 構造は以前のバージョンではサポートされていないため、最新の CDK (v2.159.0 以降) がインストールされていることを確認してください。
Public Speaker Mentor AI Assistant ソリューションを導入する
Public Speaker Mentor AI Assistant AWS インフラストラクチャをデプロイするには、次の手順を実行します。
- 次のコマンドを使用して、ローカル ディスク環境にリポジトリのクローンを作成します。
git clone https://github.com/aws-samples/improve_public_speaking_skills_using_a_genai_based_virtual_assistant_with_amazon_bedrock.git
- ディレクトリを複製されたリポジトリとその中の
app
ディレクトリに変更します。
cd improve_public_speaking_skills_using_a_genai_based_virtual_assistant_with_amazon_bedrock/app
- インフラ用の Python 仮想環境を作成します。
- 仮想環境をアクティブ化します。
source .venv/bin/activate
- 必要な依存関係をインストールする
pip install -r requirements.txt
- (オプション) AWS CDK (クラウド開発キット) for Python を使用して AWS CloudFormation テンプレートを合成します。
ヒント
次のコマンドを使用して、1 回限りの CDK ブートストラップを実行する必要がある場合があります。詳細については、「CDK ブートストラップ」を参照してください。
cdk bootstrap aws:// < ACCOUNT-NUMBER- 1> / < REGION- 1>
- AWS アカウントと選択したリージョンに AWS CloudFormation テンプレートをデプロイします
CDK が正常にデプロイされたら、以下の手順に従って Cognito ユーザーを作成します。
認証用の Amazon Cognito ユーザーを作成する
次の手順を実行して、Web ポータルにアクセスするためのユーザーを Amazon Cognito ユーザープールに作成します。作成されたユーザーには AWS 権限は必要ありません。
- アカウントの AWS コンソールにログインし、デプロイメントの AWS リージョンを選択します。
- Amazon Cognito の [ユーザー プール] で、CloudFormation テンプレートによって作成されたユーザー プールをクリックします。ユーザー プール名には、プレフィックス PSMBuserPool が付き、その後に 1 つの単語としてランダムな文字列が続きます。
- 「ユーザーの作成」ボタンをクリックし、ユーザー名とパスワードを入力します。
- 最後に右下の「ユーザー作成」ボタンをクリックします。
電子メール通知の SNS トピックを購読する
スピーチの推奨事項の電子メール通知を受信するために SNS トピックを購読するには、次の手順を実行します。
- アカウントの AWS コンソールにログインし、デプロイメントの AWS リージョンを選択します。
- Amazon SNS の [トピック] で、CloudFormation テンプレートによって作成されたトピックをクリックします。トピックの名前は、InfraStack-PublicSpeakingMentorAIAssistantTopic の後に 1 つの単語としてランダムな文字列が続くようになります。
- [サブスクリプションの作成] ボタンをクリックし、ドロップダウンから [電子メールとしてプロトコル] を選択し、[エンドポイント] ボックスに電子メール アドレスを入力します。
- 最後に右下の「サブスクリプションの作成」ボタンをクリックします。
Streamlit アプリケーションを実行して Web ポータルにアクセスします
次の手順を実行して、Streamlit アプリケーションを実行して Public Speaker Mentor AI Assistant Web ポータルにアクセスします。
-
app
ディレクトリ内のwebapp
に変更します。
- streamlit サーバーをポート 8080 で起動します。
streamlit run webapp.py --server.port 8080
- 今後の使用のために、Streamlit アプリケーションの URL をメモしておきます。環境設定に応じて、Streamlit サーバーの実行プロセスによって提供される 3 つの URL (ローカル、ネットワーク、または外部) から 1 つを選択できます。
Note: Allow inbound traffic on port 8080
ポート 8080 での受信トラフィックがローカル マシンで許可されていることを確認してください。
使用法
以下の手順に従って、Public Speaker Mentor AI Assistant を使用してスピーチを改善します。
- 前の手順でメモした Streamlit アプリケーションの URL をブラウザ (できれば Google Chrome) で開きます。
- 認証のために前に作成した Amazon Cognito ユーザー名とパスワードを使用して、ウェブポータルにログインします。
- 音声/ビデオ記録をアップロードして、音声の推奨事項と音声のリライト結果を取得します。
- [ファイルの参照] をクリックして、録画を見つけて選択します。
- [ファイルのアップロード] ボタンをクリックして、ファイルを Amazon S3 バケットにアップロードします。
- ファイルのアップロードが完了するとすぐに、Public Speaker Mentor AI Assistant が音声転写を処理し、スピーチの推奨事項を生成して結果を書き換えるためのエンジニアリング手順を促します。
- 処理が完了すると、Web ページで音声推奨と音声リライトの結果を確認したり、Amazon SNS 通知を介して電子メールで受信したりできるようになります。
- Web ページの右側では、スピーチ結果を取得するために Public Speaker Mentor AI Assistant ソリューションによって実行されるすべての処理ステップを確認できます。
掃除
リソースをクリーンアップするには、次の手順を実行します。
- Ctrl+C 操作を使用して、環境内で実行されている Streamlit アプリケーション サーバー プロセスを終了します。
- リポジトリ内の
app
ディレクトリに移動します。 - AWS CDK for Python を使用して AWS CloudFormation を破棄します。
いくつかの制限事項
- 提供されたコードは、デモおよび開始点として意図されており、本番環境に対応したものではありません。 Python アプリは、Streamlit や streamlit-cognito-auth などのサードパーティ ライブラリに依存しています。開発者には、すべてのサードパーティの依存関係を適切に調査、保守、テストする責任があります。特に認証と認可のメカニズムを徹底的に評価する必要があります。より一般的には、このデモ コードを運用アプリケーションや機密データに組み込む前に、セキュリティのレビューとテストを実行する必要があります。
- このデモでは、Amazon Cognito は単純な構成になっています。 Amazon Cognito ユーザープールは、強力なパスワードポリシーを適用し、多要素認証を有効にし、AdvancedSecurityMode を ENFORCED に設定してシステムが悪意のあるサインイン試行を検出して対処できるように設定できることに注意してください。
- AWS は、このアプリケーションのセキュリティを向上させることができるさまざまなサービスを提供していますが、このデモでは実装されていません。ネットワーク ACL や AWS WAF などのネットワーク セキュリティ サービスは、リソースへのアクセスを制御できます。 DDoS 保護には AWS Shield を、脅威の検出には Amazon GuardDuty を使用することもできます。 Amazon Inspector はセキュリティ評価を実行します。セキュリティを強化できる AWS のサービスやベストプラクティスは他にもたくさんあります。追加の推奨事項については、AWS 責任共有モデルとセキュリティのベストプラクティスガイダンスを参照してください。開発者は、特定のセキュリティ要件を満たすようにこれらのサービスを適切に実装および構成する責任があります。
- シークレットの定期的なローテーションが推奨されますが、このデモでは実装されていません。
了承
AWS Step Functions streamlit ウェブアプリのコードのほとんどは、次の AWS サンプル github リポジトリからインスピレーションを得ています:deploy-streamlit-app
安全
詳細については、「貢献」を参照してください。
ライセンス
このライブラリは、MIT-0 ライセンスに基づいてライセンスされています。 LICENSE ファイルを参照してください。