编写 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,但应为插件定义一次该 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