Cómo escribir complementos de Genkit

Las funciones de Genkit están diseñadas para que se extiendan a través de complementos. Los complementos de Genkit son módulos configurables que pueden proporcionar modelos, recuperadores, indexadores, almacenes de seguimientos y mucho más. Ya viste los complementos en acción con solo usar 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"},
    ),
)

El complemento de Vertex AI toma la configuración (como el ID del proyecto de Google Cloud del usuario) y registra una variedad de nuevos modelos, incorporadores y más con el registro de Genkit. El registro sirve como un servicio de búsqueda para acciones con nombre en el entorno de ejecución y potencia la IU local de Genkit para ejecutar e inspeccionar modelos, instrucciones y mucho más.

Cómo crear un complemento

En Go, un complemento Genkit es un paquete que se adhiere a un pequeño conjunto de convenciones. Un solo módulo puede contener varios complementos.

ID del proveedor

Cada complemento debe tener una cadena de identificador único que lo distinga de otros complementos. Genkit usa este identificador como un espacio de nombres para cada recurso que defina tu complemento y, así, evitar conflictos de nombres con otros complementos.

Por ejemplo, si tu complemento tiene un ID yourplugin y proporciona un modelo llamado text-generator, el identificador del modelo completo será yourplugin/text-generator.

Este ID de proveedor debe exportarse y debes definirlo una vez para el complemento y usarlo de forma coherente cuando una función de Genkit lo requiera.

const providerID = "yourplugin"

Exportaciones estándar

Cada complemento debe definir y exportar los siguientes símbolos para cumplir con la interfaz genkit.Plugin:

  • Un tipo de struct que encapsula todas las opciones de configuración que acepta el complemento.

    Para cualquier opción de complemento que sea un valor secreto, como claves de API, debes ofrecer una opción de configuración y una variable de entorno predeterminada para configurarla. Esto permite que tu complemento aproveche las funciones de administración de secretos que ofrecen muchos proveedores de hosting (como Cloud Secret Manager, que puedes usar con Cloud Run). Por ejemplo:

    type MyPlugin struct {
        APIKey string
        // Other options you may allow to configure...
    }
    
  • Un método Name() en la estructura que muestra el ID del proveedor.

  • Un método Init() en la struct con una declaración como la siguiente:

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

    En esta función, realiza los pasos de configuración que requiera tu complemento. Por ejemplo:

    • Confirma que se hayan especificado los valores de configuración necesarios y asigna los valores predeterminados a cualquier parámetro de configuración opcional no especificado.
    • Verifica que las opciones de configuración proporcionadas sean válidas juntas.
    • Crea los recursos compartidos que requiera el resto del complemento. Por ejemplo, crea clientes para cualquier servicio al que acceda tu complemento.

    En la medida de lo posible, los recursos proporcionados por el complemento no deben dar por sentado que se instalaron otros complementos antes de este.

    Se llamará a este método automáticamente durante genkit.Init() cuando el usuario pase el complemento a la opción WithPlugins().

Cómo compilar funciones de complementos

Un solo complemento puede activar muchos elementos nuevos en Genkit. Por ejemplo, el complemento de Vertex AI activa varios modelos nuevos, así como un incorporador.

Complementos de modelos

Los complementos de modelos de Genkit agregan uno o más modelos de IA generativa al registro de Genkit. Un modelo representa cualquier modelo generativo capaz de recibir instrucciones como entradas y generar texto, contenido multimedia o datos como resultados.

Consulta Cómo escribir un complemento de modelo de Genkit.

Complementos de telemetría

Los complementos de telemetría de Genkit configuran la instrumentación de OpenTelemetry de Genkit para exportar seguimientos, métricas y registros a una herramienta de supervisión o visualización en particular.

Consulta Cómo escribir un complemento de telemetría de Genkit.

Cómo publicar un complemento

Los complementos de Genkit se pueden publicar como paquetes normales de Go. Para aumentar su visibilidad, tu paquete debe tener genkit en alguna parte de su nombre para que se pueda encontrar con una simple búsqueda en pkg.go.dev. Cualquiera de las siguientes son buenas opciones:

  • github.com/yourorg/genkit-plugins/servicename
  • github.com/yourorg/your-repo/genkit/servicename