1. Présentation
Dans cet atelier, vous allez utiliser les produits d'IA générative de Google pour créer une infrastructure dans Google Cloud à l'aide de Gemini Cloud Assist, interroger des données BigQuery à l'aide des fonctionnalités de langage naturel vers SQL de Data Canvas, écrire du code dans les notebooks Jupyter Colab Enterprise et dans Eclipse Theia (Visual Studio Code) à l'aide de Gemini Code Assist, et intégrer des fonctionnalités de recherche et de chat basées sur l'IA et reposant sur des sources d'ancrage Cloud Storage et BigQuery dans Vertex AI Agent Builder.
Notre objectif est de créer un site Web de recettes et de cuisine appelé AI Recipe Haven. Le site sera créé en Python et Streamlit, et comportera deux pages principales. Cooking Advice hébergera un chatbot que nous créerons à l'aide de Gemini et d'une source ancrée Vertex AI Agent Builder liée à un groupe de livres de cuisine. Il proposera des conseils de cuisine et répondra aux questions liées à la cuisine. La recherche de recettes sera un moteur de recherche alimenté par Gemini, cette fois-ci ancré dans une base de données de recettes BigQuery.
Si vous rencontrez des difficultés avec le code de cet exercice, les solutions pour tous les fichiers de code se trouvent dans le dépôt GitHub de l'exercice, dans la branche solution.
Objectifs
Dans cet atelier, vous allez apprendre à effectuer les tâches suivantes :
- Activer et utiliser Gemini Cloud Assist
- Créer une application de recherche dans Vertex AI Agent Builder pour le chatbot de conseils culinaires
- Charger et nettoyer des données dans un notebook Colab Enterprise avec l'aide de Gemini Code Assist
- Créer une application de recherche dans Vertex AI Agent Builder pour le générateur de recettes
- Définir le framework de l'application Web Python et Streamlit, avec un peu d'aide de Gemini
- Déployer l'application Web sur Cloud Run
- Associer la page "Conseils de cuisine" à notre application Agent Builder de recherche de livres de cuisine
- (Facultatif) Connectez la page de recherche de recettes à l'application Agent Builder de recherche de recettes
- (Facultatif) Explorer l'application finale
2. Prérequis
- Si vous n'avez pas encore de compte Google, vous devez en créer un.
- Utilisez un compte personnel au lieu d'un compte professionnel ou scolaire. Il est possible que des restrictions s'appliquent aux comptes professionnels et scolaires, ce qui vous empêche d'activer les API nécessaires pour cet atelier.
3. Configuration du projet
- Connectez-vous à la console Google Cloud.
- Activez la facturation dans la console Cloud.
- Cet atelier devrait vous coûter moins de 1 USD en ressources Cloud.
- Vous pouvez suivre les étapes à la fin de cet atelier pour supprimer les ressources et éviter ainsi des frais supplémentaires.
- Les nouveaux utilisateurs peuvent bénéficier d'un essai sans frais pour bénéficier d'un crédit de 300$.
- Vous participez à un atelier pratique virtuel ? Un avoir de 5$ peut être disponible.
- Créez un projet ou réutilisez-en un existant.
- Vérifiez que la facturation est activée dans Mes projets de la section Facturation Cloud
- .
- Si votre nouveau projet indique
Billing is disableddans la colonneBilling account:- Cliquez sur les trois points dans la colonne
Actions. - Cliquez sur Modifier la facturation.
- Sélectionnez le compte de facturation que vous souhaitez utiliser.
- Cliquez sur les trois points dans la colonne
- Si vous participez à un événement en direct, le compte s'intitulera probablement Compte de facturation d'essai de Google Cloud Platform.
- Si votre nouveau projet indique
4. Activer et utiliser Gemini Cloud Assist
Dans cette tâche, nous allons activer et utiliser Gemini Cloud Assist. Lorsque vous travaillez dans la console Google Cloud, Gemini Cloud Assist peut vous conseiller, vous aider à créer, configurer et surveiller votre infrastructure Google Cloud, et même suggérer des commandes gcloud et écrire des scripts Terraform.
- Pour activer Cloud Assist, cliquez dans le champ de recherche en haut de l'interface utilisateur de la console Cloud, puis sélectionnez Demander à Gemini ou Demander à Gemini pour la console Cloud.
- Faites défiler la page jusqu'à la section "API requise", puis activez l'API Gemini pour Google Cloud.
- Si l'interface de chat ne s'affiche pas immédiatement, cliquez sur Commencer à discuter. Commencez par demander à Gemini de vous expliquer certains des avantages de l'utilisation de l'éditeur Cloud Shell. Prenez quelques minutes pour explorer la réponse générée.
- Ensuite, posez des questions sur les avantages d'Agent Builder et sur la façon dont il peut aider à ancrer les réponses génératives.
- Enfin, examinons une comparaison. Dans la fenêtre de chat Gemini de la console Google Cloud, posez la question suivante :
What are the major steps to creating a search app grounded in a GCS data source using Vertex AI Agent builder?
5. Créer une application de recherche dans Vertex AI Agent Builder pour le chatbot de conseils culinaires
Le site Web que nous allons créer comportera une page de conseils de cuisine contenant un chatbot conçu pour aider les utilisateurs à trouver des réponses à leurs questions sur la cuisine. Il s'appuiera sur Gemini, ancré dans une source contenant 70 livres de cuisine du domaine public. Les cookbooks serviront de source de référence à Gemini pour répondre aux questions.
- Utilisez le champ de recherche de la console Cloud pour accéder à Vertex AI. Dans le tableau de bord, cliquez sur Activer toutes les API recommandées. Cette opération peut prendre quelques minutes. Si une fenêtre pop-up s'affiche pour vous demander d'activer l'API Vertex AI, veuillez également cliquer sur Activer. Une fois les API activées, vous pouvez passer à l'étape suivante.
- Utilisez la recherche pour accéder à Agent Builder, puis cliquez sur Continuer et activer l'API.
- Comme Gemini l'a suggéré dans nos conseils précédents, la création d'une application de recherche dans Agent Builder commence par la création d'une source de données faisant autorité. Lorsque l'utilisateur effectue une recherche, Gemini comprend la question et sait comment composer des réponses intelligentes. Toutefois, il s'appuie sur la source ancrée pour obtenir les informations utilisées dans cette réponse, plutôt que de puiser dans ses connaissances innées. Dans le menu de gauche, accédez à Datastores, puis cliquez sur Créer un datastore.
- Les livres de cuisine du domaine public que nous utilisons pour étayer notre page de conseils de cuisine se trouvent actuellement dans un bucket Cloud Storage d'un projet externe. Sélectionnez le type de source Cloud Storage.
- Examinez les options par défaut liées au type d'informations que vous importez, mais ne les modifiez pas. Laissez le type d'importation défini sur Dossier, puis utilisez le chemin d'accès au bucket suivant :
labs.roitraining.com/labs/old-cookbooks, puis cliquez sur Continuer. - Nommez le data store :
old-cookbooks. Cliquez sur MODIFIER, remplacez l'ID parold-cookbooks-id, puis cliquez sur Créer pour créer le datastore.
Vertex AI Agent Builder est compatible avec plusieurs types d'applications, et le datastore sert de source de vérité pour chacun d'eux. Les applications de recherche sont adaptées à l'utilisation générale et à la recherche. Les applications de chat sont destinées aux flux génératifs dans les applications de chatbot/voicebot basées sur Dataflow. Les applications de recommandations aident à créer de meilleurs moteurs de recommandations. Les applications d'agent permettent de créer des agents basés sur l'IA générative. À terme, le type d'application "Agent" sera probablement le plus adapté à nos besoins, mais comme le produit est actuellement en version Preview, nous allons nous en tenir au type d'application "Recherche".
- Dans le menu de gauche, accédez à Applications, puis cliquez sur Créer une application.
- Cliquez sur Créer dans la fiche Rechercher pour votre site Web. Nommez l'application
cookbook-search. Cliquez sur Modifier, puis définissez l'ID de l'application surcookbook-search-id. Définissez l'entreprise surGoogle, puis cliquez sur Continuer. - Cochez le datastore old-cookbooks que vous avez créé il y a quelques étapes, puis cliquez sur Créer pour créer l'application de recherche.
Si vous examinez l'onglet Activité, vous verrez probablement que les livres de recettes sont toujours en cours d'importation et d'indexation. L'indexation des milliers de pages contenues dans les 70 livres de cuisine que nous lui avons fournis prendra au moins cinq minutes. Pendant qu'il fonctionne, chargeons et nettoyons des données de base de données de recettes pour notre générateur de recettes.
6. Charger et nettoyer des données dans un notebook Colab Enterprise avec l'aide de Gemini Code Assist
Google Cloud propose plusieurs méthodes principales pour travailler avec les notebooks Jupyter. Nous allons utiliser la dernière offre de Google, Colab Enterprise. Certains d'entre vous connaissent peut-être le produit Colab de Google, couramment utilisé par les particuliers et les organisations qui souhaitent expérimenter avec les notebooks Jupyter dans un environnement sans frais. Colab Enterprise est une offre commerciale Google Cloud entièrement intégrée au reste des produits cloud de Google. Elle tire pleinement parti des fonctionnalités de sécurité et de conformité de l'environnement GCP.
Colab Enterprise propose, entre autres, l'intégration à Gemini Code Assist de Google. Code Assist peut être utilisé dans différents éditeurs de code. Il peut vous donner des conseils et vous proposer des suggestions intégrées pendant que vous codez. Nous allons utiliser cet assistant génératif pour organiser les données de nos recettes.
- Utilisez la recherche pour accéder à Colab Enterprise, puis cliquez sur Créer un notebook. Si vous recevez une offre pour tester de nouvelles fonctionnalités Colab, ignorez-la. Pour que le runtime, la puissance de calcul derrière le notebook, soit opérationnel, cliquez sur Connecter en haut à droite de votre nouveau notebook.

