Xây dựng ứng dụng trò chuyện dựa trên LLM và RAG bằng cơ sở dữ liệu Cloud SQL và LangChain

1. Giới thiệu

Trong lớp học lập trình này, bạn sẽ tìm hiểu cách triển khai Dịch vụ truy xuất cơ sở dữ liệu AI tạo sinh và tạo một ứng dụng mẫu có tính tương tác bằng môi trường đã triển khai.

8727a44c8c402834.png

Bạn có thể xem thêm thông tin về Dịch vụ truy xuất bằng AI tạo sinh và ứng dụng mẫu tại đây.

Điều kiện tiên quyết

  • Có kiến thức cơ bản về Google Cloud Console
  • Kỹ năng cơ bản về giao diện dòng lệnh và Google Cloud Shell

Kiến thức bạn sẽ học được

  • Cách tạo một phiên bản Cloud SQL
  • Cách kết nối với phiên bản
  • Cách định cấu hình và triển khai Dịch vụ truy xuất cơ sở dữ liệu AI tạo sinh
  • Cách triển khai một ứng dụng mẫu bằng dịch vụ đã triển khai

Bạn cần có

  • Tài khoản Google Cloud và dự án trên Google Cloud
  • Một trình duyệt web như Chrome

2. Thiết lập và yêu cầu

Thiết lập môi trường theo tốc độ của riêng bạn

  1. Đăng nhập vào Google Cloud Console rồi tạo một dự án mới hoặc sử dụng lại một dự án hiện có. Nếu chưa có tài khoản Gmail hoặc Google Workspace, bạn phải tạo một tài khoản.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Tên dự án là tên hiển thị của những người tham gia dự án này. Đây là một chuỗi ký tự mà các API của Google không sử dụng. Bạn luôn có thể cập nhật thông tin này.
  • Mã dự án là mã duy nhất trên tất cả các dự án trên Google Cloud và không thể thay đổi (bạn không thể thay đổi mã này sau khi đã đặt). Cloud Console sẽ tự động tạo một chuỗi duy nhất; thường thì bạn không cần quan tâm đến chuỗi này. Trong hầu hết các lớp học lập trình, bạn sẽ cần tham chiếu đến Mã dự án (thường được xác định là PROJECT_ID). Nếu không thích mã nhận dạng được tạo, bạn có thể tạo một mã nhận dạng ngẫu nhiên khác. Hoặc bạn có thể thử tên người dùng của riêng mình để xem tên đó có được chấp nhận hay không. Bạn không thể thay đổi tên này sau bước này và tên này sẽ tồn tại trong suốt thời gian của dự án.
  • Để bạn nắm được thông tin, có một giá trị thứ ba là Số dự án mà một số API sử dụng. Tìm hiểu thêm về cả 3 giá trị này trong tài liệu.
  1. Tiếp theo, bạn cần bật tính năng thanh toán trong Cloud Console để sử dụng các tài nguyên/API trên đám mây. Việc thực hiện lớp học lập trình này sẽ không tốn nhiều chi phí, nếu có. Để tắt các tài nguyên nhằm tránh bị tính phí ngoài phạm vi hướng dẫn này, bạn có thể xoá các tài nguyên đã tạo hoặc xoá dự án. Người dùng mới của Google Cloud đủ điều kiện tham gia chương trình Dùng thử miễn phí trị giá 300 USD.

Khởi động Cloud Shell

Mặc dù có thể vận hành Google Cloud từ xa trên máy tính xách tay, nhưng trong lớp học lập trình này, bạn sẽ sử dụng Google Cloud Shell, một môi trường dòng lệnh chạy trên Cloud.

Trên Bảng điều khiển Google Cloud, hãy nhấp vào biểu tượng Cloud Shell trên thanh công cụ ở trên cùng bên phải:

55efc1aaa7a4d3ad.png

Quá trình này chỉ mất vài phút để cung cấp và kết nối với môi trường. Khi quá trình này kết thúc, bạn sẽ thấy như sau:

