ابدأ العمل بسرعة باستخدام تطبيق الدردشة المدعم بالذكاء الاصطناعي على AWS والذي يوفر أساسًا يمكن البناء عليه.
مثال على روبوت دردشة بسيط وقابل للتطوير وجاهز للمؤسسات والذي ينفذ نمط الجيل المعزز للاسترجاع (RAG) دون الاعتماد على أي أطر/مكتبات بايثون. ويستخدم قواعد معارف Bedrock لاستيعاب المستندات في حاوية S3 وتخزين المتجهات المفهرسة في قاعدة بيانات Postgres المستضافة في Aurora Serverless. تعمل قاعدة البيانات هذه أيضًا كقاعدة بيانات للتطبيقات لتخزين المعلومات مثل سجل محادثات المستخدم. يطبق التطبيق كلاً من واجهة المستخدم الرسومية على الويب بالإضافة إلى واجهة برمجة التطبيقات HTTP JSON ويتم استضافته كحاوية تعمل على ECS Fargate في مواجهة ALB. تم إنشاء التطبيق باستخدام Flask وHTMX.
اتبع العملية المكونة من 6 خطوات أدناه لنشر هذا الحل في حساب AWS الخاص بك.
تصدير متغيرات البيئة المطلوبة.
export AWS_REGION= $( aws configure get region || echo " us-east-1 " )
export ACCOUNT= $( aws sts get-caller-identity --query Account --output text )
export BUCKET=tf-state- ${ACCOUNT}
اختياريًا، قم بإنشاء حاوية s3 لتخزين حالة التضاريس (يوصى بهذا لأنه سيتم تخزين كلمة مرور قاعدة البيانات الأولية في الحالة). إذا كان لديك بالفعل حاوية s3، فيمكنك تحديث متغير BUCKET
باسم الحاوية الخاصة بك (على سبيل المثال، export BUCKET=my-s3-bucket
).
aws s3 mb s3:// ${BUCKET}
قم بتعيين معلمات إدخال القالب، مثل name
التطبيق في terraform.tfvars
.
cd iac
cat << EOF > terraform.tfvars
name = "ai-chatbot"
tags = {
app = "ai-chatbot"
}
EOF
النشر باستخدام terraform.
terraform init -backend-config= " bucket= ${BUCKET} " -backend-config= " key=ai-chatbot.tfstate "
terraform apply
الآن بعد أن تم نشر البنية الأساسية، يمكنك إنشاء حاوية التطبيق ونشرها فوق البنية الأساسية.
إذا قمت بتغيير اسم التطبيق من ai-chatbot
إلى شيء آخر، فستحتاج إلى تمرير ذلك إلى أمر make باستخدام معلمة app
(أو قم بتغييره في الجزء العلوي من Makefile
).
قبل النشر، يجب أن تفكر في تغيير النظام ومطالبات المستخدم لتتوافق مع متطلباتك المحددة.
في المرة الأولى التي تقوم فيها بالنشر، يمكنك تشغيل ما يلي لإنشاء الصورة الأساسية وصورة التطبيق معًا.
cd ../
make baseimage && make deploy
بعد النشر الأولي، يمكنك تكرار تغييرات التعليمات البرمجية بشكل أسرع عن طريق إعادة بناء طبقات التعليمات البرمجية وإعادة النشر فقط.
make deploy
# OR
# make deploy app=my-cool-chatbot
cd iac
export DOCS_BUCKET= $( terraform output -raw s3_bucket_name )
aws s3 cp /path/to/docs/ s3:// ${DOCS_BUCKET} / --recursive
cd iac
make sync
لاحظ أن هذا البرنامج النصي يستدعي واجهة برمجة bedrock-agent start-ingestion-job
. يجب إكمال هذه المهمة بنجاح قبل أن يتمكن برنامج الدردشة الآلي من الإجابة على الأسئلة المتعلقة بمستنداتك.
open $( terraform output -raw endpoint )
بالإضافة إلى واجهة المستخدم الرسومية HTMX البسيطة، هناك واجهة برمجة التطبيقات HTTP JSON التي تدعم الإجراءات التالية.
export endpoint= $( terraform output -raw endpoint )
اطرح سؤالاً واحصل على إجابة.
curl -s -X POST -H " Content-Type: application/json " $endpoint /api/ask
-d ' { "question": "Who are you?" } ' | jq
{
"answer" : " ... " ,
"conversationId" : " 46ac5045-49b4-487c-b3a0-64d82462ad76 "
}
لطرح سؤال متابعة كجزء من محادثة، قم بتضمين معرف المحادثة في عنوان URL.
curl -s -X POST -H " Content-Type: application/json " $endpoint /api/ask/46ac5045-49b4-487c-b3a0-64d82462ad76 -d ' { "question": What are you capable of?" } ' | jq
{
"answer" : " ... " ,
"conversationId" : " 46ac5045-49b4-487c-b3a0-64d82462ad76 "
}
قم بإرجاع آخر 10 محادثات
curl -s $endpoint /api/conversations | jq
[
{
"conversationId" : " d61e143c-a32d-4b4f-aa4e-a0fe94082e77 " ,
"created" : " 2024-04-10T22:04:36.813819+00:00 " ,
"questions" : [
{
"a" : " ... " ,
"created" : " 2024-04-10 22:04:40.657402+00:00 " ,
"q" : " ... "
}
],
"userId" : " 1 "
},
{
"conversationId" : " aaddc6aa-7c51-4b0a-800d-53e72b05524f " ,
"created" : " 2024-04-10T22:01:16.071982+00:00 " ,
"questions" : [
{
"a" : " ... " ,
"created" : " 2024-04-10 22:01:18.500971+00:00 " ,
"q" : " ... "
},
{
"a" : " ... " ,
"created" : " 2024-04-10 22:01:27.328482+00:00 " ,
"q" : " ... "
}
],
"userId" : " 1 "
}
]
إرجاع معلومات حول المحادثة المحددة
curl -s $endpoint /api/conversations/d61e143c-a32d-4b4f-aa4e-a0fe94082e77 | jq
{
"conversationId" : " d61e143c-a32d-4b4f-aa4e-a0fe94082e77 " ,
"created" : " 2024-04-10T22:04:36.813819+00:00 " ,
"questions" : [
{
"a" : " ... " ,
"created" : " 2024-04-10 22:04:40.657402+00:00 " ,
"q" : " ... "
}
],
"userId" : " 1 "
}
إرجاع آخر 10 محادثات للمستخدم
curl -s $endpoint /api/conversations/users/1 | jq
[
{
"conversationId" : " d61e143c-a32d-4b4f-aa4e-a0fe94082e77 " ,
"created" : " 2024-04-10T22:04:36.813819+00:00 " ,
"questions" : [
{
"a" : " ... " ,
"created" : " 2024-04-10 22:04:40.657402+00:00 " ,
"q" : " ... "
}
],
"userId" : " 1 "
},
{
"conversationId" : " aaddc6aa-7c51-4b0a-800d-53e72b05524f " ,
"created" : " 2024-04-10T22:01:16.071982+00:00 " ,
"questions" : [
{
"a" : " ... " ,
"created" : " 2024-04-10 22:01:18.500971+00:00 " ,
"q" : " ... "
},
{
"a" : " ... " ,
"created" : " 2024-04-10 22:01:27.328482+00:00 " ,
"q" : " ... "
}
],
"userId" : " 1 "
}
]
Choose a make command to run
init run this once to initialize a new python project
install install project dependencies
start run local project
baseimage build base image
deploy build and deploy container
up run the app locally using docker compose
down stop the app
start-docker run local project using docker compose
لتشغيل التطبيق محليًا، قم بإنشاء ملف محلي باسم .env
بالمتغيرات التالية. يأتي المتغير KNOWLEDGE_BASE_ID
من مخرج Terraform ( cd iac && terraform output
).
POSTGRES_DB=postgres
POSTGRES_USER=postgres
POSTGRES_PASSWORD=xyz
KNOWLEDGE_BASE_ID=
بعد إعداد ملف .env
، يمكنك تشغيل التطبيق محليًا في docker لتكرار تغييرات التعليمات البرمجية قبل النشر على AWS. عند تشغيل التطبيق محليًا، فإنه يتحدث إلى قاعدة بيانات postgres محلية ويستخدم واجهة برمجة تطبيقات Amazon Bedrock Knowledge Base عن بعد. تأكد من أن لديك بيانات اعتماد AWS صالحة. سيؤدي تشغيل أمر make up
إلى بدء تشغيل مثيل قاعدة بيانات postgres وحاوية الويب.
make up
لإيقاف البيئة، قم ببساطة بتشغيل:
make down