- Cliquez sur Fichier > Renommer pour renommer le notebook
Data Wrangling.
- Cliquez sur + Texte pour créer une zone de texte, puis utilisez la flèche vers le haut pour la déplacer afin qu'elle devienne la première cellule de la page.

- Modifiez la zone de texte et saisissez :
# Data Wrangling Import the Pandas library - Dans le bloc de code situé sous le bloc de texte que vous venez de créer, commencez à saisir
imp. Gemini Code Assist devrait suggérer le reste de l'importation en gris. Appuyez sur Tabulation pour accepter la suggestion.import pandas as pd - Sous la zone de code d'importation, créez une autre zone de texte et saisissez :
Create a Pandas DataFrame from: gs://labs.roitraining.com/labs/recipes/recipe_dataset.csv. View the first few records. - Créez et modifiez un autre bloc de code. Saisissez à nouveau
df =et examinez le code généré par Gemini Code Assist. Si une liste déroulante de saisie semi-automatique de mots clés Python s'affiche au-dessus de la suggestion générée, appuyez sur la touche Échap pour afficher le code suggéré en gris clair. Appuyez à nouveau sur Tabulation pour accepter la suggestion. Si votre suggestion ne contenait pas l'appel de fonctionhead(), ajoutez-le.df = pd.read_csv('gs://labs.roitraining.com/labs/recipes/recipe_dataset.csv') df.head() - Cliquez sur votre première cellule de code, où vous avez importé Pandas, puis utilisez le menu Commands (Commandes) ou le clavier pour exécuter la cellule sélectionnée. Sur le clavier, Maj+Entrée exécute la cellule et déplace le curseur vers la cellule suivante, en en créant une si nécessaire. Attendez que la cellule s'exécute avant de passer à la suivante.REMARQUE : Vous verrez [ ] juste à gauche lorsqu'une cellule n'a pas été exécutée. Lorsqu'une cellule est en cours d'exécution, une animation de chargement s'affiche. Une fois la cellule terminée, un nombre s'affiche, comme [13].
- Exécutez la cellule qui charge le fichier CSV dans le DataFrame. Attendez que le fichier se charge, puis examinez les cinq premières lignes de données. Il s'agit des données de recettes que nous allons charger dans BigQuery et que nous utiliserons par la suite pour ancrer notre générateur de recettes.
- Créez un bloc de code et saisissez le commentaire ci-dessous. Après avoir saisi le commentaire, passez à la ligne de code suivante. La suggestion
df.columnsdevrait s'afficher. Acceptez-le, puis exécutez la cellule. Nous venons de vous montrer que vous avez deux possibilités pour obtenir de l'aide de Gemini Code Assist dans un notebook Jupyter : les cellules de texte au-dessus des cellules de code ou les commentaires à l'intérieur de la cellule de code elle-même. Les commentaires dans les cellules de code fonctionnent bien dans les notebooks Jupyter, mais cette approche fonctionnera également dans tout autre IDE compatible avec Gemini Code Assist de Google.# List the current DataFrame column names - Nettoyons un peu les colonnes. Renommez la colonne
Unnamed: 0enidetlinkenuri. Utilisez la technique de votre choix (requête > code) pour créer le code, puis exécutez la cellule lorsque vous êtes satisfait du résultat.# Rename the column 'Unnamed: 0' to 'id' and 'link' to 'uri' df.rename(columns={'Unnamed: 0': 'id', 'link': 'uri'}, inplace=True) - Supprimez les colonnes
sourceetNER, puis utilisezhead()pour afficher les premières lignes. Demandez de nouveau l'aide de Gemini. Exécutez les deux dernières lignes et examinez les résultats.# Remove the source and NER columns df.drop(columns=['source', 'NER'], inplace=True) df.head() - Voyons combien d'enregistrements contient notre ensemble de données. Encore une fois, commencez par choisir une technique de requête et voyez si vous pouvez obtenir l'aide de Gemini pour générer le code.
# Count the records in the DataFrame df.shape # count() will also work - 2,23 millions d'enregistrements, c'est probablement plus de recettes que nous n'avons le temps de consulter. Le processus d'indexation dans Agent Builder prendrait probablement trop de temps pour notre exercice d'aujourd'hui. Pour faire un compromis, échantillonnons 150 000 recettes et travaillons avec cet échantillon. Utilisez votre approche "requête > code" pour extraire l'échantillon et le stocker dans un DataFrame nommé
dfs(s pour "small").# Sample out 150,000 records into a DataFrame named dfs dfs = df.sample(n=150000) - Les données sources de nos recettes sont prêtes à être chargées dans BigQuery. Avant de charger les données, accédez à BigQuery et préparez un ensemble de données pour contenir notre table. Dans la console Google Cloud, utilisez le champ de recherche pour accéder à BigQuery. Vous pouvez effectuer un clic droit sur BigQuery et l'ouvrir dans un nouvel onglet du navigateur.
- Si le panneau de discussion Gemini IA n'est pas déjà visible, ouvrez-le à l'aide du logo Gemini en haut à droite de la console Cloud. Si vous êtes à nouveau invité à activer l'API, cliquez sur "Activer" ou actualisez la page. Exécutez la requête :
What is a dataset used for in BigQuery?Après avoir exploré la réponse, demandezHow can I create a dataset named recipe_data using the Cloud Console?Compare les résultats aux étapes suivantes.
- Dans le volet "Explorateur" de BigQuery, cliquez sur le menu à trois points Afficher les actions à côté de l'ID de votre projet. Sélectionnez ensuite Créer un ensemble de données.

