Déployer automatiquement une application Web Genkit Node.js d'IA générative à partir d'un système de contrôle des versions vers Cloud Run

1. Présentation

Déployer une application Web pour la première fois peut sembler intimidant. Même après le premier déploiement, si le processus est trop lourd, vous pouvez éviter de déployer de nouvelles versions de votre application. Avec le déploiement continu, vous pouvez facilement déployer automatiquement les modifications de votre application.

Dans cet atelier, vous allez écrire une application Web et configurer Cloud Run pour déployer automatiquement votre application lorsqu'une modification est apportée au code source de votre application. Vous modifiez ensuite votre application et la déployez à nouveau.

Objectifs de l'atelier

  • Écrire une application Web avec l'éditeur Cloud Shell
  • Stocker le code de votre application dans GitHub
  • Déployer automatiquement votre application dans Cloud Run
  • Ajouter l'IA générative à votre application à l'aide de Genkit
  • Gérer les requêtes LLM à l'aide de la bibliothèque dotprompt

2. Prérequis

  1. 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.
  2. Si vous ne possédez pas encore de compte GitHub, vous devez en créer un

3. Configuration du projet

  1. Connectez-vous à la console Google Cloud.
  2. 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 événement sur l'IA générative pour les développeurs ? Un crédit de 1$ peut être disponible.
  3. Créez un projet ou choisissez de réutiliser un projet existant.
  4. Vérifiez que la facturation est activée dans Mes projets dans la section "Facturation Cloud".
    • Si la colonne Billing account indique Billing is disabled pour votre nouveau projet:
      1. Cliquez sur les trois points dans la colonne Actions.
      2. Cliquez sur Modifier la facturation.
      3. Sélectionnez le compte de facturation que vous souhaitez utiliser.
    • Si vous participez à un événement sur l'IA de génération pour les développeurs, le compte est probablement nommé Compte de facturation d'essai Google Cloud Platform.

4. Ouvrir l'éditeur Cloud Shell

  1. Accédez à l'éditeur Cloud Shell.
  2. Si le terminal ne s'affiche pas en bas de l'écran, ouvrez-le:
    • Cliquez sur le menu hamburger Icône du menu hamburger.
    • Cliquez sur Terminal
    • Cliquez sur Nouveau terminalOuvrir un nouveau terminal dans l'éditeur Cloud Shell
  3. 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}'
        
      Définir l'ID de projet dans le terminal de l'éditeur Cloud Shell
  4. Si vous y êtes invité, cliquez sur Autoriser pour continuer. Cliquez pour autoriser Cloud Shell
  5. Le message suivant doit s'afficher :
    Updated property [core/project].
    
    Si un WARNING s'affiche et que vous êtes invité à saisir Do you want to continue (Y/N)?, vous avez probablement saisi l'ID de projet de manière incorrecte. Appuyez sur N, puis sur Enter, puis essayez d'exécuter à nouveau la commande gcloud config set project.

5. Activer les API

Dans le terminal, activez les API:

gcloud services enable \
  run.googleapis.com \
  cloudbuild.googleapis.com \
  aiplatform.googleapis.com

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.

6. Configurer Git

  1. Définissez votre adresse e-mail utilisateur Git globale:
    git config --global user.email "you@example.com"
    
  2. Définissez votre nom d'utilisateur Git global:
    git config --global user.name "Your Name"
    
  3. Définissez votre branche git globale par défaut sur main:
    git config --global init.defaultBranch main
    

7. Rédiger le code

Pour écrire une application en Node.js, procédez comme suit :

  1. Accédez au répertoire d'accueil:
    cd ~
    
  2. Créez le répertoire codelab-genai:
    mkdir codelab-genai
    
  3. Accédez au répertoire codelab-genai :
    cd codelab-genai
    
  4. Créez un fichier index.js :
    touch index.js
    
  5. Créez le fichier package.json :
    npm init es6 -y
    
  6. Ajouter express en tant que dépendance
    npm install express
    
  7. Ajouter un fichier .gitignore pour éviter de valider node_modules
    echo node_modules/ >> .gitignore
    
  8. Ouvrez le fichier index.js dans l'éditeur Cloud Shell:
    cloudshell edit index.js
    
    Un fichier vide devrait maintenant s'afficher en haut de l'écran. C'est là que vous pouvez modifier ce fichier index.js. Montrez que le code se trouve dans la partie supérieure de l'écran.
  9. Copiez le code suivant et collez-le dans le fichier index.js ouvert:
    import express from 'express';
    
    const app = express();
    app.get('/', async (req, res) => {
        res.send('Hello world!');
    });
    
    const port = process.env.PORT || 8080;
    app.listen(port, () => {
        console.log(`codelab-genai: listening on port ${port}`);
    });
    
    Au bout de quelques secondes, l'éditeur Cloud Shell enregistre automatiquement votre code. Ce code répond aux requêtes HTTP avec notre message d'accueil "Hello world!".

