Xây dựng ứng dụng trò chuyện dựa trên LLM và RAG bằng AlloyDB AI 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 tương tác mẫu bằng môi trường đã triển khai.

98c2676cc78880e.png.

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

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

  • Hiểu biết cơ bản về Google Cloud Console
  • Kỹ năng cơ bản về giao diện dòng lệnh và giao diện dòng lệnh của Google Cloud

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

  • Cách triển khai cụm AlloyDB
  • Cách kết nối với AlloyDB
  • 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 ứng dụng mẫu bằng dịch vụ đã triển khai

Bạn cần có

  • Một tài khoản Google Cloud và một 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 tiến độ riêng

  1. Đăng nhập vào Google Cloud Console rồi tạo dự án mới hoặc sử dụng lại 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ự không được API của Google sử dụng. Bạn luôn có thể cập nhật ứng dụng.
  • Mã dự án là duy nhất trong tất cả các dự án Google Cloud và không thể thay đổi (không thể thay đổi sau khi đã đặt). Cloud Console sẽ tự động tạo một chuỗi duy nhất; thường bạn không quan tâm đến sản phẩm đó là gì. Trong hầu hết các lớp học lập trình, bạn sẽ cần tham khảo Mã dự án của mình (thường được xác định là PROJECT_ID). Nếu không thích mã đã tạo, bạn có thể tạo một mã nhận dạng ngẫu nhiên khác. Ngoài ra, bạn có thể thử cách riêng của mình để xem có thể sử dụng hay không. Bạn không thể thay đổi mã này sau bước này và mã vẫn giữ nguyên trong thời gian dự án.
  • Đối với thông tin của bạn, có giá trị thứ ba, Project Number (Số dự án), mà một số API sử dụng. Tìm hiểu thêm về cả ba giá trị này trong tài liệu này.
  1. Tiếp theo, bạn sẽ phải bật tính năng thanh toán trong Cloud Console để sử dụng API/tài nguyên trên đám mây. Việc chạy qua lớp học lập trình này sẽ không tốn nhiều chi phí. Để tắt các tài nguyên nhằm tránh phát sinh việc thanh toán ngoài hướng dẫn này, bạn có thể xoá các tài nguyên bạ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í 300 USD.

Khởi động Cloud Shell

Mặc dù bạn 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 trong Đám mây.

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

55efc1aaa7a4d3ad.pngS

Sẽ chỉ mất một chút thời gian để cấp phép và kết nối với môi trường. Sau khi hoàn tất, bạn sẽ thấy như sau:

7ffe5cbb04455448.pngS

Máy ảo này chứa tất cả các công cụ phát triển mà bạn cần. Phiên bản này cung cấp thư mục gốc có dung lượng ổn định 5 GB và chạy trên Google Cloud, giúp nâng cao đáng kể hiệu suất và khả năng xác thực của mạng. Bạn có thể thực hiện mọi công việ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 gì cả.

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

Bật API

Kết quả:

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

Thông thường, mã dự án được hiển thị trong dấu ngoặc đơn tại dấu nhắc lệnh trong Cloud shell 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 trên Google Cloud:

PROJECT_ID=$(gcloud config get-value project)

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

gcloud services enable alloydb.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

student@cloudshell:~ (gleb-test-short-004)$ gcloud services enable alloydb.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. Triển khai cụm AlloyDB

Trước khi tạo cụm AlloyDB, chúng ta cần một dải IP riêng tư có sẵn trong VPC để phiên bản AlloyDB trong tương lai sử dụng. Nếu không có, chúng ta cần tạo cụm, chỉ định để các dịch vụ nội bộ của Google sử dụng. Sau đó, chúng ta sẽ có thể tạo cụm và phiên bản.

Tạo dải IP riêng tư

Chúng ta cần định cấu hình Quyền truy cập vào dịch vụ riêng tư trong VPC cho AlloyDB. Giả định ở đây là chúng tôi có giá trị "mặc định" Mạng VPC trong dự án và mạng này sẽ được dùng cho tất cả hành động.