7ffe5cbb04455448.png

Máy ảo này được trang bị tất cả các công cụ phát triển mà bạn cần. Nó cung cấp một thư mục chính có dung lượng 5 GB và chạy trên Google Cloud, giúp tăng cường đáng kể hiệu suất mạng và hoạt động xác thực. Bạn có thể thực hiện mọi thao tác trong lớp học lập trình này trong trình duyệt. Bạn không cần cài đặt bất cứ thứ gì.

3. Trước khi bắt đầu

Bật API

Trong Cloud Shell, hãy đảm bảo bạn đã thiết lập mã dự án:

Thông thường, mã dự án sẽ xuất hiện trong dấu ngoặc đơn trong dấu nhắc lệnh trong trình bao trên đám mây như trong hình:

fa6ee779963405d5.png

gcloud config set project [YOUR-PROJECT-ID]

Sau đó, hãy đặt biến môi trường PROJECT_ID thành mã dự án Google Cloud của bạn:

PROJECT_ID=$(gcloud config get-value project)

Bật tất cả các dịch vụ cần thiết:

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

Kết quả đầu ra dự kiến trên bảng điều khiển:

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. Tạo một phiên bản Cloud SQL

Tạo một phiên bản Cloud SQL có bật tính năng hỗ trợ vectơ.

Tạo mật khẩu

Xác định mật khẩu cho người dùng cơ sở dữ liệu mặc định. Bạn có thể tự xác định mật khẩu hoặc sử dụng một hàm ngẫu nhiên để tạo mật khẩu

export CLOUDSQL_PASSWORD=`openssl rand -hex 12`

Ghi lại giá trị được tạo cho mật khẩu

echo $CLOUDSQL_PASSWORD

MySQL

Bạn có thể bật cờ cloudsql_vector khi tạo phiên bản. Hiện tại, chúng tôi cung cấp dịch vụ hỗ trợ vectơ trong MySQL 8.0.36 và 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

Kết quả đầu ra dự kiến trên bảng điều khiển (địa chỉ IP đã được chỉnh sửa):

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

Tiện ích pgvector được cung cấp trong các phiên bản >= 11.

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

Kết quả đầu ra dự kiến trên bảng điều khiển (địa chỉ IP đã được chỉnh sửa):

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

Sau khi tạo phiên bản, chúng ta cần xác định mật khẩu cho người dùng mặc định trong phiên bản và kiểm tra xem chúng ta có thể kết nối bằng mật khẩu đó hay không. Nhập mật khẩu vào lời nhắc khi bạn đã sẵn sàng kết nối.

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

Kết quả đầu ra dự kiến trên bảng điều khiển:

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=>

Thoát khỏi phiên psql:

exit

5. Chuẩn bị máy ảo GCE

Tạo tài khoản dịch vụ

Vì chúng ta sẽ sử dụng VM để triển khai dịch vụ Truy xuất cơ sở dữ liệu GenAI và lưu trữ một ứng dụng mẫu, nên bước đầu tiên là tạo Tài khoản dịch vụ Google (GSA). Máy ảo GCE sẽ sử dụng GSA và chúng ta cần cấp cho GSA các đặc quyền cần thiết để hoạt động với các dịch vụ khác.

Trong Cloud Shell, hãy thực thi:

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"

Triển khai máy ảo GCE

Tạo một VM trên GCE trong cùng khu vực và VPC với phiên bản Cloud SQL.

Trong Cloud Shell, hãy thực thi:

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

Kết quả đầu ra dự kiến trên bảng điều khiển:

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

Uỷ quyền cho VM kết nối với Cloud SQL

Chúng ta cần thêm IP công khai của VM vào danh sách mạng được uỷ quyền cho phiên bản Cloud SQL. Trong Cloud Shell, hãy thực thi:

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

Kết quả đầu ra dự kiến trên bảng điều khiển:

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].