- Attribuez à l'ensemble de données l'ID
recipe_data. Laissez le type d'emplacement sur États-Unis, puis cliquez sur Créer un ensemble de données. Si vous recevez un message d'erreur indiquant que l'ensemble de données existe déjà, passez simplement à l'étape suivante.Une fois l'ensemble de données créé dans BigQuery, revenons à notre notebook et effectuons l'insertion. - Revenez à votre notebook de préparation des données dans Colab Enterprise. Dans une nouvelle cellule de code, créez une variable nommée
project_idet utilisez-la pour stocker l'ID de votre projet actuel. Vous trouverez l'ID du projet actuel en haut à gauche de ces instructions, sous le bouton "Terminer l'atelier". Vous pouvez également le trouver sur la page d'accueil de la console Cloud. Attribuez la valeur à votre variableproject_idet exécutez la cellule.# Create a variable to hold the current project_id project_id='YOUR_PROJECT_ID' - Utilisez l'approche "requête > code" pour créer un bloc de code qui insérera le DataFrame
dfsdans une table nomméerecipesdans l'ensemble de données que nous venons de créerrecipe_data. Exécutez le code de la cellule.dfs.to_gbq(destination_table='recipe_data.recipes', project_id=project_id, if_exists='replace')
7. Créer une application de recherche dans Vertex AI Agent Builder pour le générateur de recettes
Excellent ! Maintenant que nous avons créé notre tableau de données de recettes, utilisons-le pour créer une source de données ancrée pour notre générateur de recettes. L'approche que nous allons utiliser sera similaire à celle que nous avons adoptée pour notre chatbot de cuisine. Nous allons utiliser Vertex AI Agent Builder pour créer un datastore, puis l'utiliser comme source de vérité pour une application de recherche.
Si vous le souhaitez, n'hésitez pas à demander à Gemini dans la console Google Cloud de vous rappeler les étapes à suivre pour créer une application de recherche Agent Builder. Vous pouvez également suivre les étapes ci-dessous.
- Utilisez la recherche pour accéder à Agent Builder. Ouvrez Datastores et Créer un datastore. Cette fois, sélectionnez le type de data store BigQuery.
- Dans la cellule de sélection de la table, appuyez sur Parcourir et recherchez
recipes. Cochez la case d'option à côté de votre tableau. Si vous voyez des recettes provenant d'autres projets qwiklabs-gcp-..., assurez-vous de sélectionner celle qui vous appartient.REMARQUE : Si vous cliquez surrecipesau lieu de sélectionner la case d'option à côté, un nouvel onglet s'ouvre dans votre navigateur et vous redirige vers la page d'aperçu de la table dans BigQuery. Il vous suffit de fermer l'onglet du navigateur et de sélectionner la case d'option dans Agent Builder. - Examinez les autres options par défaut, mais ne les modifiez pas, puis cliquez sur Continuer.
- Sur la page d'examen du schéma, examinez les configurations par défaut initiales, mais ne modifiez rien. Continuer
- Nommez le data store
recipe-data. Modifiez l'ID du datastore et définissez-le surrecipe-data-id. Créez le datastore. - Accédez à Applications à l'aide du menu de navigation de gauche, puis cliquez sur Créer une application.
- Cliquez sur Créer dans la fiche Rechercher pour votre site Web. Nommez l'application
recipe-search, puis cliquez sur MODIFIER pour définir l'ID surrecipe-search-id. Définissez le nom de l'entreprise surGoogle, puis cliquez sur Continuer. - Cette fois, vérifiez les sources de données recipe-data. Créez l'application.
L'indexation de notre table de base de données prendra un certain temps. En attendant, testons le nouveau Data Canvas de BigQuery et voyons si nous pouvons trouver une ou deux recettes intéressantes.
- Utilisez le champ de recherche pour accéder à BigQuery. En haut de BigQuery Studio, cliquez sur la flèche vers le bas à côté de l'onglet le plus à droite, puis sélectionnez Canevas de données. Définissez la région sur us-central1.