Tạo dải IP riêng tư:

gcloud compute addresses create psa-range \
    --global \
    --purpose=VPC_PEERING \
    --prefix-length=24 \
    --description="VPC private service access" \
    --network=default

Tạo kết nối riêng tư bằng dải IP được phân bổ:

gcloud services vpc-peerings connect \
    --service=servicenetworking.googleapis.com \
    --ranges=psa-range \
    --network=default

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

student@cloudshell:~ (test-project-402417)$ gcloud compute addresses create psa-range \
    --global \
    --purpose=VPC_PEERING \
    --prefix-length=24 \
    --description="VPC private service access" \
    --network=default
Created [https://www.googleapis.com/compute/v1/projects/test-project-402417/global/addresses/psa-range].

student@cloudshell:~ (test-project-402417)$ gcloud services vpc-peerings connect \
    --service=servicenetworking.googleapis.com \
    --ranges=psa-range \
    --network=default
Operation "operations/pssn.p24-4470404856-595e209f-19b7-4669-8a71-cbd45de8ba66" finished successfully.

student@cloudshell:~ (test-project-402417)$

Tạo cụm AlloyDB

Tạo một cụm AlloyDB trong khu vực us-central1.

Xác định mật khẩu cho người dùng postgres. Bạn có thể xác định mật khẩu của riêng mình hoặc sử dụng một hàm ngẫu nhiên để tạo mật khẩu

export PGPASSWORD=`openssl rand -hex 12`

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

student@cloudshell:~ (test-project-402417)$ export PGPASSWORD=`openssl rand -hex 12`

Hãy lưu ý mật khẩu PostgreSQL để sử dụng sau này:

echo $PGPASSWORD

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

student@cloudshell:~ (test-project-402417)$ echo $PGPASSWORD
bbefbfde7601985b0dee5723

Xác định tên khu vực và tên cụm AlloyDB. Chúng ta sẽ dùng vùng us-central1 và alloydb-aip-01 làm tên cụm:

export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01

Chạy lệnh để tạo cụm:

gcloud alloydb clusters create $ADBCLUSTER \
    --password=$PGPASSWORD \
    --network=default \
    --region=$REGION

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

export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
gcloud alloydb clusters create $ADBCLUSTER \
    --password=$PGPASSWORD \
    --network=default \
    --region=$REGION
Operation ID: operation-1697655441138-6080235852277-9e7f04f5-2012fce4
Creating cluster...done.                                                                                                                                                                                                                                                           

Tạo đối tượng chính AlloyDB

Tạo một thực thể chính AlloyDB cho cụm của chúng ta trong cùng một phiên shell trên đám mây. Nếu bị ngắt kết nối, bạn sẽ phải xác định lại biến môi trường của tên cụm và khu vực.

gcloud alloydb instances create $ADBCLUSTER-pr \
    --instance-type=PRIMARY \
    --cpu-count=2 \
    --region=$REGION \
    --cluster=$ADBCLUSTER

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

student@cloudshell:~ (test-project-402417)$ gcloud alloydb instances create $ADBCLUSTER-pr \
    --instance-type=PRIMARY \
    --cpu-count=2 \
    --region=$REGION \
    --availability-type ZONAL \
    --cluster=$ADBCLUSTER
Operation ID: operation-1697659203545-6080315c6e8ee-391805db-25852721
Creating instance...done.                                                                                                                                                                                                                                                     

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

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

Vì chúng tôi sẽ dùng máy ảo để triển khai dịch vụ Truy xuất cơ sở dữ liệu AI tạo sinh và lưu trữ một ứng dụng mẫu, nên bước đầu tiên là tạo một Tài khoản dịch vụ của Google ({9}). Giao diện này sẽ được máy ảo GCE sử dụng và chúng tôi sẽ phải cấp cho máy chủ này 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/alloydb.viewer"
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 máy ảo GCE trong cùng một khu vực và VPC với cụm AlloyDB.

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

Cài đặt ứng dụng Postgres

Cài đặt phần mềm ứng dụng 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ả 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 phần mềm đang chạy lệnh bên trong máy ảo:

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

Kết quả 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 thực thể

Kết nối với thực thể chính từ máy ảo bằng psql.

Tiếp tục phiên SSH đã mở tới máy ảo 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 $PGASSWORD đã lưu ý trước đó và tên cụm để kết nối với AlloyDB từ máy ảo GCE:

export PGPASSWORD=<Noted password>
export PROJECT_ID=$(gcloud config get-value project)
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
export INSTANCE_IP=$(gcloud alloydb instances describe $ADBCLUSTER-pr --cluster=$ADBCLUSTER --region=$REGION --format="value(ipAddress)")
psql "host=$INSTANCE_IP user=postgres sslmode=require"

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

student@instance-1:~$ export PGPASSWORD=P9...
student@instance-1:~$ export REGION=us-central1
student@instance-1:~$ export ADBCLUSTER=alloydb-aip-01
student@instance-1:~$ export INSTANCE_IP=export INSTANCE_IP=$(gcloud alloydb instances describe $ADBCLUSTER-pr --cluster=$ADBCLUSTER --region=$REGION --format="value(ipAddress)")
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 và tiếp tục thiết lập kết nối SSH:

exit

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

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

6. Khởi động cơ sở dữ liệu

Chúng tôi sẽ dùng máy ảo máy khách 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 cơ sở dữ liệu đó.

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

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ả 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 phần mở rộng pgVector.

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

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

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ị từ kho lưu trữ GitHub nhưng trước khi làm việc đó, chúng ta cần cài đặt phần mềm cần thiết.

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

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

Sao chép kho lưu trữ GitHub bằng 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ả 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.

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

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

cd genai-databases-retrieval-app/retrieval_service
cp example-config.yml config.yml
sed -i s/127.0.0.1/$INSTANCE_IP/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ả dự kiến trên bảng điều khiển:

student@instance-1:~$ cd genai-databases-retrieval-app/retrieval_service
cp example-config.yml config.yml
sed -i s/127.0.0.1/$INSTANCE_IP/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
host: 0.0.0.0
# port: 8080
datastore:
  # Example for AlloyDB
  kind: "postgres"
  host: 10.65.0.2
  # port: 5432
  database: "assistantdemo"
  user: "postgres"
  password: "P9..."

Điền sẵn cơ sở dữ liệu bằng tập dữ liệu mẫ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 đang điền dữ liệu vào cơ sở dữ liệu.

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

pip install -r requirements.txt
python run_database_init.py

Kết quả dự kiến trên bảng điều khiển(đã loại bỏ):

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

Bây giờ, chúng ta có thể triển khai dịch vụ truy xuất cho 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 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 dấu "+" ở trên cùng.

4ca978f5142bb6ce.pngS

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"

Kết quả 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 khi 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 VM SSH, 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ả 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ụ

Bây giờ, chúng ta có thể kiểm tra xem dịch vụ có chạy đúng cách và máy ảo có quyền truy cập vào điểm cuối hay không. Chúng ta 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 URL này trong Cloud Console và thay thế trong lệnh curl, rồi nhập "$(gcloud run services list –filter="(retrieval-service)" theo giá trị từ đó.

Trong phiên VM SSH, 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ả 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" ("Xin chào thế giới") thì có nghĩa là dịch vụ của chúng tôi đang hoạt động và đang thực hiện yêu cầu.

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

Bây giờ, khi đã thiết lập và chạy dịch vụ truy xuất, chúng ta có thể triển khai ứ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à trên máy tính xách tay. Ở đây, chúng tôi sẽ trình bày cách triển khai trên máy ảo.

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

Chúng tôi vẫn tiếp tục làm việc trên máy ảo thông qua 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 qua thư mục ứng dụng trong cùng một môi trường ảo Python.

Trong phiên VM SSH, hãy thực thi:

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

Kết quả dự kiến (đã loại bỏ):

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

Để dùng chức năng đặt trước của ứng dụng này, chúng ta cần chuẩn bị Mã ứng dụng khách OAuth 2.0 bằng Cloud Console. Đó sẽ là thời điểm chúng ta đăng nhập vào ứng dụng vì quy trình đặt phòng sử dụng thông tin xác thực của khách hàng để ghi dữ liệu đặt phòng trong cơ sở dữ liệu.

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

2400e5dcdb93eab8.png.

Sau đó, nhấn nút "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 như "Tên ứng dụng" và "Email hỗ trợ người dùng". Ngoài ra, bạn 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à phần "Thông tin liên hệ của nhà phát triển"

2b7cd51aff915072.pngS

Sau đó, bạn nhấn nút "Lưu và tiếp tục" ở cuối trang và sẽ dẫn bạn đến 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 phạm vi. Cuối cùng, bạn xác nhận bằng cách nhấn nút "Lưu và tiếp tục" một lần nữa. Thao tác này sẽ thiết lập màn hình xin phép trong ứ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, bạn nhấp vào phần "Credentials" (Thông tin xác thực) Thao tác này sẽ đưa bạn đến thông tin đăng nhập OAuth2.

7ad97432390f224c.pngS

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 "OAuth ClientID". Sau đó, một màn hình khác sẽ mở ra.

325a926431c8f16d.pngS

Chọn "Ứng dụng web" trong danh sách thả xuống cho loại ứng dụng, rồi đặt URI ứng dụng (và cổng (không bắt buộc)) làm "Nguồn gốc JavaScript được cho phép". Ngoài ra, bạn cần thêm vào "URI chuyển hướng được phép" máy chủ lưu trữ ứng dụng của bạn bằng "/login/google" ở cuối để có thể sử dụng màn hình uỷ quyền bật lên. Trong hì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ở của mình.

Sau khi đẩy nút "Tạo" bạn sẽ thấy cửa sổ bật lên chứa thông tin đăng nhập của ứng dụng khách.

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 khách (không bắt buộc)) để dùng với ứng dụng

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 như truy vấn chuyến bay và tiện nghi 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ể dùng lệnh gcloud để lấy thông tin này .

