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

يمكنك الاطّلاع على مزيد من المعلومات حول "خدمة استرجاع المعلومات باستخدام الذكاء الاصطناعي التوليدي" والتطبيق النموذجي هنا.
المتطلبات الأساسية
- فهم أساسي لـ Google Cloud Console
- مهارات أساسية في واجهة سطر الأوامر وCloud Shell من Google
ما ستتعلمه
- كيفية إنشاء مثيل Cloud SQL
- كيفية الاتصال بالجهاز الافتراضي
- كيفية إعداد خدمة استرجاع المعلومات من قواعد البيانات باستخدام الذكاء الاصطناعي التوليدي ونشرها
- كيفية نشر تطبيق نموذجي باستخدام الخدمة المنشورة
المتطلبات
- حساب Google Cloud ومشروع Google Cloud
- متصفّح ويب، مثل Chrome
2. الإعداد والمتطلبات
إعداد البيئة بالسرعة التي تناسبك
- سجِّل الدخول إلى Google Cloud Console وأنشِئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.



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

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

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

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 عند إنشاء الجهاز الظاهري. في الوقت الحالي، تتوفّر إمكانية استخدام المتجهات في الإصدارَين 8.0.36 و8.0.37 من MySQL.
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
تتوفّر إضافة pgvector في الإصدارات 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- إعداد "الجهاز الافتراضي" في "محرك حساب Google"
إنشاء حساب خدمة
بما أنّنا سنستخدم الجهاز الظاهري لنشر خدمة استرجاع المعلومات من قواعد البيانات باستخدام الذكاء الاصطناعي التوليدي واستضافة تطبيق نموذجي، تتمثل الخطوة الأولى في إنشاء حساب خدمة Google (GSA). سيتم استخدام حساب الخدمة على Google (GSA) من خلال الجهاز الافتراضي على Google Compute Engine (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"
نشر جهاز افتراضي على "محرك حساب Google"
أنشئ جهازًا افتراضيًا على 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. في 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 على الجهاز الافتراضي الذي تم نشره.
اتّصِل بالجهاز الافتراضي:
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:~$
ثبِّت البرنامج الذي يشغّل الأمر داخل الجهاز الافتراضي:
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:~$
ثبِّت البرنامج الذي يشغّل الأمر داخل الجهاز الافتراضي:
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) المفتوحة إلى جهازك الافتراضي (VM). إذا تم قطع الاتصال، أعِد الاتصال باستخدام الأمر نفسه المذكور أعلاه.
استخدِم $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) المفتوحة إلى جهازك الافتراضي (VM). إذا تم قطع الاتصال، أعِد الاتصال باستخدام الأمر نفسه المذكور أعلاه.
استخدِم $CLOUDSQL_PASSWORD واسم المثيل اللذين دوّنتهما سابقًا للاتصال بـ PostgreSQL من الجهاز الافتراضي على Google Compute Engine:
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، نفِّذ ما يلي:
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، نفِّذ ما يلي:
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:~$
فعِّل إضافة pgvector.
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 الافتراضي، نفِّذ ما يلي:
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 الافتراضي، نفِّذ ما يلي:
python -V
الناتج المتوقّع في وحدة التحكّم:
(.venv) student@instance-1:~$ python -V Python 3.11.2 (.venv) student@instance-1:~$
إعداد ملف الإعداد
استنسِخ مستودع GitHub الذي يتضمّن الرمز البرمجي لخدمة الاسترجاع والتطبيق النموذجي.
في جهاز GCE الافتراضي، نفِّذ ما يلي:
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 الافتراضي، نفِّذ ما يلي:
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..."
Postgres
في جهاز GCE الافتراضي، نفِّذ ما يلي:
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..."
تعبئة قاعدة البيانات
املأ قاعدة البيانات بمجموعة البيانات النموذجية. يضيف الأمر الأول جميع الحِزم المطلوبة إلى بيئة Python الافتراضية، بينما يملأ الأمر الثاني قاعدة البيانات بالبيانات.
في جهاز GCE الافتراضي، نفِّذ ما يلي:
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
يمكننا الآن نشر خدمة الاسترجاع على Cloud Run. تكون الخدمة مسؤولة عن العمل مع قاعدة البيانات واستخراج المعلومات اللازمة منها استنادًا إلى الطلب الوارد من أحد تطبيقات الذكاء الاصطناعي.
إنشاء حساب خدمة
أنشِئ حساب خدمة لخدمة الاسترجاع وامنح الأذونات اللازمة.
افتح علامة تبويب أخرى في Cloud Shell باستخدام الرمز "+" في أعلى الصفحة.

