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 les données BigQuery à l'aide de fonctionnalités SQL de Data Canvas en langage naturel, écrire du code dans des 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 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 contiendra deux pages principales. Cooking Advice hébergera un chatbot que nous créerons à l'aide de Gemini et d'une source Vertex AI Agent Builder associée à un groupe de livres de cuisine. Il proposera des conseils culinaires et répondra aux questions liées à la cuisine. La recherche de recettes sera un moteur de recherche alimenté par Gemini, cette fois basé sur 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
- Structurer l'application Web Python et Streamlit de base, avec un peu d'aide de Gemini
- Déployer l'application Web sur Cloud Run
- Associer la page "Conseils culinaires" à notre application Agent Builder de recherche de livres de cuisine
- (Facultatif) Associer la page de recherche de recettes à l'application de création d'agents de recherche de recettes
- (Facultatif) Explorer l'application finale
2. Prérequis
- Si vous ne possédez pas encore de compte Google, vous devez en créer un.
- Vous utilisez un compte personnel au lieu d'un compte professionnel ou scolaire. Les comptes professionnels et scolaires peuvent être soumis à des restrictions qui vous empêchent d'activer les API nécessaires à cet atelier.
3. Configuration du projet
- Connectez-vous à la console Google Cloud.
- Activez la facturation dans la console Cloud.
- La réalisation de cet atelier devrait coûter moins de 1 USD en ressources Cloud.
- Vous pouvez suivre les étapes à la fin de cet atelier pour supprimer des ressources afin d'éviter d'autres frais.
- 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 crédit de 5$ peut être disponible.
- Créez un projet ou choisissez de réutiliser un projet existant.
- Vérifiez que la facturation est activée dans Mes projets dans la section "Facturation Cloud".
- Si la colonne
Billing account
indiqueBilling is disabled
pour votre nouveau projet:- 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 est probablement nommé Compte de facturation d'essai de Google Cloud Platform.
- Si la colonne
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 vous 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 Cloud Console, puis sélectionnez Demander à Gemini ou Demander à Gemini pour Cloud Console.
- Faites défiler la page jusqu'à la section "API requises", 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'éditeur Cloud Shell. Prenez quelques minutes pour explorer la réponse générée.
- Demandez ensuite quels sont les avantages d'Agent Builder et comment il peut aider à élaborer des 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 créons comportera une page de conseils culinaires contenant un chatbot conçu pour aider les utilisateurs à trouver des réponses à leurs questions sur la cuisine. Il sera basé sur Gemini et s'appuiera sur une source contenant 70 livres de cuisine du domaine public. Les livres de recettes serviront de source fiable à Gemini pour répondre aux questions.
- Utilisez la zone 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 indiquer que l'API Vertex AI elle-même doit être activée, veuillez également l'activer. Une fois les API activées, vous pouvez passer à l'étape suivante.
- Utilisez la recherche pour accéder à Générateur d'agents, puis à Continuer et activer l'API.
- Comme Gemini l'a suggéré dans notre demande de conseils précédente, la création d'une application de recherche dans Agent Builder commence par la création d'une source de données fiable. Lorsque l'utilisateur effectue une recherche, Gemini comprend la question et sait comment composer des réponses intelligentes. Toutefois, il se tourne vers la source fiable 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 à Data Stores (Dépôts de données) et à Create Data Store (Créer un dépôt de données).
- Les livres de cuisine du domaine public que nous utilisons pour étoffer notre page de conseils culinaires se trouvent actuellement dans un bucket Cloud Storage d'un projet externe. Sélectionnez le type de source Cloud Storage.
- Examinez, mais ne modifiez pas les options par défaut concernant le type d'informations que nous importons. Laissez le type d'importation défini sur Dossier et utilisez
labs.roitraining.com/labs/old-cookbooks
comme chemin d'accès au bucket, puis cliquez sur Continue (Continuer). - Nommez le data store:
old-cookbooks
. Cliquez sur MODIFIER, remplacez l'ID parold-cookbooks-id
, puis créez le data store.
Vertex AI Agent Builder est compatible avec plusieurs types d'applications, et le Data Store sert de source de vérité pour chacune d'elles. Les applications de recherche sont adaptées à une 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, l'agent serait probablement le meilleur choix pour ce que nous voulons faire, mais comme le produit est actuellement en version Preview, nous allons nous en tenir au type d'application de recherche.
- Dans le menu de gauche, accédez à Applications, puis cliquez sur Créer une application.
- Cliquez sur Créer sur la fiche Rechercher votre site Web. Nommez l'application
cookbook-search
. Cliquez sur Modifier, puis définissez l'ID d'application surcookbook-search-id
. Définissez l'entreprise surGoogle
, puis cliquez sur Continuer. - Vérifiez le data store old-cookbooks que vous avez créé il y a quelques étapes, puis créez l'application de recherche.
Si vous examinez l'onglet Activité, vous constaterez probablement que les livres de recettes sont toujours en cours d'importation et d'indexation. L'Agent Builder met plus de cinq minutes à indexer les milliers de pages contenues dans les 70 livres de recettes que nous lui avons fournis. Pendant que le générateur de recettes est en cours d'exécution, chargeons et nettoyons des données de la base de données de recettes pour notre générateur.
6. Charger et nettoyer des données dans un notebook Colab Enterprise, avec l'aide de Gemini Code Assist
Google Cloud propose plusieurs façons principales de travailler avec des notebooks Jupyter. Nous allons utiliser la dernière offre de Google, Colab Enterprise. Certains d'entre vous connaissez peut-être le produit Colab de Google, couramment utilisé par les particuliers et les organisations qui souhaitent tester les notebooks Jupyter dans un environnement libre. Colab Enterprise est une offre Google Cloud commerciale entièrement intégrée au reste des produits cloud de Google et qui tire pleinement parti des fonctionnalités de sécurité et de conformité de l'environnement GCP.
L'une des fonctionnalités de Colab Enterprise est l'intégration de Gemini Code Assist de Google. Vous pouvez utiliser l'assistance de code dans différents éditeurs de code. Elle peut vous donner des conseils et vous proposer des suggestions intégrées en temps réel pendant que vous codez. Nous allons exploiter cet assistant génératif pour organiser nos données de 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 activer l'environnement d'exécution, c'est-à-dire la puissance de calcul derrière le notebook, cliquez sur Connect (Connecter) en haut à droite de votre nouveau notebook.
- Cliquez sur Fichier > Renommer pour renommer le notebook en
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 soit 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 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 la touche 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. Commencez à saisir
df =
et examinez le code généré par Gemini Code Assist. Si une liste déroulante de suggestions de mots clés Python s'affiche au-dessus de la suggestion générée, appuyez sur Échap pour afficher le code suggéré en gris clair. Appuyez à nouveau sur la touche 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 dans la première cellule de code dans laquelle vous avez importé Pandas, puis utilisez le menu Commands (Commandes) ou le clavier pour exécuter la cellule sélectionnée. Sur le clavier, appuyez sur Maj+Entrée pour exécuter la cellule et déplacer le focus vers la cellule suivante, en créant une si nécessaire. Attendez que la cellule s'exécute avant de continuer.REMARQUE : [ ] s'affiche à gauche lorsqu'une cellule n'a pas été exécutée. Lorsqu'une cellule s'exécute, une animation en rotation s'affiche. Une fois la cellule terminée, un nombre s'affiche, par exemple [13].
- Exécutez la cellule qui charge le fichier CSV dans le DataFrame. Attendez que le fichier soit chargé, puis examinez les cinq premières lignes de données. Ce sont les données de recettes que nous allons charger dans BigQuery. Nous les utiliserons ensuite pour élaborer 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. Vous devriez alors recevoir la suggestion
df.columns
. Acceptez-le, puis exécutez la cellule. Nous venons de démontrer que vous avez deux options pour obtenir de l'aide de Gemini Code Assist dans un notebook Jupyter: des cellules de texte au-dessus des cellules de code ou des commentaires dans la cellule de code elle-même. Les commentaires dans les cellules de code fonctionnent bien dans les notebooks Jupyter, mais cette approche fonctionne également dans n'importe quel autre IDE compatible avec l'assistant Gemini Code de Google.# List the current DataFrame column names
- Faisons un peu de nettoyage dans les colonnes. Renommez la colonne
Unnamed: 0
enid
etlink
enuri
. Utilisez les techniques d'invite > code de votre choix pour créer le code, puis exécutez la cellule lorsque vous êtes satisfait.# Rename the column 'Unnamed: 0' to 'id' and 'link' to 'uri' df.rename(columns={'Unnamed: 0': 'id', 'link': 'uri'}, inplace=True)
- Supprimez les colonnes
source
etNER
, puis utilisezhead()
pour afficher les premières lignes. Demandez à Gemini de vous aider. 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 sont présents dans notre ensemble de données. Encore une fois, commencez par choisir la technique d'invite de votre choix et voyez si vous pouvez demander à Gemini de vous aider à générer le code.
# Count the records in the DataFrame df.shape # count() will also work
- 2,23 millions d'enregistrements représentent probablement plus de recettes que nous n'avons le temps de cuisiner. Le processus d'indexation dans Agent Builder prendrait probablement trop de temps pour notre exercice du jour. Pour trouver un compromis, prenons un échantillon de 150 000 recettes et utilisons-le. Utilisez votre approche d'invite > code pour prélever l'échantillon et le stocker dans un nouveau DataFrame nommé
dfs
(s pour "small", petit).# Sample out 150,000 records into a DataFrame named dfs dfs = df.sample(n=150000)
- Les données de notre source de recettes sont prêtes à être chargées dans BigQuery. Avant de procéder au chargement, allons dans BigQuery et préparons un ensemble de données pour contenir notre table. Dans la console Google Cloud, utilisez la zone de recherche pour accéder à BigQuery. Vous pouvez cliquer avec le bouton droit sur BigQuery et l'ouvrir dans un nouvel onglet du navigateur.
- Si ce n'est pas déjà fait, ouvrez le panneau de chat Gemini AI à l'aide du logo Gemini en haut à droite de la console Cloud. Si vous êtes invité à réactiver l'API, appuyez sur "Activer" ou actualisez la page. Exécutez l'invite:
What is a dataset used for in BigQuery?
Après avoir exploré la réponse,How can I create a dataset named recipe_data using the Cloud Console?
comparez 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 et l'ID de
recipe_data
. Laissez le type d'emplacement défini sur États-Unis et 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_id
et utilisez-la pour stocker votre ID de projet actuel. En haut à gauche de ces instructions, sous le bouton "Mettre fin à l'atelier", vous trouverez l'ID de projet actuel. Vous pouvez également y accéder sur la page d'accueil de la console Cloud. Attribuez la valeur à votre variableproject_id
, puis exécutez la cellule.# Create a variable to hold the current project_id project_id='YOUR_PROJECT_ID'
- Utilisez l'approche invite > code pour créer un bloc de code qui insérera le DataFrame
dfs
dans une table nomméerecipes
dans 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 notre table de données de recettes est créée, utilisons-la pour créer une source de données fiable pour notre générateur de recettes. L'approche que nous allons suivre sera semblable à celle que nous avons utilisé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 la procédure à 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 Data Stores (Datastores) et Create Data Store (Créer un datastore). Cette fois, sélectionnez le type de BigQuery Datastore.
- 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 des recettes d'autres projets qwiklabs-gcp-... s'affichent, veillez à sélectionner celle qui vous appartient.REMARQUE: Si vous cliquez surrecipes
au lieu de sélectionner la case d'option à côté, un nouvel onglet s'ouvre dans votre navigateur et vous êtes redirigé 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 Continue (Continuer).
- Sur la page d'examen du schéma, examinez les configurations par défaut initiales, mais ne modifiez rien. Continuer
- Nommez le datastore
recipe-data
. Modifiez l'ID du datastore et définissez-le surrecipe-data-id
. Créez le datastore. - Accédez à Applications dans le menu de navigation de gauche, puis à Créer une application.
- Cliquez sur Créer sur la fiche Rechercher 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 Continue (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, essayons le nouveau canevas de données de BigQuery pour voir 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/Return
pour effectuer une recherche, puis cliquez sur le bouton Ajouter au canevas à côté du nom de votre table. - Une représentation visuelle de votre table de recettes est 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 de la table, cliquez sur Requête.
- Le canevas charge une boîte de dialogue de requête BigQuery plus ou moins classique, avec une seule addition: 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 exemple. Exécutez l'invite suivante (en saisissant le texte et en appuyant sur
Enter/Return
pour 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 du tout ! N'hésitez pas à tester d'autres requêtes et invites avant de continuer. Lorsque vous effectuez des tests, essayez des invites moins spécifiques pour voir ce qui fonctionne et ce qui ne fonctionne pas. Par exemple, cette requête:
(N'oubliez pas d'exécuter la nouvelle requête) Affiche une liste de recettes de chili, mais n'inclut pas les ingrédients jusqu'à ce que je la modifie pour obtenir:Do I have any chili recipes?
(Oui, je dis "s'il vous plaît" lorsque je pose une question. Ma mère serait si fière.) J\'ai remarqué qu\'une recette de chili contenait des champignons. Qui veut ça dans un chili ? J'ai demandé à Gemini de m'aider à les exclure.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:
gcloud projects list | awk '/PROJECT_ID/{print $2}'
- Vous pouvez lister tous vos ID de projet avec:
- Format :
- Si vous y êtes invité, cliquez sur Autoriser pour continuer.
- Le message suivant doit s'afficher :
Si unUpdated property [core/project].
WARNING
s'affiche et que vous êtes invité à saisirDo you want to continue (Y/N)?
, vous avez probablement saisi l'ID de projet de manière incorrecte. Appuyez surN
, puis surEnter
, puis 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 y êtes invité, cliquez sur Autoriser pour continuer.
L'exécution de cette commande peut prendre quelques minutes, mais un message semblable à celui-ci 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. Structurer l'application Web Python et Streamlit de base, avec un peu d'aide de Gemini
L'indexation de nos deux data stores Vertex AI Agent Builder est terminée, et nos applications de recherche sont presque prêtes. Nous pouvons donc commencer à créer notre application Web.
Nous utiliserons Gemini Code Assist pour ce faire. 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
- Utilisez 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 - Sign in (Cloud Code - Se connecter). Si vous ne voyez pas le lien, patientez une minute et vérifiez à nouveau.
- La fenêtre du terminal affiche une longue URL. Ouvrez l'URL dans le navigateur et suivez les étapes pour accorder à Cloud Code l'accès à votre environnement Google Cloud. Dans la boîte de dialogue finale, copiez le code de validation, puis collez-le dans la fenêtre de terminal en attente de l'onglet de votre navigateur dans l'éditeur Cloud Shell.
- Au bout de quelques instants, le lien Cloud Code en bas à gauche de l'éditeur est remplacé par Cloud Code - No Project (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 s'actualise pour afficher votre ID de projet. Cela signifie que Cloud Code est bien associé à votre projet de travail.
- Maintenant que Cloud Code est 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 volet Gemini Chat s'ouvre sur la 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é), une fenêtre de chat Gemini active devrait s'afficher.
- Excellent. Maintenant que les configurations du terminal, de la discussion Gemini et de Cloud Code sont terminées, ouvrez l'onglet Explorer et prenez quelques minutes pour explorer les fichiers du projet en cours.
- Dans l'explorateur, ouvrez votre fichier
requirements.txt
pour le modifier. Passez au volet de chat Gemini et demandez: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 Gemini le dit, Streamlit est un framework permettant de créer des applications Web basées sur les données en Python. Maintenant, demandez:
C'est là que Gemini rencontre généralement des problèmes. Gemini peut accéder au fichier que vous avez actuellement ouvert dans l'éditeur, mais il ne peut pas voir l'intégralité 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:
C'est bien. Nous voyons que Gemini nous offre une bonne présentation, 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 besoin de dire "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 de chat Gemini, utilisez l'icône en forme de poubelle en haut de la fenêtre de chat du code Gemini.What are the major downsides or shortcomings?
11. Déployer l'application Web sur Cloud Run
Excellent. Nous avons mis en place la structure de base de l'application, mais tout cela fonctionnera-t-il ? Mieux encore, où devrions-nous l'héberger dans Google Cloud ?
- Dans la fenêtre de chat Gemini, demandez:
If I containerize this application, what compute technologies in Google Cloud would be best for hosting it?
- N'oubliez pas que si vous n'utilisiez pas déjà votre IDE, vous pouvez également demander l'aide de Google Cloud. Ouvrez la console Google Cloud, puis Gemini Cloud Assist et demandez:
Les deux ensembles de conseils étaient-ils identiques ? Êtes-vous d'accord ou non avec certains de ces conseils ? N'oubliez pas que Gemini est un assistant IA générative. Comme un assistant humain, vous ne serez pas toujours d'accord avec tout ce qu'il dit. Toutefois, avoir un 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 de courte durée. Dans la fenêtre de chat Gemini de votre éditeur de code, essayez l'invite suivante:
What steps would be required to run this application in Cloud Run?
- Il semble que la première chose que nous devions faire soit de créer un Dockerfile. À l'aide de l'éditeur, créez un fichier nommé
Dockerfile
dans le répertoire racine de votre dossier de projet. Veillez à ne pas le placer accidentellement dans le dossier pages. Ouvrez le fichier pour le modifier. - Utilisons le panneau latéral de chat Gemini pour créer notre Dockerfile. Utilisez une requête semblable à celle 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 à la même requête. La première fois que j'ai demandé à Gemini un Dockerfile, j'ai obtenu le fichier exact 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.
C'est un sacré Dockerfile. Je vais simplifier un peu. Nous n'avons pas besoin de la section apt-get, car tout ce qui est nécessaire pour Python est déjà présent dans notre image de base. De plus, l'utilisation d'un environnement virtuel dans un conteneur Python est un gaspillage d'espace. Je vous conseille donc de le supprimer. La commande expose n'est pas strictement nécessaire, mais elle est acceptable. De plus, il tente de démarrer main.py, que je ne possède 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 nomméDockerfile
et 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 via 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 de manipulation des données. Il peut également être appelé à l'aide de la combinaison Ctrl+i sous Windows ou Cmd+i sous Mac. Cliquez quelque part dans
Dockerfile
, puis activez Gemini à l'aide de la combinaison Cmd+i / Ctrl+i appropriée. - Saisissez les informations ci-dessous lorsque l'invite s'affiche. Examinez la modification et acceptez-la.
Génial, non ? Combien de fois avez-vous dû travailler avec le code d'un autre développeur, pour ensuite perdre du temps à comprendre les bases de son travail sans commentaires avant même de pouvoir commencer à apporter vos modifications ? Gemini à la rescousse !Please comment the current file.
- Demandez à 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?
- Créons 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=8501
enter/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 observez le processus de compilation, vous verrez d'abord le dépôt Docker Artifact Registry être créé. 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. Parfait. Nous devons maintenant intégrer 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 Cooking Advice.
- 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 droite de la page des paramètres, définissez le modèle sur gemini-1.5-flash-002. Déplacez la limite de jetons de sortie jusqu'à la valeur maximale afin 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 paramètres "Contenu incitant à la haine", "Contenu à caractère sexuel explicite" et "Contenu relevant du harcèlement" sur Bloquer certains. Définissez le paramètre "Contenu dangereux" sur Bloquer peu, puis Enregistrer. Nous avons défini la catégorie "Contenu dangereux" un peu plus bas, car parler de couteaux et de découpe peut être interprété par Gemini comme de la violence.
- Activez l'option 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 situé près du bouton "Terminer l'atelier" dans ces instructions, puis Enregistrez les paramètres de mise à la terre.
REMARQUE: Si une erreur s'affiche, vous n'avez pas remplacé l'ID de projet par votre ID de projet réel ou vous avez manqué l'étape où vous avez modifié l'ID du Data Store de l'ancien Agent Builder. Dans Agent Builder > Data Stores > old-cookbooks, recherchez l'ID de votre data store.projects/YOUR_PROJECT_ID/locations/global/collections/default_collection/dataStores/old-cookbooks-id
- Envoyez quelques messages Chat. Vous pouvez commencer par les éléments ci-dessous. Essayez-en d'autres si vous le souhaitez.
How can I tell if a tomato is ripe?
- Le modèle fonctionne. Testons maintenant le code. Cliquez sur Effacer la conversation pour que nos conversations ne fassent pas partie du code, puis sur Obtenir le code.
- En haut de la fenêtre de code, appuyez sur Open Notebook (Ouvrir le notebook) pour pouvoir tester et perfectionner le code dans Colab Enterprise avant de l'intégrer à notre application.
- Prenez quelques minutes pour vous familiariser avec le code. Appliquons 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. Allez-y.
- Accédez 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_config
etsafety_settings
, mais ne les utilise pas réellement. Modifiez la création deGenerativeModel
pour 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 doit se présenter comme suit.REMARQUE: NE COPIEZ PAS ce code dans votre notebook. Il s'agit simplement d'une vérification.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 de vos 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. Remplacez la requête parHow 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, mais ce que nous voulons vraiment, c'est ce champ
text
imbriqué. 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)
- Parfait. Maintenant que nous avons un code de chat fonctionnel, allons l'intégrer à 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 dans la cellule, vous pouvez cliquer sur le menu à trois points en haut à droite et copier à partir de là. - Passez à l'onglet de l'éditeur Cloud Shell, puis ouvrez
pages\Cooking_Advice.py
pour le modifier. - Recherchez le commentaire:
# # Add the code you copied from your notebook below this message #
- Collez le code que vous avez copié juste en dessous du commentaire Ajouter le code. Parfait. Nous avons maintenant la section qui pilote le moteur de chat via un appel en ligne à Gemini. Intégrons-le maintenant à Streamlit.
- Recherchez la section de code commentée 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 UI
suivante) et explorez-la. Il crée ou récupère les variables de session de chat et d'historique. - Ensuite, nous devons intégrer les fonctionnalités d'historique et de chat à l'interface utilisateur. Faites défiler le code jusqu'au 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 de vous expliquer son fonctionnement.
- Excellent. Développons et déployons maintenant l'application. Lorsque l'URL s'affiche, lancez l'application et essayez la page Conseils culinaires. Vous pouvez lui demander des informations sur les tomates mûres ou sur la meilleure façon de préparer des 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) Associer la page de recherche de recettes à l'application de création d'agents de recherche de recettes
Lorsque nous avons connecté la page "Conseils de cuisine" à sa source en ligne, 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.py
pour la modifier. Examinez la structure de la page. - En haut du fichier, définissez votre ID de projet.
- Examinez la fonction
search_sample
. Ce code provient plus ou moins directement de la documentation du moteur de découverte ici. Vous trouverez une copie fonctionnelle dans ce notebook ici.Le seul changement que j'ai apporté a été de renvoyer leresponse.results
au lieu des résultats uniquement. Sans cela, le type de retour est un objet conçu pour faire défiler les résultats, ce dont nous n'avons pas besoin pour notre application de base. - Faites défiler le fichier jusqu'en bas et supprimez le commentaire de l'intégralité de la section sous
Here are the first 5 recipes I found
. - Mettez en surbrillance toute la section que vous venez de décommenter, puis ouvrez la discussion Gemini Code. Demandez à
Explain the highlighted code
. Si vous ne sélectionnez rien, Gemini peut 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. Sachez que l'utilisation d'un notebook Colab Enterprise est un excellent moyen d'explorer les API Gemini avant de les intégrer à votre application. Il est particulièrement utile pour explorer certaines des API les plus récentes, qui ne sont peut-être pas documentées aussi bien qu'elles le pourraient. - Dans la fenêtre de terminal de l'éditeur, exécutez
build.sh
pour 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 application Web de recettes. - Recherchez l'URL de test de l'application (en haut de la page) et ouvrez-la dans un nouvel onglet de 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
pages
affichés comme options de navigation etHome.py
chargé en tant que page d'accueil. Accédez à la page Conseils de cuisson. - Après quelques instants, l'interface de chat s'affiche. Encore une fois, notez la mise en page de base fournie par Streamlit.
- Posez quelques questions sur la cuisine et découvrez comment fonctionne le robot. 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 qui utilise des applications Vertex AI Agent Builder. Au cours de ce tutoriel, vous avez découvert l'assistance Cloud Gemini, l'assistance au code Gemini et les fonctionnalités de conversion du langage naturel en SQL du canevas de données de 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 cloudshell. Vous pouvez :
- Supprimez le répertoire du projet de l'atelier de programmation:
rm -rf ~/task-app
- Avertissement ! Cette action est irréversible. Si vous souhaitez supprimer tout ce qui se trouve sur votre Cloud Shell pour libérer de l'espace, vous pouvez supprimer l'intégralité de votre répertoire personnel. Assurez-vous que tout ce que vous souhaitez conserver est enregistré ailleurs.
sudo rm -rf $HOME