编写 Genkit 插件

Firebase Genkit 的功能旨在通过插件扩展。Genkit 插件是可配置的模块,可以提供模型、检索器、索引器, 跟踪记录存储区等您已经了解了插件的实际运行方式,只需使用 Genkit:

import {
	"github.com/firebase/genkit/go/ai"
	"github.com/firebase/genkit/go/plugins/vertexai"
}
// Default to the value of GCLOUD_PROJECT for the project,
// and "us-central1" for the location.
// To specify these values directly, pass a vertexai.Config value to Init.
if err := vertexai.Init(ctx, nil); err != nil {
	return err
}

Vertex AI 插件会接受配置(例如,用户的 Google Cloud 项目 ID),并使用 Genkit 注册表。该注册表可作为查找服务,查找位于 并为 Genkit 的本地界面提供支持,以便运行和检查模型, 提示等等。

创建插件

在 Go 中,Genkit 插件只是一个软件包,它遵循一小部分 惯例。单个模块可以包含多个插件。

提供方 ID

每个插件都必须有一个唯一标识符字符串,用于区分插件和 其他插件。Genkit 使用此标识符作为每项资源的命名空间 以防止与其他插件发生命名冲突。

例如,如果您的插件的 ID 为 yourplugin 并提供名为 text-generator,则完整的模型标识符将为 yourplugin/text-generator

您无需导出提供方 ID,但应针对 并在 Genkit 函数的需要时始终使用该插件。

const providerID = "yourplugin"

标准导出

每个插件都应定义并导出以下符号:

  • Init() 函数,其声明如下所示:

    func Init(ctx context.Context, cfg *Config) (err error)
    

    省略您不使用的任何参数(例如,您可能没有 cfg 参数(如果您的插件未提供任何插件范围的配置) 选项)。

    在此函数中,执行插件所需的任何设置步骤。例如:

    • 确认已指定所有必需的配置值, 默认为任何未指定的可选设置。
    • 验证给定的配置选项是否同时有效。
    • 创建插件其余部分所需的任何共享资源。对于 例如,为插件访问的任何服务创建客户端。

    在可能的情况下,插件提供的资源不应 假定用户已执行除调用 Init 以外的任何其他操作。

    即使您的插件并不需要该函数,您也应该定义并导出此函数。 任何初始化。在这种情况下,Init 只会返回 nil 错误。

  • Config 结构体类型。此类型应封装所有配置 Init接受的选项。

    对于任何作为 Secret 值的插件选项,如 API 密钥,您应该 提供 Config 选项和默认环境变量来进行配置 。这样,您的插件就可以利用 Secret 管理功能 由许多托管服务提供商提供的服务(例如 Cloud Secret Manager, 与 Cloud Run 搭配使用)。例如:

    type Config struct {
    	ExampleAPIKey string
    }
    
    func Init(cfg *Config) (err error) {
    	apiKey := cfg.ExampleAPIKey
    	if apiKey == "" {
    		apiKey = os.Getenv("EXAMPLE_API_KEY")
    	}
    	if apiKey == "" {
    		return fmt.Errorf(`the Example plug-in requires you to specify an API
     key for the Example service, either by passing it to example.Init() or by
     setting the EXAMPLE_API_KEY environment variable`)
    	}
    
    	return nil
    }
    

构建插件功能

一个插件就可以在 Genkit 中启用许多新功能。例如, Vertex AI 插件可激活多个新模型以及嵌入器。

模型插件

Genkit 模型插件可在 Genkit 中添加一个或多个生成式 AI 模型 注册表中。模型是指任何能够接收模型 提示作为输入并生成文本、媒体或数据作为输出。

请参阅编写 Genkit 模型插件

遥测插件

Genkit 遥测插件可将 Genkit 的 OpenTelemetry 插桩配置为 将跟踪记录、指标和日志导出到特定的监控或可视化图表 工具。

请参阅编写 Genkit 遥测插件

发布插件

Genkit 插件可以作为常规 Go 软件包发布。增加 那么软件包的名称中应包含 genkit,这样它 就能在 pkg.go.dev。以下任意一项 不错的选择:

  • github.com/yourorg/genkit-plugins/servicename
  • github.com/yourorg/your-repo/genkit/servicename