- Cliquez sur Rechercher des données. Dans le champ de recherche du canevas de données, recherchez
recipes, appuyez surEnter/Returnpour lancer la recherche, puis cliquez sur le bouton Ajouter au canevas à côté du nom de votre tableau. - Une représentation visuelle de votre tableau de recettes sera chargée dans le canevas de données BigQuery. Vous pouvez explorer le schéma de la table, prévisualiser les données qu'elle contient et examiner d'autres détails. Sous la représentation du tableau, cliquez sur Requête.
- Le canevas chargera une boîte de dialogue de requête BigQuery plus ou moins typique, avec une nouveauté : au-dessus de la fenêtre de requête se trouve une zone de texte que vous pouvez utiliser pour demander de l'aide à Gemini. Voyons si nous pouvons trouver des recettes de gâteaux dans notre échantillon. Exécutez la requête suivante (en saisissant le texte et en appuyant sur
Enter/Returnpour déclencher la génération SQL) :Please select the title and ingredients for all the recipes with a title that contains the word cake. - Examinez le code SQL généré. Une fois que vous avez terminé, exécutez la requête.
- Pas mal ! N'hésitez pas à tester d'autres requêtes et requêtes avant de passer à la suite. Lorsque vous faites des tests, essayez des requêtes moins spécifiques pour voir ce qui fonctionne et ce qui ne fonctionne pas. Par exemple, ce prompt :
(N'oubliez pas d'exécuter la nouvelle requête) a renvoyé une liste de recettes de chili, mais a omis les ingrédients jusqu'à ce que je la modifie en :Do I have any chili recipes? (Oui, je dis "s'il vous plaît" quand je fais une requête. Ma mère serait si fière de moi.) J'ai remarqué qu'une recette de chili contenait des champignons, et qui voudrait ça dans un chili ? J'ai demandé à Gemini de m'aider à exclure ces recettes.Do I have any chili recipes? Please include their title and ingredients.Do I have any chili recipes? Please include their title and ingredients, and ignore any recipes with mushrooms as an ingredient.
8. Ouvrir l'éditeur Cloud Shell
- Accédez à l'éditeur Cloud Shell.
- Si le terminal ne s'affiche pas en bas de l'écran, ouvrez-le :
- Cliquez sur le menu hamburger
. - Cliquez sur Terminal
- Cliquez sur Nouveau terminal

- Cliquez sur le menu hamburger
- Dans le terminal, définissez votre projet à l'aide de la commande suivante :
- Format :
gcloud config set project [PROJECT_ID] - Exemple :
gcloud config set project lab-project-id-example - Si vous ne vous souvenez pas de l'ID de votre projet :
- Vous pouvez lister tous vos ID de projet avec la commande suivante :
gcloud projects list | awk '/PROJECT_ID/{print $2}'

- Vous pouvez lister tous vos ID de projet avec la commande suivante :
- Format :
- Si vous êtes invité à autoriser l'accès, cliquez sur Autoriser pour continuer.

