1. Introduction
Dans cet atelier de programmation, vous allez apprendre à déployer le service de récupération de bases de données par IA générative et à créer un exemple d'application interactive à l'aide du service déployé.
Pour en savoir plus sur le service de récupération par IA générative et sur l'exemple d'application, cliquez ici.
Prérequis
- Connaissances de base concernant la console Google Cloud
- Compétences de base concernant l'interface de ligne de commande et Google Cloud Shell
Points abordés
- Déployer un cluster AlloyDB
- Se connecter à AlloyDB
- Configurer et déployer le service de récupération de bases de données par IA générative
- Déployer un exemple d'application à l'aide du service déployé
Ce dont vous avez besoin
- Un compte Google Cloud et un projet Google Cloud
- Un navigateur Web tel que Chrome
2. Préparation
Configuration de l'environnement au rythme de chacun
- Connectez-vous à la console Google Cloud, puis créez un projet ou réutilisez un projet existant. Si vous n'avez pas encore de compte Gmail ou Google Workspace, vous devez en créer un.
- Le nom du projet est le nom à afficher pour les participants au projet. Il s'agit d'une chaîne de caractères non utilisée par les API Google. Vous pourrez toujours le modifier.
- L'ID du projet est unique parmi tous les projets Google Cloud et non modifiable une fois défini. La console Cloud génère automatiquement une chaîne unique (en général, vous n'y accordez d'importance particulière). Dans la plupart des ateliers de programmation, vous devrez indiquer l'ID de votre projet (généralement identifié par
PROJECT_ID
). Si l'ID généré ne vous convient pas, vous pouvez en générer un autre de manière aléatoire. Vous pouvez également en spécifier un et voir s'il est disponible. Après cette étape, l'ID n'est plus modifiable et restera donc le même pour toute la durée du projet. - Pour information, il existe une troisième valeur (le numéro de projet) que certaines API utilisent. Pour en savoir plus sur ces trois valeurs, consultez la documentation.
- Vous devez ensuite activer la facturation dans la console Cloud pour utiliser les ressources/API Cloud. L'exécution de cet atelier de programmation est très peu coûteuse, voire sans frais. Pour désactiver les ressources et éviter ainsi que des frais ne vous soient facturés après ce tutoriel, vous pouvez supprimer le projet ou les ressources que vous avez créées. Les nouveaux utilisateurs de Google Cloud peuvent participer au programme d'essai sans frais pour bénéficier d'un crédit de 300 $.
Démarrer Cloud Shell
Bien que Google Cloud puisse être utilisé à distance depuis votre ordinateur portable, nous allons nous servir de Google Cloud Shell pour cet atelier de programmation, un environnement de ligne de commande exécuté dans le cloud.
Dans la console Google Cloud, cliquez sur l'icône Cloud Shell dans la barre d'outils supérieure :
Le provisionnement et la connexion à l'environnement prennent quelques instants seulement. Une fois l'opération terminée, le résultat devrait ressembler à ceci :
Cette machine virtuelle contient tous les outils de développement nécessaires. Elle comprend un répertoire d'accueil persistant de 5 Go et s'exécute sur Google Cloud, ce qui améliore nettement les performances du réseau et l'authentification. Vous pouvez effectuer toutes les tâches de cet atelier de programmation dans un navigateur. Vous n'avez rien à installer.
3. Avant de commencer
Activer l'API
Résultat :
Dans Cloud Shell, assurez-vous que l'ID de votre projet est configuré :
Généralement, l'ID du projet est entre parenthèses dans l'invite de commande du Cloud Shell, comme indiqué sur l'image :
gcloud config set project [YOUR-PROJECT-ID]
Définissez ensuite la variable d'environnement PROJECT_ID sur l'ID de votre projet Google Cloud :
PROJECT_ID=$(gcloud config get-value project)
Activez tous les services nécessaires :
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
Résultat attendu
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. Déployer un cluster AlloyDB
Créez un cluster AlloyDB et une instance principale. La procédure suivante explique comment créer un cluster et une instance AlloyDB à l'aide du SDK Google Cloud. Si vous préférez utiliser la console, consultez la documentation ici.
Avant de créer un cluster AlloyDB, nous devons disposer d'une plage d'adresses IP privées disponible dans notre VPC qui sera utilisée par la future instance AlloyDB. Si nous ne l'avons pas, nous devons le créer, l'attribuer à l'utilisation des services Google internes, puis créer le cluster et l'instance.
Créer une plage d'adresses IP privées
Nous devons configurer l'accès au service privé dans notre VPC pour AlloyDB. L'hypothèse ici est que nous avons le réseau VPC "par défaut" dans le projet et qu'il sera utilisé pour toutes les actions.
Créez la plage d'adresses IP privées :
gcloud compute addresses create psa-range \
--global \
--purpose=VPC_PEERING \
--prefix-length=24 \
--description="VPC private service access" \
--network=default
Créez une connexion privée à l'aide de la plage d'adresses IP allouée :
gcloud services vpc-peerings connect \
--service=servicenetworking.googleapis.com \
--ranges=psa-range \
--network=default
Résultat attendu sur la console :
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)$
Créer un cluster AlloyDB
Dans cette section, nous allons créer un cluster AlloyDB dans la région us-central1.
Définissez le mot de passe de l'utilisateur postgres. Vous pouvez définir votre propre mot de passe ou utiliser une fonction aléatoire pour en générer un.
export PGPASSWORD=`openssl rand -hex 12`
Résultat attendu sur la console :
student@cloudshell:~ (test-project-402417)$ export PGPASSWORD=`openssl rand -hex 12`
Notez le mot de passe PostgreSQL pour une utilisation future.
echo $PGPASSWORD
Vous aurez besoin de ce mot de passe plus tard pour vous connecter à l'instance en tant qu'utilisateur postgres. Je vous suggère de le noter ou de le copier pour pouvoir l'utiliser plus tard.
Résultat attendu sur la console :
student@cloudshell:~ (test-project-402417)$ echo $PGPASSWORD bbefbfde7601985b0dee5723
Créer un cluster d'essai sans frais
Si vous n'avez jamais utilisé AlloyDB, vous pouvez créer un cluster d'essai sans frais:
Définissez la région et le nom du cluster AlloyDB. Nous allons utiliser la région us-central1 et le nom de cluster alloydb-aip-01:
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
Exécutez la commande pour créer le cluster:
gcloud alloydb clusters create $ADBCLUSTER \
--password=$PGPASSWORD \
--network=default \
--region=$REGION \
--subscription-type=TRIAL
Résultat attendu sur la console :
export REGION=us-central1 export ADBCLUSTER=alloydb-aip-01 gcloud alloydb clusters create $ADBCLUSTER \ --password=$PGPASSWORD \ --network=default \ --region=$REGION \ --subscription-type=TRIAL Operation ID: operation-1697655441138-6080235852277-9e7f04f5-2012fce4 Creating cluster...done.
Créez une instance principale AlloyDB pour notre cluster dans la même session Cloud Shell. Si vous êtes déconnecté, vous devrez définir à nouveau les variables d'environnement de la région et du nom du cluster.
gcloud alloydb instances create $ADBCLUSTER-pr \
--instance-type=PRIMARY \
--cpu-count=8 \
--region=$REGION \
--cluster=$ADBCLUSTER
Résultat attendu sur la console :
student@cloudshell:~ (test-project-402417)$ gcloud alloydb instances create $ADBCLUSTER-pr \ --instance-type=PRIMARY \ --cpu-count=8 \ --region=$REGION \ --availability-type ZONAL \ --cluster=$ADBCLUSTER Operation ID: operation-1697659203545-6080315c6e8ee-391805db-25852721 Creating instance...done.
Créer un cluster AlloyDB standard
S'il ne s'agit pas de votre premier cluster AlloyDB dans le projet, créez un cluster standard.
Définissez la région et le nom du cluster AlloyDB. Nous allons utiliser la région us-central1 et le nom de cluster alloydb-aip-01:
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
Exécutez la commande pour créer le cluster:
gcloud alloydb clusters create $ADBCLUSTER \
--password=$PGPASSWORD \
--network=default \
--region=$REGION
Résultat attendu sur la console :
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.
Créez une instance principale AlloyDB pour notre cluster dans la même session Cloud Shell. Si vous êtes déconnecté, vous devrez définir à nouveau les variables d'environnement de la région et du nom du cluster.
gcloud alloydb instances create $ADBCLUSTER-pr \
--instance-type=PRIMARY \
--cpu-count=2 \
--region=$REGION \
--cluster=$ADBCLUSTER
Résultat attendu sur la console :
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. Préparer la machine virtuelle GCE
Créer un compte de service
Comme nous allons utiliser la VM pour déployer le service de récupération de bases de données par IA générative et héberger un exemple d'application, la première étape consiste à créer un compte de service Google. Ce compte sera utilisé par la VM GCE, et nous devrons lui accorder les droits nécessaires pour fonctionner avec d'autres services.
Dans Cloud Shell, exécutez :
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"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/serviceusage.serviceUsageConsumer"
Déployer une VM GCE
Créez une VM GCE dans la même région et dans le même VPC que le cluster AlloyDB.
Dans Cloud Shell, exécutez :
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
Résultat attendu sur la console :
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
Installer le client Postgres
Installez le logiciel client PostgreSQL sur la VM déployée.
Connectez-vous à la VM.
gcloud compute ssh instance-1 --zone=us-central1-a
Résultat attendu sur la console :
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:~$
Installez la commande logicielle en cours d'exécution dans la VM :
sudo apt-get update
sudo apt-get install --yes postgresql-client
Résultat attendu sur la console :
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) ...
Se connecter à l'instance
Connectez-vous à l'instance principale depuis la VM à l'aide de psql.
Poursuivez la session SSH ouverte sur votre VM. Si vous avez été déconnecté, reconnectez-vous en utilisant la même commande que ci-dessus.
Utilisez le $PGASSWORD noté précédemment et le nom du cluster pour vous connecter à AlloyDB depuis la VM 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"
Résultat attendu sur la console :
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=>
Quittez la session psql en maintenant la connexion SSH active :
exit
Résultat attendu sur la console :
postgres=> exit student@instance-1:~$
6. Initialiser la base de données
Nous allons utiliser la VM cliente comme plate-forme pour enrichir notre base de données et héberger notre application. La première étape consiste à créer une base de données et à l'enrichir.
Créer une base de données
Créez une base de données intitulée "assistantdemo".
Dans la session de la VM GCE, exécutez :
psql "host=$INSTANCE_IP user=postgres" -c "CREATE DATABASE assistantdemo"
Résultat attendu sur la console :
student@instance-1:~$ psql "host=$INSTANCE_IP user=postgres" -c "CREATE DATABASE assistantdemo" CREATE DATABASE student@instance-1:~$
Activez l'extension pgVector.
psql "host=$INSTANCE_IP user=postgres dbname=assistantdemo" -c "CREATE EXTENSION vector"
Résultat attendu sur la console :
student@instance-1:~$ psql "host=$INSTANCE_IP user=postgres dbname=assistantdemo" -c "CREATE EXTENSION vector" CREATE EXTENSION student@instance-1:~$
Préparer l'environnement Python
Pour continuer, nous allons utiliser des scripts Python préparés issus du dépôt GitHub, mais avant cela, nous devons installer le logiciel requis.
Dans la VM GCE, exécutez :
sudo apt install -y python3.11-venv git
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
Résultat attendu sur la console :
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:~$
Vérifiez la version de Python.
Dans la VM GCE, exécutez :
python -V
Résultat attendu sur la console :
(.venv) student@instance-1:~$ python -V Python 3.11.2 (.venv) student@instance-1:~$
Enrichir la base de données
Clonez le dépôt GitHub avec le code du service de récupération et de l'exemple d'application.
Dans la VM GCE, exécutez :
git clone https://github.com/GoogleCloudPlatform/genai-databases-retrieval-app.git
Résultat attendu sur la console :
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.
Préparez le fichier de configuration.
Dans la VM GCE, exécutez :
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
Résultat attendu sur la console :
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..."
Enrichissez la base de données avec l'ensemble de données en exemple. La première commande ajoute tous les packages requis à notre environnement virtuel Python, et la seconde insère les données dans notre base de données.
Dans la VM GCE, exécutez :
pip install -r requirements.txt
python run_database_init.py
Résultat attendu sur la console (masqué) :
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. Déployer le service de récupération sur Cloud Run
Nous pouvons maintenant déployer le service de récupération sur Cloud Run. Le service est chargé de travailler avec la base de données et d'en extraire les informations nécessaires en fonction de la requête d'une application d'IA.
Créer un compte de service
Créez un compte de service pour le service de récupération et accordez les droits nécessaires.
Ouvrez un autre onglet Cloud Shell à l'aide du signe "+" situé en haut.
Dans le nouvel onglet Cloud Shell, exécutez :
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"
Résultat attendu sur la console :
student@cloudshell:~ (gleb-test-short-003)$ gcloud iam service-accounts create retrieval-identity Created service account [retrieval-identity].
Fermez l'onglet en exécutant la commande "exit" dans l'onglet :
exit
Déployer le service de récupération
Continuez dans le premier onglet où vous êtes connecté à la VM via SSH en déployant le service.
Dans la session SSH de la VM, exécutez :
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
Résultat attendu sur la console :
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$
Vérifier le service
Nous pouvons maintenant vérifier si le service s'exécute correctement et si la VM a accès au point de terminaison. Nous utilisons l'utilitaire gcloud pour obtenir le point de terminaison du service de récupération. Vous pouvez également le vérifier dans la console Cloud et remplacer dans la commande curl $(gcloud run services list –filter="(retrieval-service)" par la valeur correspondante.
Dans la session SSH de la VM, exécutez :
curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" $(gcloud run services list --filter="(retrieval-service)" --format="value(URL)")
Résultat attendu sur la console :
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$
Si le message "Hello World" s'affiche, cela signifie que le service est opérationnel et traite les requêtes.
8. Déployer un exemple d'application
Maintenant que le service de récupération est opérationnel, nous pouvons déployer un exemple d'application qui va l'utiliser. L'application peut être déployée sur la VM ou sur n'importe quel autre service comme Cloud Run ou Kubernetes, ou même localement sur un ordinateur portable. Nous allons maintenant voir comment la déployer sur la VM.
Préparer l'environnement
Nous continuons à travailler sur notre VM à l'aide de la même session SSH. Pour exécuter notre application, nous devons ajouter des modules Python. La commande sera exécutée à partir du répertoire de l'application dans le même environnement virtuel Python.
Dans la session SSH de la VM, exécutez :
cd ~/genai-databases-retrieval-app/llm_demo
pip install -r requirements.txt
Résultat attendu (masqué) :
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) ...
Préparer l'ID client
Pour utiliser la fonctionnalité de réservation de l'application, nous devons préparer l'ID client OAuth 2.0 à l'aide de la console Cloud. Sans cela, nous ne pouvons pas nous connecter à l'application avec nos identifiants Google pour effectuer une réservation. Nous en avons besoin pour enregistrer les données de réservation dans la base de données.
Dans Cloud Console, accédez à "API et services", puis cliquez sur "Écran de consentement OAuth". La page "Présentation d'OAuth" s'ouvre, puis nous cliquons sur "Commencer".
Sur la page suivante, nous indiquons le nom de l'application, l'adresse e-mail de l'assistance utilisateur, puis cliquez sur "Suivant".
Sur l'écran suivant, nous choisissons "Interne" pour notre application, puis nous cliquons à nouveau sur "Suivant".
Nous fournissons à nouveau une adresse e-mail de contact, puis cliquez sur "Suivant".
Nous acceptons ensuite les règles des services d'API Google, puis appuyons sur le bouton "Créer".
Nous serons alors redirigés vers la page où nous pouvons créer un client OAuth.
Sur l'écran, nous choisissons "Application Web" dans le menu déroulant, mettons "Cymbal Air" comme application et appuyons sur le bouton "Ajouter un URI".
Les URI représentent des sources fiables pour l'application et dépendent de l'endroit d'où vous essayez d'accéder à l'application. Nous avons défini "https://localhost:8081" comme URI autorisé et "https://localhost:8081/login/google" comme URI de redirection. Ces valeurs fonctionneraient si vous saisissez "https://localhost:8081" dans votre navigateur comme URI de connexion. Par exemple, lorsque vous vous connectez via un tunnel SSH depuis votre ordinateur. Je vous montrerai comment procéder plus tard.
Après avoir cliqué sur le bouton "Créer", une fenêtre pop-up s'affiche avec les identifiants de votre client. Les identifiants seront enregistrés dans le système. Vous pouvez toujours copier l'ID client à utiliser lorsque vous démarrez votre application.
Vous verrez plus tard où indiquer cet ID client.
Exécuter l'application Assistant
Avant de démarrer l'application, nous devons configurer certaines variables d'environnement. Les fonctionnalités de base de l'application, telles que l'interrogation des vols et les services de l'aéroport, ne nécessitent que BASE_URL, qui dirige l'application vers le service de récupération. Nous pouvons l'obtenir à l'aide de la commande gcloud .
Dans la session SSH de la VM, exécutez :
export BASE_URL=$(gcloud run services list --filter="(retrieval-service)" --format="value(URL)")
Résultat attendu (masqué) :
student@instance-1:~/genai-databases-retrieval-app/llm_demo$ export BASE_URL=$(gcloud run services list --filter="(retrieval-service)" --format="value(URL)")
Pour utiliser les fonctionnalités plus avancées de l'application, comme la réservation et la modification de vols, nous devons nous connecter à l'application à l'aide de notre compte Google. Pour ce faire, nous devons fournir la variable d'environnement CLIENT_ID à l'aide de l'ID client OAuth du chapitre "Préparer l'ID client" :
export CLIENT_ID=215....apps.googleusercontent.com
Résultat attendu (masqué) :
student@instance-1:~/genai-databases-retrieval-app/llm_demo$ export CLIENT_ID=215....apps.googleusercontent.com
Nous pouvons maintenant exécuter notre application:
python run_app.py
Résultat attendu :
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)
Se connecter à l'application
Vous avez plusieurs façons de vous connecter à l'application exécutée sur la VM. Par exemple, vous pouvez ouvrir le port 8081 sur la VM en utilisant les règles de pare-feu dans le VPC ou créer un équilibreur de charge avec une adresse IP publique. Dans ce cas, nous allons utiliser un tunnel SSH vers la VM en remplaçant le port 8080 local par le port 8081 de la VM.
Se connecter depuis une machine locale
Lorsque nous voulons nous connecter à partir d'une machine locale, nous devons exécuter un tunnel SSH. Vous pouvez le faire à l'aide de gcloud compute ssh:
gcloud compute ssh instance-1 --zone=us-central1-a -- -L 8081:localhost:8081
Résultat attendu :
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:~$
Nous pouvons maintenant ouvrir le navigateur et utiliser http://localhost:8081 pour nous connecter à notre application. L'écran de l'application devrait s'afficher.
Se connecter depuis Cloud Shell
Nous pouvons également utiliser Google Cloud Shell pour nous connecter. Ouvrez un autre onglet Cloud Shell à l'aide du signe "+" situé en haut.
Dans le nouvel onglet, obtenez l'URI d'origine et de redirection de votre client Web en exécutant la commande gcloud:
echo "origin:"; echo "https://8080-$WEB_HOST"; echo "redirect:"; echo "https://8080-$WEB_HOST/login/google"
Voici le résultat attendu :
student@cloudshell:~ echo "origin:"; echo "https://8080-$WEB_HOST"; echo "redirect:"; echo "https://8080-$WEB_HOST/login/google" origin: https://8080-cs-35704030349-default.cs-us-east1-rtep.cloudshell.dev redirect: https://8080-cs-35704030349-default.cs-us-east1-rtep.cloudshell.dev/login/google
Utilisez l'origine et la redirection des URI comme origines JavaScript autorisées et URI de redirection autorisés pour nos identifiants créés dans le chapitre "Préparer l'ID client", en remplaçant ou en ajoutant les valeurs http://localhost:8080 fournies à l'origine.
Cliquez sur "Cymbal Air" sur la page des ID client OAuth 2.0.
Indiquez les URI d'origine et de redirection pour Cloud Shell, puis cliquez sur le bouton "Enregistrer".
Dans le nouvel onglet Cloud Shell, démarrez le tunnel vers votre VM en exécutant la commande gcloud :
gcloud compute ssh instance-1 --zone=us-central1-a -- -L 8080:localhost:8081
Si le message d'erreur "Impossible d'attribuer l'adresse demandée" s'affiche, veuillez l'ignorer.
Voici le résultat attendu :
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:~$
Il ouvre le port 8080 dans Cloud Shell, qui peut être utilisé pour l'aperçu sur le Web.
Cliquez sur le bouton "Aperçu sur le Web" en haut à droite de votre Cloud Shell, puis sélectionnez "Prévisualiser sur le port 8080" dans le menu déroulant.
Un nouvel onglet affichant l'interface de l'application s'ouvre dans votre navigateur Web. La page "Assistant du service client Cymbal Air" devrait s'afficher.
Se connecter à l'application
Une fois que tout est configuré et que votre application est ouverte, nous pouvons utiliser le bouton "Se connecter" en haut à droite de l'écran de l'application pour fournir nos identifiants. Cette étape est facultative et n'est requise que si vous souhaitez tester la fonctionnalité de réservation de l'application.
Une fenêtre pop-up s'ouvre, dans laquelle nous pouvons choisir nos identifiants.
Une fois connecté, l'application est prête et vous pouvez commencer à publier vos requêtes dans le champ situé en bas de la fenêtre.
Cette démo présente l'assistant du service client Cymbal Air. Cymbal Air est une compagnie aérienne fictive. L'assistant est un chatbot basé sur l'IA, qui aide les voyageurs à gérer leurs vols et à rechercher des informations sur le hub Cymbal Air de l'aéroport international de San Francisco (SFO).
Sans connexion (sans CLIENT_ID), il peut aider à répondre aux questions suivantes:
Quand est le prochain vol pour Denver ?
Y a-t-il des boutiques de luxe aux environs de la porte C28 ?
Où puis-je prendre un café près de la porte A6 ?
Où puis-je acheter un cadeau ?
Veuillez réserver un vol pour Denver avec départ à 10h35.
Lorsque vous êtes connecté à l'application, vous pouvez essayer d'autres fonctionnalités, comme réserver des vols ou vérifier si le siège qui vous a été attribué est côté hublot ou côté couloir.
L'application utilise les derniers modèles de fondation de Google pour générer des réponses et l'enrichir avec des informations sur les vols et services issues de la base de données opérationnelle AlloyDB. Pour en savoir plus sur cette application de démonstration, consultez la page GitHub du projet.
9. Nettoyer l'environnement
Maintenant que toutes les tâches sont terminées, nous pouvons nettoyer notre environnement.
Supprimer le service Cloud Run
Dans Cloud Shell, exécutez :
gcloud run services delete retrieval-service --region us-central1
Résultat attendu sur la console :
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].
Supprimez le compte de service pour le service Cloud Run.
Dans Cloud Shell, exécutez :
PROJECT_ID=$(gcloud config get-value project)
gcloud iam service-accounts delete retrieval-identity@$PROJECT_ID.iam.gserviceaccount.com --quiet
Résultat attendu sur la console :
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)$
Détruisez les instances et le cluster AlloyDB une fois l'atelier terminé.
Supprimer le cluster AlloyDB et toutes les instances
Le cluster est détruit avec l'option "force", qui supprime également toutes les instances appartenant au cluster.
Dans Cloud Shell, définissez le projet et les variables d'environnement si vous avez été déconnecté et que tous les paramètres précédents sont perdus :
gcloud config set project <your project id>
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
export PROJECT_ID=$(gcloud config get-value project)
Supprimez le cluster :
gcloud alloydb clusters delete $ADBCLUSTER --region=$REGION --force
Résultat attendu sur la console :
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.
Supprimer les sauvegardes AlloyDB
Supprimez toutes les sauvegardes AlloyDB du cluster :
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
Résultat attendu sur la console :
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.
Nous pouvons maintenant détruire notre VM.
Supprimer la VM GCE
Dans Cloud Shell, exécutez :
export GCEVM=instance-1
export ZONE=us-central1-a
gcloud compute instances delete $GCEVM \
--zone=$ZONE \
--quiet
Résultat attendu sur la console :
student@cloudshell:~ (test-project-001-402417)$ export GCEVM=instance-1 export ZONE=us-central1-a gcloud compute instances delete $GCEVM \ --zone=$ZONE \ --quiet Deleted
Supprimez le compte de service pour la VM GCE et le service de récupération.
Dans Cloud Shell, exécutez :
PROJECT_ID=$(gcloud config get-value project)
gcloud iam service-accounts delete compute-aip@$PROJECT_ID.iam.gserviceaccount.com --quiet
Résultat attendu sur la console :
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. Félicitations
Bravo ! Vous avez terminé cet atelier de programmation.
Points abordés
- Déployer un cluster AlloyDB
- Se connecter à AlloyDB
- Configurer et déployer le service de récupération de bases de données par IA générative
- Déployer un exemple d'application à l'aide du service déployé
11. Enquête
Résultat :