公開演講導師人工智慧助理
您可以在此處找到此儲存庫的相關部落格文章:使用 Amazon Bedrock 中基於生成式 AI 的虛擬助理來提高公開演講技能
警告
此範例僅用於實驗目的,尚未準備好用於生產。此範例的部署可能會產生費用。請確保在不再需要時透過最後提供的說明刪除基礎設施。
使用基於 GenAI 的虛擬助理和 Amazon Bedrock 來提高公開演講技巧
公開演講是當今世界的關鍵技能,無論是專業演講、學術環境或個人成長。然而,許多人在公開演講期間都面臨焦慮、缺乏自信和溝通無效的困擾。聘請公開演講教練的費用昂貴且數量有限。現在,隨著大型語言模型 (LLM) 的出現,來自不同背景和地點的個人以及任何規模的組織都可以使用由生成式人工智慧驅動的虛擬助手,以從即時語音分析、區域識別中受益改進,並提出加強演講的建議。
在此儲存庫中,我們展示了一個由Amazon Bedrock 支援的虛擬助理,它可以轉錄演示演講中的音頻,檢查其語言使用、語法錯誤、填充詞、單字和句子的重複等,並提供建議以及建議精選版本使用者的語音以更好地呈現。此解決方案有助於提高溝通技巧、增強信心,並最終使個人成為更有效、更有影響力的公共演講者。各部門的組織,包括公司、教育機構、政府實體和社群媒體人士,可以利用此解決方案為其員工、學生和公開演講活動提供自動輔導。
此解決方案僅以Python編寫,並使用CDK範本在AWS上部署所需的基礎架構。
解決方案概述
此解決方案由 4 個主要部分組成:
- 用於使用者身份驗證的 Amazon Cognito 使用者池 - 經過身份驗證的使用者有權存取 Public Speaking Mentor AI Assistant Web 入口網站以上傳音訊/視訊錄音
- 使用 Streamlit 建立的簡單 Web 門戶,用於上傳音訊/視訊記錄 - 上傳的檔案儲存在 Amazon Simple Storage Service (Amazon S3) 儲存桶中,以供日後處理、擷取和分析。
- AWS Step Functions 工作流程,用於協調使用 Amazon Transcribe 將音訊轉換為文本,然後透過 AI 提示鏈呼叫 Amazon Bedrock 以產生語音建議和重寫建議。
- Amazon Simple Notification Service (Amazon SNS),用於向使用者發送電子郵件通知,其中包含 Amazon Bedrock 產生的建議。
該解決方案利用 Amazon Transcribe 透過自動語音辨識進行語音到文字的轉換。當用戶上傳音訊或視訊檔案時,Amazon Transcribe 會將語音轉錄為文本,然後將其作為輸入資料傳遞到 Amazon Bedrock 上託管的 Anthropic Claude 3.5 Sonnet 模型。此解決方案會向 Amazon Bedrock 發送兩個提示以及轉錄文字。第一個提示是針對語言使用、語法錯誤、填充詞、單字和句子重複以及演講的其他方面產生回饋和建議。第二個提示是獲取使用者原始語音的精選版本。 AI 提示連結是透過 Amazon Bedrock 對這兩個提示執行的,以提供精心策劃的回應。最終,該解決方案會整合兩個提示的輸出,在使用者的網頁上顯示使用 Amazon Bedrock 得出的綜合建議,並向使用者發送包含結果的電子郵件。目前,該解決方案僅支援英語用戶語音。
建築學
下圖展示了我們的解決方案架構。
讓我們逐步探索該架構:
- 使用者利用 Amazon Cognito 使用者池驗證機制向 Publicspoke Mentor AI Assistant Web 入口網站(託管在使用者本機桌面上的 Streamlit 應用程式)進行身份驗證。
- 用戶將音訊/視訊檔案上傳到入口網站,該檔案儲存在加密的 Amazon S3 儲存桶中。
- S3 服務為儲存到儲存桶的每個檔案觸發 s3:ObjectCreated 事件。
- Amazon EventBridge 根據此事件呼叫 AWS Step Functions 工作流程。
- AWS Step Functions 工作流程利用 AWS 開發工具包整合來呼叫 Amazon Transcribe 並啟動 StartTranscriptionJob,同時在 MediaFileUri 參數中傳遞 S3 儲存桶、前綴路徑和物件名稱。此工作流程等待轉錄作業完成並將轉錄保存在另一個 S3 儲存桶前綴路徑中。
- 然後,AWS Step Functions 工作流程利用最佳化的整合來呼叫 Amazon Bedrock 的 InvokeModel API,該 API 指定 Anthropic Claude 3.5 Sonnet 模型、系統提示、最大令牌和轉錄的語音文字作為 API 的輸入。系統提示指示克勞德透過識別錯誤的語法、單字或內容的重複、填充詞的使用以及其他建議來提供如何改進演講的建議。
重要的
為了避免遇到 256KB 的 StepFunctions 負載大小限制,我們在 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 的這些輸出,製作一則顯示在登入使用者網頁上的訊息。
- 最後,Step Functions 工作流程呼叫 SNS Publish 最佳化集成,向使用者發送包含 Bedrock 產生的訊息的電子郵件。
- Streamlit 應用程式查詢 Step Functions 以在 Cognito 使用者的網頁上顯示輸出結果。
階躍函數狀態機
下圖顯示了 Step Functions 狀態機工作流程。您也可以在此處存取相當於狀態機定義的 Amazon 狀態語言 (ASL) - PublicSpeakingMentorAIAssistantStateMachine ASL
安裝
先決條件
要實施公共演講導師人工智慧助理解決方案,您應該具備以下先決條件:
對以下 AWS 服務具有足夠的 AWS Identity and Access Management (IAM) 權限的 AWS 帳戶,用於部署解決方案並執行 Streamlit 應用程式 Web 入口網站。
- 亞馬遜基岩
- 亞馬遜轉錄
- AWS 步驟函數
- AWS Lambda
- 亞馬遜事件橋
- 亞馬遜認知
- 亞馬遜社群網路服務
- 亞馬遜S3
- 亞馬遜雲端觀察
- AWS 雲形成
已在您所需 AWS 區域的 Amazon Bedrock 中啟用 Anthropic 的 Claude 3.5 Sonnet 的模型訪問
本機桌面環境,安裝了 AWS CLI(命令列介面)、最新版本的 AWS CDK(2.159.0 或更高版本)、Python 3.8 或更高版本以及 Git。
使用必要的 AWS 憑證和所需的 AWS 區域進行 AWS CLI 設定。
重要的
請確保您安裝了最新的 CDK(v2.159.0 或更高版本),因為早期版本不支援 Anthropic Claude 3.5 Sonnet CDK 構造。
部署公共演講導師 AI 助理解決方案
請完成以下步驟來部署 Public Speaking 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
- 為infra創建一個python虛擬環境:
- 啟動您的虛擬環境:
source .venv/bin/activate
- 安裝所需的依賴項
pip install -r requirements.txt
- (可選)使用適用於 Python 的 AWS CDK(雲端開發工具包)合成 AWS CloudFormation 範本。
提示
您可能需要使用以下命令執行一次性 cdk 引導。有關更多詳細信息,請參閱 CDK 引導。
cdk bootstrap aws:// < ACCOUNT-NUMBER- 1> / < REGION- 1>
- 在您的 AWS 帳戶和選定區域中部署 AWS CloudFormation 模板
成功部署 CDK 後,請依照下列步驟建立 Cognito 使用者。
建立 Amazon Cognito 使用者進行身份驗證
完成以下步驟在 Amazon Cognito 使用者池中建立使用者以存取 Web 入口網站。建立的使用者不需要任何AWS權限:
- 登入您帳號的 AWS 主控台並選擇您的部署的 AWS 區域。
- 在 Amazon Cognito 中的使用者池下,按一下由 CloudFormation 範本建立的使用者池。使用者池名稱將具有前綴 PSMBUserPool,後面跟著一串隨機字元作為一個單字。
- 點擊建立使用者按鈕並輸入使用者名稱和密碼。
- 最後點擊右下角的創建用戶按鈕。
訂閱 SNS 主題以取得電子郵件通知
請完成以下步驟訂閱 SNS 主題以接收語音推薦電子郵件通知:
- 登入您帳號的 AWS 主控台並選擇您的部署的 AWS 區域。
- 在 Amazon SNS 中的「主題」下,按一下由 CloudFormation 範本建立的主題。主題的名稱應類似於 InfraStack-PublicSpeakingMentorAIAssistantTopic,後面跟著一串隨機字元作為一個單字。
- 點擊“建立訂閱”按鈕,從下拉清單中選擇“協定”作為“電子郵件”,然後在“端點”方塊中輸入您的電子郵件地址。
- 最後點擊右下角的建立訂閱按鈕。
運行 Streamlit 應用程式以存取 Web 門戶
請完成以下步驟來執行 Streamlit 應用程式以存取 Public Speaking Mentor AI Assistant 入口網站:
- 將目錄變更為
app
目錄中的webapp
。
- 在連接埠 8080 上啟動 Streamlit 伺服器。
streamlit run webapp.py --server.port 8080
- 記下 Streamlit 應用程式 URL 以供進一步使用。根據您的環境設置,您可以從 Streamlit 伺服器運行進程提供的三個 URL(本地、網路或外部)中選擇之一。
Note: Allow inbound traffic on port 8080
確保本機電腦允許連接埠 8080 上的傳入流量。
用法
請按照以下步驟使用公共演講導師 AI 助理來改善您的演講:
- 在瀏覽器(最好是 Google Chrome)中開啟您在前面的步驟中記下的 Streamlit 應用程式 URL。
- 使用先前建立的 Amazon Cognito 使用者名稱和密碼登入 Web 入口網站以進行身份驗證。
- 上傳您的音訊/視訊錄音以獲得演講建議和演講重寫結果。
- 點擊“瀏覽文件”以找到並選擇您的錄音。
- 點擊上傳檔案按鈕將檔案上傳到 Amazon S3 儲存桶。
- 文件上傳完成後,公共演講導師人工智慧助理會處理音訊轉錄並提示工程步驟,以產生演講建議並重寫結果。
- 處理完成後,您將能夠在網頁上看到語音推薦和語音重寫結果,並透過 Amazon SNS 在電子郵件中接收通知。
- 在網頁右側,您可以查看公共演講導師人工智慧助理解決方案執行的所有處理步驟,以獲取您的演講結果。
清理
完成以下步驟來清理您的資源:
- 使用 Ctrl+C 操作終止在您的環境中執行的 Streamlit 應用程式伺服器進程。
- 變更到儲存庫中的
app
目錄。 - 使用適用於 Python 的 AWS CDK 銷毀 AWS CloudFormation。
一些限制
- 提供的程式碼旨在作為演示和起點,不適合生產。 Python 應用程式依賴 Streamlit 和 Streamlit-cognito-auth 等第三方函式庫。身為開發人員,您有責任正確審查、維護和測試所有第三方相依性。尤其應該徹底評估身分驗證和授權機制。更一般地說,您應該在將此演示程式碼合併到生產應用程式或敏感資料之前執行安全性審查和測試。
- 在此示範中,Amazon Cognito 採用簡單配置。請注意,Amazon Cognito 使用者池可以設定為強制實施強密碼原則、啟用多重身份驗證並將 AdvancedSecurityMode 設定為 ENFORCED 以使系統能夠偵測惡意登入嘗試並採取行動。
- AWS 提供了各種服務(本示範中未實作),可提高此應用程式的安全性。網路 ACL 和 AWS WAF 等網路安全服務可以控制對資源的存取。您也可以使用 AWS Shield 進行 DDoS 防護,使用 Amazon GuardDuty 進行威脅偵測。 Amazon Inspector 執行安全評估。還有更多可以增強安全性的 AWS 服務和最佳實踐 - 請參閱 AWS 責任共擔模型和安全最佳實踐指南以取得其他建議。開發人員負責正確實施和配置這些服務以滿足其特定的安全要求。
- 建議定期輪換機密,但在此演示中未實現。
致謝
AWS Step Functions Streamlit Web 應用程式的大部分程式碼都受以下 AWS Samples github 儲存庫的啟發:deploy-streamlit-app
安全
請參閱貢獻以獲取更多資訊。
執照
該庫根據 MIT-0 許可證獲得許可。請參閱許可證文件。