في علامة تبويب 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$
التحقّق من الخدمة
يمكننا الآن التحقّق مما إذا كانت الخدمة تعمل بشكل صحيح وما إذا كان الجهاز الافتراضي (VM) لديه إذن الوصول إلى نقطة النهاية. نستخدم أداة 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) باستخدام جلسة بروتوكول النقل الآمن (SSH) نفسها. لتشغيل تطبيقنا، علينا إضافة بعض وحدات Python. سيتم تنفيذ الأمر من دليل التطبيق في بيئة 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، انتقِل إلى "واجهات برمجة التطبيقات والخدمات" (APIs and Services) وانقر على "شاشة طلب الموافقة المتعلّقة ببروتوكول OAuth" (OAuth consent screen) واختَر مستخدمًا "داخليًا" (Internal).

بعد ذلك، انقر على "إنشاء" واتّبِع التعليمات الظاهرة على الشاشة التالية.

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

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

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

انقر هنا على "إنشاء بيانات اعتماد" (Create Credentials) في أعلى الصفحة واختَر "معرّف عميل OAuth" (OAuth ClientID). بعد ذلك، سيتم فتح شاشة أخرى.

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

سنحتاج إلى معرّف العميل (ويمكنك أيضًا استخدام الرمز السري للعميل) لاحقًا لاستخدامه مع تطبيقنا.
تشغيل تطبيق "مساعد 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)
الربط بالتطبيق
تتوفّر عدة طرق للاتصال بالتطبيق الذي يتم تشغيله على الجهاز الافتراضي. على سبيل المثال، يمكنك فتح المنفذ 8081 على الجهاز الافتراضي (VM) باستخدام قواعد جدار الحماية في سحابة VPC أو إنشاء جهاز موازنة الحمل باستخدام عنوان IP عام. سنستخدم هنا نفق بروتوكول النقل الآمن (SSH) للجهاز الافتراضي (VM) من خلال ترجمة المنفذ المحلي 8080 إلى منفذ الجهاز الافتراضي (VM) 8081.
الاتصال من جهاز محلي
عندما نريد الاتصال من جهاز محلي، علينا تشغيل نفق SSH. يمكن إجراء ذلك باستخدام 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 للاتصال بتطبيقنا. من المفترض أن تظهر شاشة التطبيق.

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

في علامة التبويب الجديدة الخاصة بـ 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 الذي يمكن استخدامه في "معاينة الويب".
انقر على الزر "معاينة الويب" (Web preview) في أعلى يسار Cloud Shell، ثم اختَر "معاينة على المنفذ 8080" (Preview on port 8080) من القائمة المنسدلة.

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

ويجب استخدام الجزء الأول من معرّف الموارد المنتظم، مثل "https://8080-cs-35704030349-default.cs-us-east1-vpcf.cloudshell.dev/"، وتركه في نافذة المتصفّح وتقديمه كـ مصادر JavaScript المعتمَدة ومعرّفات الموارد المنتظمة المُعتمَدة لإعادة التوجيه للبيانات التي تم إنشاؤها في فصل "إعداد معرّف العميل"، وذلك عن طريق استبدال قيم 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

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

سيتم فتح نافذة منبثقة حيث يمكننا اختيار بيانات الاعتماد.
بعد تسجيل الدخول، يصبح التطبيق جاهزًا ويمكنك البدء في نشر طلباتك في الحقل أسفل النافذة.
يعرض هذا الفيديو المساعد الخاص بخدمة العملاء من Cymbal Air. Cymbal Air هي شركة طيران خيالية لنقل الركاب. المساعد هو روبوت دردشة بالذكاء الاصطناعي يساعد المسافرين في إدارة الرحلات الجوية والبحث عن معلومات حول مركز Cymbal Air في مطار سان فرانسيسكو الدولي (SFO).
بدون تسجيل الدخول (بدون CLIENT_ID)، يمكن أن يساعد في الإجابة عن أسئلة المستخدمين، مثل:
متى موعد الرحلة الجوية التالية إلى دنفر؟
هل هناك أي متاجر فاخرة بالقرب من البوابة C28؟
أين يمكنني الحصول على قهوة بالقرب من البوابة A6؟
أين يمكنني شراء هدية؟
يُرجى حجز رحلة جوية إلى دنفر تغادر في الساعة 10:35 صباحًا
عند تسجيل الدخول إلى التطبيق، يمكنك تجربة إمكانات أخرى، مثل حجز رحلات جوية أو التحقّق مما إذا كان المقعد المخصّص لك بجانب النافذة أو الممر.

يستخدم التطبيق أحدث نماذج 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 Run
في 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].
الآن يمكننا محو الجهاز الافتراضي (VM)
حذف جهاز 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 وخدمة الاسترداد
في 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
- كيفية إعداد خدمة استرجاع المعلومات من قواعد البيانات باستخدام الذكاء الاصطناعي التوليدي ونشرها
- كيفية نشر تطبيق نموذجي باستخدام الخدمة المنشورة