将 flow 部署到任何应用托管平台

您可以使用任何可托管 Go 二进制文件的服务,将 Genkit flow 部署为 Web 服务。本页面将引导您完成部署默认示例 flow 的一般流程,并针对具体提供方提供了相应的操作。

  1. 为 Genkit 示例项目创建一个目录:

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

    如果您要使用 IDE,请用其打开此目录。

  2. 在项目目录中初始化 Go 模块:

    go mod init example/cloudrun
    go get github.com/firebase/genkit/go
  3. 使用 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))
    }
    
  4. 实现某种形式的身份验证和授权,以控制对您计划部署的 flow 的访问权限。

    由于大多数生成式 AI 服务都是按流量计费的,因此您应该不希望允许对调用这些服务的所有端点进行公开访问。某些托管服务会提供一个身份验证层,作为部署在其上的应用的前端,您可以用其来实现流量控制。

  5. 向已部署的函数提供 API 凭据。根据您选择的模型提供方,执行以下操作之一:

    Gemini (Google AI)

    1. 确保您所在的区域提供 Google AI

    2. 使用 Google AI Studio 为 Gemini API 生成 API 密钥

    3. 在已部署的环境中提供 API 密钥。

    大多数应用主机都提供了特定系统来安全地处理 API 密钥之类的 Secret。通常,这些 Secret 以环境变量的形式提供给您的应用。如果您可以将 API 密钥分配给 GEMINI_API_KEY 变量,Genkit 会自动使用该密钥。 否则,您需要修改 googlegenai.GoogleAI 插件结构体以显式设置密钥。(但不要直接在代码中嵌入密钥!请使用托管服务提供商提供的 Secret 管理功能。)

    Gemini (Vertex AI)

    1. 在 Cloud 控制台中,为您的项目启用 Vertex AI API

    2. IAM 页面上,创建一个服务账号以访问 Vertex AI API(如果您还没有服务账号)。

      为该账号授予 Vertex AI User 角色。

    3. 在您的托管环境中设置应用默认凭据

    4. 使用您的 Google Cloud 项目 ID 和要使用的 Vertex AI API 位置配置该插件。为此,您可以在托管环境或 googlegenai.VertexAI{} 构造函数中设置 GOOGLE_CLOUD_PROJECTGOOGLE_CLOUD_LOCATION 环境变量。

      在本教程中,您只需要为模型提供方设置 Secret,但通常,您还需要对 flow 所使用的每项服务执行类似的配置操作。

  6. 可选:在开发者界面中试用 flow:

    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. 启动界面:

      genkit start -- go run .
    3. 在开发者界面 (http://localhost:4000/) 中,运行 flow:

    4. 点击 jokesFlow

    5. 输入 JSON 标签页上,为模型提供一个主题:

      "bananas"
      
    6. 点击运行

  7. 如果到目前为止一切正常,您便可以使用提供方的工具构建和部署该 flow。