โซลูชัน AWS นี้ประกอบด้วยการสาธิต Generative AI โดยเฉพาะการใช้ Natural Language Query (NLQ) เพื่อถามคำถามเกี่ยวกับฐานข้อมูล Amazon RDS สำหรับ PostgreSQL โซลูชันนี้มีตัวเลือกสถาปัตยกรรมสามตัวเลือกสำหรับโมเดลพื้นฐาน: 1. Amazon SageMaker JumpStart, 2. Amazon Bedrock และ 3. OpenAI API แอปพลิเคชันบนเว็บของการสาธิตที่ทำงานบน Amazon ECS บน AWS Fargate ใช้การผสมผสานระหว่าง LangChain, Streamlit, Chroma และ HuggingFace SentenceTransformers แอปพลิเคชันยอมรับคำถามภาษาธรรมชาติจากผู้ใช้ปลายทางและส่งกลับคำตอบภาษาธรรมชาติ พร้อมด้วยแบบสอบถาม SQL ที่เกี่ยวข้องและชุดผลลัพธ์ที่เข้ากันได้กับ Pandas DataFrame
การเลือก Foundation Model (FM) สำหรับ Natural Language Query (NLQ) มีบทบาทสำคัญในความสามารถของแอปพลิเคชันในการแปลคำถามจากภาษาธรรมชาติเป็นคำตอบจากภาษาธรรมชาติได้อย่างแม่นยำ FM บางแห่งไม่สามารถแสดง NLQ ได้ นอกเหนือจากการเลือกโมเดลแล้ว ความแม่นยำของ NLQ ยังขึ้นอยู่กับปัจจัยต่างๆ อย่างมาก เช่น คุณภาพของพรอมต์ เทมเพลตพรอมต์ การสืบค้นตัวอย่างที่มีป้ายกำกับซึ่งใช้สำหรับการเรียนรู้ในบริบท ( หรือที่เรียกว่าการพร้อมท์แบบไม่กี่ช็อต ) และแบบแผนการตั้งชื่อที่ใช้สำหรับสคีมาฐานข้อมูล ทั้งตารางและคอลัมน์
แอปพลิเคชัน NLQ ได้รับการทดสอบบนโอเพ่นซอร์สและ FM เชิงพาณิชย์ที่หลากหลาย โดยพื้นฐานแล้ว ซีรีส์ Generative Pre-trained Transformer GPT-3 และ GPT-4 ของ OpenAI ซึ่งรวมถึง gpt-3.5-turbo
และ gpt-4
ล้วนให้การตอบสนองที่แม่นยำต่อคำค้นหาในภาษาธรรมชาติที่หลากหลายถึงซับซ้อนโดยใช้ค่าเฉลี่ย จำนวนการเรียนรู้ในบริบทและวิศวกรรมที่รวดเร็วน้อยที่สุด
Amazon Titan Text G1 - Express, amazon.titan-text-express-v1
ซึ่งพร้อมใช้งานผ่าน Amazon Bedrock ก็ได้รับการทดสอบเช่นกัน แบบจำลองนี้ให้การตอบสนองที่แม่นยำต่อคำถามภาษาธรรมชาติขั้นพื้นฐานโดยใช้การปรับให้เหมาะสมพร้อมท์เฉพาะรุ่นบางอย่าง อย่างไรก็ตาม โมเดลนี้ไม่สามารถตอบคำถามที่ซับซ้อนกว่านี้ได้ การเพิ่มประสิทธิภาพที่รวดเร็วยิ่งขึ้นสามารถปรับปรุงความแม่นยำของแบบจำลองได้
โมเดลโอเพ่นซอร์ส เช่น google/flan-t5-xxl
และ google/flan-t5-xxl-fp16
(เวอร์ชันเต็มของรูปแบบจุดลอยตัวแบบ half-precision (FP16)) มีจำหน่ายผ่าน Amazon SageMaker JumpStart แม้ว่าโมเดลซีรีส์ google/flan-t5
จะเป็นตัวเลือกยอดนิยมสำหรับการสร้างแอปพลิเคชัน Generative AI แต่ความสามารถของโมเดลสำหรับ NLQ นั้นมีจำกัดเมื่อเทียบกับโมเดลโอเพ่นซอร์สและเชิงพาณิชย์รุ่นใหม่ google/flan-t5-xxl-fp16
ของการสาธิตนี้สามารถตอบคำถามภาษาธรรมชาติขั้นพื้นฐานพร้อมการเรียนรู้ในบริบทที่เพียงพอ อย่างไรก็ตาม มักจะล้มเหลวในระหว่างการทดสอบในการส่งคืนคำตอบหรือให้คำตอบที่ถูกต้อง และบ่อยครั้งทำให้จุดสิ้นสุดโมเดล SageMaker หมดเวลาเนื่องจากทรัพยากรหมดเมื่อต้องเผชิญกับการสืบค้นระดับปานกลางถึงซับซ้อน
โซลูชันนี้ใช้สำเนาฐานข้อมูลโอเพ่นซอร์สที่ปรับให้เหมาะสมที่สุด NLQ นั่นคือคอลเลกชันพิพิธภัณฑ์ศิลปะสมัยใหม่ (MoMA) ซึ่งมีอยู่บน GitHub ฐานข้อมูล MoMA มีงานศิลปะมากกว่า 121,000 ชิ้น และศิลปิน 15,000 คน พื้นที่เก็บข้อมูลโปรเจ็กต์นี้มีไฟล์ข้อความที่คั่นด้วยไปป์ซึ่งสามารถนำเข้าไปยังอินสแตนซ์ฐานข้อมูล Amazon RDS for PostgreSQL ได้อย่างง่ายดาย
การใช้ชุดข้อมูล MoMA ช่วยให้เราสามารถถามคำถามที่เป็นภาษาธรรมชาติ โดยมีระดับความซับซ้อนที่แตกต่างกัน:
ขอย้ำอีกครั้งว่า ความสามารถของแอปพลิเคชัน NLQ ในการส่งคืนคำตอบและส่งคืนคำตอบที่ถูกต้องนั้นขึ้นอยู่กับการเลือกรุ่นเป็นหลัก ไม่ใช่ทุกรุ่นที่สามารถใช้ NLQ ได้ ในขณะที่รุ่นอื่นๆ จะไม่ให้คำตอบที่ถูกต้อง การเพิ่มประสิทธิภาพข้อความแจ้งข้างต้นสำหรับรุ่นเฉพาะสามารถช่วยปรับปรุงความแม่นยำได้
ml.g5.24xlarge
สำหรับ google/flan-t5-xxl-fp16
รุ่น google/flan-t5-xxl-fp16
) โปรดดูเอกสารประกอบของโมเดลสำหรับการเลือกประเภทอินสแตนซ์NlqMainStack
CloudFormation โปรดทราบว่าคุณจะต้องใช้ Amazon ECS อย่างน้อยหนึ่งรายการในบัญชีของคุณ มิฉะนั้น AWSServiceRoleForECS
Service-Linked Role จะยังไม่มีอยู่และสแต็กจะล้มเหลว ตรวจสอบบทบาทที่เชื่อมโยงกับบริการของ AWSServiceRoleForECS
ก่อนที่จะปรับใช้สแต็ก NlqMainStack
บทบาทนี้จะถูกสร้างขึ้นโดยอัตโนมัติในครั้งแรกที่คุณสร้างคลัสเตอร์ ECS ในบัญชีของคุณnlq-genai:2.0.0-sm
ไปยังพื้นที่เก็บข้อมูล Amazon ECR ใหม่ อีกทางหนึ่ง ให้สร้างและพุชอิมเมจ nlq-genai:2.0.0-bedrock
หรือ nlq-genai:2.0.0-oai
Docker เพื่อใช้กับตัวเลือกที่ 2: Amazon Bedrock หรือตัวเลือกที่ 3: OpenAI APInlqapp
ไปยังฐานข้อมูล MoMANlqSageMakerEndpointStack
CloudFormationNlqEcsSageMakerStack
CloudFormation อีกทางหนึ่ง ปรับใช้เทมเพลต NlqEcsBedrockStack
CloudFormation เพื่อใช้กับตัวเลือก 2: Amazon Bedrock หรือเทมเพลต NlqEcsOpenAIStack
เพื่อใช้กับตัวเลือก 3: OpenAI API สำหรับตัวเลือกที่ 1: Amazon SageMaker JumpStart ตรวจสอบให้แน่ใจว่าคุณมี EC2 instance ที่จำเป็นสำหรับการอนุมานตำแหน่งข้อมูล Amazon SageMaker JumpStart หรือขอโดยใช้โควต้าบริการใน AWS Management Console (เช่น ml.g5.24xlarge
สำหรับ google/flan-t5-xxl-fp16
รุ่น) โปรดดูเอกสารประกอบของโมเดลสำหรับการเลือกประเภทอินสแตนซ์
ตรวจสอบให้แน่ใจว่าคุณอัปเดตค่าลับด้านล่างก่อนดำเนินการต่อ ขั้นตอนนี้จะสร้างข้อมูลลับสำหรับข้อมูลรับรองสำหรับแอปพลิเคชัน NLQ การเข้าถึงฐานข้อมูลของแอปพลิเคชัน NLQ ถูกจำกัดให้อ่านอย่างเดียว สำหรับตัวเลือกที่ 3: OpenAI API ขั้นตอนนี้จะสร้างข้อมูลลับเพื่อจัดเก็บคีย์ OpenAI API ของคุณ ข้อมูลรับรองผู้ใช้หลักสำหรับอินสแตนซ์ Amazon RDS จะได้รับการตั้งค่าโดยอัตโนมัติและจัดเก็บไว้ใน AWS Secret Manager โดยเป็นส่วนหนึ่งของการปรับใช้เทมเพลต NlqMainStack
CloudFormation ค่าเหล่านี้สามารถพบได้ใน 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
สร้างอิมเมจ Docker สำหรับแอปพลิเคชัน NLQ ตามตัวเลือกรุ่นที่คุณเลือก คุณสามารถสร้างอิมเมจ Docker ภายในเครื่องในไปป์ไลน์ CI/CD โดยใช้สภาพแวดล้อม SageMaker Notebook หรือ AWS Cloud9 ฉันชอบ AWS Cloud9 สำหรับการพัฒนาและทดสอบแอปพลิเคชันและสร้างอิมเมจ Docker
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: อเมซอน 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
5ก. เชื่อมต่อกับฐานข้อมูล moma
โดยใช้เครื่องมือ PostgreSQL ที่คุณต้องการ คุณจะต้องเปิดใช้งาน Public access
สำหรับอินสแตนซ์ RDS ชั่วคราว ขึ้นอยู่กับวิธีที่คุณเชื่อมต่อกับฐานข้อมูล
5ข. สร้างตารางคอลเลกชัน 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 แตกไฟล์และนำเข้าไฟล์ข้อมูลทั้งสองไฟล์ลงในฐานข้อมูล moma
โดยใช้ไฟล์ข้อความในไดเร็กทอรีย่อย /data
ทั้งสองไฟล์มีแถวส่วนหัวและคั่นด้วยไปป์ ('|')
# 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 แบบอ่านอย่างเดียว อัปเดตชื่อผู้ใช้และรหัสผ่านในสคริปต์ SQL ในสามแห่งด้วยข้อมูลลับที่คุณกำหนดค่าไว้ในขั้นตอนที่ 2 ข้างต้น
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: อเมซอน 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
คุณสามารถแทนที่ JumpStart Foundation Model ที่เป็นค่าเริ่มต้นของ google/flan-t5-xxl-fp16
ซึ่งปรับใช้โดยใช้ไฟล์เทมเพลต NlqSageMakerEndpointStack.yaml
CloudFormation ก่อนอื่น คุณจะต้องแก้ไขพารามิเตอร์โมเดลในไฟล์ NlqSageMakerEndpointStack.yaml
และอัปเดตสแต็ก CloudFormation ที่ปรับใช้ NlqSageMakerEndpointStack
นอกจากนี้ คุณจะต้องทำการปรับเปลี่ยนแอปพลิเคชัน NLQ app_sagemaker.py
โดยแก้ไขคลาส ContentHandler
เพื่อให้ตรงกับเพย์โหลดการตอบกลับของโมเดลที่เลือก จากนั้น สร้าง Amazon ECR Docker Image ขึ้นมาใหม่ โดยเพิ่มเวอร์ชัน เช่น nlq-genai-2.0.1-sm
โดยใช้ Dockerfile_SageMaker
Dockerfile และพุชไปยังพื้นที่เก็บข้อมูล Amazon ECR สุดท้ายนี้ คุณจะต้องอัปเดตงานและบริการ ECS ที่ปรับใช้ ซึ่งเป็นส่วนหนึ่งของสแต็ก NlqEcsSageMakerStack
CloudFormation
หากต้องการเปลี่ยนจากโมเดลพื้นฐานของ Amazon Titan Text G1 - Express ( amazon.titan-text-express-v1
) เริ่มต้นของโซลูชัน คุณจะต้องแก้ไขและปรับใช้ไฟล์เทมเพลต NlqEcsBedrockStack.yaml
CloudFormation นอกจากนี้ คุณจะต้องแก้ไขแอปพลิเคชัน NLQ app_bedrock.py
จากนั้น สร้าง Amazon ECR Docker Image ใหม่โดยใช้ Dockerfile_Bedrock
Dockerfile และพุชอิมเมจผลลัพธ์ เช่น nlq-genai-2.0.1-bedrock
ไปยังพื้นที่เก็บข้อมูล Amazon ECR . สุดท้ายนี้ คุณจะต้องอัปเดตงานและบริการ ECS ที่ปรับใช้ ซึ่งเป็นส่วนหนึ่งของสแต็ก NlqEcsBedrockStack
CloudFormation
การเปลี่ยนจาก OpenAI API เริ่มต้นของโซลูชันไปเป็น API ของผู้ให้บริการโมเดลบุคคลที่สามรายอื่น เช่น Cohere หรือ Anthropic ก็ทำได้ง่ายในทำนองเดียวกัน หากต้องการใช้โมเดลของ OpenAI คุณจะต้องสร้างบัญชี OpenAI และรับคีย์ API ส่วนตัวของคุณเองก่อน จากนั้น แก้ไขและสร้าง Amazon ECR Docker Image ใหม่โดยใช้ Dockerfile_OpenAI
Dockerfile และพุชอิมเมจผลลัพธ์ เช่น nlq-genai-2.0.1-oai
ไปยังพื้นที่เก็บข้อมูล Amazon ECR สุดท้าย แก้ไขและปรับใช้ไฟล์เทมเพลต NlqEcsOpenAIStack.yaml
CloudFormation อีกครั้ง
ดูการมีส่วนร่วมสำหรับข้อมูลเพิ่มเติม
ห้องสมุดนี้ได้รับอนุญาตภายใต้ใบอนุญาต MIT-0 ดูไฟล์ใบอนุญาต