Genkit com o Cloud Run

É possível implantar fluxos do Genkit como serviços da Web usando o Cloud Run. Esta página, como exemplo, orienta você no processo de implantação do fluxo de amostra padrão.

  1. Instale a CLI do Google Cloud, caso ainda não tenha feito isso.

  2. Crie um novo projeto do Google Cloud usando o console do Cloud ou escolha um atual. O projeto precisa estar vinculado a uma conta de faturamento.

    Depois de criar ou escolher um projeto, configure a CLI do Google Cloud para usar ele:

    gcloud auth login
    gcloud init
  3. Crie um diretório para o projeto de amostra do Genkit:

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

    Se você for usar um ambiente de desenvolvimento integrado, abra-o nesse diretório.

  4. Inicialize um módulo Go no diretório do seu projeto:

    go mod init example/cloudrun
    go mod get github.com/firebase/genkit/go
  5. Crie um app de exemplo usando o 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. Disponibilize as credenciais da API para a função implantada. Escolha as credenciais necessárias com base na sua escolha no exemplo acima:

    Gemini (IA do Google)

    1. Garanta que a IA do Google disponíveis na sua região.

    2. Gere uma chave de API para à API Gemini usando o Google AI Studio.

    3. Disponibilize a chave de API no ambiente do Cloud Run:

      1. No console do Cloud, ative a API Secret Manager.
      2. Na página Secret Manager, crie um novo secret com sua chave de API.
      3. Depois de criar o secret, na mesma página, conceda acesso da conta de serviço ao secret com o papel de Acessador de secrets do Secret Manager. Você pode procurar o nome da conta de serviço padrão do Compute na página do IAM.

      Em uma etapa posterior, quando implantar o serviço, será preciso fazer referência ao nome do secret.

    Gemini (Vertex AI)

    1. No console do Cloud, Ative a API Vertex AI para seu projeto.

    2. Na página IAM, verifique se a Conta de serviço padrão do Compute tem o papel de Usuário da Vertex AI.

    O único secret que você precisa configurar para este tutorial é para o provedor de modelo, mas em geral, você precisa fazer algo semelhante para cada serviço que seu fluxo usa.

  7. Opcional: teste o fluxo na interface do desenvolvedor:

    1. Configure seu ambiente local para o provedor de modelo escolhido:

      Gemini (IA do 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. Inicie a interface:

      genkit start -- go run .
    3. Na interface do desenvolvedor (http://localhost:4000/), execute o fluxo:

      1. Clique em jokesFlow.

      2. Na guia Inserir JSON, forneça um assunto para o modelo:

        "bananas"
        
      3. Clique em Executar.

  8. Se tudo estiver funcionando como esperado até agora, você poderá criar e implantar o fluxo:

    Gemini (IA do 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

    (O GOOGLE_CLOUD_LOCATION configura a região da API Vertex que você quer usar.)

    Escolha N quando for perguntado se você quer permitir invocações não autenticadas. Se você responder N, o serviço será configurado para exigir credenciais do IAM. Consulte Autenticação nos documentos do Cloud Run para saber como fornecer essas credenciais.

Depois que a implantação terminar, a ferramenta imprimirá o URL de serviço. É possível testar isso com curl:

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