يحتوي حل AWS هذا على عرض توضيحي للذكاء الاصطناعي التوليدي، وعلى وجه التحديد، استخدام استعلام اللغة الطبيعية (NLQ) لطرح أسئلة حول قاعدة بيانات Amazon RDS for PostgreSQL. يقدم هذا الحل ثلاثة خيارات معمارية لنماذج الأساس: 1. Amazon SageMaker JumpStart، 2. Amazon Bedrock، و3. OpenAI API. يستخدم تطبيق العرض التوضيحي المستند إلى الويب، والذي يعمل على Amazon ECS على AWS Fargate، مزيجًا من LangChain وStreamlit وChroma وHuggingFace SentenceTransformers. يقبل التطبيق أسئلة اللغة الطبيعية من المستخدمين النهائيين ويعيد إجابات اللغة الطبيعية، إلى جانب استعلام SQL المرتبط ومجموعة النتائج المتوافقة مع Pandas DataFrame.
يلعب اختيار النموذج الأساسي (FM) للاستعلام باللغة الطبيعية (NLQ) دورًا حاسمًا في قدرة التطبيق على ترجمة أسئلة اللغة الطبيعية بدقة إلى إجابات باللغة الطبيعية. ليست كل FMs قادرة على أداء NLQ. بالإضافة إلى اختيار النموذج، تعتمد دقة NLQ أيضًا بشكل كبير على عوامل مثل جودة الموجه، ونموذج الموجه، وعينات الاستعلامات المصنفة المستخدمة للتعلم في السياق ( ويعرف أيضًا باسم المطالبات القليلة اللقطات )، واصطلاحات التسمية المستخدمة لمخطط قاعدة البيانات ، كل من الجداول والأعمدة.
تم اختبار تطبيق NLQ على مجموعة متنوعة من FMs مفتوحة المصدر والتجارية. كخط أساس، توفر نماذج سلسلة المحولات التوليدية المدربة مسبقًا 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
(إصدار تنسيق الفاصلة العائمة بنصف الدقة (FP16) للنموذج الكامل)، من خلال Amazon SageMaker JumpStart. على الرغم من أن سلسلة نماذج google/flan-t5
تعد خيارًا شائعًا لبناء تطبيقات الذكاء الاصطناعي التوليدي، إلا أن قدراتها على NLQ محدودة مقارنة بالنماذج التجارية والمفتوحة المصدر الأحدث. google/flan-t5-xxl-fp16
الخاص بالعرض التوضيحي قادر على الإجابة على استفسارات اللغة الطبيعية الأساسية من خلال التعلم الكافي في السياق. ومع ذلك، فقد فشل غالبًا أثناء الاختبار في إرجاع إجابة أو تقديم إجابات صحيحة، وكثيرًا ما تسبب في انتهاء مهلة نقطة النهاية لنموذج SageMaker بسبب استنفاد الموارد عند مواجهة استعلامات متوسطة إلى معقدة.
يستخدم هذا الحل نسخة محسنة من NLQ من قاعدة البيانات مفتوحة المصدر، مجموعة متحف الفن الحديث (MoMA)، المتوفرة على GitHub. تحتوي قاعدة بيانات MoMA على أكثر من 121000 قطعة فنية و15000 فنان. يحتوي مستودع المشروع هذا على ملفات نصية مفصولة بشقوق يمكن استيرادها بسهولة إلى مثيل قاعدة بيانات Amazon RDS لـ PostgreSQL.
باستخدام مجموعة بيانات MoMA، يمكننا طرح أسئلة باللغة الطبيعية بمستويات مختلفة من التعقيد:
مرة أخرى، تعتمد قدرة تطبيق NLQ على إرجاع إجابة وإرجاع إجابة دقيقة بشكل أساسي على اختيار النموذج. ليست كل النماذج قادرة على إجراء NLQ، في حين أن النماذج الأخرى لن تقدم إجابات دقيقة. يمكن أن يساعد تحسين المطالبات المذكورة أعلاه لنماذج محددة في تحسين الدقة.
ml.g5.24xlarge
لـ google/flan-t5-xxl-fp16
نموذج google/flan-t5-xxl-fp16
). راجع وثائق النموذج لاختيار أنواع المثيلات.NlqMainStack
CloudFormation. يرجى ملاحظة أنه سيتعين عليك استخدام Amazon ECS واحدًا على الأقل في حسابك، وإلا فلن يكون الدور المرتبط بخدمة AWSServiceRoleForECS
موجودًا بعد وستفشل الحزمة. تحقق من الدور المرتبط بخدمة AWSServiceRoleForECS
قبل نشر مكدس NlqMainStack
. يتم إنشاء هذا الدور تلقائيًا في المرة الأولى التي تقوم فيها بإنشاء مجموعة ECS في حسابك.nlq-genai:2.0.0-sm
Docker ودفعها إلى مستودع Amazon ECR الجديد. بدلاً من ذلك، قم بإنشاء صورة nlq-genai:2.0.0-bedrock
أو nlq-genai:2.0.0-oai
Docker ودفعها للاستخدام مع الخيار 2: Amazon Bedrock أو الخيار 3: OpenAI API.nlqapp
إلى قاعدة بيانات MoMA.NlqSageMakerEndpointStack
CloudFormation.NlqEcsSageMakerStack
CloudFormation. بدلاً من ذلك، قم بنشر قالب NlqEcsBedrockStack
CloudFormation للاستخدام مع الخيار 2: Amazon Bedrock أو قالب NlqEcsOpenAIStack
للاستخدام مع الخيار 3: OpenAI API. بالنسبة للخيار 1: Amazon SageMaker JumpStart، تأكد من أن لديك مثيل EC2 المطلوب لاستنتاج نقطة نهاية Amazon SageMaker JumpStart أو اطلبه باستخدام Service Quotas في وحدة الإدارة في AWS (على سبيل المثال، ml.g5.24xlarge
لـ google/flan-t5-xxl-fp16
نموذج 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: أمازون بيدروك
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)
)
5 ج. قم بفك ضغط ملفي البيانات واستيرادهما إلى قاعدة بيانات 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: أمازون بيدروك
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
يمكنك استبدال نموذج google/flan-t5-xxl-fp16
JumpStart Foundation الافتراضي، والذي تم نشره باستخدام ملف قالب NlqSageMakerEndpointStack.yaml
CloudFormation. ستحتاج أولاً إلى تعديل معلمات النموذج في ملف NlqSageMakerEndpointStack.yaml
وتحديث مكدس CloudFormation المنشور، NlqSageMakerEndpointStack
. بالإضافة إلى ذلك، ستحتاج إلى إجراء تعديلات على تطبيق NLQ، app_sagemaker.py
، وتعديل فئة ContentHandler
لمطابقة حمولة الاستجابة للنموذج المختار. بعد ذلك، قم بإعادة إنشاء صورة Amazon ECR Docker، مع زيادة الإصدار، على سبيل المثال، 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 باستخدام Dockerfile_Bedrock
Dockerfile ودفع الصورة الناتجة، على سبيل المثال، nlq-genai-2.0.1-bedrock
، إلى مستودع Amazon ECR . وأخيرًا، ستحتاج إلى تحديث مهمة وخدمة ECS المنشورة، والتي تعد جزءًا من مكدس NlqEcsBedrockStack
CloudFormation.
يعد التبديل من واجهة برمجة تطبيقات OpenAI الافتراضية للحل إلى واجهة برمجة تطبيقات موفر نموذج جهة خارجية أخرى، مثل Cohere أو Anthropic، أمرًا مباشرًا بالمثل. للاستفادة من نماذج OpenAI، ستحتاج أولاً إلى إنشاء حساب OpenAI والحصول على مفتاح API الشخصي الخاص بك. بعد ذلك، قم بتعديل وإعادة بناء صورة Amazon ECR Docker باستخدام Dockerfile_OpenAI
Dockerfile وادفع الصورة الناتجة، على سبيل المثال، nlq-genai-2.0.1-oai
، إلى مستودع Amazon ECR. وأخيرًا، قم بتعديل وإعادة نشر ملف قالب NlqEcsOpenAIStack.yaml
CloudFormation.
انظر المساهمة لمزيد من المعلومات.
هذه المكتبة مرخصة بموجب ترخيص MIT-0. انظر ملف الترخيص.