이 AWS 솔루션에는 Generative AI 데모, 특히 NLQ(Natural Language Query)를 사용하여 PostgreSQL용 Amazon RDS 데이터베이스에 질문하는 데모가 포함되어 있습니다. 이 솔루션은 기초 모델에 대한 세 가지 아키텍처 옵션을 제공합니다. 1. Amazon SageMaker JumpStart, 2. Amazon Bedrock 및 3. OpenAI API. AWS Fargate의 Amazon ECS에서 실행되는 데모의 웹 기반 애플리케이션은 LangChain, Streamlit, Chroma 및 HuggingFace SentenceTransformers의 조합을 사용합니다. 애플리케이션은 최종 사용자의 자연어 질문을 받아들이고 관련 SQL 쿼리 및 Pandas DataFrame 호환 결과 세트와 함께 자연어 답변을 반환합니다.
NLQ(자연어 쿼리)를 위한 FM(기본 모델) 선택은 자연어 질문을 자연어 답변으로 정확하게 변환하는 애플리케이션의 능력에 중요한 역할을 합니다. 모든 FM이 NLQ를 수행할 수 있는 것은 아닙니다. 모델 선택 외에도 NLQ 정확도는 프롬프트의 품질, 프롬프트 템플릿, 상황 내 학습에 사용되는 레이블이 지정된 샘플 쿼리( 일명 소수 프롬프트 ) 및 데이터베이스 스키마에 사용되는 명명 규칙과 같은 요소에 크게 의존합니다. , 테이블과 열 모두.
NLQ 애플리케이션은 다양한 오픈 소스 및 상용 FM에서 테스트되었습니다. 기본적으로 gpt-3.5-turbo
및 gpt-4
를 포함한 OpenAI의 Generative Pre-trained Transformer GPT-3 및 GPT-4 시리즈 모델은 모두 평균을 사용하여 단순하고 복잡한 자연어 쿼리에 대한 정확한 응답을 제공합니다. 상황 내 학습의 양과 최소한의 프롬프트 엔지니어링.
Amazon Bedrock을 통해 제공되는 Amazon Titan Text G1 - Express amazon.titan-text-express-v1
도 테스트되었습니다. 이 모델은 일부 모델별 프롬프트 최적화를 사용하여 기본 자연어 쿼리에 대한 정확한 응답을 제공했습니다. 그러나 이 모델은 더 복잡한 쿼리에 응답할 수 없었습니다. 더욱 신속한 최적화를 통해 모델 정확도가 향상될 수 있습니다.
google/flan-t5-xxl
및 google/flan-t5-xxl-fp16
(전체 모델의 반정밀도 부동 소수점 형식(FP16) 버전)과 같은 오픈 소스 모델은 Amazon SageMaker JumpStart를 통해 사용할 수 있습니다. google/flan-t5
모델 시리즈는 Generative AI 애플리케이션을 구축하는 데 널리 사용되는 선택이지만 최신 오픈 소스 및 상용 모델에 비해 NLQ 기능이 제한됩니다. 데모의 google/flan-t5-xxl-fp16
충분한 상황 내 학습을 통해 기본적인 자연어 쿼리에 응답할 수 있습니다. 그러나 테스트 중에 답변을 반환하거나 정답을 제공하는 데 실패하는 경우가 많았고, 보통에서 복잡한 쿼리에 직면할 때 리소스 소모로 인해 SageMaker 모델 엔드포인트 시간 초과가 자주 발생했습니다.
이 솔루션은 GitHub에서 사용할 수 있는 오픈 소스 데이터베이스인 The Museum of Modern Art(MoMA) 컬렉션의 NLQ 최적화 복사본을 사용합니다. MoMA 데이터베이스에는 121,000개 이상의 예술 작품과 15,000명의 예술가가 포함되어 있습니다. 이 프로젝트 리포지토리에는 PostgreSQL용 Amazon RDS 데이터베이스 인스턴스로 쉽게 가져올 수 있는 파이프로 구분된 텍스트 파일이 포함되어 있습니다.
MoMA 데이터 세트를 사용하면 다양한 수준의 복잡성을 지닌 자연어 질문을 할 수 있습니다.
다시 말하지만, 답변을 반환하고 정확한 답변을 반환하는 NLQ 애플리케이션의 기능은 주로 모델 선택에 따라 달라집니다. 모든 모델이 NLQ를 지원하는 것은 아니며 다른 모델은 정확한 답변을 반환하지 않습니다. 특정 모델에 대해 위의 프롬프트를 최적화하면 정확도를 높이는 데 도움이 될 수 있습니다.
google/flan-t5-xxl-fp16
의 경우 ml.g5.24xlarge
). google/flan-t5-xxl-fp16
모델). 인스턴스 유형 선택에 대해서는 모델 설명서를 참조하세요.NlqMainStack
CloudFormation 템플릿을 배포합니다. 계정에서 Amazon ECS를 하나 이상 사용해야 합니다. 그렇지 않으면 AWSServiceRoleForECS
서비스 연결 역할이 아직 존재하지 않고 스택이 실패합니다. NlqMainStack
스택을 배포하기 전에 AWSServiceRoleForECS
서비스 연결 역할을 확인하십시오. 이 역할은 계정에서 ECS 클러스터를 처음 생성할 때 자동 생성됩니다.nlq-genai:2.0.0-sm
Docker 이미지를 구축하고 새 Amazon ECR 리포지토리에 푸시합니다. 또는 옵션 2: Amazon Bedrock 또는 옵션 3: OpenAI API와 함께 사용할 nlq-genai:2.0.0-bedrock
또는 nlq-genai:2.0.0-oai
Docker 이미지를 빌드하고 푸시합니다.nlqapp
사용자를 추가합니다.NlqSageMakerEndpointStack
CloudFormation 템플릿을 배포합니다.NlqEcsSageMakerStack
CloudFormation 템플릿을 배포합니다. 또는 옵션 2: Amazon Bedrock에 사용할 NlqEcsBedrockStack
CloudFormation 템플릿을 배포하거나 옵션 3: OpenAI API에 사용할 NlqEcsOpenAIStack
템플릿을 배포합니다. 옵션 1: Amazon SageMaker JumpStart의 경우 Amazon SageMaker JumpStart 엔드포인트 추론에 필요한 EC2 인스턴스가 있는지 확인하거나 AWS Management Console의 서비스 할당량을 사용하여 요청합니다(예: google/flan-t5-xxl-fp16
의 경우 ml.g5.24xlarge
). google/flan-t5-xxl-fp16
모델). 인스턴스 유형 선택에 대해서는 모델 설명서를 참조하세요.
계속하기 전에 아래 비밀 값을 업데이트했는지 확인하세요. 이 단계에서는 NLQ 애플리케이션의 자격 증명에 대한 비밀을 생성합니다. 데이터베이스에 대한 NLQ 애플리케이션 액세스는 읽기 전용으로 제한됩니다. 옵션 3: OpenAI API의 경우 이 단계에서는 OpenAI API 키를 저장할 비밀을 생성합니다. Amazon RDS 인스턴스에 대한 마스터 사용자 자격 증명은 NlqMainStack
CloudFormation 템플릿 배포의 일부로 자동으로 설정되고 AWS Secret Manager에 저장됩니다. 이러한 값은 AWS Secret Manager에서 찾을 수 있습니다.
aws secretsmanager create-secret
--name /nlq/NLQAppUsername
--description " NLQ Application username for MoMA database. "
--secret-string " <your_nlqapp_username> "
aws secretsmanager create-secret
--name /nlq/NLQAppUserPassword
--description " NLQ Application password for MoMA database. "
--secret-string " <your_nlqapp_password> "
# Only for Option 2: OpenAI API/model
aws secretsmanager create-secret
--name /nlq/OpenAIAPIKey
--description " OpenAI API key. "
--secret-string " <your_openai_api_key "
ALB 및 RDS에 대한 액세스는 현재 IP 주소로 외부적으로 제한됩니다. 배포 후 IP 주소가 변경되면 업데이트해야 합니다.
cd cloudformation/
aws cloudformation create-stack
--stack-name NlqMainStack
--template-body file://NlqMainStack.yaml
--capabilities CAPABILITY_NAMED_IAM
--parameters ParameterKey= " MyIpAddress " ,ParameterValue= $( curl -s http://checkip.amazonaws.com/ ) /32
선택한 모델 옵션에 따라 NLQ 애플리케이션용 Docker 이미지를 빌드합니다. SageMaker Notebook 환경 또는 AWS Cloud9을 사용하여 CI/CD 파이프라인에서 로컬로 Docker 이미지를 구축할 수 있습니다. 저는 애플리케이션을 개발 및 테스트하고 Docker 이미지를 구축하는 데 AWS Cloud9을 선호합니다.
cd docker/
# Located in the output from the NlqMlStack CloudFormation template
# e.g. 111222333444.dkr.ecr.us-east-1.amazonaws.com/nlq-genai
ECS_REPOSITORY= " <you_ecr_repository> "
aws ecr get-login-password --region us-east-1 |
docker login --username AWS --password-stdin $ECS_REPOSITORY
옵션 1: Amazon SageMaker JumpStart
TAG= " 2.0.0-sm "
docker build -f Dockerfile_SageMaker -t $ECS_REPOSITORY : $TAG .
docker push $ECS_REPOSITORY : $TAG
옵션 2: Amazon Bedrock
TAG= " 2.0.0-bedrock "
docker build -f Dockerfile_Bedrock -t $ECS_REPOSITORY : $TAG .
docker push $ECS_REPOSITORY : $TAG
옵션 3: OpenAI API
TAG= " 2.0.0-oai "
docker build -f Dockerfile_OpenAI -t $ECS_REPOSITORY : $TAG .
docker push $ECS_REPOSITORY : $TAG
5a. 선호하는 PostgreSQL 도구를 사용하여 moma
데이터베이스에 연결하세요. 데이터베이스에 연결하는 방법에 따라 일시적으로 RDS 인스턴스에 대한 Public access
활성화해야 합니다.
5b. moma
데이터베이스에 두 개의 MoMA 컬렉션 테이블을 만듭니다.
CREATE TABLE public .artists
(
artist_id integer NOT NULL ,
full_name character varying ( 200 ),
nationality character varying ( 50 ),
gender character varying ( 25 ),
birth_year integer ,
death_year integer ,
CONSTRAINT artists_pk PRIMARY KEY (artist_id)
)
CREATE TABLE public .artworks
(
artwork_id integer NOT NULL ,
title character varying ( 500 ),
artist_id integer NOT NULL ,
date integer ,
medium character varying ( 250 ),
dimensions text ,
acquisition_date text ,
credit text ,
catalogue character varying ( 250 ),
department character varying ( 250 ),
classification character varying ( 250 ),
object_number text ,
diameter_cm text ,
circumference_cm text ,
height_cm text ,
length_cm text ,
width_cm text ,
depth_cm text ,
weight_kg text ,
durations integer ,
CONSTRAINT artworks_pk PRIMARY KEY (artwork_id)
)
5c. 압축을 풀고 /data
하위 디렉터리에 있는 텍스트 파일을 사용하여 두 개의 데이터 파일을 moma
데이터베이스로 가져옵니다. 두 파일 모두 헤더 행과 파이프로 구분된('|')을 포함합니다.
# examples commands from pgAdmin4
--command " "\copy public.artists (artist_id, full_name, nationality, gender, birth_year, death_year) FROM 'moma_public_artists.txt' DELIMITER '|' CSV HEADER QUOTE '"' ESCAPE '''';""
--command " "\copy public.artworks (artwork_id, title, artist_id, date, medium, dimensions, acquisition_date, credit, catalogue, department, classification, object_number, diameter_cm, circumference_cm, height_cm, length_cm, width_cm, depth_cm, weight_kg, durations) FROM 'moma_public_artworks.txt' DELIMITER '|' CSV HEADER QUOTE '"' ESCAPE '''';""
읽기 전용 NLQ 응용 프로그램 데이터베이스 사용자 계정을 만듭니다. 위의 2단계에서 구성한 비밀을 사용하여 SQL 스크립트의 세 위치에서 사용자 이름과 비밀번호 값을 업데이트합니다.
CREATE ROLE < your_nlqapp_username > WITH
LOGIN
NOSUPERUSER
NOCREATEDB
NOCREATEROLE
INHERIT
NOREPLICATION
CONNECTION LIMIT - 1
PASSWORD ' <your_nlqapp_password> ' ;
GRANT
pg_read_all_data
TO
< your_nlqapp_username > ;
옵션 1: Amazon SageMaker JumpStart
cd cloudformation/
aws cloudformation create-stack
--stack-name NlqSageMakerEndpointStack
--template-body file://NlqSageMakerEndpointStack.yaml
--capabilities CAPABILITY_NAMED_IAM
옵션 1: Amazon SageMaker JumpStart
aws cloudformation create-stack
--stack-name NlqEcsSageMakerStack
--template-body file://NlqEcsSageMakerStack.yaml
--capabilities CAPABILITY_NAMED_IAM
옵션 2: Amazon Bedrock
aws cloudformation create-stack
--stack-name NlqEcsBedrockStack
--template-body file://NlqEcsBedrockStack.yaml
--capabilities CAPABILITY_NAMED_IAM
옵션 3: OpenAI API
aws cloudformation create-stack
--stack-name NlqEcsOpenAIStack
--template-body file://NlqEcsOpenAIStack.yaml
--capabilities CAPABILITY_NAMED_IAM
NlqSageMakerEndpointStack.yaml
CloudFormation 템플릿 파일을 사용하여 배포된 기본 google/flan-t5-xxl-fp16
JumpStart 기초 모델을 대체할 수 있습니다. 먼저 NlqSageMakerEndpointStack.yaml
파일에서 모델 매개변수를 수정하고 배포된 CloudFormation 스택인 NlqSageMakerEndpointStack
업데이트해야 합니다. 또한 NLQ 애플리케이션 app_sagemaker.py
를 조정하고 선택한 모델의 응답 페이로드와 일치하도록 ContentHandler
클래스를 수정해야 합니다. 그런 다음 Dockerfile_SageMaker
Dockerfile을 사용하여 버전(예: nlq-genai-2.0.1-sm
을 증가시켜 Amazon ECR Docker 이미지를 다시 빌드하고 Amazon ECR 리포지토리에 푸시합니다. 마지막으로 NlqEcsSageMakerStack
CloudFormation 스택의 일부인 배포된 ECS 작업 및 서비스를 업데이트해야 합니다.
솔루션의 기본 Amazon Titan Text G1 - Express( amazon.titan-text-express-v1
) 기반 모델에서 전환하려면 NlqEcsBedrockStack.yaml
CloudFormation 템플릿 파일을 수정하고 배포해야 합니다. 또한 NLQ 애플리케이션 app_bedrock.py
를 수정해야 합니다. 그런 다음 Dockerfile_Bedrock
Dockerfile을 사용하여 Amazon ECR Docker 이미지를 다시 빌드하고 결과 이미지(예: nlq-genai-2.0.1-bedrock
를 Amazon ECR 리포지토리에 푸시해야 합니다. . 마지막으로 NlqEcsBedrockStack
CloudFormation 스택의 일부인 배포된 ECS 작업 및 서비스를 업데이트해야 합니다.
솔루션의 기본 OpenAI API에서 Cohere 또는 Anthropic과 같은 다른 타사 모델 제공업체의 API로 전환하는 것도 마찬가지로 간단합니다. OpenAI 모델을 활용하려면 먼저 OpenAI 계정을 만들고 개인 API 키를 얻어야 합니다. 그런 다음 Dockerfile_OpenAI
Dockerfile을 사용하여 Amazon ECR Docker 이미지를 수정 및 재구축하고 결과 이미지(예: nlq-genai-2.0.1-oai
를 Amazon ECR 리포지토리에 푸시합니다. 마지막으로 NlqEcsOpenAIStack.yaml
CloudFormation 템플릿 파일을 수정하고 재배포합니다.
자세한 내용은 기여를 참조하세요.
이 라이브러리는 MIT-0 라이선스에 따라 라이선스가 부여됩니다. 라이센스 파일을 참조하십시오.