إنشاء تطبيق دردشة مستند إلى النماذج اللغوية الكبيرة وRAG باستخدام قواعد بيانات Cloud SQL وLangChain

1. مقدمة

ستتعلّم في هذا الدرس التطبيقي حول الترميز كيفية نشر "خدمة استرجاع قواعد بيانات الذكاء الاصطناعي التوليدي" وإنشاء نموذج تطبيق تفاعلي باستخدام البيئة المنشورة.

8727a44c8c402834.png

يمكنك الحصول على مزيد من المعلومات حول خدمة استرداد الذكاء الاصطناعي التوليدي والتطبيق النموذجي هنا.

المتطلبات الأساسية

  • فهم أساسي لخدمة Google Cloud Console
  • المهارات الأساسية في واجهة سطر الأوامر وGoogle Cloud Shell

المعلومات التي ستطّلع عليها

  • كيفية إنشاء مثيل Cloud SQL
  • كيفية الاتصال بالمثيل
  • كيفية إعداد خدمة استرجاع قواعد بيانات الذكاء الاصطناعي التوليدي ونشرها
  • كيفية نشر تطبيق نموذجي باستخدام الخدمة المنشورة

المتطلبات

  • حساب على Google Cloud ومشروع على Google Cloud
  • متصفّح ويب، مثل Chrome

2. الإعداد والمتطلبات

إعداد بيئة ذاتية

  1. سجِّل الدخول إلى Google Cloud Console وأنشئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي سلسلة أحرف لا تستخدمها Google APIs. ويمكنك تعديلها في أي وقت.
  • يكون رقم تعريف المشروع فريدًا في جميع مشاريع Google Cloud وغير قابل للتغيير (لا يمكن تغييره بعد تحديده). تنشئ Cloud Console سلسلة فريدة تلقائيًا. فعادةً لا تهتم بما هو. في معظم الدروس التطبيقية حول الترميز، يجب الإشارة إلى رقم تعريف المشروع (الذي يتم تحديده عادةً على أنّه PROJECT_ID). وإذا لم يعجبك رقم التعريف الذي تم إنشاؤه، يمكنك إنشاء رقم تعريف عشوائي آخر. ويمكنك بدلاً من ذلك تجربة طلبك الخاص ومعرفة ما إذا كان متاحًا. ولا يمكن تغييره بعد هذه الخطوة ويبقى طوال مدة المشروع.
  • لمعلوماتك، هناك قيمة ثالثة، وهي رقم المشروع، الذي تستخدمه بعض واجهات برمجة التطبيقات. اطّلِع على مزيد من المعلومات حول هذه القيم الثلاث في المستندات.
  1. بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام الموارد/واجهات برمجة التطبيقات في Cloud. لن يؤدي إكمال هذا الدرس التطبيقي حول الترميز إلى فرض أي تكاليف، إن وُجدت. لإيقاف تشغيل الموارد لتجنب تحمُّل الفواتير إلى ما هو أبعد من هذا البرنامج التعليمي، يمكنك حذف الموارد التي أنشأتها أو حذف المشروع. يكون مستخدمو Google Cloud الجدد مؤهَّلون للانضمام إلى برنامج فترة تجريبية مجانية بقيمة 300 دولار أمريكي.

بدء Cloud Shell

مع أنّه يمكن إدارة Google Cloud عن بُعد من الكمبيوتر المحمول، ستستخدم في هذا الدرس التطبيقي Google Cloud Shell، وهي بيئة سطر أوامر يتم تشغيلها في السحابة الإلكترونية.

من Google Cloud Console، انقر على رمز Cloud Shell في شريط الأدوات العلوي الأيسر:

55efc1aaa7a4d3ad.png

من المفترَض أن تستغرق عملية إدارة الحسابات والاتصال بالبيئة بضع لحظات فقط. عند الانتهاء، من المفترض أن يظهر لك شيء مثل هذا:

7ffe5cbb04455448.png

يتم تحميل هذه الآلة الافتراضية مزوّدة بكل أدوات التطوير التي ستحتاج إليها. وتوفّر هذه الشبكة دليلاً رئيسيًا دائمًا بسعة 5 غيغابايت وتعمل على Google Cloud، ما يحسّن بشكل كبير من أداء الشبكة والمصادقة. يمكنك تنفيذ جميع أعمالك في هذا الدرس التطبيقي حول الترميز من خلال متصفّح. لا تحتاج إلى تثبيت أي تطبيقات.

3- قبل البدء

تفعيل واجهة برمجة التطبيقات

داخل Cloud Shell، تأكَّد من إعداد رقم تعريف مشروعك:

عادةً ما يظهر معرّف المشروع بين قوسين في موجه الأوامر في هيكل السحابة الإلكترونية كما يظهر في الصورة:

fa6ee779963405d5.png

gcloud config set project [YOUR-PROJECT-ID]

بعد ذلك، اضبط متغيّر بيئة PROJECT_ID على رقم تعريف مشروع Google Cloud الخاص بك:

PROJECT_ID=$(gcloud config get-value project)

تفعيل جميع الخدمات اللازمة:

gcloud services enable sqladmin.googleapis.com \
                       compute.googleapis.com \
                       cloudresourcemanager.googleapis.com \
                       servicenetworking.googleapis.com \
                       vpcaccess.googleapis.com \
                       aiplatform.googleapis.com \
                       cloudbuild.googleapis.com \
                       artifactregistry.googleapis.com \
                       run.googleapis.com \
                       iam.googleapis.com

الناتج المتوقّع لوحدة التحكّم:

student@cloudshell:~ (gleb-test-short-004)$ gcloud services enable sqladmin.googleapis.com \
                       compute.googleapis.com \
                       cloudresourcemanager.googleapis.com \
                       servicenetworking.googleapis.com \
                       vpcaccess.googleapis.com \
                       aiplatform.googleapis.com \
                       cloudbuild.googleapis.com \
                       artifactregistry.googleapis.com \
                       run.googleapis.com \
                       iam.googleapis.com
Operation "operations/acf.p2-404051529011-664c71ad-cb2b-4ab4-86c1-1f3157d70ba1" finished successfully.

4. إنشاء مثيل Cloud SQL

إنشاء مثيل Cloud SQL مع تفعيل دعم المتجه.

إنشاء كلمة مرور

تحديد كلمة المرور لمستخدم قاعدة البيانات التلقائي يمكنك تحديد كلمة المرور الخاصة بك أو استخدام دالة عشوائية لإنشاء كلمة مرور

