Solusi AWS ini berisi demonstrasi AI Generatif, khususnya penggunaan Natural Language Query (NLQ) untuk mengajukan pertanyaan pada database Amazon RDS for PostgreSQL. Solusi ini menawarkan tiga opsi arsitektur untuk Model Fondasi: 1. Amazon SageMaker JumpStart, 2. Amazon Bedrock, dan 3. OpenAI API. Aplikasi berbasis web demonstrasi, yang berjalan di Amazon ECS di AWS Fargate, menggunakan kombinasi LangChain, Streamlit, Chroma, dan HuggingFace SentenceTransformers. Aplikasi menerima pertanyaan bahasa alami dari pengguna akhir dan mengembalikan jawaban bahasa alami, bersama dengan kueri SQL terkait dan kumpulan hasil yang kompatibel dengan Pandas DataFrame.
Pemilihan Model Dasar (FM) untuk Natural Language Query (NLQ) memainkan peran penting dalam kemampuan aplikasi untuk menerjemahkan pertanyaan bahasa alami menjadi jawaban bahasa alami secara akurat. Tidak semua FM mampu melakukan NLQ. Selain pilihan model, akurasi NLQ juga sangat bergantung pada faktor-faktor seperti kualitas prompt, templat prompt, kueri sampel berlabel yang digunakan untuk pembelajaran dalam konteks ( alias prompt beberapa langkah ), dan konvensi penamaan yang digunakan untuk skema database , baik tabel maupun kolom.
Aplikasi NLQ telah diuji pada berbagai FM open source dan komersial. Sebagai dasar, model seri GPT-3 dan GPT-4 Transformator Pra-terlatih OpenAI, termasuk gpt-3.5-turbo
, dan gpt-4
, semuanya memberikan respons akurat terhadap berbagai kueri bahasa alami sederhana hingga kompleks menggunakan rata-rata jumlah pembelajaran dalam konteks dan rekayasa cepat minimal.
Amazon Titan Text G1 - Express, amazon.titan-text-express-v1
, tersedia melalui Amazon Bedrock, juga diuji. Model ini memberikan respons akurat terhadap kueri bahasa alami dasar menggunakan beberapa pengoptimalan cepat khusus model. Namun, model ini tidak mampu menjawab pertanyaan yang lebih kompleks. Pengoptimalan lebih lanjut dapat meningkatkan akurasi model.
Model sumber terbuka, seperti google/flan-t5-xxl
dan google/flan-t5-xxl-fp16
(versi model lengkap format titik mengambang presisi setengah (FP16)), tersedia melalui Amazon SageMaker JumpStart. Meskipun seri model google/flan-t5
adalah pilihan populer untuk membangun aplikasi AI Generatif, kemampuannya untuk NLQ terbatas dibandingkan dengan model sumber terbuka dan komersial yang lebih baru. google/flan-t5-xxl-fp16
dari demonstrasi ini mampu menjawab pertanyaan dasar bahasa alami dengan pembelajaran dalam konteks yang memadai. Namun, sering kali gagal selama pengujian untuk mengembalikan jawaban atau memberikan jawaban yang benar, dan sering kali menyebabkan waktu tunggu titik akhir model SageMaker karena kehabisan sumber daya saat dihadapkan dengan kueri sedang hingga kompleks.
Solusi ini menggunakan salinan database sumber terbuka yang dioptimalkan NLQ, Koleksi Museum Seni Modern (MoMA), tersedia di GitHub. Basis data MoMA berisi lebih dari 121.000 karya seni dan 15.000 seniman. Repositori proyek ini berisi file teks yang dibatasi pipa yang dapat dengan mudah diimpor ke instans database Amazon RDS for PostgreSQL.
Dengan menggunakan kumpulan data MoMA, kita dapat mengajukan pertanyaan bahasa alami, dengan berbagai tingkat kerumitan:
Sekali lagi, kemampuan Aplikasi NLQ untuk mengembalikan jawaban dan mengembalikan jawaban yang akurat, terutama bergantung pada pilihan model. Tidak semua model mampu melakukan NLQ, sementara model lainnya tidak memberikan jawaban yang akurat. Mengoptimalkan petunjuk di atas untuk model tertentu dapat membantu meningkatkan akurasi.
ml.g5.24xlarge
untuk google/flan-t5-xxl-fp16
model google/flan-t5-xxl-fp16
). Lihat dokumentasi model untuk pilihan jenis instans.NlqMainStack
CloudFormation. Harap dicatat, Anda harus menggunakan Amazon ECS setidaknya satu di akun Anda, atau Peran Tertaut Layanan AWSServiceRoleForECS
belum ada dan tumpukan akan gagal. Periksa Peran Tertaut Layanan AWSServiceRoleForECS
sebelum menerapkan tumpukan NlqMainStack
. Peran ini dibuat secara otomatis saat pertama kali Anda membuat klaster ECS di akun Anda.nlq-genai:2.0.0-sm
ke repositori Amazon ECR baru. Sebagai alternatif, buat dan dorong image Docker nlq-genai:2.0.0-bedrock
atau nlq-genai:2.0.0-oai
untuk digunakan dengan Opsi 2: Amazon Bedrock atau Opsi 3: OpenAI API.nlqapp
ke database MoMA.NlqSageMakerEndpointStack
CloudFormation.NlqEcsSageMakerStack
CloudFormation. Sebagai alternatif, terapkan templat NlqEcsBedrockStack
CloudFormation untuk digunakan dengan Opsi 2: Amazon Bedrock atau templat NlqEcsOpenAIStack
untuk digunakan dengan Opsi 3: OpenAI API. Untuk Opsi 1: Amazon SageMaker JumpStart, pastikan Anda memiliki instans EC2 yang diperlukan untuk inferensi titik akhir Amazon SageMaker JumpStart atau minta menggunakan Service Quotas di AWS Management Console (misalnya, ml.g5.24xlarge
untuk google/flan-t5-xxl-fp16
model google/flan-t5-xxl-fp16
). Lihat dokumentasi model untuk pilihan jenis instans.
Pastikan Anda memperbarui nilai rahasia di bawah sebelum melanjutkan. Langkah ini akan membuat rahasia kredensial untuk aplikasi NLQ. Akses aplikasi NLQ ke database hanya sebatas read-only. Untuk Opsi 3: OpenAI API, langkah ini akan membuat rahasia untuk menyimpan kunci OpenAI API Anda. Kredensial Pengguna Utama untuk instans Amazon RDS diatur secara otomatis dan disimpan di AWS Secret Manager sebagai bagian dari penerapan templat NlqMainStack
CloudFormation. Nilai-nilai ini dapat ditemukan di 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 "
Akses ke ALB dan RDS akan dibatasi secara eksternal pada alamat IP Anda saat ini. Anda perlu memperbarui jika alamat IP Anda berubah setelah penerapan.
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
Bangun image Docker untuk aplikasi NLQ, berdasarkan opsi model pilihan Anda. Anda dapat membangun image Docker secara lokal, dalam pipeline CI/CD, menggunakan lingkungan Notebook SageMaker, atau AWS Cloud9. Saya lebih memilih AWS Cloud9 untuk mengembangkan dan menguji aplikasi serta membangun image 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
Opsi 1: Amazon SageMaker JumpStart
TAG= " 2.0.0-sm "
docker build -f Dockerfile_SageMaker -t $ECS_REPOSITORY : $TAG .
docker push $ECS_REPOSITORY : $TAG
Opsi 2: Batuan Dasar Amazon
TAG= " 2.0.0-bedrock "
docker build -f Dockerfile_Bedrock -t $ECS_REPOSITORY : $TAG .
docker push $ECS_REPOSITORY : $TAG
Opsi 3: API OpenAI
TAG= " 2.0.0-oai "
docker build -f Dockerfile_OpenAI -t $ECS_REPOSITORY : $TAG .
docker push $ECS_REPOSITORY : $TAG
5a. Hubungkan ke database moma
menggunakan alat PostgreSQL pilihan Anda. Anda perlu mengaktifkan Public access
untuk instans RDS untuk sementara, bergantung pada cara Anda terhubung ke database.
5b. Buat dua tabel koleksi MoMA ke dalam database 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. Buka zip dan impor dua file data ke dalam database moma
menggunakan file teks di subdirektori /data
. Kedua file berisi baris header dan dibatasi pipa ('|').
# 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 '''';""
Buat akun pengguna database Aplikasi NLQ read-only. Perbarui nilai nama pengguna dan kata sandi dalam skrip SQL, di tiga tempat, dengan rahasia yang Anda konfigurasikan pada Langkah 2 di atas.
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 > ;
Opsi 1: Amazon SageMaker JumpStart
cd cloudformation/
aws cloudformation create-stack
--stack-name NlqSageMakerEndpointStack
--template-body file://NlqSageMakerEndpointStack.yaml
--capabilities CAPABILITY_NAMED_IAM
Opsi 1: Amazon SageMaker JumpStart
aws cloudformation create-stack
--stack-name NlqEcsSageMakerStack
--template-body file://NlqEcsSageMakerStack.yaml
--capabilities CAPABILITY_NAMED_IAM
Opsi 2: Batuan Dasar Amazon
aws cloudformation create-stack
--stack-name NlqEcsBedrockStack
--template-body file://NlqEcsBedrockStack.yaml
--capabilities CAPABILITY_NAMED_IAM
Opsi 3: API OpenAI
aws cloudformation create-stack
--stack-name NlqEcsOpenAIStack
--template-body file://NlqEcsOpenAIStack.yaml
--capabilities CAPABILITY_NAMED_IAM
Anda dapat mengganti JumpStart Foundation Model google/flan-t5-xxl-fp16
default, yang diterapkan menggunakan file template NlqSageMakerEndpointStack.yaml
CloudFormation. Anda harus terlebih dahulu mengubah parameter model di file NlqSageMakerEndpointStack.yaml
dan memperbarui tumpukan CloudFormation yang diterapkan, NlqSageMakerEndpointStack
. Selain itu, Anda perlu melakukan penyesuaian pada Aplikasi NLQ, app_sagemaker.py
, dengan memodifikasi Kelas ContentHandler
agar sesuai dengan payload respons model yang dipilih. Kemudian, bangun kembali Amazon ECR Docker Image, tambahkan versinya, misalnya nlq-genai-2.0.1-sm
, menggunakan Dockerfile_SageMaker
Dockerfile dan dorong ke repositori Amazon ECR. Terakhir, Anda perlu memperbarui tugas dan layanan ECS yang diterapkan, yang merupakan bagian dari tumpukan NlqEcsSageMakerStack
CloudFormation.
Untuk beralih dari Model Fondasi Amazon Titan Text G1 - Express ( amazon.titan-text-express-v1
) default solusi, Anda perlu memodifikasi dan menerapkan file templat CloudFormation NlqEcsBedrockStack.yaml
. Selain itu, Anda perlu memodifikasi Aplikasi NLQ, app_bedrock.py
Kemudian, buat kembali Gambar Docker Amazon ECR menggunakan Dockerfile_Bedrock
Dockerfile dan dorong gambar yang dihasilkan, misalnya nlq-genai-2.0.1-bedrock
, ke repositori Amazon ECR . Terakhir, Anda perlu memperbarui tugas dan layanan ECS yang diterapkan, yang merupakan bagian dari tumpukan NlqEcsBedrockStack
CloudFormation.
Beralih dari API OpenAI default solusi ke API penyedia model pihak ketiga lainnya, seperti Cohere atau Anthropic, juga mudah dilakukan. Untuk memanfaatkan model OpenAI, Anda harus terlebih dahulu membuat akun OpenAI dan mendapatkan kunci API pribadi Anda. Selanjutnya, modifikasi dan bangun kembali Amazon ECR Docker Image menggunakan Dockerfile_OpenAI
Dockerfile dan dorong image yang dihasilkan, misalnya nlq-genai-2.0.1-oai
, ke repositori Amazon ECR. Terakhir, ubah dan terapkan ulang file templat CloudFormation NlqEcsOpenAIStack.yaml
.
Lihat KONTRIBUSI untuk informasi lebih lanjut.
Perpustakaan ini dilisensikan di bawah Lisensi MIT-0. Lihat file LISENSI.