搭配 Cloud Run 使用 Genkit

您可以使用 Cloud Run 將 Genkit 流程部署為網頁服務。本頁面會逐步引導您部署預設範例流程。

  1. 如果尚未安裝 Google Cloud CLI,請先安裝。

  2. 使用 Cloud 控制台建立新的 Google Cloud 專案,或選擇現有專案。專案必須連結至帳單帳戶。

    建立或選取專案後,請將 Google Cloud CLI 設為使用該專案:

    gcloud auth login
    gcloud init
  3. 為 Genkit 範例專案建立目錄:

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

    如果您要使用 IDE,請將其開啟至這個目錄。

  4. 在專案目錄中初始化 Go 模組:

    go mod init example/cloudrun
    go mod get github.com/firebase/genkit/go
  5. 使用 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. 為已部署的函式提供 API 憑證。根據上述範例中的選擇,選擇所需的憑證:

    Gemini (Google AI)

    1. 請確認 Google AI 在您所在的地區可用

    2. 使用 Google AI Studio 產生 Gemini API 的 API 金鑰

    3. 在 Cloud Run 環境中提供 API 金鑰:

      1. 在 Cloud 控制台中啟用 Secret Manager API
      2. 在「Secret Manager」頁面上,建立包含 API 金鑰的新密鑰。
      3. 建立 Secret 後,請在同一個頁面上,授予預設的運算服務帳戶 Secret Manager 密鑰存取者角色,以便存取 Secret。(您可以在 IAM 頁面中查詢預設運算服務帳戶的名稱)。

      在後續步驟中,當您部署服務時,需要參照此密鑰的名稱。

    Gemini (Vertex AI)

    1. 在 Cloud 控制台中,為專案啟用 Vertex AI API

    2. 在「IAM」頁面上,確認「預設運算服務帳戶」已獲授「Vertex AI 使用者」角色。

    您只需為本教學課程的模型供應器設定一個機密,但一般來說,您必須為流程使用的每項服務執行類似的操作。

  7. 選用:在開發人員 UI 中試用流程:

    1. 為所選模型供應商設定本機環境:

      Gemini (Google AI)

      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. 啟動 UI:

      genkit start -- go run .
    3. 在開發人員 UI (http://localhost:4000/) 中執行流程:

      1. 按一下「jokesFlow」

      2. 在「輸入 JSON」分頁中,提供模型的主題:

        "bananas"
        
      3. 按一下「執行」

  8. 如果一切運作正常,您可以建構及部署流程:

    Gemini (Google AI)

    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 會設定您要使用的 Vertex API 區域)。

    系統詢問是否要允許未經驗證的叫用時,請選擇 N。回答 N 會將服務設為要求 IAM 憑證。如要瞭解如何提供這些憑證,請參閱 Cloud Run 文件中的「驗證」一節。

部署完成後,工具會列印服務網址。您可以使用 curl 進行測試:

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