- Le message suivant doit s'afficher :
Si le messageUpdated property [core/project].
WARNINGs'affiche et que vous êtes invité àDo you want to continue (Y/N)?, cela signifie probablement que vous avez saisi l'ID de projet de manière incorrecte. Appuyez surN, puis surEnter, et réessayez d'exécuter la commandegcloud config set project.
9. Activer les API
Dans le terminal, activez les API :
gcloud services enable \
compute.googleapis.com \
sqladmin.googleapis.com \
run.googleapis.com \
artifactregistry.googleapis.com \
cloudbuild.googleapis.com \
networkconnectivity.googleapis.com \
servicenetworking.googleapis.com \
cloudaicompanion.googleapis.com
Si vous êtes invité à autoriser l'accès, cliquez sur Autoriser pour continuer. 
L'exécution de cette commande peut prendre quelques minutes, mais un message semblable à celui qui suit devrait s'afficher pour vous indiquer que l'opération s'est correctement déroulée :
Operation "operations/acf.p2-73d90d00-47ee-447a-b600" finished successfully.
10. Définir le framework de l'application Web Python et Streamlit, avec un peu d'aide de Gemini
Maintenant que nos deux data stores Vertex AI Agent Builder sont indexés et que nos applications de recherche sont presque prêtes à être déployées, passons à la création de notre application Web.
Nous utiliserons Gemini Code Assist pendant que nous travaillerons. Pour en savoir plus sur l'utilisation de Gemini Code Assist dans Visual Studio Code, consultez la documentation.
- Dans le terminal de l'éditeur Cloud Shell, exécutez cette commande pour cloner le dépôt de l'application de recettes.
git clone https://github.com/haggman/recipe-app - Exécutez cette commande pour ouvrir le dossier de l'application dans l'éditeur Cloud Shell.
cloudshell open-workspace recipe-app/ - Avant d'explorer le dossier cloné et de commencer à travailler sur notre application Web, nous devons connecter le plug-in Cloud Code de l'éditeur à Google Cloud et activer Gemini. Alors allons-y. En bas à gauche de l'éditeur, cliquez sur Cloud Code - Se connecter. Si le lien ne s'affiche pas, patientez une minute et vérifiez à nouveau.

- Une longue URL s'affiche dans la fenêtre du terminal. Ouvrez l'URL dans le navigateur et suivez les étapes pour accorder à Cloud Code l'accès à votre environnement Google Cloud. Dans la dernière boîte de dialogue, cliquez sur Copier pour copier le code de validation, puis collez-le dans la fenêtre du terminal en attente dans l'onglet de votre navigateur Cloud Shell Editor.
- Au bout de quelques instants, le lien Cloud Code en bas à gauche de votre éditeur devient Cloud Code – Aucun projet. Cliquez sur le nouveau lien pour sélectionner un projet. La palette de commandes devrait s'ouvrir en haut de l'éditeur. Cliquez sur Sélectionner un projet Google Cloud, puis sélectionnez votre projet. Après quelques instants, le lien en bas à gauche de l'éditeur est mis à jour et affiche l'ID de votre projet. Cela indique que Cloud Code est correctement associé à votre projet de travail.
- Une fois Cloud Code connecté à votre projet, vous pouvez activer Gemini Code Assist. En bas à droite de l'interface de l'éditeur, cliquez sur le logo Gemini barré. Le panneau de chat Gemini s'ouvre à gauche de l'éditeur. Cliquez sur Sélectionner un projet Google Cloud. Lorsque la palette de commandes s'ouvre, sélectionnez votre projet. Si vous avez correctement suivi les étapes (et que Google n'a rien changé), vous devriez maintenant voir une fenêtre de chat Gemini active.

- Excellent ! Maintenant que nous avons configuré le terminal, le chat Gemini et Cloud Code, ouvrez l'onglet Explorateur et prenez quelques minutes pour explorer les fichiers du projet actuel.

