Genkit モデル プラグインは Genkit に 1 つ以上の生成 AI モデルを追加する されます。モデルとは、入力メッセージを受け取れる 生成し、テキスト、メディア、データを出力として生成します。
始める前に
作成について詳しくは、Genkit プラグインの作成をご覧ください。
Genkit プラグインを幅広くデプロイできます。特に
すべてのプラグインは、ユーザーが呼び出すことが想定される Init
関数をエクスポートする必要があります。
確認しましょう。
モデルの定義
通常、モデル プラグインは 1 つ以上の ai.DefineModel
呼び出しを
Init
関数 - モデルごとに 1 回ずつプラグインがインターフェースを提供します
できます。
モデル定義は、次の 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
のフロントエンド これは生成関数を定義しますが、ユーザーはモデル名を 学習します