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,但应为插件定义一次该 ID,并在 Genkit 函数需要时始终使用该 ID。
const providerID = "yourplugin"
标准导出
每个插件都应定义并导出以下符号:
Init()
函数,声明如下所示:func Init(ctx context.Context, cfg *Config) (err error)
省略您不使用的任何参数(例如,如果您的插件未提供任何插件级配置选项,您可能没有
cfg
参数)。在此函数中,执行您的插件所需的所有设置步骤。例如:
- 确认所有必需的配置值都已指定,并为所有未指定的可选设置分配默认值。
- 确认给定的配置选项是否有效。
- 创建插件其余部分所需的任何共享资源。例如,为您的插件访问的所有服务创建客户端。
在可能的范围内,插件提供的资源不应该假设用户除了调用
Init
之外还采取了任何其他操作。即使您的插件不需要任何初始化,您也应定义并导出此函数。在这种情况下,
Init
可能仅返回nil
错误。Config
结构体类型。此类型应封装Init
接受的所有配置选项。对于任何密钥值插件选项(例如 API 密钥),您都应提供
Config
选项和默认环境变量来对其进行配置。这样,您的插件就可以利用许多托管服务提供商(例如 Cloud Secret Manager,您可以将其与 Cloud Run 搭配使用)提供的 Secret 管理功能。例如: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