Genkit プラグインの作成

Genkit の機能は、プラグインによって拡張できるように設計されています。Genkit プラグインは、モデル、リトリーバー、インデクサ、トレース ストアなどを提供できる構成可能なモジュールです。Genkit を使用するだけで、プラグインが実際に動作しているのを確認できます。

import (
    "github.com/firebase/genkit/go/ai"
    "github.com/firebase/genkit/go/genkit"
    "github.com/firebase/genkit/go/plugins/googlegenai"
    "github.com/firebase/genkit/go/plugins/server"
)
g, err := genkit.Init(ctx,
    ai.WithPlugins(
        &googlegenai.GoogleAI{APIKey: ...},
        &googlegenai.VertexAI{ProjectID: "my-project", Location: "us-central1"},
    ),
)

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"

標準エクスポート

すべてのプラグインは、genkit.Plugin インターフェースに適合するように、次のシンボルを定義してエクスポートする必要があります。

  • プラグインで受け入れられるすべての構成オプションをカプセル化する構造体型。

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

    type MyPlugin struct {
        APIKey string
        // Other options you may allow to configure...
    }
    
  • プロバイダ ID を返す構造体の Name() メソッド。

  • 次のような宣言を持つ構造体の Init() メソッド。

    func (m *MyPlugin) Init(ctx context.Context, g *genkit.Genkit) error
    

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

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

    可能な限り、プラグインが提供するリソースは、このプラグインより前に他のプラグインがインストールされたと想定しないでください。

    このメソッドは、ユーザーがプラグインを WithPlugins() オプションに渡すと、genkit.Init() 中に自動的に呼び出されます。

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

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