Genkit với Cloud Run

Bạn có thể triển khai các luồng Genkit dưới dạng dịch vụ web bằng Cloud Run. Trang này, ví dụ: hướng dẫn bạn quy trình triển khai luồng mẫu mặc định.

  1. Cài đặt Google Cloud CLI nếu bạn chưa cài đặt.

  2. Tạo dự án Google Cloud mới bằng Cloud Console hoặc chọn một dự án hiện có. Dự án phải được liên kết với một tài khoản thanh toán.

    Sau khi bạn tạo hoặc chọn một dự án, hãy định cấu hình Google Cloud CLI để sử dụng dự án đó:

    gcloud auth login
    gcloud init
  3. Tạo thư mục cho dự án mẫu Genkit:

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

    Nếu bạn định sử dụng một IDE, hãy mở IDE đó trong thư mục này.

  4. Khởi chạy mô-đun Go trong thư mục dự án:

    go mod init example/cloudrun
    go mod get github.com/firebase/genkit/go
  5. Tạo ứng dụng mẫu bằng 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. Cung cấp thông tin xác thực API cho hàm đã triển khai. Chọn thông tin xác thực bạn cần dựa trên lựa chọn của bạn trong mẫu ở trên:

    Gemini (AI của Google)

    1. Đảm bảo công nghệ AI của Google có ở khu vực của bạn.

    2. Tạo khoá API cho Gemini API bằng Google AI Studio.

    3. Cung cấp khoá API trong môi trường Cloud Run:

      1. Trong Cloud Console, hãy bật Secret Manager API (API Trình quản lý khoá bí mật).
      2. Trên trang Trình quản lý khoá bí mật, hãy tạo một khoá bí mật mới chứa khoá API của bạn.
      3. Sau khi bạn tạo khoá bí mật, trên cùng một trang, hãy cấp cho tài khoản dịch vụ điện toán mặc định quyền truy cập vào khoá bí mật đó bằng vai trò Trình truy cập khoá bí mật của Trình quản lý khoá bí mật. (Bạn có thể tra cứu tên của tài khoản dịch vụ điện toán mặc định trên trang IAM.)

      Trong bước sau, khi triển khai dịch vụ, bạn sẽ cần tham chiếu tên của khoá bí mật này.

    Gemini (Vertex AI)

    1. Trong Cloud Console, hãy Bật API Vertex AI cho dự án của bạn.

    2. Trên trang IAM, hãy đảm bảo rằng Tài khoản dịch vụ điện toán mặc định được cấp vai trò Người dùng Vertex AI.

    Bí mật duy nhất bạn cần thiết lập cho hướng dẫn này là dành cho nhà cung cấp mô hình, nhưng nói chung, bạn phải làm tương tự cho từng dịch vụ mà luồng của bạn sử dụng.

  7. Không bắt buộc: Thử quy trình của bạn trong giao diện người dùng dành cho nhà phát triển:

    1. Thiết lập môi trường cục bộ cho nhà cung cấp mô hình mà bạn đã chọn:

      Gemini (AI của 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. Bắt đầu giao diện người dùng:

      genkit start -- go run .
    3. Trong giao diện người dùng dành cho nhà phát triển (http://localhost:4000/), hãy chạy quy trình:

      1. Nhấp vào jokesFlow.

      2. Trên thẻ Input JSON (Nhập JSON), hãy cung cấp chủ đề cho mô hình:

        "bananas"
        
      3. Nhấp vào Chạy.

  8. Nếu mọi thứ đều hoạt động như dự kiến cho đến thời điểm này, bạn có thể tạo và triển khai quy trình:

    Gemini (AI của 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 định cấu hình khu vực API Vertex mà bạn muốn sử dụng.)

    Chọn N khi được hỏi xem bạn có muốn cho phép các lệnh gọi chưa được xác thực hay không. Việc trả lời N sẽ định cấu hình dịch vụ của bạn để yêu cầu thông tin xác thực IAM. Hãy xem phần Xác thực trong tài liệu về Cloud Run để biết thông tin về cách cung cấp các thông tin xác thực này.

Sau khi triển khai xong, công cụ này sẽ in URL dịch vụ. Bạn có thể kiểm thử bằng curl:

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