Cloud Run ile Genkit

Genkit akışlarını Cloud Run'u kullanarak web hizmetleri olarak dağıtabilirsiniz. Bu sayfada, örnek varsayılan akışı dağıtma işleminde size yol gösterilmektedir.

  1. Henüz yapmadıysanız Google Cloud KSA'yı yükleyin.

  2. Cloud Console'u kullanarak yeni bir Google Cloud projesi oluşturun veya mevcut bir projeyi seçin. Proje bir faturalandırma hesabına bağlı olmalıdır.

    Bir proje oluşturduktan veya seçtikten sonra Google Cloud CLI'yi bu projeyi kullanacak şekilde yapılandırın:

    gcloud auth login
    gcloud init
  3. Genkit örnek projesi için bir dizin oluşturun:

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

    Bir IDE kullanacaksanız bu dizine açın.

  4. Proje dizininizde bir Go modülü başlatın:

    go mod init example/cloudrun
    go mod get github.com/firebase/genkit/go
  5. Genkit'i kullanarak örnek bir uygulama oluşturun:

    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. API kimlik bilgilerini dağıtılan işlevinize sunun. Yukarıdaki örnekte yaptığınız seçime göre ihtiyacınız olan kimlik bilgilerini seçin:

    Gemini (Google Yapay Zeka)

    1. Google Yapay Zeka'nın bölgenizde kullanılabildiğinden emin olun.

    2. Google AI Studio'yu kullanarak Gemini API için API anahtarı oluşturun.

    3. API anahtarını Cloud Run ortamında kullanılabilir hale getirin:

      1. Cloud Console'da Secret Manager API'yi etkinleştirin.
      2. Gizli Anahtar Yöneticisi sayfasında, API anahtarınızı içeren yeni bir gizli anahtar oluşturun.
      3. Gizli anahtarı oluşturduktan sonra, aynı sayfada varsayılan bilgi işlem hizmet hesabınıza Secret Manager Gizli Anahtar Erişeni rolü ile gizli anahtara erişim izni verin. (Varsayılan Compute hizmet hesabının adını IAM sayfasında arayabilirsiniz.)

      Daha sonraki bir adımda, hizmetinizi dağıtırken bu gizli anahtarın adını referans olarak kullanmanız gerekir.

    Gemini (Vertex AI)

    1. Cloud Console'da, projeniz için Vertex AI API'yi etkinleştirin.

    2. IAM sayfasında, Varsayılan hesaplama hizmet hesabına Vertex AI Kullanıcısı rolünün atandığından emin olun.

    Bu eğitim için ayarlamanız gereken tek gizlilik, model sağlayıcı içindir ancak genel olarak akışınızın kullandığı her hizmet için benzer bir işlem yapmanız gerekir.

  7. İsteğe bağlı: Akışınızı geliştirici kullanıcı arayüzünde deneyin:

    1. Seçtiğiniz model sağlayıcı için yerel ortamınızı ayarlayın:

      Gemini (Google Yapay Zeka)

      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. Kullanıcı arayüzünü başlatın:

      genkit start -- go run .
    3. Geliştirici kullanıcı arayüzünde (http://localhost:4000/) akışı çalıştırın:

      1. jokesFlow'u tıklayın.

      2. JSON girişi sekmesinde model için bir konu girin:

        "bananas"
        
      3. Çalıştır'ı tıklayın.

  8. Şimdiye kadar her şey beklendiği gibi çalışıyorsa akışı derleyip dağıtabilirsiniz:

    Gemini (Google Yapay Zeka)

    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, kullanmak istediğiniz Vertex API bölgesini yapılandırır.)

    Kimliği doğrulanmamış çağrılara izin vermek isteyip istemediğiniz sorulduğunda N seçeneğini belirleyin. N yanıtını vererek hizmetinizi IAM kimlik bilgilerini gerektirecek şekilde yapılandırabilirsiniz. Bu kimlik bilgilerini sağlama hakkında bilgi edinmek için Cloud Run dokümanlarındaki Kimlik doğrulama bölümüne bakın.

Dağıtım tamamlandıktan sonra araç, hizmet URL'sini yazdırır. curl ile test edebilirsiniz:

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