Cài đặt ứng dụng cơ sở dữ liệu

MySQL

Cài đặt phần mềm ứng dụng MySQL trên máy ảo đã triển khai.

Kết nối với máy ảo:

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

Kết quả đầu ra dự kiến trên bảng điều khiển:

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:~$ 

Cài đặt lệnh chạy phần mềm bên trong máy ảo:

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

Kết quả đầu ra dự kiến trên bảng điều khiển:

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

Cài đặt phần mềm máy khách PostgreSQL trên máy ảo đã triển khai.

Kết nối với máy ảo:

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

Kết quả đầu ra dự kiến trên bảng điều khiển:

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:~$ 

Cài đặt lệnh chạy phần mềm bên trong máy ảo:

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

Kết quả đầu ra dự kiến trên bảng điều khiển:

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) ...

Kết nối với phiên bản

MySQL

Kết nối với phiên bản chính từ máy ảo bằng MySQL.

Tiếp tục với phiên SSH đã mở đến VM của bạn. Nếu bạn bị ngắt kết nối, hãy kết nối lại bằng lệnh tương tự như trên.

Sử dụng $CLOUDSQL_PASSWORD và tên phiên bản đã ghi chú trước đó để kết nối với Cloud SQL từ máy ảo 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

Kết quả đầu ra dự kiến trên bảng điều khiển:

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)]>

Thoát khỏi phiên MySQL trong khi vẫn duy trì kết nối SSH:

exit

Kết quả đầu ra dự kiến trên bảng điều khiển:

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

PostgreSQL

Kết nối với phiên bản chính từ máy ảo bằng psql.

Tiếp tục với phiên SSH đã mở đến VM của bạn. Nếu bạn bị ngắt kết nối, hãy kết nối lại bằng lệnh tương tự như trên.

Sử dụng $CLOUDSQL_PASSWORD đã ghi chú trước đó và tên phiên bản để kết nối với PostgreSQL từ máy ảo 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"

Kết quả đầu ra dự kiến trên bảng điều khiển:

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=> 

Thoát khỏi phiên psql trong khi vẫn duy trì kết nối SSH:

exit

Kết quả đầu ra dự kiến trên bảng điều khiển:

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

6. Khởi chạy cơ sở dữ liệu

Chúng ta sẽ sử dụng VM của ứng dụng làm nền tảng để điền dữ liệu vào cơ sở dữ liệu và lưu trữ ứng dụng. Bước đầu tiên là tạo cơ sở dữ liệu và điền dữ liệu vào đó.

Tạo cơ sở dữ liệu

MySQL

Tạo cơ sở dữ liệu có tên "assistantdemo".

Trong phiên máy ảo GCE, hãy thực thi:

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

Kết quả đầu ra dự kiến trên bảng điều khiển (không có kết quả đầu ra):

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

PostgreSQL

Tạo cơ sở dữ liệu có tên "assistantdemo".

Trong phiên máy ảo GCE, hãy thực thi:

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

Kết quả đầu ra dự kiến trên bảng điều khiển:

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

Bật tiện ích pgvector.

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

Kết quả đầu ra dự kiến trên bảng điều khiển (không có kết quả đầu ra):

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

Chuẩn bị môi trường Python

Để tiếp tục, chúng ta sẽ sử dụng các tập lệnh Python đã chuẩn bị sẵn trong kho lưu trữ GitHub, nhưng trước khi làm điều đó, chúng ta cần cài đặt phần mềm bắt buộc.

Trong máy ảo GCE, hãy thực thi:

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

Kết quả đầu ra dự kiến trên bảng điều khiển:

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:~$

Xác minh phiên bản Python.

Trong máy ảo GCE, hãy thực thi:

python -V

Kết quả đầu ra dự kiến trên bảng điều khiển:

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

Chuẩn bị tệp cấu hình

Sao chép kho lưu trữ GitHub có mã cho dịch vụ truy xuất và ứng dụng mẫu.