- Dans l'explorateur, ouvrez votre fichier
requirements.txtpour le modifier. Passez au panneau de chat Gemini et posez la question suivante :From the dependencies specified in the requirements.txt file, what type of application are we building? - Nous allons donc créer une application Web interactive à l'aide de Python et de Streamlit, qui interagit avec Vertex AI et Discovery Engine. Pour l'instant, concentrons-nous sur les composants de l'application Web. Comme le dit Gemini, Streamlit est un framework permettant de créer des applications Web axées sur les données en Python. Demandez à présent :
C'est là que Gemini a tendance à rencontrer des problèmes. Gemini peut accéder au fichier que vous avez actuellement ouvert dans l'éditeur, mais il ne peut pas voir l'ensemble du projet. Essayez de poser cette question :Does the current project's folder structure seem appropriate for a Streamlit app? Obtenir une meilleure réponse ?Given the below, does the current project's file and folder structure seem appropriate for a Streamlit app? - build.sh - Home.py - requirements.txt - pages -- Cooking_Advice.py -- Recipe_Search.py - Voici quelques informations supplémentaires sur Streamlit :
Bien, nous pouvons voir que Gemini nous offre un bel aperçu, y compris les avantages et les inconvénients.What can you tell me about Streamlit? - Si vous souhaitez explorer les inconvénients, vous pouvez demander :
Notez que nous n'avons pas eu à préciser "de Streamlit", car Gemini Chat est conversationnel (multitours). Gemini sait de quoi nous parlons, car nous sommes dans une session de chat. Si vous souhaitez effacer l'historique des discussions Gemini à tout moment, utilisez l'icône en forme de corbeille en haut de la fenêtre de chat Gemini.What are the major downsides or shortcomings?
11. Déployer l'application Web sur Cloud Run
Parfait, la structure de notre application principale est en place, mais tout fonctionnera-t-il ? Mieux encore, où devrions-nous l'héberger dans Google Cloud ?
- Dans la fenêtre de chat Gemini, posez la question suivante :
If I containerize this application, what compute technologies in Google Cloud would be best for hosting it? - N'oubliez pas que si vous ne travailliez pas déjà dans votre IDE, vous pouviez également demander de l'aide à Google Cloud Assist. Ouvrez la console Google Cloud, puis Gemini Cloud Assist et posez la question suivante :
Les deux ensembles de conseils étaient-ils identiques ? Êtes-vous d'accord avec certains de ces conseils ? N'oubliez pas que Gemini est un assistant d'IA générative. Comme avec un assistant humain, vous ne serez pas toujours d'accord avec tout ce qu'il dit. Toutefois, le fait d'avoir cet assistant toujours à vos côtés lorsque vous travaillez dans Google Cloud et dans votre éditeur de code peut vous rendre beaucoup plus efficace.If I have a containerized web application, where would be the best place to run it in Google Cloud? - Cloud Run est une excellente option pour une application Web conteneurisée sans état et de courte durée. Dans la fenêtre de chat Gemini de votre éditeur de code, essayez le prompt suivant :
What steps would be required to run this application in Cloud Run? - Il semble que la première chose à faire est de créer un Dockerfile. À l'aide de l'éditeur, créez un fichier nommé
Dockerfileà la racine du dossier de votre projet. Veillez à ne pas le placer accidentellement dans le dossier pages. Ouvrez le fichier pour le modifier. - Utilisons le panneau de chat Gemini latéral pour créer notre Dockerfile. Utilisez un prompt comme celui ci-dessous. Lorsque les résultats s'affichent dans le chat, utilisez le signe + à côté de l'icône de copie, juste au-dessus du Dockerfile suggéré, pour insérer le code suggéré dans le Dockerfile.
Gemini ne renvoie pas toujours la même réponse à un même prompt. La première fois que j'ai demandé un Dockerfile à Gemini, j'ai obtenu exactement le fichier que je vais vous suggérer d'utiliser. Je viens de recevoir la suggestion suivante :Create a Dockerfile for the application in the current folder. The dependencies are defined in requirements.txt and I want you to use the Python 3 slim bookworm base image. Voilà un Dockerfile qui a de la gueule. Je simplifierais un peu les choses. Nous n'avons pas besoin de la section apt-get, car tout ce qui est nécessaire pour Python se trouve déjà dans notre image de base. De plus, l'utilisation d'un environnement virtuel dans un conteneur Python est un gaspillage d'espace. Je vous recommande donc de le supprimer. La commande "expose" n'est pas strictement nécessaire, mais elle est acceptable. Il essaie également de démarrer main.py, que je n'ai pas.# Base image FROM python:3-bookworm-slim # Set working directory WORKDIR /app # Install dependencies RUN apt-get update && apt-get install -y \ build-essential \ libpq-dev \ gcc \ python3-dev \ && rm -rf /var/lib/apt/lists/* # Install pip and virtualenv RUN pip install --upgrade pip virtualenv # Create virtual environment RUN python3 -m venv venv # Activate virtual environment WORKDIR /app/venv/bin RUN . activate # Install Streamlit and libraries from requirements.txt RUN pip install -r requirements.txt # Copy application files COPY . /app # Expose port 8501 for Streamlit EXPOSE 8501 # Start Streamlit app CMD ["streamlit", "run", "main.py"] - Dans le dossier
recipe-app, créez un fichier appeléDockerfileet collez-y le contenu suivant :FROM python:3.11-slim-bookworm WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir --upgrade pip && \ pip install --no-cache-dir -r requirements.txt COPY . . CMD ["streamlit", "run", "Home.py"] - Gemini peut fonctionner dans la fenêtre de chat, mais aussi directement dans votre fichier de code à l'aide de commentaires, comme nous l'avons fait dans le notebook "Data Wrangling". Il peut également être invoqué à l'aide de la commande Ctrl+i sur Windows ou Cmd+i sur Mac. Cliquez n'importe où dans
Dockerfile, puis activez Gemini à l'aide de la commande appropriée Cmd+i / Ctrl+i. - À l'invite, saisissez ce qui suit. Examinez la modification et acceptez-la.
Pratique, non ? Combien de fois avez-vous dû travailler sur le code d'une autre personne, pour ensuite perdre du temps à comprendre les bases de son travail sans commentaires avant de pouvoir commencer à apporter vos modifications ? Gemini à la rescousse !Please comment the current file. - Demandez maintenant à Gemini comment utiliser Cloud Run pour créer et déployer une nouvelle image nommée
recipe-web-appà partir du fichier Dockerfile du dossier actuel.How could I use gcloud to build a new Cloud Run service named recipe-web-app from the current directory? - Développons et déployons notre application. Dans la fenêtre de terminal, exécutez la commande
gcloud run deploy. Si vous êtes invité à créer un dépôt Artifact Registry, appuyez surgcloud run deploy recipe-web-app \ --allow-unauthenticated \ --source=. \ --region=us-central1 \ --port=8501enter/return.Deploying from source requires an Artifact Registry Docker repository to store built containers. A repository named cloud-run-source-deploy in region us-central1 will be created. Do you want to continue (Y/n)?
- Si vous surveillez le processus de compilation, il compilera d'abord le dépôt Docker Artifact Registry. Il utilise ensuite Cloud Build pour créer l'image de conteneur à partir du Dockerfile dans le dossier local. Enfin, l'image Docker sera déployée dans un nouveau service Cloud Run. À la fin du script, vous obtiendrez une URL de test Cloud Run à utiliser.
Ouvrez le lien renvoyé dans un nouvel onglet de votre navigateur. Prenez quelques instants pour explorer la structure et les pages de l'application. Bien, nous avons maintenant besoin d'un crochet dans notre fonctionnalité d'IA générative.
12. Associer la page "Conseils de cuisine" à notre application Agent Builder de recherche de livres de cuisine
Le framework de l'application Web est en cours d'exécution, mais nous devons connecter les deux pages de travail à nos deux applications de recherche Vertex AI Agent Builder. Commençons par les conseils de cuisine.
- Laissez l'onglet de l'éditeur Cloud Shell ouvert. Dans la console Google Cloud, utilisez la recherche pour accéder à Chat dans Vertex AI.
- Dans le volet de la page des paramètres situé à droite, définissez le modèle sur gemini-1.5-flash-002. Faites glisser la limite de jetons de sortie jusqu'au maximum pour que le modèle puisse renvoyer des réponses plus longues si nécessaire. Ouvrez les paramètres du filtre de sécurité. Définissez les contenus incitant à la haine, à caractère sexuel explicite et de harcèlement sur Bloquer certains. Définissez "Contenu dangereux" sur Bloquer peu, puis cliquez sur Enregistrer. Nous avons défini le paramètre "Contenu dangereux" sur une valeur un peu plus basse, car Gemini peut interpréter les propos sur les couteaux et les coupures comme de la violence.
- Faites glisser le bouton pour activer l'ancrage, puis cliquez sur Personnaliser. Définissez la source d'ancrage sur Vertex AI Search et utilisez le chemin d'accès au datastore suivant. Remplacez YOUR_PROJECT_ID par l'ID de projet indiqué près du bouton "Terminer l'atelier" dans ces instructions, puis enregistrez les paramètres d'ancrage.
REMARQUE : Si vous recevez un message d'erreur, cela signifie que vous n'avez pas remplacé l'ID de projet par le vôtre ou que vous avez peut-être oublié l'étape où vous avez modifié l'ancien ID de data store Agent Builder. Vérifiez l'ID de datastore réel de old-cookbooks dans Agent Builder > Datastores > old-cookbooks.projects/YOUR_PROJECT_ID/locations/global/collections/default_collection/dataStores/old-cookbooks-id - Testez quelques messages de chat. Vous pouvez commencer par les questions ci-dessous. Vous pouvez essayer d'autres hôtels si vous le souhaitez.
How can I tell if a tomato is ripe? - Le modèle fonctionne. Maintenant, testons le code. Cliquez sur Effacer la conversation pour que nos conversations ne fassent pas partie du code, puis cliquez sur Obtenir le code.

