대중 연설 멘토 AI 보조자
이 리포지토리에 대한 관련 블로그 게시물은 여기에서 찾을 수 있습니다. Amazon Bedrock의 생성 AI 기반 가상 어시스턴트를 사용하여 대중 연설 기술 향상
경고
이 예는 실험 목적으로만 사용되었으며 프로덕션 준비가 되어 있지 않습니다. 이 샘플을 배포하면 비용이 발생할 수 있습니다 . 더 이상 필요하지 않은 경우 마지막에 제공된 지침을 통해 인프라를 제거하십시오.
Amazon Bedrock과 함께 GenAI 기반 가상 비서를 사용하여 대중 연설 기술 향상
대중 연설은 전문적인 프리젠테이션, 학업 환경, 개인 성장 등 오늘날 세계에서 중요한 기술입니다. 그러나 많은 사람들은 대중 연설 중에 불안, 자신감 부족, 비효율적인 의사소통으로 어려움을 겪습니다. 대중 연설 코치를 고용하는 것은 비용이 많이 들고 가용성이 제한되어 있습니다. 이제 LLM(대형 언어 모델)의 출현으로 다양한 배경과 위치의 개인은 물론 모든 규모의 조직에서 Generative AI 기반 가상 도우미를 사용하여 실시간 음성 분석, 영역 식별의 이점을 누릴 수 있습니다. 개선을 위한 제안 및 음성 전달 향상을 위한 제안을 제공합니다.
이 리포지토리에서는 프레젠테이션 연설에서 자신의 오디오를 전사하고 언어 사용, 문법 오류, 필러 단어, 단어 및 문장의 반복 등을 검사하고 권장 사항을 제공하고 선별된 버전을 제안할 수 있는 Amazon Bedrock 기반 가상 도우미를 제시합니다. 더 나은 프리젠테이션을 위해 사용자의 음성을 녹음합니다. 이 솔루션은 의사소통 기술을 개선하고 자신감을 높이며 궁극적으로 개인이 더욱 효과적이고 영향력 있는 대중 연설가가 될 수 있도록 지원합니다. 기업, 교육 기관, 정부 기관, 소셜 미디어 인물 등 다양한 분야의 조직은 이 솔루션을 활용하여 직원, 학생 및 대중 연설 참여를 위한 자동화된 코칭을 제공할 수 있습니다.
이 솔루션은 Python으로만 작성되었으며 CDK 템플릿을 사용하여 AWS에 필요한 인프라를 배포합니다.
솔루션 개요
이 솔루션은 4가지 주요 구성 요소로 구성됩니다.
- 사용자 인증을 위한 Amazon Cognito 사용자 풀 - 인증된 사용자에게는 오디오/비디오 녹음을 업로드할 수 있는 Public Speaking Mentor AI Assistant 웹 포털에 대한 액세스 권한이 부여됩니다.
- 오디오/비디오 녹음을 업로드하기 위해 Streamlit을 사용하여 생성된 간단한 웹 포털 - 업로드된 파일은 나중에 처리, 검색 및 분석을 위해 Amazon Simple Storage Service(Amazon S3) 버킷에 저장됩니다.
- Amazon Transcribe를 사용하여 오디오를 텍스트로 변환한 다음 AI 프롬프트 체인으로 Amazon Bedrock을 호출하여 음성 권장 사항을 생성하고 제안을 다시 작성하는 작업을 조율하는 AWS Step Functions 워크플로입니다.
- Amazon Simple 알림 서비스(Amazon SNS)는 Amazon Bedrock에서 생성된 권장 사항이 포함된 이메일 알림을 사용자에게 보냅니다.
이 솔루션은 자동 음성 인식을 통한 음성-텍스트 변환을 위해 Amazon Transcribe를 활용합니다. 사용자가 오디오 또는 비디오 파일을 업로드하면 Amazon Transcribe는 음성을 텍스트로 기록한 다음 Amazon Bedrock에서 호스팅되는 Anthropic Claude 3.5 Sonnet 모델에 입력 데이터로 전달됩니다. 이 솔루션은 기록된 텍스트와 함께 Amazon Bedrock에 두 개의 프롬프트를 보냅니다. 첫 번째 프롬프트는 언어 사용, 문법 오류, 보충어, 단어 및 문장 반복, 음성의 기타 측면에 대한 피드백과 권장 사항을 생성하기 위한 것입니다. 두 번째 프롬프트는 사용자의 원래 음성의 선별된 버전을 얻기 위한 것입니다. 고도로 선별된 응답을 제공하기 위해 Amazon Bedrock을 통해 AI 프롬프트 체인이 수행됩니다. 궁극적으로 솔루션은 두 프롬프트의 출력을 통합하고 사용자 웹 페이지에 Amazon Bedrock을 사용하여 파생된 포괄적인 권장 사항을 표시하며 결과를 사용자에게 이메일로 보냅니다. 현재 이 솔루션은 영어로만 사용자 음성을 지원합니다.
건축학
다음 다이어그램은 솔루션 아키텍처를 보여줍니다.
아키텍처를 단계별로 살펴보겠습니다.
- 사용자는 Amazon Cognito 사용자 풀 인증 메커니즘을 활용하여 Public Speaking Mentor AI Assistant 웹 포털(사용자의 로컬 데스크톱에서 호스팅되는 Streamlit 애플리케이션)에 인증합니다.
- 사용자는 암호화된 Amazon S3 버킷에 저장된 오디오/비디오 파일을 웹 포털에 업로드합니다.
- S3 서비스는 버킷에 저장된 각 파일에 대해 s3:ObjectCreated 이벤트를 트리거합니다.
- Amazon EventBridge는 이 이벤트를 기반으로 AWS Step Functions 워크플로를 호출합니다.
- AWS Step Functions 워크플로는 AWS SDK 통합을 활용하여 Amazon Transcribe를 호출하고 StartTranscriptionJob을 시작하여 S3 버킷, 접두사 경로 및 객체 이름을 MediaFileUri 매개 변수에 전달합니다. 워크플로는 전사 작업이 완료될 때까지 기다리고 다른 S3 버킷 접두사 경로에 기록을 저장합니다.
- 그런 다음 AWS Step Functions 워크플로는 최적화된 통합을 활용하여 Anthropic Claude 3.5 Sonnet 모델, 시스템 프롬프트, 최대 토큰 및 복사된 음성 텍스트를 API에 대한 입력으로 지정하는 Amazon Bedrock의 InvokeModel API를 호출합니다. 시스템 프롬프트는 Claude에게 잘못된 문법, 단어나 내용의 반복, 필러 단어 사용 및 기타 권장 사항을 식별하여 음성을 개선하는 방법에 대한 제안을 제공하도록 지시합니다.
중요한
StepFunctions 페이로드 크기 제한인 256KB를 피하기 위해 우리는 Step Functions의 AWS Lambda 최적화 통합을 사용하여 S3 버킷의 Bedrock 추론 매개변수에 대한 페이로드를 저장합니다. AWS Lambda 함수는 필요한 페이로드를 생성하고 이를 지정된 S3 버킷에 저장합니다. 그런 다음 Step Functions는 Bedrock InvokeModel API의 input
매개변수에 있는 S3 버킷 경로를 사용합니다. 이 선택적 필드는 Step Functions와의 Amazon Bedrock 최적화 통합에만 해당됩니다. 이를 통해 256KB보다 큰 페이로드를 전달할 수 있습니다.
- Amazon Bedrock으로부터 응답을 받은 후 AWS Step Functions 워크플로는 프롬프트 체인을 활용하여 Amazon Bedrock에 대한 또 다른 입력을 생성하고, 이전에 기록된 음성과 모델의 이전 응답을 통합하고, 음성 다시 쓰기를 위한 제안을 제공하도록 모델에 요청합니다.
- 마지막으로 워크플로는 Amazon Bedrock의 이러한 출력을 결합하여 로그인한 사용자의 웹 페이지에 표시되는 메시지를 만듭니다.
- 마지막에 Step Functions 워크플로는 SNS 게시 최적화 통합을 호출하여 Bedrock에서 생성된 메시지가 포함된 이메일을 사용자에게 보냅니다.
- 간소화된 애플리케이션은 Step Functions를 쿼리하여 Cognito 사용자의 웹 페이지에 출력 결과를 표시합니다.
단계 함수 상태 머신
다음 다이어그램은 Step Functions 상태 머신 워크플로를 보여줍니다. 여기에서 상태 머신 정의에 해당하는 Amazon States Language(ASL)에 액세스할 수도 있습니다. PublicSpeakingMentorAIAssistantStateMachine ASL
설치
전제 조건
Public Speaking Mentor AI Assistant 솔루션을 구현하기 위해서는 다음과 같은 전제조건을 갖추어야 합니다.
솔루션을 배포하고 Streamlit 애플리케이션 웹 포털을 실행하기 위해 아래 AWS 서비스에 대한 충분한 AWS Identity and Access Management(IAM) 권한이 있는 AWS 계정.
- 아마존 기반암
- 아마존 전사
- AWS 단계 함수
- AWS 람다
- 아마존 이벤트브리지
- 아마존 코그니토
- 아마존 SNS
- 아마존 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를 설정합니다.
중요한
이전 버전에서는 Anthropic Claude 3.5 Sonnet CDK 구성에 대한 지원이 제공되지 않으므로 최신 CDK(v2.159.0 이상)가 설치되어 있는지 확인하십시오.
대중 연설 멘토 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
- 인프라용 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 사용자 풀에서 사용자를 생성하려면 다음 단계를 완료하십시오. 생성된 사용자에게는 AWS 권한이 필요하지 않습니다.
- 계정의 AWS 콘솔에 로그인하고 배포할 AWS 지역을 선택합니다.
- Amazon Cognito의 사용자 풀 아래에서 CloudFormation 템플릿으로 생성된 사용자 풀을 클릭합니다. 사용자 풀 이름에는 PSMBUserPool이라는 접두사가 붙고 그 뒤에 한 단어로 된 임의의 문자 문자열이 옵니다.
- 사용자 생성 버튼을 클릭하고 사용자 이름과 비밀번호를 입력합니다.
- 마지막으로 오른쪽 하단에 있는 사용자 생성 버튼을 클릭합니다.
이메일 알림을 위해 SNS 주제를 구독하세요.
음성 추천 이메일 알림을 받기 위해 SNS 주제를 구독하려면 다음 단계를 완료하십시오.
- 계정의 AWS 콘솔에 로그인하고 배포할 AWS 지역을 선택합니다.
- Amazon SNS의 주제 아래에서 CloudFormation 템플릿으로 생성된 주제를 클릭합니다. 주제의 이름은 InfraStack-PublicSpeakingMentorAIAssistantTopic과 같은 형식이어야 하며 그 뒤에 한 단어로 된 임의의 문자 문자열이 와야 합니다.
- 구독 생성 버튼을 클릭하고 드롭다운에서 이메일로 프로토콜을 선택한 후 엔드포인트 상자에 이메일 주소를 입력하세요.
- 마지막으로 오른쪽 하단의 구독 만들기 버튼을 클릭하세요.
Streamlit 애플리케이션을 실행하여 웹 포털에 액세스하세요.
Public Speaking Mentor AI Assistant 웹 포털에 액세스하기 위해 Streamlit 애플리케이션을 실행하려면 다음 단계를 완료하십시오.
-
app
디렉터리 내에서 디렉터리를 webapp
으로 변경합니다.
- 포트 8080에서 Streamlit 서버를 시작합니다.
streamlit run webapp.py --server.port 8080
- 나중에 사용할 수 있도록 Streamlit 애플리케이션 URL을 기록해 두세요. 환경 설정에 따라 Streamlit 서버의 실행 프로세스에서 제공하는 세 가지(로컬, 네트워크 또는 외부) URL 중 하나를 선택할 수 있습니다.
Note: Allow inbound traffic on port 8080
포트 8080에서 들어오는 트래픽이 로컬 컴퓨터에서 허용되는지 확인하세요.
용법
연설 능력을 향상시키기 위해 Public Speaking Mentor AI Assistant를 사용하려면 아래 단계를 따르십시오.
- 이전 단계에서 기록한 Streamlit 애플리케이션 URL을 브라우저(가급적이면 Google Chrome)에서 엽니다.
- 인증을 위해 앞서 생성한 Amazon Cognito 사용자 이름과 암호를 사용하여 웹 포털에 로그인합니다.
- 오디오/비디오 녹화물을 업로드하여 음성 추천 및 음성 재작성 결과를 받으세요.
- 파일 찾아보기를 클릭하여 녹음을 찾아 선택합니다.
- 파일 업로드 버튼을 클릭하여 Amazon S3 버킷에 파일을 업로드합니다.
- 파일 업로드가 완료되자마자 Public Speaking Mentor AI Assistant는 오디오 전사와 프롬프트 엔지니어링 단계를 처리하여 연설 추천을 생성하고 결과를 다시 작성합니다.
- 처리가 완료되면 웹 페이지에서 음성 권장 사항 및 음성 다시 쓰기 결과를 볼 수 있을 뿐만 아니라 Amazon SNS 알림을 통해 이메일로 받을 수 있습니다.
- 웹페이지 오른쪽에서는 Public Speaking Mentor AI Assistant 솔루션이 수행하는 모든 처리 단계를 검토하여 연설 결과를 확인할 수 있습니다.
정리하다
리소스를 정리하려면 다음 단계를 완료하세요.
- Ctrl+C 작업을 사용하여 환경에서 실행 중인 Streamlit 애플리케이션 서버 프로세스를 종료합니다.
- 저장소의
app
디렉터리로 변경합니다. - Python용 AWS CDK를 사용하여 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 webapp의 코드 대부분은 다음 AWS 샘플 github 리포지토리에서 영감을 얻었습니다.
보안
자세한 내용은 기여를 참조하세요.
특허
이 라이브러리는 MIT-0 라이선스에 따라 라이선스가 부여됩니다. 라이센스 파일을 참조하십시오.