Genkit 模型插件可在 Genkit 中添加一个或多个生成式 AI 模型 注册表中。模型是指任何能够接收模型 提示作为输入并生成文本、媒体或数据作为输出。
准备工作
如需了解如何编写 Genkit 插件,请参阅编写 Genkit 插件
任何种类的 Genkit 插件,包括模型插件。需要特别注意的是
每个插件都必须导出一个 Init
函数,用户应调用该函数
然后再使用该插件
模型定义
通常,模型插件会在其ai.DefineModel
Init
函数 - 插件提供接口的每个模型各一次
目标。
模型定义由三部分组成:
- 用于声明模型功能的元数据。
- 一种配置类型,包含模型支持的任何特定参数。
- 一个接受
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 会根据这些信息来确定特定行为,
特定输入对模型是否有效。例如,如果模型
不支持多轮互动,那么向它传递消息会出错
历史记录。
请注意,这些声明是指所提供模型的功能 并且不一定要一对一地映射到 底层模型和模型 API。例如,即使模型 API 不 使用特定方式定义系统消息,您的插件可能仍然 声明支持系统角色,并将其实现为特殊逻辑, 将系统消息插入到用户提示中。
定义模型的配置架构
要指定模型支持的生成选项,请定义并导出
配置类型。Genkit 的 ai.GenerationCommonConfig
类型包含
选择经常支持的一些生成式 AI 模型服务,
嵌入或直接使用。
您的生成函数应验证请求是否包含正确的 选项类型。
转换请求和响应
生成函数执行 Genkit 模型插件的主要工作:
将 ai.GenerateRequest
从 Genkit 通用格式转换为格式
然后将响应从
转换为 Genkit 使用的 ai.GenerateResponse
格式。
有时,这可能需要整理或处理数据来变通模型
限制。例如,如果您的模型本身不支持 system
消息,您可能需要将提示的系统消息转换为用户模型,
消息对。
导出内容
除了所有插件都必须导出的资源之外,还要指定 Init
函数和一个 Config
类型,模型插件还应导出
以下:
一种生成配置类型,如上文所述。
Model
函数,用于返回对插件所定义模型的引用。 通常,您只需按以下步骤操作即可:func Model(name string) *ai.Model { return ai.LookupModel(providerID, name) }
可选:
DefineModel
函数,可让用户定义 但这些并不是您自动定义的。还有 需要提供此类函数的两个主要原因:你的插件提供对太多模型的访问权限,导致每个模型无法实际注册每个模型 一个。例如,Ollama 插件可以提供对数十种 不同模型,添加频率更高。因此, 自动定义任何模型,而是要求用户调用
DefineModel
。为了让您的用户能够使用 尚未添加到您的插件中。
插件的
DefineModel
函数通常是ai.DefineModel
的前端 用于定义生成函数,但用户可以指定模型名称 和模型功能。