Trong máy ảo GCE, hãy thực thi:

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

Kết quả đầu ra dự kiến trên bảng điều khiển:

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

Trong máy ảo GCE, hãy thực thi:

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

Kết quả đầu ra dự kiến trên bảng điều khiển:

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

Trong máy ảo GCE, hãy thực thi:

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

Kết quả đầu ra dự kiến trên bảng điều khiển:

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..."

Điền sẵn cơ sở dữ liệu

Điền tập dữ liệu mẫu vào cơ sở dữ liệu. Lệnh đầu tiên là thêm tất cả các gói bắt buộc vào môi trường ảo Python và lệnh thứ hai là điền dữ liệu vào cơ sở dữ liệu.

Trong máy ảo GCE, hãy thực thi:

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

Kết quả đầu ra dự kiến trên bảng điều khiển (đã chỉnh sửa):

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. Triển khai Dịch vụ truy xuất lên Cloud Run

Giờ đây, chúng ta có thể triển khai dịch vụ truy xuất lên Cloud Run. Dịch vụ này chịu trách nhiệm làm việc với cơ sở dữ liệu và trích xuất thông tin cần thiết từ cơ sở dữ liệu dựa trên yêu cầu của một ứng dụng AI.

Tạo tài khoản dịch vụ

Tạo một tài khoản dịch vụ cho dịch vụ truy xuất và cấp các đặc quyền cần thiết.

Mở một thẻ Cloud Shell khác bằng cách sử dụng dấu "+" ở trên cùng.

4ca978f5142bb6ce.png

Trong thẻ cloud shell mới, hãy thực thi:

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"

Kết quả đầu ra dự kiến trên bảng điều khiển:

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

Đóng thẻ bằng lệnh thực thi "exit" trong thẻ:

exit

Triển khai Dịch vụ truy xuất

Tiếp tục trong thẻ đầu tiên nơi bạn kết nối với máy ảo thông qua SSH bằng cách triển khai dịch vụ.

Trong phiên SSH của máy ảo, hãy thực thi:

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

Kết quả đầu ra dự kiến trên bảng điều khiển:

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$

Xác minh Dịch vụ

Giờ đây, chúng ta có thể kiểm tra xem dịch vụ có chạy đúng cách hay không và máy ảo có quyền truy cập vào điểm cuối hay không. Chúng ta sẽ dùng tiện ích gcloud để lấy điểm cuối của dịch vụ truy xuất. Ngoài ra, bạn có thể kiểm tra trong Cloud Console và thay thế "$(gcloud run services list –filter="(retrieval-service)" bằng giá trị từ đó trong lệnh curl.

Trong phiên SSH của máy ảo, hãy thực thi:

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

Kết quả đầu ra dự kiến trên bảng điều khiển:

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$

Nếu chúng ta thấy thông báo "Hello World", điều đó có nghĩa là dịch vụ của chúng ta đang hoạt động và xử lý các yêu cầu.

8. Triển khai ứng dụng mẫu

Giờ đây, khi dịch vụ truy xuất đã hoạt động, chúng ta có thể triển khai một ứng dụng mẫu sẽ sử dụng dịch vụ này. Bạn có thể triển khai ứng dụng trên máy ảo hoặc bất kỳ dịch vụ nào khác như Cloud Run, Kubernetes hoặc thậm chí là cục bộ trên máy tính xách tay. Sau đây là cách triển khai công cụ này trên máy ảo.

Chuẩn bị môi trường

Chúng ta tiếp tục làm việc trên VM bằng cùng một phiên SSH. Để chạy ứng dụng, chúng ta cần thêm một số mô-đun Python. Lệnh này sẽ được thực thi từ thư mục ứng dụng trong cùng một môi trường ảo Python.

Trong phiên SSH của máy ảo, hãy thực thi:

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

Kết quả đầu ra dự kiến (đã chỉnh sửa):

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)
...

Chuẩn bị mã ứng dụng khách

