Genkit モデル プラグインを作成する

Genkit モデル プラグインは Genkit に 1 つ以上の生成 AI モデルを追加する されます。モデルとは、入力メッセージを受け取れる 生成し、テキスト、メディア、データを出力として生成します。

始める前に

作成について詳しくは、Genkit プラグインの作成をご覧ください。 Genkit プラグインを幅広くデプロイできます。特に すべてのプラグインは、ユーザーが呼び出すことが想定される Init 関数をエクスポートする必要があります。 確認しましょう。

モデルの定義

通常、モデル プラグインは 1 つ以上の ai.DefineModel 呼び出しを Init 関数 - モデルごとに 1 回ずつプラグインがインターフェースを提供します できます。

モデル定義は、次の 3 つのコンポーネントで構成されます。

  1. モデルの機能を宣言するメタデータ。
  2. モデルでサポートされている特定のパラメータを持つ構成タイプ。
  3. ai.GenerateRequest を受け取り、 ai.GenerateResponse。後者の生成には AI モデルを使用します。

大まかなコードは次のようになります。

type MyModelConfig struct {
	ai.GenerationCommonConfig
	CustomOption int
	AnotherCustomOption string
}
ai.DefineModel(
	providerID, "my-model",
	&ai.ModelMetadata{
		Label: "my-model",
		Supports: ai.ModelCapabilities{
			Multiturn:  true,  // Does the model support multi-turn chats?
			SystemRole: true,  // Does the model support syatem messages?
			Media:      false, // Can the model accept media input?
			Tools:      false, // Does the model support function calling (tools)?
		},
	},
	func(ctx context.Context,
		genRequest *ai.GenerateRequest,
		_ ai.ModelStreamingCallback,
	) (*ai.GenerateResponse, error) {
		// Verify that the request includes a configuration that conforms to
		// your schema .
		if _, ok := genRequest.Config.(MyModelConfig); !ok {
			return nil, fmt.Errorf("request config must be type MyModelConfig")
		}

		// Use your custom logic to convert Genkit's ai.GenerateRequest
		// into a form usable by the model's native API.
		apiRequest, err := apiRequestFromGenkitRequest(genRequest)
		if err != nil {
			return nil, err
		}

		// Send the request to the model API, using your own code or the
		// model API's client library.
		apiResponse, err := callModelAPI(apiRequest)
		if err != nil {
			return nil, err
		}

		// Use your custom logic to convert the model's response to Genkin's
		// ai.GenerateResponse.
		response, err := genResponseFromAPIResponse(apiResponse)
		if err != nil {
			return nil, err
		}

		return response, nil
	},
)

モデルの機能を宣言する

すべてのモデル定義には、メタデータの一部として ai.ModelCapabilities 値。モデルがサポートする機能を宣言します。 Genkit はこの情報を使用して、確認などの特定の動作を判断します。 特定の入力がモデルに有効かどうかたとえば、モデルに マルチターン操作をサポートしていない場合、メッセージを渡すとエラーになります。 できます。

これらの宣言は、提供されているモデルの機能を指しています。 機能に 1 対 1 で対応付けられるとは限りません。 モデル API です。たとえば、モデル API でラベルが定義されていなくても システム メッセージを定義する具体的な方法を提供していても、プラグインが システムロールのサポートを宣言し、特別なロジックとして実装し、 ユーザー プロンプトにシステム メッセージを挿入します。

モデルの構成スキーマの定義

モデルがサポートする生成オプションを指定するには、 構成タイプを指定します。Genkit には、次を含む ai.GenerationCommonConfig 型があります。 生成 AI モデルサービスで頻繁にサポートされているオプションの中から、 埋め込むか、完全に使用する必要があります。

生成関数では、リクエストに正しい属性が含まれていることを オプション タイプ。

リクエストとレスポンスの変換

生成関数は、Genkit モデル プラグインの主な処理を実行します。 ai.GenerateRequest を Genkit の一般的な形式から形式に変換する レスポンスをモデルの API でサポートされている変数に モデルを Genkit で使用される ai.GenerateResponse 形式に変換します。

場合によっては、モデルを回避するためにデータの操作や操作が必要になる あります。たとえば、モデルが system をネイティブにサポートしていない場合 プロンプトのシステム メッセージをユーザーモデルに あります。

エクスポートしたファイル

すべてのプラグインでエクスポートする必要があるリソースに加えて、Init Config 型です。モデル プラグインでは、 次のとおりです。

  • 前述の世代構成タイプ。

  • Model 関数。プラグインの定義済みモデルへの参照を返します。 多くの場合、これは単純に次のとおりです。

    func Model(name string) *ai.Model {
        return ai.LookupModel(providerID, name)
    }
    
  • 省略可: DefineModel 関数。これにより、ユーザーはモデルを定義できるようになります。 自動的に定義されることはありません。他にも このような関数が必要になる主な理由は 2 つあります。

    • プラグインでアクセスできるモデルが多すぎるため、実質的に各モデルを登録できない 1 です。たとえば、Ollama プラグインを使用すると、 より頻繁に追加されています。このため、 モデルが自動的に定義されます。代わりに、ユーザーが 使用するモデルごとに DefineModel

    • 新しくリリースされたモデルをユーザーが使用できるようにする まだプラグインに追加されていません。

    通常、プラグインの DefineModel 関数は ai.DefineModel のフロントエンド これは生成関数を定義しますが、ユーザーはモデル名を 学習します