Trong phiên VM SSH, hãy thực thi:

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

Kết quả dự kiến (đã loại bỏ):

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 tính năng nâng cao hơn của ứng dụng như đặt vé và thay đổi chuyến bay, chúng ta cần đăng nhập vào ứng dụng này bằng Tài khoản Google. Để làm được điều đó, chúng ta cần cung cấp biến môi trường CLIENT_ID bằng Mã ứng dụng khách OAuth trong chương Chuẩn bị mã ứng dụng khách:

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

Kết quả dự kiến (đã loại bỏ):

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

Và giờ chúng ta có thể chạy ứng dụng của mình:

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

Đang 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 đường hầm SSH. Bạn có thể thực hiện việc này bằ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:~$

Bây giờ, 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 chúng ta. Chúng ta sẽ thấy màn hình ứng dụng.

c667b9013afac3f9.png

Kết nối từ Cloud Shell

Hoặc chúng ta có thể dùng Cloud shell để kết nối. Mở một thẻ Cloud Shell khác bằng dấu "+" ở trên cùng.

4ca978f5142bb6ce.pngS

Trong thẻ Cloud shell mới, hãy khởi động đường hầm đến máy ảo 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

Thông báo sẽ hiển thị lỗi "Không thể chỉ định địa chỉ được yêu cầu" – vui lòng bỏ qua thông báo đó.

