公开演讲导师人工智能助理
您可以在此处找到此存储库的相关博文:使用 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 许可证获得许可。请参阅许可证文件。