Foundational LLM Chat은 Amazon Bedrock 언어 모델과 상호 작용할 수 있는 AWS CDK 및 Converse API를 사용하여 구축된 Chainlit 애플리케이션입니다. Amazon Bedrock LLM과 채팅하고, 이미지 또는 문서를 업로드하고, 다중 모드 응답을 받을 수 있는 사용자 친화적인 인터페이스를 제공합니다. 애플리케이션은 Amazon Bedrock, Amazon Elastic Container Service, Amazon Cognito, Amazon CloudFront 등과 같은 다양한 서비스를 사용하여 AWS에 배포됩니다.
아키텍처 다이어그램은 기초 LLM 채팅 애플리케이션의 AWS 배포를 보여줍니다. 사용자는 Amazon Cognito 인증으로 보호되는 웹 인터페이스를 통해 애플리케이션과 상호 작용합니다. 애플리케이션은 Amazon CloudFront의 CDN을 사용하여 전 세계적으로 배포됩니다. 특정 AWS 지역 내에서 애플리케이션은 컨테이너화된 배포를 위해 Amazon ECS를 사용하여 여러 가용 영역에 배포됩니다. 백엔드는 Amazon Bedrock과 통합되어 다양한 언어 모델을 활용하므로 사용자는 AI 보조자와 다중 모드 대화에 참여할 수 있습니다.
애플리케이션은 ./bin
폴더의 config.json
파일을 통해 구성됩니다. 주요 구성 옵션은 다음과 같습니다.
default_system_prompt
: 이 필드에는 bedrock_models
필드에 아래에 지정되지 않은 경우 챗봇이 사용할 기본 시스템 프롬프트가 포함됩니다. AI 도우미의 초기 지침과 동작을 정의합니다. 이 값을 수정하여 보조자의 페르소나 또는 초기 프롬프트를 변경할 수 있습니다.
max_characters_parameter
: 이 필드는 입력 텍스트에 허용되는 최대 문자 수를 지정합니다. "None"
문자열로 설정하면 문자 제한이 없습니다. 원하는 경우 이 값을 변경하여 입력 텍스트 길이를 제한할 수 있습니다.
max_content_size_mb_parameter
: 이 필드는 입력 콘텐츠(예: 이미지)의 최대 크기를 메가바이트 단위로 설정합니다. "None"
문자열로 설정하면 크기 제한이 없습니다. 이 값을 수정하여 입력 콘텐츠의 최대 크기를 제한할 수 있습니다.
default_aws_region
: 이 필드는 애플리케이션이 배포되는 AWS 지역을 지정합니다. 각 Amazon Bedrock 모델 필드에 대해 지역을 설정할 수도 있습니다.
prefix
: 이 필드를 사용하면 애플리케이션에서 생성된 리소스 이름의 접두사를 설정할 수 있습니다. 원하는 경우 비워 두거나 사용자 지정 접두사를 제공할 수 있습니다.
이 필드에는 챗봇이 사용할 수 있는 Bedrock 모델 사전이 포함되어 있습니다. 각 모델은 키 (예: "Sonnet", "Haiku")로 식별되며 키 는 Chainlit Chatprofile에서 사용되는 이름입니다. 각 모델에는 최소한 다음과 같은 속성이 있습니다.
id
: Amazon Bedrock 모델의 ID 또는 ARN입니다. AWS 설명서에서 사용 가능한 모델 ID를 찾을 수 있습니다.region
: 모델에 액세스하는 데 사용되는 지역 배열입니다. 지역 간 추론을 활성화하지 않은 경우 하나, 지역 간 추론을 위해 여러 개입니다.선택적 구성 매개변수는 다음과 같습니다.
inference_profile
: 교차 지역 추론을 위한 설정prefix
: 지역 접두사(예: "us")region
: 1차 추론 지역system_prompt
: 사용자 정의 시스템 프롬프트cost
: 가격정보input_1k_price
: 1,000개의 입력 토큰에 대한 비용(USD)입니다. AWS Bedrock 요금 페이지에서 다양한 모델의 요금 정보를 확인할 수 있습니다.output_1k_price
: 1,000개의 출력 토큰에 대한 비용(USD)입니다.vision
[선택 사항] : true 또는 false입니다. 모델에 비전 기능이 활성화된 경우.document
[선택 사항] : true 또는 false입니다. 모델에 대한 문서 기능이 활성화된 경우](https://docs.aws.amazon.com/bedrock/latest/userguide/conversation-inference.html).tool
[선택 사항] : true 또는 false입니다. 모델에 대한 도구 기능이 활성화된 경우](https://docs.aws.amazon.com/bedrock/latest/userguide/conversation-inference.html).default
[선택 사항] : true 또는 false입니다. 기본 선택 모델 bedrock_models
섹션을 수정하여 추가 모델을 포함하거나 요구 사항에 따라 기존 모델을 업데이트할 수 있습니다.
모델 ID 및 가격 정보를 검색하는 방법의 예는 다음과 같습니다.
모델 ID 또는 ARN을 찾으려면 AWS Bedrock 모델 ID 설명서를 참조하십시오. 예를 들어 Claude 3 Sonnet 모델의 ID는 anthropic.claude-3-sonnet-20240229-v1:0
입니다.
요금 정보를 찾으려면 AWS Bedrock 요금 설명서를 참조하세요. Claude 3 Sonnet 모델의 경우 입력 및 출력 가격은 다음과 같습니다.
config.json
파일을 원하는 대로 변경한 후 README에 설명된 대로 배포를 진행할 수 있습니다.
다음은 json의 예입니다.
{
"default_system_prompt" : " you are an assistant " ,
"max_characters_parameter" : " None " ,
"max_content_size_mb_parameter" : " None " ,
"default_aws_region" : " us-west-2 " ,
"prefix" : " " ,
"bedrock_models" : {
"Claude Sonnet 3.5 New" : {
"system_prompt" : " you are an assistant " ,
"id" : " us.anthropic.claude-3-5-sonnet-20241022-v2:0 " ,
"inference_profile" : {
"prefix" : " us " ,
"region" : " us-west-2 "
},
"region" : [ " us-east-1 " , " us-west-2 " , " us-east-2 " ],
"cost" : {
"input_1k_price" : 0.003 ,
"output_1k_price" : 0.015
},
"default" : true ,
"vision" : true ,
"document" : true ,
"tool" : true
},
"Meta Llama 3.2 90B Vision Instruct" : {
"id" : " us.meta.llama3-2-90b-instruct-v1:0 " ,
"inference_profile" : {
"prefix" : " us " ,
"region" : " us-west-2 "
},
"region" : [ " us-east-1 " , " us-west-2 " ],
"cost" : {
"input_1k_price" : 0.002 ,
"output_1k_price" : 0.002
},
"vision" : true ,
"document" : true ,
"tool" : true
},
"Mistral Large 2" : {
"id" : " mistral.mistral-large-2407-v1:0 " ,
"cost" : {
"input_1k_price" : 0.003 ,
"output_1k_price" : 0.009
},
"vision" : false ,
"document" : true ,
"tool" : true
}
}
}
이 애플리케이션은 다음을 위해 Amazon Bedrock Prompt Manager를 활용합니다.
현재 애플리케이션은 2가지 자동 변수 대체를 지원합니다.
%Y-%m-%d
로 대체됩니다.%Y-%m-%d %H:%M:%S UTC
로 대체됩니다. chainlit_image/foundational-llm-chat_app/massages_utils.py
내의 extract_and_process_prompt
함수를 편집하여 더 많은 직접 대체 항목을 추가할 수 있습니다.
이 애플리케이션은 Amazon Bedrock의 Converse API를 사용하여 다음을 제공합니다.
모든 시스템 프롬프트는 다음을 제공하는 Amazon Bedrock Prompt Manager를 통해 저장 및 관리됩니다.
시스템 프롬프트를 사용하여 언어 모델의 동작을 구성하는 경우 보안에 미치는 영향을 고려하고 잠재적인 오용이나 취약점을 방지하기 위한 조치를 취하는 것이 중요합니다. 한 가지 중요한 위험은 악성 입력이 의도하지 않은 방식으로 시스템 프롬프트를 조작하여 잠재적으로 해롭거나 편향된 출력을 초래할 수 있는 프롬프트 주입 입니다.
좋은 출발점은 탈옥 완화 및 신속한 주입 가이드입니다.
프롬프트 엔지니어링은 원하는 출력을 생성할 때 언어 모델을 안내하기 위해 프롬프트나 지침을 신중하게 작성하는 관행을 말합니다. 효과적인 프롬프트 엔지니어링은 언어 모델이 주어진 컨텍스트와 작업을 적절하게 이해하고 응답하도록 보장하는 데 중요합니다.
다음 과정은 Bedrock: Anthropic Claude v3을 사용한 프롬프트 엔지니어링을 사용하여 Claude 내에서 최적의 프롬프트를 엔지니어링하는 방법에 대한 포괄적인 단계별 이해를 제공하기 위한 것입니다.
이 가이드에서는 초급, 중급, 고급의 세 가지 수준으로 구성된 일련의 강의와 연습을 통해 신속한 엔지니어링을 위한 다양한 기술과 모범 사례를 다룹니다.
이 가이드에 설명된 원칙과 기술을 따르면 언어 모델 애플리케이션의 성능과 안정성을 향상시켜 AI 도우미가 보다 관련성이 높고 일관되며 상황을 인식하는 응답을 생성하도록 할 수 있습니다.
AWS Cloud9을 사용하여 배포하는 것이 좋습니다. Cloud9을 사용하여 솔루션을 배포하려면 계속하기 전에 다음이 필요합니다.
m5.large
선택하세요.Amazon Linux 2023
플랫폼으로 사용합니다. AWS Cloud9을 사용하지 않기로 결정한 경우 환경이 다음 사전 요구 사항을 충족하는지 확인하십시오.
환경이 다음 필수 구성 요소를 충족하는지 확인하세요.
당신은:
AWS 계정
AWS 샘플에 포함된 리소스를 생성할 수 있는 액세스 정책
콘솔 및 프로그래밍 방식 액세스 모두
NodeJS가 설치되었습니다.
nvm
사용하는 경우 계속하기 전에 다음을 실행할 수 있습니다. nvm install --lts
NPM이 설치되었습니다.
nvm
사용하는 경우 계속하기 전에 다음을 실행할 수 있습니다. nvm install-latest-npm
AWS 계정과 함께 사용하도록 AWS CLI가 설치 및 구성되었습니다.
AWS CDK CLI 설치됨
Finch 설치 또는 Docker 설치
배포 지역에서 Amazon Bedrock 모델 액세스 활성화: Amazon Bedrock 모델 액세스를 활성화하는 방법.
다음 중 하나 이상을 활성화합니다.
저장소를 복제하고 폴더를 열고 종속성을 설치합니다.
git clone https://github.com/aws-samples/foundational-llm-chat.git
cd foundational-llm-chat
npm install
[배포 지역에서 이전에 수행하지 않은 경우에만 선택 사항] CDK 환경을 부트스트랩합니다.
cdk bootstrap
스택을 구축하고 배포합니다.
cdk deploy --region YOUR_DEPLOY_REGION
여기서 YOUR_DEPLOY_REGION은 애플리케이션을 배포하려는 AWS 지역입니다. 예: us-west-2
.
Docker 대신 Finch를 사용하는 경우 다음 예와 같이 명령 시작 부분에 CDK_DOCKER=finch
추가하세요.
CDK_DOCKER=finch cdk deploy --region us-west-2
그러면 ECS 클러스터, Cognito 사용자 풀, CloudFront 배포 등을 포함하여 AWS에 필요한 모든 리소스가 생성됩니다.
배포가 완료되면 CloudFront 배포 URL이 터미널에 표시됩니다. 이 URL을 사용하여foundal-llm-chat 애플리케이션에 액세스하세요.
배포 후에는 다음과 유사한 내용을 얻게 됩니다.
✅ Foundational-LLM-ChatStack
Deployment time: 465.09s
Outputs:
FoundationalLlmChatStack.CognitoUserPool = ID
FoundationalLlmChatStack.NetworkingFoundationalLlmChatChatbotStack = CLOUDFRONT_DISTRIBUTION_ADDRESS
FoundationalLlmChatStack.ecsApplicationFoundationalLlmChatServiceLoadBalancer = ECS_LOAD_BALANCER
FoundationalLlmChatStack.ecsApplicationFoundationalLlmChatServiceServiceURL = ECS_LOAD_BALANCER_ADDRESS
Stack ARN: ARN
Total time: 469.14s
Amazon CloudFront 배포는 다음 줄에 표시됩니다. FoundationalLlmChatStack.NetworkingFoundationalLlmChat = CLOUDFRONT_DISTRIBUTION_ADDRESS
foundational-llm-chat-user-pool
이라는 사용자 풀을 찾습니다. 이 사용자 풀을 열고 이메일 주소도 확인하는 사용자를 생성합니다.불필요한 비용이 발생하지 않도록 하려면 이 샘플에서 생성된 리소스를 사용을 마친 후 정리하고 삭제하는 것이 좋습니다. 스택 및 관련 리소스를 삭제하려면 다음 단계를 따르세요.
Foundational-LLM-ChatStack
이라는 스택으로 이동합니다.이렇게 하면 ECS 클러스터, Cognito 사용자 풀, CloudFront 배포 및 기타 모든 관련 리소스를 포함한 전체 스택이 삭제됩니다.
또는 AWS CDK를 사용하여 명령줄에서 스택을 삭제할 수 있습니다.
cdk destroy --region YOUR_DEPLOY_REGION
YOUR_DEPLOY_REGION
애플리케이션을 배포한 AWS 리전으로 바꿉니다.
스택을 삭제해도 배포 중에 생성된 CloudWatch 로그와 Amazon ECS 작업 정의는 자동으로 삭제되지 않습니다. 추가 비용이 발생하지 않도록 이러한 리소스가 더 이상 필요하지 않은 경우 수동으로 삭제할 수 있습니다.
현재 아키텍처는 기초 LLM 채팅 애플리케이션 배포를 위한 좋은 시작점을 제공하지만 프로덕션 준비 배포에 대한 추가 고려 사항은 다음과 같습니다.
현재 아키텍처에서는 CloudFront 배포와 ALB(Application Load Balancer) 간의 통신이 HTTP를 통해 이루어집니다. 프로덕션 배포의 경우 보안 통신을 위해 HTTPS(TLS/SSL)를 사용하는 것이 좋습니다.
두 수준(ALB 및 ECS 작업) 모두에서 TLS 종료와 함께 HTTPS를 활성화하면 종단 간 암호화가 보장되고 애플리케이션의 보안이 강화됩니다.
이 AWS 샘플은 데모 및 교육 목적으로만 제작되었습니다. 추가 수정 및 강화 없이는 프로덕션 용도로 설계되지 않았습니다. 이 애플리케이션을 프로덕션 환경에 배포하기 전에 특정 요구 사항 및 모범 사례를 기반으로 철저한 테스트, 보안 평가 및 최적화를 수행하는 것이 중요합니다.
claude에 대한 시스템 프롬프트는 Anthropic 문서(시스템 프롬프트)에서 직접 얻을 수 있습니다.
기여를 환영합니다! 일반적인 Git 워크플로를 따르세요.
이 라이브러리는 MIT-0 라이선스에 따라 라이선스가 부여됩니다. 라이센스 파일을 참조하십시오.
이 샘플의 콘텐츠를 프로덕션 목적으로 사용하기 전에 자체적으로 독립적인 평가를 수행하는 것을 고려해야 합니다. 여기에는 귀하의 특정 품질 관리 관행 및 표준을 기반으로 이 샘플에 제공된 콘텐츠를 테스트하고, 보호하고, 최적화하는 것이 포함될 수 있습니다.