Để sử dụng chức năng đặt phòng của ứng dụng, chúng ta cần chuẩn bị mã ứng dụng khách OAuth 2.0 bằng bảng điều khiển Cloud. Đó là khi chúng ta đăng nhập vào ứng dụng vì tính năng đặt phòng đang sử dụng thông tin đăng nhập của khách hàng để ghi lại dữ liệu đặt phòng trong cơ sở dữ liệu.

Trong Cloud Console, hãy chuyển đến phần API và dịch vụ, rồi nhấp vào "Màn hình xin phép bằng OAuth" và chọn người dùng "Nội bộ".

2400e5dcdb93eab8.png

Sau đó, hãy nhấn vào "Tạo" và làm theo hướng dẫn trên màn hình tiếp theo.

6c34d235156e571f.png

Bạn cần điền vào các trường bắt buộc, chẳng hạn như "Tên ứng dụng" và "Email hỗ trợ người dùng". Bạn cũng có thể thêm miền mà bạn muốn hiển thị trên màn hình xin phép và cuối cùng là "Thông tin liên hệ của nhà phát triển"

2b7cd51aff915072.png

Sau đó, bạn nhấn nút "Lưu và tiếp tục" ở cuối trang để chuyển sang trang tiếp theo.

d90c10c88fd347f9.png

Bạn không cần thay đổi bất cứ điều gì ở đó, trừ phi bạn muốn chỉ định các phạm vi. Cuối cùng, bạn xác nhận bằng cách nhấn lại vào nút "Lưu và tiếp tục". Thao tác này sẽ thiết lập màn hình xin phép của ứng dụng.

Bước tiếp theo là tạo mã ứng dụng khách. Trên bảng điều khiển bên trái, hãy nhấp vào "Thông tin đăng nhập" để chuyển đến thông tin đăng nhập cho OAuth2.

7ad97432390f224c.png

Tại đây, bạn nhấp vào "Tạo thông tin xác thực" ở trên cùng rồi chọn "Mã ứng dụng OAuth". Sau đó, một màn hình khác sẽ mở ra.

325a926431c8f16d.png

Chọn "Ứng dụng web" trong danh sách thả xuống cho loại ứng dụng và đặt URI ứng dụng (và cổng – không bắt buộc) làm "Nguồn gốc JavaScript được uỷ quyền". Bạn cần thêm máy chủ ứng dụng của mình vào "URI chuyển hướng được uỷ quyền" với "/login/google" ở cuối để có thể sử dụng màn hình uỷ quyền bật lên. Trong hình ảnh ở trên, bạn có thể thấy rằng tôi đã sử dụng http://localhost làm URI ứng dụng cơ sở.

Sau khi nhấn nút "Tạo", bạn sẽ nhận được một cửa sổ bật lên chứa thông tin đăng nhập của khách hàng.

e91adf03ec31cd15.png

Sau này, chúng ta sẽ cần Mã ứng dụng khách (và mật khẩu ứng dụng nếu có) để sử dụng với ứng dụng của mình

Chạy ứng dụng Trợ lý

Trước khi bắt đầu ứng dụng, chúng ta cần thiết lập một số biến môi trường. Chức năng cơ bản của ứng dụng, chẳng hạn như truy vấn các chuyến bay và tiện nghi tại sân bay, chỉ yêu cầu BASE_URL để trỏ ứng dụng đến dịch vụ truy xuất. Chúng ta có thể lấy khoá này bằng lệnh gcloud .

Trong phiên SSH của máy ảo, hãy thực thi:

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

Kết quả đầu ra dự kiến (đã chỉnh sửa):

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

Để sử dụng các chức năng nâng cao hơn của ứng dụng, chẳng hạn như đặt và thay đổi chuyến bay, chúng ta cần đăng nhập vào ứng dụng bằng Tài khoản Google. Vì mục đích đó, chúng ta cần cung cấp biến môi trường CLIENT_ID bằng mã ứng dụng OAuth trong chương Chuẩn bị mã ứng dụng:

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

