Genkit avec Cloud Run

Vous pouvez déployer des flux Genkit en tant que services Web à l'aide de Cloud Run. À titre d'exemple, cette page vous explique comment déployer l'exemple de flux par défaut.

  1. Installez la Google Cloud CLI si ce n'est pas déjà fait.

  2. Créez un projet Google Cloud à l'aide de la console Cloud ou choisissez-en un existant. Il doit être associé à un compte de facturation.

    Après avoir créé ou choisi un projet, configurez la CLI Google Cloud pour l'utiliser:

    gcloud auth login
    gcloud init
  3. Créez un répertoire pour l'exemple de projet Genkit:

    mkdir -p ~/tmp/genkit-cloud-project
    cd ~/tmp/genkit-cloud-project

    Si vous utilisez un IDE, ouvrez-le dans ce répertoire.

  4. Initialisez un module Go dans le répertoire de votre projet:

    go mod init example/cloudrun
    go mod get github.com/firebase/genkit/go
  5. Créez un exemple d'application à l'aide de Genkit:

    package main
    
    import (
        "context"
        "fmt"
        "log"
        "net/http"
        "os"
    
        "github.com/firebase/genkit/go/ai"
        "github.com/firebase/genkit/go/genkit"
        "github.com/firebase/genkit/go/plugins/googlegenai"
        "github.com/firebase/genkit/go/plugins/server"
    )
    
    func main() {
        ctx := context.Background()
    
        // Initialize Genkit with the Google AI plugin and Gemini 2.0 Flash.
        // Alternatively, use &googlegenai.VertexAI{} and "vertexai/gemini-2.0-flash"
        // to use Vertex AI as the provider instead.
        g, err := genkit.Init(ctx,
            genkit.WithPlugins(&googlegenai.GoogleAI{}),
            genkit.WithDefaultModel("googleai/gemini-2.0-flash"),
        )
        if err != nil {
            log.Fatalf("failed to initialize Genkit: %w", err)
        }
    
        flow := genkit.DefineFlow(g, "jokesFlow", func(ctx context.Context, topic string) (string, error) {
            resp, err := genkit.Generate(ctx, g,
                ai.WithPrompt(`Tell a short joke about %s. Be creative!`, topic),
            )
            if err != nil {
                return "", fmt.Errorf("failed to generate joke: %w", err)
            }
    
            return resp.Text(), nil
        })
    
        mux := http.NewServeMux()
        mux.HandleFunc("POST /jokesFlow", genkit.Handler(flow))
        log.Fatal(server.Start(ctx, "127.0.0.1:"+os.Getenv("PORT"), mux))
    }
    
  6. Mettez les identifiants de l'API à la disposition de votre fonction déployée. Choisissez les identifiants dont vous avez besoin en fonction de votre choix dans l'exemple ci-dessus:

    Gemini (IA de Google)

    1. Assurez-vous que l'IA de Google est disponible dans votre région.

    2. Générez une clé API pour l'API Gemini à l'aide de Google AI Studio.

    3. Mettez la clé API à disposition dans l'environnement Cloud Run:

      1. Dans la console Cloud, activez l'API Secret Manager.
      2. Sur la page Secret Manager, créez un secret contenant votre clé API.
      3. Après avoir créé le secret, sur la même page, accordez à votre compte de service de calcul par défaut l'accès au secret avec le rôle Accesseur de secrets de Secret Manager. (Vous pouvez rechercher le nom du compte de service Compute par défaut sur la page IAM.)

      À l'étape suivante, lorsque vous déploierez votre service, vous devrez faire référence au nom de ce secret.

    Gemini (Vertex AI)

    1. Dans la console Cloud, activez l'API Vertex AI pour votre projet.

    2. Sur la page IAM, assurez-vous que le compte de service Compute par défaut se voit attribuer le rôle Utilisateur Vertex AI.

    Le seul secret que vous devez configurer pour ce tutoriel concerne le fournisseur de modèle, mais en général, vous devez effectuer une opération similaire pour chaque service utilisé par votre flux.

  7. Facultatif: Essayez votre flux dans l'UI du développeur:

    1. Configurez votre environnement local pour le fournisseur de modèles que vous avez choisi:

      Gemini (IA de Google)

      export GEMINI_API_KEY=<your API key>

      Gemini (Vertex AI)

      export GOOGLE_CLOUD_PROJECT=<your project ID>
      export GOOGLE_CLOUD_LOCATION=us-central1
      gcloud auth application-default login
    2. Démarrez l'UI:

      genkit start -- go run .
    3. Dans l'UI du développeur (http://localhost:4000/), exécutez le flux:

      1. Cliquez sur jokesFlow.

      2. Dans l'onglet Entrée JSON, indiquez un sujet pour le modèle:

        "bananas"
        
      3. Cliquez sur Exécuter.

  8. Si tout fonctionne comme prévu jusqu'à présent, vous pouvez créer et déployer le flux:

    Gemini (IA de Google)

    gcloud run deploy --port 3400 \
      --update-secrets=GEMINI_API_KEY=<your-secret-name>:latest

    Gemini (Vertex AI)

    gcloud run deploy --port 3400 \
      --set-env-vars GOOGLE_CLOUD_PROJECT=<your-gcloud-project> \
      --set-env-vars GOOGLE_CLOUD_LOCATION=us-central1

    (GOOGLE_CLOUD_LOCATION configure la région de l'API Vertex que vous souhaitez utiliser.)

    Sélectionnez N lorsque vous êtes invité à autoriser les appels non authentifiés. Si vous répondez N, votre service nécessitera des identifiants IAM. Pour savoir comment fournir ces identifiants, consultez la section Authentification dans la documentation Cloud Run.

Une fois le déploiement terminé, l'outil imprime l'URL du service. Vous pouvez le tester avec curl:

curl -X POST https://<service-url>/menuSuggestionFlow \
  -H "Authorization: Bearer $(gcloud auth print-identity-token)" \
  -H "Content-Type: application/json" -d '"bananas"'