Genkit con Cloud Run

Puoi eseguire il deployment dei flussi Genkit come servizi web utilizzando Cloud Run. Questa pagina, come esempio, illustra la procedura di distribuzione del flusso di esempio predefinito.

  1. Installa Google Cloud CLI se non l'hai ancora fatto.

  2. Crea un nuovo progetto Google Cloud utilizzando la console Cloud o scegline uno esistente. Il progetto deve essere collegato a un account di fatturazione.

    Dopo aver creato o scelto un progetto, configura Google Cloud CLI in modo da utilizzarlo:

    gcloud auth login
    gcloud init
  3. Crea una directory per il progetto di esempio Genkit:

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

    Se intendi utilizzare un IDE, aprilo in questa directory.

  4. Inizializza un modulo Go nella directory del progetto:

    go mod init example/cloudrun
    go mod get github.com/firebase/genkit/go
  5. Crea un'app di esempio utilizzando 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. Rendi disponibili le credenziali API per la funzione di cui è stato eseguito il deployment. Scegli le credenziali di cui hai bisogno in base alla tua scelta nell'esempio riportato sopra:

    Gemini (IA di Google)

    1. Assicurati che l'AI di Google sia disponibile nella tua regione.

    2. Genera una chiave API per l'API Gemini utilizzando Google AI Studio.

    3. Rendi disponibile la chiave API nell'ambiente Cloud Run:

      1. Nella console Cloud, abilita l'API Secret Manager.
      2. Nella pagina Secret Manager, crea un nuovo secret contenente la tua chiave API.
      3. Dopo aver creato il secret, nella stessa pagina concedi all'account di servizio Compute predefinito l'accesso al secret con il ruolo Funzione di accesso ai secret di Secret Manager. Puoi cercare il nome dell'account di servizio Compute predefinito nella pagina IAM.

      In un passaggio successivo, quando esegui il deployment del servizio, dovrai fare riferimento al nome di questo secret.

    Gemini (Vertex AI)

    1. Nella console Cloud, abilita l'API Vertex AI per il tuo progetto.

    2. Nella pagina IAM, assicurati che all'account di servizio Compute predefinito sia stato concesso il ruolo Utente Vertex AI.

    L'unico segreto che devi configurare per questo tutorial è per il fornitore del modello, ma in generale devi eseguire un'operazione simile per ogni servizio utilizzato dal flusso.

  7. (Facoltativo) Prova il flusso nell'interfaccia utente per gli sviluppatori:

    1. Configura l'ambiente locale per il provider di modelli che hai scelto:

      Gemini (IA di 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. Avvia l'interfaccia utente:

      genkit start -- go run .
    3. Nell'interfaccia utente per sviluppatori (http://localhost:4000/), esegui il flusso:

      1. Fai clic su jokesFlow.

      2. Nella scheda Input JSON, fornisci un soggetto per il modello:

        "bananas"
        
      3. Fai clic su Esegui.

  8. Se finora tutto funziona come previsto, puoi creare ed eseguire il deployment del flusso:

    Gemini (IA di 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 configura la regione dell'API Vertex che vuoi utilizzare.)

    Scegli N quando ti viene chiesto se vuoi consentire le chiamate non autenticate. Se rispondi N, il servizio verrà configurato in modo da richiedere le credenziali IAM. Per informazioni su come fornire queste credenziali, consulta la sezione Autenticazione nella documentazione di Cloud Run.

Al termine del deployment, lo strumento stampa l'URL del servizio. Puoi testarlo con curl:

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