Kết quả đầu ra dự kiến (đã chỉnh sửa):

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

Giờ đây, chúng ta có thể chạy ứng dụng:

python run_app.py

Kết quả đầu ra dự kiến:

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)

Kết nối với ứng dụng

Bạn có thể kết nối với ứng dụng đang chạy trên máy ảo theo một số cách. Ví dụ: bạn có thể mở cổng 8081 trên VM bằng cách sử dụng các quy tắc tường lửa trong VPC hoặc tạo một bộ cân bằng tải có IP công khai. Ở đây, chúng ta sẽ sử dụng một đường hầm SSH đến VM để dịch cổng cục bộ 8080 sang cổng 8081 của VM.

Kết nối từ máy cục bộ

Khi muốn kết nối từ một máy cục bộ, chúng ta cần chạy một đường hầm SSH. Bạn có thể thực hiện việc này bằng cách sử dụng gcloud compute ssh:

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

Kết quả đầu ra dự kiến:

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:~$

Giờ đây, chúng ta có thể mở trình duyệt và sử dụng http://localhost:8081 để kết nối với ứng dụng của mình. Chúng ta sẽ thấy màn hình ứng dụng.

c667b9013afac3f9.png

Kết nối từ Cloud Shell

Ngoài ra, chúng ta có thể sử dụng Cloud Shell để kết nối. Mở một thẻ Cloud Shell khác bằng cách sử dụng dấu "+" ở trên cùng.

4ca978f5142bb6ce.png

Trong thẻ Cloud Shell mới, hãy bắt đầu đường hầm đến VM của bạn bằng cách thực thi lệnh gcloud:

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

Bạn sẽ thấy lỗi "Không thể chỉ định địa chỉ được yêu cầu" – vui lòng bỏ qua lỗi này.

Sau đây là kết quả đầu ra dự kiến:

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:~$

Thao tác này sẽ mở cổng 8080 trên Cloud Shell. Bạn có thể dùng cổng này cho tính năng "Xem trước trên web".

Nhấp vào nút "Xem trước trên web" ở phía trên cùng bên phải của Cloud Shell, rồi chọn "Xem trước trên cổng 8080" trong trình đơn thả xuống.

444fbf54dcd4d160.png

Thao tác này sẽ mở một thẻ mới trong trình duyệt web của bạn với giao diện ứng dụng. Bạn sẽ thấy trang "Trợ lý dịch vụ khách hàng của Cymbal Air". Trong thanh địa chỉ của trang, chúng ta thấy URI của trang xem trước. Chúng ta cần xoá phần "/?authuser=0&redirectedPreviously=true" ở cuối

389f0ae2945beed5.png

Và sử dụng phần đầu tiên của URI như "https://8080-cs-35704030349-default.cs-us-east1-vpcf.cloudshell.dev/" trong cửa sổ trình duyệt và cung cấp dưới dạng "Nguồn gốc JavaScript được uỷ quyền" và "URI chuyển hướng được uỷ quyền" cho thông tin đăng nhập mà chúng ta đã tạo trong chương "Chuẩn bị mã ứng dụng khách", thay thế hoặc thêm vào các giá trị http://localhost:8080 được cung cấp ban đầu. Giá trị trên sẽ có dạng "https://8080-cs-35704030349-default.cs-us-east1-vpcf.cloudshell.dev" và giá trị dưới sẽ là "https://8080-cs-35704030349-default.cs-us-east1-vpcf.cloudshell.dev/login/google"

2c37eeda0a7e2f80.png

Đăng nhập vào Ứng dụng

Khi mọi thứ đã được thiết lập và ứng dụng của bạn đang mở, chúng ta có thể sử dụng nút "Đăng nhập" ở trên cùng bên phải màn hình ứng dụng để cung cấp thông tin đăng nhập. Đây là bước không bắt buộc và bạn chỉ cần thực hiện nếu muốn dùng thử chức năng đặt phòng của ứng dụng.

