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 のローカル UI を強化します。

プラグインの作成

Go では、Genkit プラグインは、少数の規則に従うパッケージにすぎません。1 つのモジュールに複数のプラグインを含めることができます。

プロバイダ ID

すべてのプラグインには、他のプラグインと区別するための固有識別子文字列が必要です。Genkit は、他のプラグインとの競合を避けるために、プラグインで定義されたすべてのリソースの名前空間としてこの識別子を使用します。

たとえば、プラグインの ID が yourplugin で、text-generator というモデルを提供している場合、モデルの完全な識別子は yourplugin/text-generator になります。

プロバイダ ID をエクスポートする必要はありませんが、プラグインに対して 1 回定義し、Genkit 関数で必要とされる場合に一貫して使用する必要があります。

const providerID = "yourplugin"

標準エクスポート

すべてのプラグインは、次のシンボルを定義してエクスポートする必要があります。

  • 次のような宣言を持つ Init() 関数。

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

    使用しないパラメータは省略します(たとえば、プラグインがプラグイン全体の構成オプションを提供しない場合は、cfg パラメータを使用しない可能性があります)。

    この関数では、プラグインに必要な設定手順を実行します。次に例を示します。

    • 必須の構成値が指定されていることを確認し、指定されていないオプションの設定にデフォルト値を割り当てます。
    • 指定された構成オプションが一緒に有効であることを確認します。
    • プラグインの残りの部分で必要な共有リソースを作成します。たとえば、プラグインがアクセスするサービス用のクライアントを作成します。

    プラグインが提供するリソースは、可能な限り、ユーザーが Init の呼び出し以外のアクションを実行している、とは考えないでください。

    プラグインに初期化を必要としない場合でも、この関数を定義してエクスポートする必要があります。この場合、Initnil エラーを返すだけです。

  • Config 構造体型。この型では、Init で受け入れられるすべての構成オプションをカプセル化する必要があります。

    API キーなど、シークレット値であるプラグイン オプションの場合は、Config オプションとデフォルトの環境変数の両方を提供して構成する必要があります。これにより、プラグインは多くのホスティング プロバイダ(Cloud Run で使用できる Cloud Secret Manager など)が提供するシークレット管理機能を利用できます。例:

    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
    }
    

プラグイン機能を構築する

1 つのプラグインで、Genkit 内で多くの新しい機能を有効にできます。たとえば、Vertex AI プラグインは、いくつかの新しいモデルとエンベッダーを有効にします。

モデル プラグイン

Genkit モデル プラグインは、1 つ以上の生成 AI モデルを Genkit レジストリに追加します。モデルは、プロンプトを入力として受け取り、テキスト、メディア、またはデータを出力として生成できる生成モデルを表します。

Genkit モデル プラグインの作成をご覧ください。

テレメトリー プラグイン

Genkit テレメトリー プラグインは、Genkit の OpenTelemetry インストルメンテーションを構成して、トレース、指標、ログを特定のモニタリング ツールまたは可視化ツールにエクスポートします。

Genkit テレメトリー プラグインの作成をご覧ください。

プラグインを公開する

Genkit プラグインは、通常の Go パッケージとして公開できます。見つけやすさを向上させるには、パッケージ名のどこかに genkit を含めて、pkg.go.dev で簡単に検索できるようにします。次のいずれかを選択することをおすすめします。

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