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