a1f571371b957129.png

Một cửa sổ bật lên sẽ xuất hiện để chúng ta có thể chọn thông tin đăng nhập.

Sau khi đăng nhập, ứng dụng sẽ sẵn sàng và bạn có thể bắt đầu đăng các yêu cầu của mình vào trường ở cuối cửa sổ.

Bản minh hoạ này giới thiệu trợ lý dịch vụ khách hàng Cymbal Air. Cymbal Air là một hãng hàng không chở khách hư cấu. Trợ lý này là một chatbot AI giúp hành khách quản lý các chuyến bay và tra cứu thông tin về trung tâm hoạt động của Cymbal Air tại Sân bay quốc tế San Francisco (SFO).

Nếu không đăng nhập (không có CLIENT_ID), bạn có thể trả lời các câu hỏi của người dùng như:

Khi nào có chuyến bay tiếp theo đến Denver?

Có cửa hàng cao cấp nào gần cổng C28 không?

Tôi có thể mua cà phê ở đâu gần cổng A6?

Tôi có thể mua quà tặng ở đâu?

Vui lòng đặt chuyến bay đến Denver khởi hành lúc 10:35 sáng

Khi đăng nhập vào ứng dụng, bạn có thể thử các tính năng khác như đặt vé máy bay hoặc kiểm tra xem ghế được chỉ định cho bạn là ghế cạnh cửa sổ hay ghế cạnh lối đi.

6e7758f707c67c3e.png

Ứng dụng này sử dụng các mô hình cơ sở mới nhất của Google để tạo câu trả lời và tăng cường câu trả lời bằng thông tin về các chuyến bay và tiện nghi từ cơ sở dữ liệu Cloud SQL đang hoạt động. Bạn có thể đọc thêm về ứng dụng minh hoạ này trên trang Github của dự án.

9. Dọn dẹp môi trường

Khi hoàn thành tất cả các nhiệm vụ, chúng ta có thể dọn dẹp môi trường.

Xoá dịch vụ Cloud Run

Trong Cloud Shell, hãy thực thi:

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

Kết quả đầu ra dự kiến trên bảng điều khiển:

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].

Xoá Tài khoản dịch vụ cho dịch vụ Cloud Run

Trong Cloud Shell, hãy thực thi:

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

Kết quả đầu ra dự kiến trên bảng điều khiển:

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)$

Xoá phiên bản Cloud SQL

Hủy phiên bản Cloud SQL khi bạn hoàn tất lớp học lập trình

Trong cloud shell, hãy xác định dự án và các biến môi trường nếu bạn bị ngắt kết nối và mất tất cả các chế độ cài đặt trước đó:

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

Xoá phiên bản:

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

Kết quả đầu ra dự kiến trên bảng điều khiển:

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].

Giờ đây, chúng ta có thể hủy bỏ máy ảo

Xoá máy ảo GCE

Trong Cloud Shell, hãy thực thi:

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

Kết quả đầu ra dự kiến trên bảng điều khiển:

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

Xoá Tài khoản dịch vụ cho VM GCE và dịch vụ Truy xuất

Trong Cloud Shell, hãy thực thi:

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

Kết quả đầu ra dự kiến trên bảng điều khiển:

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. Xin chúc mừng

Chúc mừng bạn đã hoàn thành lớp học lập trình này.

Nội dung đã đề cập

  • Cách tạo một phiên bản Cloud SQL
  • Cách kết nối với phiên bản Cloud SQL
  • Cách định cấu hình và triển khai Dịch vụ truy xuất cơ sở dữ liệu AI tạo sinh
  • Cách triển khai một ứng dụng mẫu bằng dịch vụ đã triển khai

11. Khảo sát

Bạn sẽ sử dụng hướng dẫn này như thế nào?

Chỉ đọc qua Đọc và hoàn thành bài tập