Los complementos de modelos de Genkit agregan uno o más modelos de IA generativa a Genkit. registro. Un modelo representa cualquier modelo generativo capaz de recibir un instrucciones como entrada y generar texto, contenido multimedia o datos como salida.
Antes de comenzar
Lee Cómo escribir complementos de Genkit para obtener información sobre la escritura
cualquier tipo de complemento de Genkit, incluidos los complementos de modelos. En particular, ten en cuenta que
cada complemento debe exportar una función Init
, a la que se espera que los usuarios llamen
antes de usar el complemento.
Definiciones del modelo
Por lo general, un complemento de modelo realizará una o más llamadas a ai.DefineModel
en su
Función Init
: una vez para cada modelo en que el complemento proporciona una interfaz
a los que tiene acceso una cuenta.
Una definición de modelo consta de tres componentes:
- Metadatos que declaran las capacidades del modelo.
- Un tipo de configuración con cualquier parámetro específico que admita el modelo.
- Una función de generación que acepte un
ai.GenerateRequest
y muestre unai.GenerateResponse
, presuntamente con un modelo de IA para generar esta última.
En términos generales, así se ve en el código:
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
},
)
Declara las capacidades del modelo
Cada definición de modelo debe contener, como parte de sus metadatos, un
Es un valor de ai.ModelCapabilities
que declara qué atributos admite el modelo.
Genkit usa esta información para determinar ciertos comportamientos, como la verificación
si ciertas entradas
son válidas para el modelo. Por ejemplo, si el modelo
no admite interacciones de varios turnos, entonces es un error pasarle un mensaje
de Google Chat.
Ten en cuenta que estas declaraciones hacen referencia a las capacidades del modelo como se proporciona. por el complemento y no mapeen, necesariamente, uno a uno con las capacidades de la el modelo subyacente y la API del modelo. Por ejemplo, incluso si la API del modelo no proporcionan una forma específica de definir mensajes del sistema, es posible que tu complemento aún declarar la compatibilidad con el rol del sistema e implementarlo como una lógica especial inserta mensajes del sistema en el mensaje del usuario.
Define el esquema de configuración de tu modelo
Para especificar las opciones de generación que admite un modelo, define y exporta un
de configuración. Genkit tiene un tipo ai.GenerationCommonConfig
que contiene
opciones que suelen admitir los servicios de modelos de IA generativa, que puedes
incrustar o utilizar directamente.
La función de generación debe verificar que la solicitud contenga la el tipo de opciones.
Transforma solicitudes y respuestas
La función de generación realiza el trabajo principal de un complemento de modelo Genkit:
Transformar el ai.GenerateRequest
del formato común de Genkit en un formato
compatible con la API de tu modelo y, luego, transformar la respuesta de
tu modelo al formato ai.GenerateResponse
que usa Genkit.
A veces, esto puede requerir masajear o manipular datos para solucionar el problema del modelo.
las limitaciones de seguridad. Por ejemplo, si tu modelo no admite de forma nativa una system
.
mensaje, quizás debas transformar el mensaje de sistema de una instrucción en un modelo
el par de mensajes.
Exportaciones
Además de los recursos que todos los complementos deben exportar, un Init
y un tipo Config
, un complemento de modelo también debe exportar el
lo siguiente:
Un tipo de configuración de generación, como se explicó antes.
Una función
Model
, que muestra referencias a los modelos definidos de tu complemento A menudo, esto puede ser simplemente:func Model(name string) *ai.Model { return ai.LookupModel(providerID, name) }
Opcional: Una función
DefineModel
, que permite a los usuarios definir modelos que que puede proporcionar tu complemento, pero que tú no defines automáticamente. Existen Dos razones principales por las que podrías querer proporcionar esta función:Tu complemento proporciona acceso a demasiados modelos para que prácticamente se registren cada uno. uno. Por ejemplo, el complemento Ollama puede brindar acceso a decenas de modelos diferentes, y se agregan con mayor frecuencia. Por este motivo, no definen automáticamente los modelos y, en cambio, requiere que el usuario llame
DefineModel
para cada modelo que desean usar.Para dar a tus usuarios la posibilidad de usar modelos nuevos que hayas aún no se agregó a tu complemento.
Por lo general, la función
DefineModel
de un complemento es un frontend paraai.DefineModel
que define una función de generación, pero permite que el usuario especifique el nombre del modelo y las capacidades del modelo.