export CLOUDSQL_PASSWORD=`openssl rand -hex 12`

دوِّن القيمة التي تم إنشاؤها لكلمة المرور.

echo $CLOUDSQL_PASSWORD

MySQL

يمكنك تفعيل علامة cloudsql_vector عند إنشاء مثيل. في الوقت الحالي، يتوفر دعم المتجه في MySQL 8.0.36 8.0.37.

export region=us-central1
gcloud sql instances create my-cloudsql-instance --region=$region --database-version=MYSQL_8_0_36 --database-flags=cloudsql_vector=ON --root-password=$CLOUDSQL_PASSWORD

الناتج المتوقّع لوحدة التحكّم (تم إخفاء عنوان IP):

student@cloudshell:~ export region=us-central1
gcloud sql instances create my-cloudsql-instance --region=$region --database-version=MYSQL_8_0_36 --database-flags=cloudsql_vector=ON --root-password=$CLOUDSQL_PASSWORD
Creating Cloud SQL instance for MYSQL_8_0_36...done.                                                                                                                                 
Created [https://sqladmin.googleapis.com/sql/v1beta4/projects/test-project-402417/instances/my-cloudsql-instance].
NAME                   DATABASE_VERSION  LOCATION       TIER             PRIMARY_ADDRESS  PRIVATE_ADDRESS  STATUS
my-cloudsql-instance  MYSQL_8_0_36      us-central1-a  db-n1-standard-1  00.000.00.00   -                RUNNABLE

PostgreSQL

تتوفر إضافة pgect في الإصدارات >= 11.

export region=us-central1
gcloud sql instances create my-cloudsql-instance --region=$region --database-version=POSTGRES_15 --tier=db-g1-small

الناتج المتوقّع لوحدة التحكّم (تم إخفاء عنوان IP):

student@cloudshell:~ export region=us-central1
gcloud sql instances create my-cloudsql-instance --region=$region --database-version=POSTGRES_15 --tier=db-g1-small
Creating Cloud SQL instance for POSTGRES_15...done.                                                                                                                                  
Created [https://sqladmin.googleapis.com/sql/v1beta4/projects/test-project-402417/instances/my-cloudsql-instance].
NAME                   DATABASE_VERSION  LOCATION       TIER         PRIMARY_ADDRESS  PRIVATE_ADDRESS  STATUS
my-cloudsql-instance  POSTGRES_15       us-central1-a  db-g1-small  00.000.00.00     -                RUNNABLE

بعد إنشاء المثيل، نحتاج إلى تحديد كلمة مرور للمستخدم الافتراضي في المثيل والتحقق مما إذا كان بإمكاننا الاتصال بكلمة المرور. أدخِل كلمة المرور في الإشعار عندما يكون الجهاز جاهزًا للاتصال.

gcloud sql users set-password postgres \
    --instance=my-cloudsql-instance \
    --password=$CLOUDSQL_PASSWORD
gcloud sql connect my-cloudsql-instance --user=postgres

الناتج المتوقّع لوحدة التحكّم:

student@cloudshell:~ (test-project-402417)$ gcloud sql users set-password postgres \
    --instance=my-cloudsql-instance \
    --password=$CLOUDSQL_PASSWORD
gcloud sql connect my-cloudsql-instance --user=postgres
Updating Cloud SQL user...done.                                                                                                                                                                                                                                            
Allowlisting your IP for incoming connection for 5 minutes...done.                                                                                                                                                                                                         
Connecting to database with SQL user [postgres].Password: 
psql (16.3 (Ubuntu 16.3-1.pgdg22.04+1), server 15.7)
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
Type "help" for help.

postgres=>

الخروج من جلسة psql:

exit

5- إعداد جهاز GCE الافتراضي

إنشاء حساب الخدمة

بما أنّنا سنستخدم الجهاز الافتراضي الخاص بنا لنشر خدمة استرجاع قواعد بيانات الذكاء الاصطناعي التوليدي واستضافة نموذج تطبيق، تتمثل الخطوة الأولى في إنشاء حساب خدمة Google (GSA). سيتم استخدام جهاز GCE من خلال جهاز GCE الافتراضي، وسنحتاج إلى منحه الامتيازات اللازمة للعمل مع الخدمات الأخرى.

في Cloud Shell، نفِّذ ما يلي:

PROJECT_ID=$(gcloud config get-value project)
gcloud iam service-accounts create compute-aip --project $PROJECT_ID
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/cloudbuild.builds.editor"
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/artifactregistry.admin"
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/storage.admin"
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/run.admin"
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/iam.serviceAccountUser"
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/cloudsql.viewer"
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/cloudsql.client"
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/aiplatform.user"

تفعيل جهاز GCE افتراضي

يمكنك إنشاء جهاز GCE افتراضي في المنطقة وسحابة VPC نفسيهما مثل مثيل Cloud SQL.

نفِّذ ما يلي في Cloud Shell:

export ZONE=us-central1-a
gcloud compute instances create instance-1 \
    --zone=$ZONE \
    --create-disk=auto-delete=yes,boot=yes,image=projects/debian-cloud/global/images/$(gcloud compute images list --filter="family=debian-12 AND family!=debian-12-arm64" --format="value(name)") \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
  --service-account=compute-aip@$PROJECT_ID.iam.gserviceaccount.com

الناتج المتوقّع لوحدة التحكّم:

student@cloudshell:~ (test-project-402417)$ export ZONE=us-central1-a
student@cloudshell:~ (test-project-402417)$ export ZONE=us-central1-a
gcloud compute instances create instance-1 \
    --zone=$ZONE \
    --create-disk=auto-delete=yes,boot=yes,image=projects/debian-cloud/global/images/$(gcloud compute images list --filter="family=debian-12 AND family!=debian-12-arm64" --format="value(name)") \
    --scopes=https://www.googleapis.com/auth/cloud-platform

Created [https://www.googleapis.com/compute/v1/projects/test-project-402417/zones/us-central1-a/instances/instance-1].
NAME: instance-1
ZONE: us-central1-a
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE: 
INTERNAL_IP: 10.128.0.2
EXTERNAL_IP: 34.71.192.233
STATUS: RUNNING

تفويض الجهاز الافتراضي للاتصال بخدمة Cloud SQL

نحتاج إلى إضافة عنوان IP علني للجهاز الافتراضي إلى قائمة الشبكات المسموح بها لمثيل Cloud SQL الخاص بنا. نفِّذ ما يلي في Cloud Shell:

VM_EXTERNAL_IP=$(gcloud compute instances describe instance-1 --zone=us-central1-a --format='get(networkInterfaces[0].accessConfigs[0].natIP)')
gcloud sql instances patch my-cloudsql-instance --authorized-networks=$VM_EXTERNAL_IP

الناتج المتوقّع لوحدة التحكّم:

student@cloudshell:~ (test-project-402417)$ export ZONE=us-central1-a
student@cloudshell:~ (test-project-402417)$ VM_EXTERNAL_IP=$(gcloud compute instances describe instance-1 --zone=us-central1-a --format='get(networkInterfaces[0].accessConfigs[0].natIP)')
gcloud sql instances patch my-cloudsql-instance --authorized-networks=$VM_EXTERNAL_IP
When adding a new IP address to authorized networks, make sure to also include any IP addresses that have already been authorized. Otherwise, they will be overwritten and de-authorized.

Do you want to continue (Y/n)?  Y

The following message will be used for the patch API method.
{"name": "my-cloudsql-instance", "project": "test-project-402417", "settings": {"ipConfiguration": {"authorizedNetworks": [{"value": "34.71.252.173"}]}}}
Patching Cloud SQL instance...done.                                                                                                                                                                                     
Updated [https://sqladmin.googleapis.com/sql/v1beta4/projects/test-project-402417/instances/my-cloudsql-instance].

تثبيت برنامج قاعدة البيانات

MySQL

ثبِّت برنامج عميل MySQL على الجهاز الافتراضي (VM) الذي تم نشره.

الاتصال بالجهاز الافتراضي:

gcloud compute ssh instance-1 --zone=us-central1-a

الناتج المتوقّع لوحدة التحكّم:

student@cloudshell:~ (test-project-402417)$ gcloud compute ssh instance-1 --zone=us-central1-a
Updating project ssh metadata...working..Updated [https://www.googleapis.com/compute/v1/projects/test-project-402417].                                                                                                                                                         
Updating project ssh metadata...done.                                                                                                                                                                                                                                              
Waiting for SSH key to propagate.
Warning: Permanently added 'compute.5110295539541121102' (ECDSA) to the list of known hosts.
Linux instance-1 5.10.0-26-cloud-amd64 #1 SMP Debian 5.10.197-1 (2023-09-29) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
student@instance-1:~$ 

ثبِّت البرنامج الذي يشغِّل الأمر داخل الجهاز الافتراضي (VM):

sudo apt-get update
sudo apt-get install --yes default-mysql-client

الناتج المتوقّع لوحدة التحكّم:

student@instance-1:~$ sudo apt-get update
sudo apt-get install --yes mysql-client
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  libconfig-inifiles-perl libdbd-mariadb-perl libdbi-perl libgdbm-compat4 libperl5.32 libterm-readkey-perl mariadb-client-10.5 mariadb-client-core-10.5 perl perl-modules-5.32
Suggested packages:
  libclone-perl libmldbm-perl libnet-daemon-perl libsql-statement-perl perl-doc libterm-readline-gnu-perl | libterm-readline-perl-perl make libtap-harness-archive-perl
The following NEW packages will be installed:
  default-mysql-client libconfig-inifiles-perl libdbd-mariadb-perl libdbi-perl libgdbm-compat4 libperl5.32 libterm-readkey-perl mariadb-client-10.5 mariadb-client-core-10.5 perl
  Perl-modules-5.32
...redacted...
Processing triggers for libc-bin (2.31-13+deb11u10) ...

PostgreSQL

ثبِّت برنامج عميل PostgreSQL على الجهاز الافتراضي الذي تم نشره.

الاتصال بالجهاز الافتراضي:

gcloud compute ssh instance-1 --zone=us-central1-a

الناتج المتوقّع لوحدة التحكّم:

student@cloudshell:~ (test-project-402417)$ gcloud compute ssh instance-1 --zone=us-central1-a
Updating project ssh metadata...working..Updated [https://www.googleapis.com/compute/v1/projects/test-project-402417].                                                                                                                                                         
Updating project ssh metadata...done.                                                                                                                                                                                                                                              
Waiting for SSH key to propagate.
Warning: Permanently added 'compute.5110295539541121102' (ECDSA) to the list of known hosts.
Linux instance-1 5.10.0-26-cloud-amd64 #1 SMP Debian 5.10.197-1 (2023-09-29) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
student@instance-1:~$ 

ثبِّت البرنامج الذي يشغِّل الأمر داخل الجهاز الافتراضي (VM):

sudo apt-get update
sudo apt-get install --yes postgresql-client

الناتج المتوقّع لوحدة التحكّم:

student@instance-1:~$ sudo apt-get update
sudo apt-get install --yes postgresql-client
Get:1 file:/etc/apt/mirrors/debian.list Mirrorlist [30 B]
Get:4 file:/etc/apt/mirrors/debian-security.list Mirrorlist [39 B]
Hit:7 https://packages.cloud.google.com/apt google-compute-engine-bookworm-stable InRelease
Get:8 https://packages.cloud.google.com/apt cloud-sdk-bookworm InRelease [1652 B]
Get:2 https://deb.debian.org/debian bookworm InRelease [151 kB]
Get:3 https://deb.debian.org/debian bookworm-updates InRelease [55.4 kB]
...redacted...
update-alternatives: using /usr/share/postgresql/15/man/man1/psql.1.gz to provide /usr/share/man/man1/psql.1.gz (psql.1.gz) in auto mode
Setting up postgresql-client (15+248) ...
Processing triggers for man-db (2.11.2-2) ...
Processing triggers for libc-bin (2.36-9+deb12u7) ...

الاتصال بالمثيل

MySQL

يمكنك الاتصال بالمثيل الأساسي من الجهاز الافتراضي باستخدام MySQL.

انتقِل إلى جلسة بروتوكول النقل الآمن (SSH) المفتوحة إلى جهازك الافتراضي. إذا تم قطع الاتصال، يمكنك إعادة الاتصال باستخدام الأمر نفسه الموضح أعلاه.

استخدِم $CLOUDSQL_password المُشار إليه سابقًا واسم المثيل للاتصال بخدمة Cloud SQL من جهاز GCE الافتراضي:

export CLOUDSQL_PASSWORD=<Noted password>
export PROJECT_ID=$(gcloud config get-value project)
export REGION=us-central1
export INSTANCE_NAME=my-cloudsql-instance
export INSTANCE_IP=$(gcloud sql instances list --filter=name:$INSTANCE_NAME --format="value(PRIMARY_ADDRESS)")
mysql --host=$INSTANCE_IP --user=root --password=$CLOUDSQL_PASSWORD

الناتج المتوقّع لوحدة التحكّم:

student@instance-1:~$ export CLOUDSQL_PASSWORD=P9...
student@instance-1:~$ export REGION=us-central1
student@instance-1:~$ export INSTANCE_NAME=my-cloud-sql-instance
student@instance-1:~$ export INSTANCE_IP=$(gcloud sql instances list --filter=name:$INSTANCE_NAME --format="value(PRIMARY_ADDRESS)")
student@instance-1:~$ mysql  –host=$INSTANCE_IP –user=root –password=$CLOUDSQL_PASSWORD –sslmode=require 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 2824706
Server version: 8.0.36-google (Google)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]>

اخرج من جلسة MySQL للحفاظ على اتصال بروتوكول النقل الآمن (SSH):

exit

الناتج المتوقّع لوحدة التحكّم:

MySQL [(none)]> exit
Bye
student@instance-1:~$ 

PostgreSQL

يمكنك الاتصال بالمثيل الأساسي من الجهاز الافتراضي باستخدام psql.

انتقِل إلى جلسة بروتوكول النقل الآمن (SSH) المفتوحة إلى جهازك الافتراضي. إذا تم قطع الاتصال، يمكنك إعادة الاتصال باستخدام الأمر نفسه الموضح أعلاه.

استخدِم $CLOUDSQL_password المُشار إليه سابقًا واسم المثيل للاتصال بـ PostgreSQL من جهاز GCE الافتراضي:

export PGPASSWORD=<Noted password (CLOUDSQL_PASSWORD)>
export CLOUDSQL_PASSWORD=$PGPASSWORD
export PROJECT_ID=$(gcloud config get-value project)
export REGION=us-central1
export INSTANCE_NAME=my-cloudsql-instance
export INSTANCE_IP=$(gcloud sql instances list --filter=name:$INSTANCE_NAME --format="value(PRIMARY_ADDRESS)")
psql "host=$INSTANCE_IP user=postgres sslmode=require"

الناتج المتوقّع لوحدة التحكّم:

student@instance-1:~$ export CLOUDSQL_PASSWORD=P9...
student@instance-1:~$ export REGION=us-central1
student@instance-1:~$ export INSTANCE_IP=$(gcloud sql instances list --filter=name:$INSTANCE_NAME --format="value(PRIMARY_ADDRESS)")
student@instance-1:~$ psql "host=$INSTANCE_IP user=postgres sslmode=require"
psql (13.11 (Debian 13.11-0+deb11u1), server 14.7)
WARNING: psql major version 13, server major version 14.
         Some psql features might not work.
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
Type "help" for help.

postgres=> 

اخرج من جلسة psql للاحتفاظ باتصال SSH باستمرار:

exit

الناتج المتوقّع لوحدة التحكّم:

postgres=> exit
student@instance-1:~$ 

6- تهيئة قاعدة البيانات

سنستخدم الجهاز الافتراضي للعميل كمنصة لملء قاعدة بياناتنا بالبيانات واستضافة تطبيقنا. الخطوة الأولى هي إنشاء قاعدة بيانات وتعبئتها بالبيانات.

إنشاء قاعدة بيانات

MySQL

أنشئ قاعدة بيانات باسم "assistantdemo".

في جلسة GCE VM، نفِّذ ما يلي:

mysql --host=$INSTANCE_IP  --user=root --password=$CLOUDSQL_PASSWORD -e "CREATE DATABASE assistantdemo"

الناتج المتوقّع لوحدة التحكّم (بدون إخراج):

student@instance-1:~$ mysql --host=$INSTANCE_IP  --user=root --password=$CLOUDSQL_PASSWORD -e "CREATE DATABASE assistantdemo"
student@instance-1:~$  

PostgreSQL

أنشئ قاعدة بيانات باسم "assistantdemo".

في جلسة GCE VM، نفِّذ ما يلي:

psql "host=$INSTANCE_IP user=postgres" -c "CREATE DATABASE assistantdemo"  

الناتج المتوقّع لوحدة التحكّم:

student@instance-1:~$ psql "host=$INSTANCE_IP user=postgres" -c "CREATE DATABASE assistantdemo"
CREATE DATABASE
student@instance-1:~$  

تفعيل إضافة pgect.

psql "host=$INSTANCE_IP user=postgres dbname=assistantdemo" -c "CREATE EXTENSION vector"  

الناتج المتوقّع لوحدة التحكّم (بدون إخراج):

student@instance-1:~$ psql "host=$INSTANCE_IP user=postgres dbname=assistantdemo" -c "CREATE EXTENSION vector"
CREATE EXTENSION
student@instance-1:~$

إعداد بيئة Python

للمتابعة، سنستخدم نصوص Python البرمجية المعدّة من مستودع GitHub ولكن قبل القيام بذلك، نحتاج إلى تثبيت البرامج المطلوبة.

في GCE VM، التنفيذ:

sudo apt install -y python3.11-venv git
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip

الناتج المتوقّع لوحدة التحكّم:

student@instance-1:~$ sudo apt install -y python3.11-venv git
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  git-man liberror-perl patch python3-distutils python3-lib2to3 python3-pip-whl python3-setuptools-whl
Suggested packages:
  git-daemon-run | git-daemon-sysvinit git-doc git-email git-gui gitk gitweb git-cvs git-mediawiki git-svn ed diffutils-doc
The following NEW packages will be installed:
  git git-man liberror-perl patch python3-distutils python3-lib2to3 python3-pip-whl python3-setuptools-whl python3.11-venv
0 upgraded, 9 newly installed, 0 to remove and 2 not upgraded.
Need to get 12.4 MB of archives.
After this operation, 52.2 MB of additional disk space will be used.
Get:1 file:/etc/apt/mirrors/debian.list Mirrorlist [30 B]
...redacted...
Installing collected packages: pip
  Attempting uninstall: pip
    Found existing installation: pip 23.0.1
    Uninstalling pip-23.0.1:
      Successfully uninstalled pip-23.0.1
Successfully installed pip-24.0
(.venv) student@instance-1:~$

التحقق من إصدار Python.

في GCE VM، التنفيذ:

python -V

الناتج المتوقّع لوحدة التحكّم:

(.venv) student@instance-1:~$ python -V
Python 3.11.2
(.venv) student@instance-1:~$ 

إعداد ملف الإعداد

استنسِخ مستودع جيت هب باستخدام الرمز الخاص بخدمة الاسترجاع وعينة التطبيق.

في GCE VM، التنفيذ:

git clone https://github.com/GoogleCloudPlatform/genai-databases-retrieval-app.git

الناتج المتوقّع لوحدة التحكّم:

student@instance-1:~$ git clone https://github.com/GoogleCloudPlatform/genai-databases-retrieval-app.git
Cloning into 'genai-databases-retrieval-app'...
remote: Enumerating objects: 525, done.
remote: Counting objects: 100% (336/336), done.
remote: Compressing objects: 100% (201/201), done.
remote: Total 525 (delta 224), reused 179 (delta 135), pack-reused 189
Receiving objects: 100% (525/525), 46.58 MiB | 16.16 MiB/s, done.
Resolving deltas: 100% (289/289), done.

MySQL

في GCE VM، التنفيذ:

cd ~/genai-databases-retrieval-app/retrieval_service
cp example-config-cloudsql.yml config.yml
cp example-config-cloudsql.yml config.yml
sed -i s/engine/mysql/g config.yml
sed -i s/my-project/$PROJECT_ID/g config.yml
sed -i s/my-region/$REGION/g config.yml
sed -i s/my-instance/$INSTANCE_NAME/g config.yml
sed -i s/my-password//g config.yml
sed -i s/my_database/assistantdemo/g config.yml
sed -i s/my-user/root/g config.yml
cat config.yml

الناتج المتوقّع لوحدة التحكّم:

student@instance-1:~$ cd genai-databases-retrieval-app/retrieval_service
cp example-config-cloudsql.yml config.yml
sed -i s/127.0.0.1/$INSTANCE_IP/g config.yml
sed -i s/my-password/$CLOUDSQL_PASSWORD/g config.yml
sed -i s/my_database/assistantdemo/g config.yml
sed -i s/my-user/postgres/g config.yml
cat config.yml
host: 0.0.0.0
# port: 8080
datastore:
  # Example for MySQL
  kind: "cloudsql-mysql"
  host: 10.65.0.2
  # port: 5432
  database: "assistantdemo"
  user: "root"
  password: "P9..."

بوستشرس

في GCE VM، التنفيذ:

cd ~/genai-databases-retrieval-app/retrieval_service
cp example-config-cloudsql.yml config.yml
sed -i s/engine/postgres/g config.yml
sed -i s/my-project/$PROJECT_ID/g config.yml
sed -i s/my-region/$REGION/g config.yml
sed -i s/my-instance/$INSTANCE_NAME/g config.yml
sed -i s/my-password/$PGPASSWORD/g config.yml
sed -i s/my_database/assistantdemo/g config.yml
sed -i s/my-user/postgres/g config.yml
cat config.yml

الناتج المتوقّع لوحدة التحكّم:

student@instance-1:~$ cd genai-databases-retrieval-app/retrieval_service
cp example-config-cloudsql.yml config.yml
sed -i s/engine/postgres/g config.yml
sed -i s/my-project/$PROJECT_ID/g config.yml
sed -i s/my-region/$REGION/g config.yml
sed -i s/my-instance/$INSTANCE_NAME/g config.yml
sed -i s/my-password/$CLOUDSQL_PASSWORD/g config.yml
sed -i s/my_database/assistantdemo/g config.yml
sed -i s/my-user/postgres/g config.yml
cat config.yml
host: 0.0.0.0
# port: 8080
datastore:
  # Example for Postgres
  kind: "cloudsql-postgres"
  host: 10.65.0.2
  # port: 5432
  database: "assistantdemo"
  user: "postgres"
  password: "P9..."

تعبئة قاعدة البيانات

تعبئة قاعدة البيانات بمجموعة بيانات العينة. الأمر الأول هو إضافة جميع الحزم المطلوبة إلى بيئة بايثون الافتراضية، والأمر الثاني هو تعبئة قاعدة البيانات بالبيانات.

في GCE VM، التنفيذ:

cd ~/genai-databases-retrieval-app/retrieval_service
pip install -r requirements.txt
python run_database_init.py

الناتج المتوقّع لوحدة التحكّم (مخفي):

student@instance-1:~/genai-databases-retrieval-app/retrieval_service$ pip install -r requirements.txt
python run_database_init.py
Collecting asyncpg==0.28.0 (from -r requirements.txt (line 1))
  Obtaining dependency information for asyncpg==0.28.0 from https://files.pythonhosted.org/packages/77/a4/88069f7935b14c58534442a57be3299179eb46aace2d3c8716be199ff6a6/asyncpg-0.28.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata
  Downloading asyncpg-0.28.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.3 kB)
Collecting fastapi==0.101.1 (from -r requirements.txt (line 2))
...
database init done.
student@instance-1:~/genai-databases-retrieval-app/retrieval_service$

7. نشر "خدمة الاسترجاع" على "التشغيل في السحابة الإلكترونية"

يمكننا الآن نشر خدمة الاسترجاع في Cloud Run. تكون الخدمة مسؤولة عن العمل مع قاعدة البيانات واستخراج المعلومات الضرورية من قاعدة البيانات بناءً على الطلب من تطبيق للذكاء الاصطناعي (AI).

إنشاء حساب الخدمة

أنشئ حساب خدمة لخدمة الاسترجاع وامنح الامتيازات اللازمة.

افتح علامة تبويب أخرى في Cloud Shell باستخدام العلامة "+". في أعلى الصفحة

4ca978f5142bb6ce.png

في علامة تبويب Cloud Shell الجديدة، نفِّذ ما يلي:

export PROJECT_ID=$(gcloud config get-value project)
gcloud iam service-accounts create retrieval-identity
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:retrieval-identity@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/aiplatform.user"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:retrieval-identity@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/cloudsql.client"

الناتج المتوقّع لوحدة التحكّم:

student@cloudshell:~ (gleb-test-short-003)$ gcloud iam service-accounts create retrieval-identity
Created service account [retrieval-identity].

إغلاق علامة التبويب من خلال أمر التنفيذ "exit" في علامة التبويب:

exit

نشر خدمة الاسترداد

انتقِل إلى علامة التبويب الأولى التي تتصل فيها بالجهاز الافتراضي من خلال بروتوكول النقل الآمن (SSH) من خلال نشر الخدمة.

في جلسة SSH للأجهزة الافتراضية، يمكنك تنفيذ ما يلي:

cd ~/genai-databases-retrieval-app
gcloud alpha run deploy retrieval-service \
    --source=./retrieval_service/\
    --no-allow-unauthenticated \
    --service-account retrieval-identity \
    --region us-central1 \
    --network=default \
    --quiet

الناتج المتوقّع لوحدة التحكّم:

student@instance-1:~/genai-databases-retrieval-app$ gcloud alpha run deploy retrieval-service \
    --source=./retrieval_service/\
    --no-allow-unauthenticated \
    --service-account retrieval-identity \
    --region us-central1 \
    --network=default
This command is equivalent to running `gcloud builds submit --tag [IMAGE] ./retrieval_service/` and `gcloud run deploy retrieval-service --image [IMAGE]`

Building using Dockerfile and deploying container to Cloud Run service [retrieval-service] in project [gleb-test-short-003] region [us-central1]
X Building and deploying... Done.
  ✓ Uploading sources...
  ✓ Building Container... Logs are available at [https://console.cloud.google.com/cloud-build/builds/6ebe74bf-3039-4221-b2e9-7ca8fa8dad8e?project=1012713954588].
  ✓ Creating Revision...
  ✓ Routing traffic...
    Setting IAM Policy...
Completed with warnings:
  Setting IAM policy failed, try "gcloud beta run services remove-iam-policy-binding --region=us-central1 --member=allUsers --role=roles/run.invoker retrieval-service"
Service [retrieval-service] revision [retrieval-service-00002-4pl] has been deployed and is serving 100 percent of traffic.
Service URL: https://retrieval-service-onme64eorq-uc.a.run.app
student@instance-1:~/genai-databases-retrieval-app$

التحقق من الخدمة

يمكننا الآن التحقّق مما إذا كانت الخدمة تعمل بشكل صحيح ومن إمكانية وصول الجهاز الافتراضي إلى نقطة النهاية. نستخدم أداة gcloud للحصول على نقطة نهاية خدمة الاسترجاع. يمكنك بدلاً من ذلك التحقّق من ذلك في Cloud Console واستبدال "$(gcloud run services list –filter="(retrieval-service)" في الأمر curl حسب القيمة الواردة هناك.

في جلسة SSH للأجهزة الافتراضية، يمكنك تنفيذ ما يلي:

curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" $(gcloud  run services list --filter="(retrieval-service)" --format="value(URL)")

الناتج المتوقّع لوحدة التحكّم:

student@instance-1:~/genai-databases-retrieval-app$ curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" $(gcloud  run services list --filter="(retrieval-service)" --format="value(URL)")
{"message":"Hello World"}student@instance-1:~/genai-databases-retrieval-app$

إذا رأينا رسالة "Hello World" (أهلاً بالعالم) الرسالة، فهذا يعني أن خدمتنا تعمل وتقدم الطلبات.

8. نشر نموذج تطبيق

الآن عندما تكون لدينا خدمة الاسترجاع قيد التشغيل، يمكننا نشر نموذج تطبيق سيستخدم الخدمة. يمكن نشر التطبيق على جهاز افتراضي أو أي خدمة أخرى، مثل Cloud Run أو Kubernetes أو حتى على جهاز كمبيوتر محمول. سوف نوضح هنا كيفية النشر على الجهاز الافتراضي (VM).

تجهيز البيئة

نواصل العمل على أجهزتنا الافتراضية باستخدام جلسة بروتوكول النقل الآمن نفسها. لتشغيل التطبيق الخاص بنا، نحتاج إلى إضافة بعض وحدات بايثون. سيتم تنفيذ الأمر من دليل التطبيق في بيئة Python الافتراضية نفسها.

في جلسة SSH للأجهزة الافتراضية، يمكنك تنفيذ ما يلي:

cd ~/genai-databases-retrieval-app/llm_demo
pip install -r requirements.txt

المخرجات المتوقعة (مخفية):

student@instance-1:~$ cd ~/genai-databases-retrieval-app/llm_demo
pip install -r requirements.txt
Collecting fastapi==0.104.0 (from -r requirements.txt (line 1))
  Obtaining dependency information for fastapi==0.104.0 from https://files.pythonhosted.org/packages/db/30/b8d323119c37e15b7fa639e65e0eb7d81eb675ba166ac83e695aad3bd321/fastapi-0.104.0-py3-none-any.whl.metadata
  Downloading fastapi-0.104.0-py3-none-any.whl.metadata (24 kB)
...

إعداد معرِّف العميل

لاستخدام وظيفة الحجز في التطبيق، علينا إعداد معرِّف عميل OAuth 2.0 باستخدام Cloud Console. سيتم ذلك عند تسجيل الدخول إلى التطبيق لأنّ الحجز يستخدم بيانات اعتماد العملاء لتسجيل بيانات الحجز في قاعدة البيانات.

في Cloud Console، انتقِل إلى واجهات برمجة التطبيقات والخدمات وانقر على "شاشة طلب الموافقة على OAuth" واختَر "داخلي" المستخدم.

2400e5dcdb93eab8.png

ثم اضغط على "إنشاء" والمتابعة على الشاشة التالية.

6c34d235156e571f.png

يجب ملء الحقول المطلوبة، مثل "اسم التطبيق". و"البريد الإلكتروني لدعم المستخدمين". يمكنك أيضًا إضافة نطاق تريد عرضه في شاشة الموافقة، وأخيرًا "معلومات الاتصال بالمطوِّر"

2b7cd51aff915072.png

ثم اضغط على الزر "حفظ ومتابعة" في أسفل الصفحة وسيقودك إلى الصفحة التالية.

d90c10c88fd347f9.png

ولا يلزمك تغيير أي شيء هناك ما لم تكن تريد تحديد النطاقات. وأخيرًا، يمكنك التأكيد عليه بالضغط على الزر "حفظ ومتابعة" مرة أخرى. سيؤدي ذلك إلى إعداد شاشة طلب الموافقة.

الخطوة التالية هي إنشاء معرِّف العميل. في اللوحة اليمنى، انقر على "بيانات الاعتماد" (Credentials) والذي ينقلك إلى بيانات اعتماد OAuth2.

7ad97432390f224c.png

انقر هنا على "إنشاء بيانات اعتماد" في الجزء العلوي واختر "OAuth ClientID". ثم سيتم فتح شاشة أخرى.

325a926431c8f16d.png

اختر "تطبيق الويب" من القائمة المنسدلة لنوع التطبيق ووضع معرّف الموارد المنتظم (URI) لتطبيقك (والمنفذ - اختياريًا) باعتباره "مصادر JavaScript المعتمَدة". وعليك إضافتها إلى "معرّفات الموارد المنتظمة (URI) المعتمدة لإعادة التوجيه" مضيف التطبيق باستخدام " /login/google" في النهاية حتى تتمكن من استخدام شاشة التفويض المنبثقة. ترى في الصورة أعلاه أنني استخدمت http://localhost كمعرّف الموارد المنتظم (URI) الأساسي للتطبيق.

بعد الضغط على الزر "إنشاء" ستحصل على نافذة منبثقة تحتوي على بيانات اعتماد العملاء.

e91adf03ec31cd15.png

سنحتاج إلى معرِّف العميل (واختياريًا سر العميل) لاستخدامه مع تطبيقنا

تشغيل تطبيق "مساعد Google"

قبل بدء التطبيق، نحتاج إلى إعداد بعض متغيرات البيئة. لا تتطلب الوظائف الأساسية للتطبيق مثل البحث عن رحلات الطيران ووسائل الراحة في المطار سوى BASE_URL الذي يشير إلى تطبيق خدمة الاسترداد. يمكننا الحصول عليه باستخدام الأمر gcloud .

في جلسة SSH للأجهزة الافتراضية، يمكنك تنفيذ ما يلي:

export BASE_URL=$(gcloud  run services list --filter="(retrieval-service)" --format="value(URL)")

المخرجات المتوقعة (مخفية):

student@instance-1:~/genai-databases-retrieval-app/llm_demo$ export BASE_URL=$(gcloud  run services list --filter="(retrieval-service)" --format="value(URL)")

لاستخدام إمكانات أكثر تقدمًا للتطبيق، مثل حجز رحلات الطيران وتغييرها، يجب تسجيل الدخول إلى التطبيق باستخدام حساب Google. ولهذا الغرض، نحتاج إلى توفير متغير البيئة CLIENT_ID باستخدام معرّف عميل OAuth من الفصل تجهيز معرّف العميل:

export CLIENT_ID=215....apps.googleusercontent.com

المخرجات المتوقعة (مخفية):

student@instance-1:~/genai-databases-retrieval-app/llm_demo$ export CLIENT_ID=215....apps.googleusercontent.com

والآن يمكننا تشغيل التطبيق الخاص بنا:

python run_app.py

المخرجات المتوقعة:

student@instance-1:~/genai-databases-retrieval-app/llm_demo$ python main.py
INFO:     Started server process [28565]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:8081 (Press CTRL+C to quit)

الاتصال بالتطبيق

وتتوفّر لك عدّة طرق للاتصال بالتطبيق المُشغَّل على الجهاز الافتراضي (VM). على سبيل المثال، يمكنك فتح المنفذ 8081 على الجهاز الافتراضي باستخدام قواعد جدار الحماية في شبكة VPC أو إنشاء جهاز موازنة الحمل بعنوان IP علني. وفي هذا المثال، سنستخدم نفق SSH للجهاز الافتراضي، والذي يترجم المنفذ المحلي 8080 إلى منفذ الجهاز الافتراضي 8081.

الاتصال من جهاز محلي

عندما نرغب في الاتصال من جهاز محلي، نحتاج إلى تشغيل نفق بروتوكول النقل الآمن. ويمكن إجراء ذلك باستخدام الأمر gcloud compute ssh:

gcloud compute ssh instance-1 --zone=us-central1-a -- -L 8081:localhost:8081

المخرجات المتوقعة:

student-macbookpro:~ student$ gcloud compute ssh instance-1 --zone=us-central1-a -- -L 8080:localhost:8081
Warning: Permanently added 'compute.7064281075337367021' (ED25519) to the list of known hosts.
Linux instance-1.us-central1-c.c.gleb-test-001.internal 6.1.0-21-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.90-1 (2024-05-03) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
student@instance-1:~$

الآن يمكننا فتح المتصفح واستخدام http://localhost:8081 للاتصال بتطبيقنا. من المفترض أن تظهر شاشة التطبيق.

c667b9013afac3f9.png

الاتصال من Cloud Shell

وبدلاً من ذلك، يمكننا استخدام Cloud Shell للاتصال. افتح علامة تبويب أخرى في Cloud Shell باستخدام العلامة "+". في أعلى الصفحة

4ca978f5142bb6ce.png

في علامة تبويب Cloud Shell الجديدة، ابدأ النفق إلى جهازك الافتراضي من خلال تنفيذ الأمر gcloud:

gcloud compute ssh instance-1 --zone=us-central1-a -- -L 8080:localhost:8081

ستظهر رسالة الخطأ "لا يمكن تحديد العنوان المطلوب". - أرجو تجاهله.

وفي ما يلي الناتج المتوقع:

student@cloudshell:~ gcloud compute ssh instance-1 --zone=us-central1-a -- -L 8080:localhost:8081
bind [::1]:8081: Cannot assign requested address
inux instance-1.us-central1-a.c.gleb-codelive-01.internal 6.1.0-21-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.90-1 (2024-05-03) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sat May 25 19:15:46 2024 from 35.243.235.73
student@instance-1:~$

يتم فتح المنفذ 8080 على واجهة مستخدم السحابة الإلكترونية التي يمكن استخدامها في "معاينة الويب".

انقر على "معاينة الويب" في أعلى يسار Cloud Shell ومن القائمة المنسدلة واختر "Preview on Port 8080" (معاينة في المنفذ 8080).

444fbf54dcd4d160.png

يتم فتح علامة تبويب جديدة في متصفّح الويب من خلال واجهة التطبيق. من المفترض أن يظهر لك "مساعد خدمة عملاء Cymbal Air" . في شريط العناوين بالصفحة، يظهر عنوان URI الذي يؤدي إلى صفحة المعاينة. نحتاج إلى إزالة الجزء "/?authuser=0&redirectedPreviously=true" في النهاية

389f0ae2945beed5.png

واستخدم الجزء الأول من معرف الموارد المنتظم (URI) مثل "https://8080-cs-35704030349-default.cs-us-east1-vpcf.cloudshell.dev/" أن يتم تركها في نافذة المتصفّح وتقديمها باعتبارها "مصادر JavaScript المعتمَدة" و"معرّفات الموارد المنتظمة (URI) المعتمَدة لإعادة التوجيه" لبيانات الاعتماد التي ننشئها في القسم "إعداد معرِّف العميل" استبدال أو إضافة قيم http://localhost:8080 المقدّمة في الأصل أو إضافتها. ستظهر القيمة العليا بالشكل "https://8080-cs-35704030349-default.cs-us-east1-vpcf.cloudshell.dev" وسيكون العمود الأدنى "https://8080-cs-35704030349-default.cs-us-east1-vpcf.cloudshell.dev/login/google"

2c37eeda0a7e2f80.png

تسجيل الدخول إلى التطبيق

بعد الانتهاء من إعداد كل شيء وفتح التطبيق، يمكننا استخدام زر "تسجيل الدخول" أعلى يسار شاشة التطبيق لتقديم بيانات الاعتماد. هذه الخطوة اختيارية ومطلوبة فقط إذا أردت تجربة وظيفة الحجز في التطبيق.

a1f571371b957129.png

ستفتح نافذة منبثقة حيث يمكننا اختيار بيانات الاعتماد الخاصة بنا.

بعد أن يصبح التطبيق جاهزًا، يمكنك البدء في نشر طلباتك في الحقل في أسفل النافذة.

يعرض هذا العرض التوضيحي مساعد خدمة عملاء Cymbal Air. Cymbal Air هي شركة طيران للركاب وهمية. المساعد عبارة عن برنامج دردشة من الذكاء الاصطناعي يساعد المسافرين في إدارة الرحلات الجوية والبحث عن معلومات حول مركز Cymbal Air في مطار سان فرانسيسكو الدولي (SFO).

بدون تسجيل الدخول (بدون CLIENT_ID)، يمكن أن يساعد في الإجابة عن أسئلة مثل:

ما هي الرحلة القادمة إلى دنفر؟

هل هناك أي متاجر فاخرة حول البوابة C28؟

أين يمكنني الحصول على القهوة بالقرب من البوابة A6؟

أين يمكنني شراء هدية؟

يُرجى حجز رحلة جوية إلى دنفر تغادر في الساعة 10:35 صباحًا.

بعد تسجيل الدخول إلى التطبيق، يمكنك تجربة إمكانات أخرى مثل حجز الرحلات الجوية أو التحقّق ممّا إذا كان المقعد المخصّص لك عبارة عن مقعد أو ممر.

6e7758f707c67c3e.png

يستخدم التطبيق أحدث نماذج Google الأساسية لإنشاء الردود وتزويدها بمعلومات حول الرحلات الجوية ووسائل الراحة من قاعدة بيانات Cloud SQL التشغيلية. يمكنك قراءة المزيد عن هذا التطبيق التجريبي على صفحة GitHub في المشروع.

9. تنظيف البيئة

عندما تكتمل جميع المهام، يمكننا تنظيف بيئتنا.

حذف خدمة Cloud Run

نفِّذ ما يلي في Cloud Shell:

gcloud run services delete retrieval-service --region us-central1

الناتج المتوقّع لوحدة التحكّم:

student@cloudshell:~ (gleb-test-short-004)$ gcloud run services delete retrieval-service --region us-central1
Service [retrieval-service] will be deleted.

Do you want to continue (Y/n)?  Y

Deleting [retrieval-service]...done.                                                                                                                                                                                                                 
Deleted service [retrieval-service].

حذف حساب الخدمة الخاص بخدمة تشغيل السحابة الإلكترونية

نفِّذ ما يلي في Cloud Shell:

PROJECT_ID=$(gcloud config get-value project)
gcloud iam service-accounts delete retrieval-identity@$PROJECT_ID.iam.gserviceaccount.com --quiet

الناتج المتوقّع لوحدة التحكّم:

student@cloudshell:~ (gleb-test-short-004)$ PROJECT_ID=$(gcloud config get-value project)
Your active configuration is: [cloudshell-222]
student@cloudshell:~ (gleb-test-short-004)$ gcloud iam service-accounts delete retrieval-identity@$PROJECT_ID.iam.gserviceaccount.com --quiet
deleted service account [retrieval-identity@gleb-test-short-004.iam.gserviceaccount.com]
student@cloudshell:~ (gleb-test-short-004)$

حذف مثيل Cloud SQL

تدمير مثيل Cloud SQL عند الانتهاء من التمرين المعملي

في Cloud Shell، يمكنك تحديد متغيّرات المشروع والبيئة في حال انقطاع الاتصال بالإنترنت وفقدان جميع الإعدادات السابقة:

export INSTANCE_NAME=my-cloudsql-instance
export PROJECT_ID=$(gcloud config get-value project)

حذف المثيل:

gcloud sql instances delete $INSTANCE_NAME --project=$PROJECT_ID

الناتج المتوقّع لوحدة التحكّم:

student@cloudshell:~$ gcloud sql instances delete $INSTANCE_NAME --project=$PROJECT_ID
All of the instance data will be lost when the instance is deleted.

Do you want to continue (Y/n)?  y

Deleting Cloud SQL instance...done.                                                                                                                
Deleted [https://sandbox.googleapis.com/v1beta4/projects/test-project-001-402417/instances/my-cloudsql-instance].

يمكننا الآن تدمير الجهاز الافتراضي

حذف جهاز GCE افتراضي

نفِّذ ما يلي في Cloud Shell:

export GCEVM=instance-1
export ZONE=us-central1-a
gcloud compute instances delete $GCEVM \
    --zone=$ZONE \
    --quiet

الناتج المتوقّع لوحدة التحكّم:

student@cloudshell:~ (test-project-001-402417)$ export GCEVM=instance-1
export ZONE=us-central1-a
gcloud compute instances delete $GCEVM \
    --zone=$ZONE \
    --quiet
Deleted 

حذف حساب الخدمة لجهاز GCE افتراضي وخدمة Retrieval

نفِّذ ما يلي في Cloud Shell:

PROJECT_ID=$(gcloud config get-value project)
gcloud iam service-accounts delete compute-aip@$PROJECT_ID.iam.gserviceaccount.com --quiet

الناتج المتوقّع لوحدة التحكّم:

student@cloudshell:~ (gleb-test-short-004)$ PROJECT_ID=$(gcloud config get-value project)
gcloud iam service-accounts delete compute-aip@$PROJECT_ID.iam.gserviceaccount.com --quiet
Your active configuration is: [cloudshell-222]
deleted service account [compute-aip@gleb-test-short-004.iam.gserviceaccount.com]
student@cloudshell:~ (gleb-test-short-004)$ 

10. تهانينا

تهانينا على إكمال الدرس التطبيقي حول الترميز.

المواضيع التي تناولناها

  • كيفية إنشاء مثيل Cloud SQL
  • كيفية الاتصال بمثيل Cloud SQL
  • كيفية إعداد خدمة استرجاع قواعد بيانات الذكاء الاصطناعي التوليدي ونشرها
  • كيفية نشر تطبيق نموذجي باستخدام الخدمة المنشورة

11. استطلاع

كيف ستستخدم هذا البرنامج التعليمي؟

قراءته فقط اقرأها وأكمِل التمارين