Genkit w Cloud Run

Za pomocą Cloud Run możesz wdrażać przepływy Genkit jako usługi internetowe. Na tej stronie znajdziesz przykładowy proces wdrażania domyślnego przykładowego potoku.

  1. Zainstaluj interfejs wiersza poleceń Google Cloud, jeśli jeszcze tego nie zrobiono.

  2. Utwórz nowy projekt Google Cloud za pomocą konsoli Cloud lub wybierz istniejący. Projekt musi być połączony z kontem rozliczeniowym.

    Gdy utworzysz lub wybierzesz projekt, skonfiguruj Google Cloud CLI do jego używania:

    gcloud auth login
    gcloud init
  3. Utwórz katalog dla przykładowego projektu Genkit:

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

    Jeśli zamierzasz używać IDE, otwórz je w tym katalogu.

  4. Zainicjuj moduł Go w katalogu projektu:

    go mod init example/cloudrun
    go mod get github.com/firebase/genkit/go
  5. Utwórz przykładową aplikację za pomocą 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. Udostępnij dane logowania API swojej wdrożonej funkcji. Wybierz, jakich danych logowania potrzebujesz, na podstawie wyboru dokonanego w przykładzie powyżej:

    Gemini (sztuczna inteligencja Google)

    1. Upewnij się, że Google AI jest dostępny w Twoim regionie.

    2. Wygeneruj klucz API do interfejsu Gemini API za pomocą Google AI Studio.

    3. Udostępnij klucz API w środowisku Cloud Run:

      1. W konsoli Cloud włącz interfejs Secret Manager API.
      2. Na stronie Secret Manager utwórz nowy obiekt tajny zawierający klucz interfejsu API.
      3. Po utworzeniu obiektu tajnego na tej samej stronie przyznaj do niego dostęp domyślnemu kontu usługi obliczeń z rolą Uzyskujący dostęp do obiektów tajnych w Menedżerze obiektów tajnych. (nazwa domyślnego konta usługi Compute Engine znajduje się na stronie Uprawnienia).

      W późniejszym kroku, podczas wdrażania usługi, musisz odwołać się do nazwy tego obiektu tajnego.

    Gemini (Vertex AI)

    1. W konsoli Cloud włącz interfejs Vertex AI API w swoim projekcie.

    2. Na stronie Uprawnienia sprawdź, czy domyślnemu kontu usługi obliczeniowej przypisano rolę Użytkownik Vertex AI.

    W ramach tego samouczka musisz skonfigurować tylko jeden sekret – dla dostawcy modelu. Ogólnie jednak musisz wykonać podobne czynności w przypadku każdej usługi, której używa Twój przepływ.

  7. Opcjonalnie: wypróbuj przepływ w interfejsie dla deweloperów:

    1. Skonfiguruj środowisko lokalne dla wybranego dostawcy modelu:

      Gemini (sztuczna inteligencja 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. Uruchom interfejs użytkownika:

      genkit start -- go run .
    3. W interfejsie dla programistów (http://localhost:4000/) uruchom proces:

      1. Kliknij jokesFlow.

      2. Na karcie Wczytaj plik JSON podaj temat modelu:

        "bananas"
        
      3. Kliknij Wykonaj.

  8. Jeśli wszystko działa zgodnie z oczekiwaniami, możesz skompilować i wdrażać przepływ danych:

    Gemini (sztuczna inteligencja 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 konfiguruje region interfejsu Vertex API, którego chcesz używać).

    Wybierz N, gdy pojawi się pytanie, czy chcesz zezwolić na nieuwierzytelnione wywołania. Odpowiedź N spowoduje skonfigurowanie usługi w taki sposób, aby wymagała danych uwierzytelniających IAM. Informacje o przekazywaniu tych danych logowania znajdziesz w sekcji Uwierzytelnianie w dokumentacji Cloud Run.

Po zakończeniu wdrażania narzędzie wydrukuje adres URL usługi. Możesz przetestować curl:

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