- En haut de la fenêtre de code, appuyez sur Ouvrir le notebook pour que nous puissions tester et perfectionner le code dans Colab Enterprise avant de l'intégrer à notre application.
- Prenez quelques minutes pour vous familiariser avec le code. Apportons quelques modifications pour l'adapter à nos besoins. Avant de commencer, exécutez la première cellule de code pour vous connecter au calcul et installer le SDK AI Platform. Une fois le bloc exécuté, vous serez invité à redémarrer la session. Faites-le.
- Passez au code que nous avons extrait de Vertex AI Studio. Remplacez le nom de la méthode multiturn_generate_content par
start_chat_session. - Faites défiler la page jusqu'à l'appel de la méthode
model = GenerativeModel(. Le code existant définitgeneration_configetsafety_settings, mais ne les utilise pas réellement. Modifiez la création deGenerativeModelpour qu'elle ressemble à ceci :model = GenerativeModel( "gemini-1.5-flash-002", tools=tools, generation_config=generation_config, safety_settings=safety_settings, ) - Enfin, ajoutez une dernière ligne à la méthode, juste en dessous de
chat = model.start_chat(), afin que la fonction renvoie l'objetchat. La fonction terminée devrait ressembler à ce qui suit.REMARQUE : NE COPIEZ PAS ce code dans votre notebook. Il est simplement là pour vérifier l'intégrité.def start_chat_session(): vertexai.init(project="qwiklabs-gcp-02-9a7298ceaaec", location="us-central1") tools = [ Tool.from_retrieval( retrieval=grounding.Retrieval( source=grounding.VertexAISearch(datastore="projects/qwiklabs-gcp-02-9a7298ceaaec/locations/global/collections/default_collection/dataStores/old-cookbooks-id"), ) ), ] model = GenerativeModel( "gemini-1.5-flash-002", tools=tools, generation_config=generation_config, safety_settings=safety_settings, ) chat = model.start_chat() return chat - Faites défiler la cellule de code jusqu'en bas et modifiez la dernière ligne appelant l'ancienne fonction pour qu'elle appelle le nouveau nom de fonction et stocke l'objet renvoyé dans une variable
chat. Une fois que vous êtes satisfait des modifications, exécutez la cellule.chat = start_chat_session() - Créez une cellule de code et ajoutez le commentaire
# Use chat to invoke Gemini and print out the response. Passez à la ligne suivante et saisissezresp. Gemini devrait compléter automatiquement le bloc pour vous. Modifiez la requête pour qu'elle devienneHow can I tell if a tomato is ripe?. Exécuter la celluleresponse = chat.send_message("How can I tell if a tomato is ripe?") print(response) - C'est bien la réponse que nous attendions, mais la partie qui nous intéresse vraiment est le champ
textimbriqué. Modifiez le bloc de code pour n'imprimer que cette section, comme suit :response = chat.send_message("How can I tell if a tomato is ripe?") print(response.candidates[0].content.parts[0].text) - Bien, maintenant que nous avons un code de chat fonctionnel, intégrons-le à notre application Web. Copiez tout le contenu de la cellule de code qui crée la fonction
start_chat_session(nous n'aurons pas besoin de la cellule de test). Si vous cliquez sur la cellule, vous pouvez cliquer sur le menu à trois points en haut à droite et copier le contenu
- Passez à l'onglet de l'éditeur Cloud Shell et ouvrez
pages\Cooking_Advice.pypour le modifier. - Recherchez le commentaire :
# # Add the code you copied from your notebook below this message # - Collez le code copié juste en dessous du commentaire Add the code (Ajouter le code). Bien, nous avons maintenant la section qui pilote le moteur de chat via un appel ancré à Gemini. Intégrons-le maintenant à Streamlit.
- Localisez la section de code commenté directement sous le commentaire :
# # Here's the code to setup your session variables # Uncomment this block when instructed # - Décommentez cette section de code (jusqu'à la section
Setup done, let's build the page UIsuivante) et explorez-la. Elle crée ou récupère les variables de session de chat et d'historique. - Ensuite, nous devons intégrer l'historique et la fonctionnalité de chat à l'UI. Faites défiler le code jusqu'à ce que vous trouviez le commentaire ci-dessous.
# # Here's the code to create the chat interface # Uncomment the below code when instructed # - Décommentez le reste du code sous le commentaire et prenez le temps de l'explorer. Si vous le souhaitez, mettez-le en surbrillance et demandez à Gemini d'expliquer son fonctionnement.
- Excellent. Nous allons maintenant créer l'application et la déployer. Lorsque l'URL est de nouveau disponible, lancez l'application et essayez la page "Conseils de cuisine". Vous pouvez lui demander des conseils sur les tomates mûres ou une bonne façon de préparer les choux de Bruxelles.
gcloud run deploy recipe-web-app \ --allow-unauthenticated \ --source=. \ --region=us-central1 \ --port=8501
Bien utile, non ? Votre conseiller culinaire IA personnel :-)
13. (Facultatif) Connectez la page de recherche de recettes à l'application Agent Builder de recherche de recettes
Lorsque nous avons associé la page "Conseils de cuisine" à sa source ancrée, nous l'avons fait directement à l'aide de l'API Gemini. Pour la recherche de recettes, connectons-nous directement à l'application de recherche Vertex AI Agent Builder.
- Dans l'éditeur Cloud Shell, ouvrez la page
pages/Recipe_Search.pypour la modifier. Examinez la structure de la page. - En haut du fichier, définissez l'ID de votre projet.
- Examinez la fonction
search_sample. Ce code provient plus ou moins directement de la documentation Discovery Engine ici. Vous trouverez une copie de travail dans ce notebook ici.La seule modification que j'ai apportée a été de renvoyerresponse.resultsau lieu des résultats. Sans cela, le type de retour est un objet conçu pour parcourir les résultats, ce dont nous n'avons pas besoin pour notre application de base. - Faites défiler la page jusqu'à la fin du fichier et supprimez le commentaire de toute la section située sous
Here are the first 5 recipes I found. - Mettez en surbrillance l'intégralité de la section que vous venez de décommenter, puis ouvrez le chat Gemini Code. Demande à
Explain the highlighted code. Si vous ne sélectionnez rien, Gemini peut vous expliquer l'intégralité du fichier. Si vous mettez en surbrillance une section et demandez à Gemini de l'expliquer, de la commenter ou de l'améliorer, il le fera.Prenez le temps de lire l'explication. Pour information, l'utilisation d'un notebook Colab Enterprise est un excellent moyen d'explorer les API Gemini avant de les intégrer à votre application. Cela est particulièrement utile pour explorer certaines des API les plus récentes, qui ne sont peut-être pas aussi bien documentées qu'elles le pourraient. - Dans la fenêtre de terminal de votre éditeur, exécutez
build.shpour déployer l'application finale. Attendez que la nouvelle version soit déployée avant de passer à l'étape suivante.
14. (Facultatif) Explorer l'application finale
Prenez quelques minutes pour explorer l'application finale.
- Dans la console Google Cloud, utilisez la recherche pour accéder à
Cloud Run, puis cliquez sur votre recipe-web-app. - Recherchez l'URL de test de l'application (en haut de la page) et ouvrez-la dans un nouvel onglet du navigateur.
- La page d'accueil de l'application devrait s'afficher. Notez la mise en page et la navigation de base fournies par Streamlit, avec les fichiers Python du dossier
pagesaffichés comme choix de navigation etHome.pychargé comme page d'accueil. Accédez à la page Conseils de cuisine. - L'interface de chat s'affiche au bout de quelques instants. Là encore, notez la mise en page de base fournie par Streamlit.
- Essayez de poser quelques questions sur la cuisine et voyez comment le bot fonctionne. Par exemple :
Do you have any advice for preparing broccoli? How about a classic chicken soup recipe? Tell me about meringue. - Trouvons maintenant une ou deux recettes. Accédez à la page de recherche de recettes et effectuez quelques recherches. Par exemple :
Chili con carne Chili, corn, rice Lemon Meringue Pie A dessert containing strawberries
15. Félicitations !
Vous avez créé une application à l'aide des applications Vertex AI Agent Builder. Vous avez découvert Gemini Cloud Assist, Gemini Code Assist et les fonctionnalités de langage naturel vers SQL du canevas de données BigQuery. Bravo !
Effectuer un nettoyage
Cloud SQL ne propose pas de niveau sans frais et vous sera facturé si vous continuez à l'utiliser. Vous pouvez supprimer votre projet Cloud pour éviter des frais supplémentaires.
Bien que Cloud Run ne facture pas lorsque le service n'est pas utilisé, il se peut que des frais vous soient facturés pour le stockage de l'image de conteneur dans Artifact Registry. La suppression de votre projet Cloud arrête la facturation de toutes les ressources utilisées dans ce projet.
Si vous le souhaitez, supprimez le projet :
gcloud projects delete $GOOGLE_CLOUD_PROJECT
Vous pouvez également supprimer les ressources inutiles de votre disque Cloud Shell. Vous pouvez :
- Supprimez le répertoire du projet de l'atelier de programmation :
rm -rf ~/task-app - Avertissement ! Cette prochaine action est irréversible. Si vous souhaitez supprimer tous les éléments de votre Cloud Shell pour libérer de l'espace, vous pouvez supprimer l'intégralité de votre répertoire d'accueil. Veillez à ce que tout ce que vous souhaitez conserver soit enregistré ailleurs.
sudo rm -rf $HOME