Le code initial de votre application est terminé et prêt à être stocké dans un système de contrôle des versions.

8. Créer un dépôt

  1. Revenez au terminal Cloud Shell en bas de l'écran.
  2. Vérifiez que vous êtes toujours dans le bon répertoire:
    cd ~/codelab-genai
    
  3. Initialiser votre dépôt Git
    git init -b main
    
  4. Se connecter à la GitHub CLI
    gh auth login
    
    Appuyez sur Enter pour accepter les options par défaut et suivez les instructions de l'outil CLI GitHub, y compris les suivantes:
    1. À quel compte souhaitez-vous vous connecter ? GitHub.com
    2. Quel protocole préférez-vous pour les opérations Git sur cet hôte ? HTTPS
    3. Authentifier Git avec vos identifiants GitHub ? Y (ignorez cette étape si elle ne s'affiche pas).
    4. Comment souhaitez-vous authentifier la CLI GitHub ? Login with a web browser
    5. Copiez votre code à usage unique
    6. Ouvrez https://github.com/login/device.
    7. Coller votre code unique
    8. Cliquez sur Autoriser GitHub.
    9. Connectez-vous
  5. Vérifiez que vous êtes connecté:
    gh api user -q ".login"
    
    Si vous êtes bien connecté, votre nom d'utilisateur GitHub devrait s'afficher.
  6. Créer une variable GITHUB_USERNAME
    GITHUB_USERNAME=$(gh api user -q ".login")
    
  7. Vérifiez que vous avez créé la variable d'environnement:
    echo ${GITHUB_USERNAME}
    
    Si vous avez correctement créé la variable, votre nom d'utilisateur GitHub devrait s'afficher.
  8. Créez un dépôt GitHub vide nommé codelab-genai:
    gh repo create codelab-genai --private
    
    Si vous recevez l'erreur suivante:
    GraphQL: Name already exists on this account (createRepository)
    
    Vous disposez donc déjà d'un dépôt nommé codelab-genai. Pour continuer à suivre ce tutoriel, vous avez deux options:
  9. Ajoutez le dépôt codelab-genai en tant que origin distant:
    git remote add origin https://github.com/${GITHUB_USERNAME}/codelab-genai
    

9. Partager votre code

  1. Vérifiez que vous êtes dans le bon répertoire:
    cd ~/codelab-genai
    
  2. Ajoutez tous les fichiers du répertoire actuel à ce commit:
    git add .
    
  3. Créez le premier commit:
    git commit -m "add http server"
    
  4. Transférez votre commit vers la branche main du dépôt origin:
    git push -u origin main
    

Vous pouvez exécuter cette commande et accéder à l'URL générée pour afficher le code de votre application sur GitHub:

echo -e "\n\nTo see your code, visit this URL:\n \
    https://github.com/${GITHUB_USERNAME}/codelab-genai/blob/main/index.js \n\n"

10. Configurer des déploiements automatiques

  1. Laissez l'onglet de l'éditeur Cloud Shell ouvert. Nous y reviendrons plus tard.
  2. Dans un nouvel onglet, accédez à la page Cloud Run.
  3. Sélectionnez le projet Google Cloud approprié dans la console Menu déroulant des projets dans la console Google Cloud.
  4. Cliquez sur ASSOCIER UN REPO.
  5. Cliquez sur CONFIGURER AVEC CLOUD BUILD
      .
    1. Sélectionnez GitHub comme fournisseur de dépôt.
      • Si vous n'êtes pas connecté à votre compte GitHub dans le navigateur, connectez-vous avec vos identifiants.
    2. Cliquez sur Authentifier, puis sur Continuer.
    3. Après vous être connecté, un message s'affiche sur la page Cloud Run indiquant que l'application GitHub n'est installée sur aucun de vos dépôts.
    4. Cliquez sur le bouton INSTALL GOOGLE CLOUD BUILD (INSTALLER GOOGLE CLOUD BUILD).
      • Sur la page "Installation Setup" (Configuration de l'installation), sélectionnez Only select repositories (Sélectionner uniquement les dépôts) et choisissez le dépôt codelab-genai que vous avez créé à l'aide de la CLI.
      • Cliquez sur Installer.
      • Remarque: Si vous avez de nombreux dépôts GitHub, le chargement peut prendre quelques minutes.
    5. Sélectionnez your-user-name/codelab-genai comme dépôt
        .
      • Si le dépôt n'est pas présent, cliquez sur le lien Gérer les dépôts connectés.
    6. Laissez Branche sur ^main$.
    7. Cliquez sur Go, Node.js, Python, Java, .NET Core, Ruby ou PHP via les buildpacks Google Cloud
        .
      • Laissez les autres champs (Build context directory, Entrypoint et Function target) tels quels.
    8. Cliquez sur Enregistrer.
  6. Faites défiler la page vers le bas jusqu'à Authentification.
  7. Cliquez sur Autoriser les appels non authentifiés.
  8. Cliquez sur CRÉER.

Une fois la compilation terminée (ce qui prend plusieurs minutes), exécutez cette commande et accédez à l'URL générée pour afficher votre application en cours d'exécution:

echo -e "\n\nOnce the build finishes, visit your live application:\n \
    "$( \
        gcloud run services list | \
        grep codelab-genai | \
        awk '/URL/{print $2}' | \
        head -1 \
    )" \n\n"

11. Modifier votre code

Revenir à l'éditeur Cloud Shell

Si l'éditeur Cloud Shell est toujours ouvert, vous pouvez ignorer ces étapes.

  1. Accédez à l'éditeur Cloud Shell.
  2. Si le terminal ne s'affiche pas en bas de l'écran, ouvrez-le:
    • Cliquez sur le menu hamburger Icône du menu hamburger.
    • Cliquez sur Terminal
    • Cliquez sur Nouveau terminalOuvrir un nouveau terminal dans l'éditeur Cloud Shell
  3. 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}'
        
      Définir l'ID de projet dans le terminal de l'éditeur Cloud Shell
  4. Si vous y êtes invité, cliquez sur Autoriser pour continuer. Cliquez pour autoriser Cloud Shell
  5. Le message suivant doit s'afficher :
    Updated property [core/project].
    
    Si un WARNING s'affiche et que vous êtes invité à saisir Do you want to continue (Y/N)?, vous avez probablement saisi l'ID de projet de manière incorrecte. Appuyez sur N, puis sur Enter, puis essayez d'exécuter à nouveau la commande gcloud config set project.

Ajouter Genkit et Vertex AI à votre application

  1. Revenez au terminal Cloud Shell en bas de l'écran.
  2. Vérifiez que vous êtes toujours dans le bon répertoire:
    cd ~/codelab-genai
    
  3. Installez le SDK Genkit Node.js:
    npm install @genkit-ai/ai
    
  4. Installez le SDK Genkit Node.js pour Vertex AI:
    npm install @genkit-ai/vertexai
    
  5. Rouvrir index.js dans l'éditeur Cloud Shell
    cloudshell edit ~/codelab-genai/index.js
    
  6. Remplacez le code de votre fichier index.js par:
    import express from 'express';
    const app = express();
    
    import { genkit } from 'genkit';
    import { gemini15Flash, vertexAI } from '@genkit-ai/vertexai';
    
    const ai = genkit({
        plugins: [
            vertexAI({ location: 'us-central1' }),
        ],
    });
    
    app.get('/', async (req, res) => {
        const animal = req.query.animal || 'dog';
        const prompt = `Give me 10 fun facts about ${animal}. Return this as html without backticks.`
        const llmResponse = await ai.generate({
            model: gemini15Flash,
            prompt: prompt,
        });
        const html = llmResponse.text;
        res.send(html);
    });
    
    const port = process.env.PORT || 8080;
    app.listen(port, () => {
        console.log(`codelab-genai: listening on port ${port}`);
    });
    
  1. Vérifiez que vous êtes toujours dans le bon répertoire dans Cloud Shell:
    cd ~/codelab-genai
    
  2. Exécutez ces commandes pour valider une nouvelle version de votre application dans votre dépôt Git local:
    git add .
    git commit -m "add latest changes"
    
  3. Transférez les modifications vers GitHub:
    git push
    
  4. Une fois la compilation terminée, exécutez cette commande et accédez à votre application déployée:
    echo -e "\n\nOnce the build finishes, visit your live application:\n \
        "$( \
            gcloud run services list | \
            grep codelab-genai | \
            awk '/URL/{print $2}' | \
            head -1 \
        )" \n\n"
    

La compilation peut prendre plusieurs minutes avant que vos modifications ne soient appliquées.

Vous pouvez consulter l'historique de toutes les révisions ici: https://console.cloud.google.com/run/detail/us-central1/codelab-genai/revisions.

12. (Facultatif) Utiliser des fichiers .prompt avec Genkit

  1. Revenez au terminal Cloud Shell en bas de l'écran.
  2. Vérifiez que vous êtes toujours dans le bon répertoire:
    cd ~/codelab-genai
    
  3. Créez un dossier prompts pour stocker vos requêtes:
    mkdir prompts
    
  4. Créez un fichier animal-facts.prompt pour créer votre première invite:
    touch prompts/animal-facts.prompt
    
  5. Ouvrez le fichier animal-facts.prompt dans l'éditeur Cloud Shell:
    cloudshell edit ~/codelab-genai/prompts/animal-facts.prompt
    
  6. Modifiez animal-facts.prompt et collez-y le code suivant:
    ---
    model: vertexai/gemini-1.5-flash
    input:
        schema:
            animal: string
    ---
    
    Give me 10 fun facts about {{animal}}. Return the results as HTML without markdown backticks.
    
  7. Ouvrez le fichier index.js dans l'éditeur Cloud Shell:
    cloudshell edit ~/codelab-genai/index.js
    
  8. Remplacez le code de votre fichier index.js par:
    import express from 'express';
    const app = express();
    
    import { genkit } from 'genkit';
    import { vertexAI } from '@genkit-ai/vertexai';
    
    const ai = genkit({
        plugins: [
            vertexAI({ location: 'us-central1' }),
        ],
    });
    
    app.get('/', async (req, res) => {
        const animal = req.query.animal || 'dog';
        const animalPrompt = ai.prompt('animal-facts');
        const llmResponse = await animalPrompt({animal});
        const html = llmResponse.text;
        res.send(html);
    });
    
    const port = process.env.PORT || 8080;
    app.listen(port, () => {
        console.log(`codelab-genai: listening on port ${port}`);
    });
    
  1. Vérifiez que vous êtes toujours dans le bon répertoire dans Cloud Shell:
    cd ~/codelab-genai
    
  2. Exécutez ces commandes pour valider une nouvelle version de votre application dans votre dépôt Git local:
    git add .
    git commit -m "add latest changes"
    
  3. Transférez les modifications vers GitHub:
    git push
    
  4. Une fois la compilation terminée, exécutez cette commande et accédez à votre application déployée:
    echo -e "\n\nOnce the build finishes, visit your live application:\n \
        "$( \
            gcloud run services list | \
            grep codelab-genai | \
            awk '/URL/{print $2}' | \
            head -1 \
        )" \n\n"
    

La compilation peut prendre plusieurs minutes avant que vos modifications ne soient appliquées.

Vous pouvez consulter l'historique de toutes les révisions ici: https://console.cloud.google.com/run/detail/us-central1/codelab-genai/revisions.

13. (Facultatif) Utiliser les requêtes système

Pour cette étape, nous partons du principe que vous avez déjà ajouté des fichiers .prompt à l'étape précédente.

  1. Revenez au terminal Cloud Shell en bas de l'écran.
  2. Vérifiez que vous êtes toujours dans le bon répertoire:
    cd ~/codelab-genai
    
  3. Ouvrez le fichier animal-facts.prompt dans l'éditeur Cloud Shell:
    cloudshell edit ~/codelab-genai/prompts/animal-facts.prompt
    
  4. Modifiez animal-facts.prompt et collez-y le code suivant:
    ---
    model: vertexai/gemini-1.5-flash
    config:
        temperature: 0.9
    input:
        schema:
            animal: string
    ---
    
    role "system"
    The user should have submitted an animal.
    If the user requests anything besides animal fun facts, respond in a kind and firm manner that you only provide information about fun facts.
    Give the user 10 fun facts about the animal the user provided.
    All responses should be valid HTML without markdown backticks.
    
    role "user"
    {{animal}}
    
  1. Vérifiez que vous êtes toujours dans le bon répertoire dans Cloud Shell:
    cd ~/codelab-genai
    
  2. Exécutez ces commandes pour valider une nouvelle version de votre application dans votre dépôt Git local:
    git add .
    git commit -m "add latest changes"
    
  3. Transférez les modifications vers GitHub:
    git push
    
  4. Une fois la compilation terminée, exécutez cette commande et accédez à votre application déployée:
    echo -e "\n\nOnce the build finishes, visit your live application:\n \
        "$( \
            gcloud run services list | \
            grep codelab-genai | \
            awk '/URL/{print $2}' | \
            head -1 \
        )" \n\n"
    

La compilation peut prendre plusieurs minutes avant que vos modifications ne soient appliquées.

Vous pouvez consulter l'historique de toutes les révisions ici: https://console.cloud.google.com/run/detail/us-central1/codelab-genai/revisions.

14. Félicitations

Dans cet atelier, vous avez écrit une application Web et configuré Cloud Run pour déployer automatiquement votre application lorsqu'une modification a été apportée au code source de votre application. Vous avez ensuite modifié votre application et l'avez de nouveau déployée.

Si vous avez apprécié cet atelier, vous pouvez le refaire dans un autre langage de programmation ou framework:

Voici quelques options pour poursuivre votre apprentissage: