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

1. مقدمة

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

8727a44c8c402834.png

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

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

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

ما ستتعلمه

  • كيفية إنشاء مثيل 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، تأكَّد من إعداد رقم تعريف مشروعك:

يظهر عادةً رقم تعريف المشروع بين قوسين في موجّه الأوامر في 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 عند إنشاء الجهاز الظاهري. في الوقت الحالي، تتوفّر إمكانية استخدام المتجهات في الإصدارَين 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 باستخدام الرمز "+" في أعلى الصفحة.

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$

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

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

2400e5dcdb93eab8.png

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

6c34d235156e571f.png

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

2b7cd51aff915072.png

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

d90c10c88fd347f9.png

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

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

7ad97432390f224c.png

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

325a926431c8f16d.png

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

بعد النقر على الزر "إنشاء"، ستظهر لك نافذة منبثقة تتضمّن بيانات اعتماد عملائك.

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)

الربط بالتطبيق

تتوفّر عدة طرق للاتصال بالتطبيق الذي يتم تشغيله على الجهاز الافتراضي. على سبيل المثال، يمكنك فتح المنفذ 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 للاتصال بتطبيقنا. من المفترض أن تظهر شاشة التطبيق.

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 الذي يمكن استخدامه في "معاينة الويب".

انقر على الزر "معاينة الويب" (Web preview) في أعلى يسار Cloud Shell، ثم اختَر "معاينة على المنفذ 8080" (Preview on port 8080) من القائمة المنسدلة.

444fbf54dcd4d160.png

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

389f0ae2945beed5.png

ويجب استخدام الجزء الأول من معرّف الموارد المنتظم، مثل "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

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 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
  • كيفية إعداد خدمة استرجاع المعلومات من قواعد البيانات باستخدام الذكاء الاصطناعي التوليدي ونشرها
  • كيفية نشر تطبيق نموذجي باستخدام الخدمة المنشورة

11. استطلاع

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

قراءة المحتوى فقط قراءة المحتوى وإكمال التمارين