Sau đây là kết quả 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 có thể dùng cho "Bản xem trước trên web".

Nhấp vào "Bản xem trước trên web" ở trên cùng bên phải của Cloud Shell và từ trình đơn thả xuống, hãy chọn "Xem trước trên cổng 8080"

444fbf54dcd4d160.pngs

Thao tác này sẽ mở một thẻ mới trong trình duyệt web có giao diện ứng dụng. Bạn sẽ có thể thấy "Trợ lý dịch vụ khách hàng của Cymbal Air" . Và trong thanh địa chỉ của trang, chúng ta thấy URI dẫn đến trang xem trước. Chúng tôi cần xóa phần "/?authuser=0&redirectMembers=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/" phải để trong cửa sổ trình duyệt và cung cấp dưới dạng "Nguồn gốc JavaScript được cho phép" và "URI chuyển hướng được phép" cho thông tin đăng nhập mà chúng tôi đã tạo trong phần "Chuẩn bị mã ứng dụng khách" thay thế hoặc thêm chương vào các giá trị http://localhost:8080 được cung cấp ban đầu. Giá trị phía trên sẽ có dạng "https://8080-cs-35704030349-default.cs-us-east1-vpcf.cloudshell.dev" và mã thấp hơn sẽ là "https://8080-cs-35704030349-default.cs-us-east1-vpcf.cloudshell.dev/login/google"

2c37eeda0a7e2f80.pngS

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

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

a1f571371b957129.png

Một cửa sổ bật lên sẽ mở ra để chúng ta chọn thông tin đăng nhập.

Sau khi đăng nhập, ứng dụng đã sẵn sàng và bạn có thể bắt đầu đăng 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 của 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 bot trò chuyện AI giúp khách lưu trú quản lý chuyến bay và tra cứu thông tin về trung tâm 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), tính năng này có thể giúp trả lời các câu hỏi của người dùng như:

Chuyến bay tiếp theo đến Denver là khi nào?

Có cửa hàng sang trọng nào quanh cổng C28 không?

Tôi có thể uống 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 có phải là ghế gần cửa sổ hay lối đi không.

6e7758f707c67c3e.png.

Ứng dụng này sử dụng các mô hình nền tảng mới nhất của Google để tạo câu trả lời và củng cố 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 hoạt động của AlloyDB. 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

Giờ đây, khi hoàn thành tất cả tác 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ả 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ụ của 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ả 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)$

Huỷ bỏ các phiên bản và cụm AlloyDB khi bạn hoàn tất phòng thí nghiệm này

Xoá cụm AlloyDB và tất cả các bản sao

Cụm bị huỷ bỏ bằng lực lựa chọn, thao tác này cũng sẽ xoá tất cả các thực thể thuộc cụm.

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

gcloud config set project <your project id>
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
export PROJECT_ID=$(gcloud config get-value project)

Xoá cụm:

gcloud alloydb clusters delete $ADBCLUSTER --region=$REGION --force

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

student@cloudshell:~ (test-project-001-402417)$ gcloud alloydb clusters delete $ADBCLUSTER --region=$REGION --force
All of the cluster data will be lost when the cluster is deleted.

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

Operation ID: operation-1697820178429-6082890a0b570-4a72f7e4-4c5df36f
Deleting cluster...done.   

Xóa các bản sao lưu AlloyDB

Xoá tất cả bản sao lưu AlloyDB cho cụm:

for i in $(gcloud alloydb backups list --filter="CLUSTER_NAME: projects/$PROJECT_ID/locations/$REGION/clusters/$ADBCLUSTER" --format="value(name)" --sort-by=~createTime) ; do gcloud alloydb backups delete $(basename $i) --region $REGION --quiet; done

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

student@cloudshell:~ (test-project-001-402417)$ for i in $(gcloud alloydb backups list --filter="CLUSTER_NAME: projects/$PROJECT_ID/locations/$REGION/clusters/$ADBCLUSTER" --format="value(name)" --sort-by=~createTime) ; do gcloud alloydb backups delete $(basename $i) --region $REGION --quiet; done
Operation ID: operation-1697826266108-60829fb7b5258-7f99dc0b-99f3c35f
Deleting backup...done.                                                                                                                                                                                                                                                            

Bây giờ, chúng ta có thể huỷ 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ả 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ụ của máy ảo 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ả 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ội dung đã đề cập

  • Cách triển khai cụm AlloyDB
  • Cách kết nối với AlloyDB
  • 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 ứng dụng mẫu bằng dịch vụ đã triển khai

11. Khảo sát

Kết quả:

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