Escribe complementos de Genkit

Las funciones de Firebase Genkit están diseñadas para que se extiendan a través de complementos. Genkit son módulos configurables que pueden proporcionar modelos, retrievers, indexadores, almacenes de seguimiento 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/plugins/vertexai"
}
// Default to the value of GCLOUD_PROJECT for the project,
// and "us-central1" for the location.
// To specify these values directly, pass a vertexai.Config value to Init.
if err := vertexai.Init(ctx, nil); err != nil {
	return err
}

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

Cómo crear un complemento

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

ID del proveedor

Cada complemento debe tener una cadena de identificador único que lo distinga de con otros complementos. Genkit usa este identificador como un espacio de nombres para cada recurso que defina tu complemento para 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.

No es necesario exportar el ID de proveedor, pero 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:

  • Una función Init() con una declaración como la siguiente:

    func Init(ctx context.Context, cfg *Config) (err error)
    

    Omite los parámetros que no uses (por ejemplo, es posible que no tengas un cfg si tu complemento no proporciona ninguna configuración de todo el complemento. opciones).

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

    • Confirma que se especifiquen los valores de configuración necesarios y asígnalos valores predeterminados a cualquier configuración opcional no especificada.
    • Verifica que las opciones de configuración proporcionadas sean válidas juntas.
    • Crea los recursos compartidos que requiera el resto del complemento. Para 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 se da por sentado que el usuario realizó una acción distinta de llamar a Init.

    Debes definir y exportar esta función incluso si el complemento no requiere cualquier inicialización. En este caso, Init solo puede mostrar un error nil.

  • Un tipo de struct Config. Este tipo debe encapsular toda la configuración opciones aceptadas por Init.

    Para cualquier opción de complemento que sea valores secretos, como claves de API, debes ofrecer una opción Config y una variable de entorno predeterminada para configurar que la modifica. 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 Config struct {
    	ExampleAPIKey string
    }
    
    func Init(cfg *Config) (err error) {
    	apiKey := cfg.ExampleAPIKey
    	if apiKey == "" {
    		apiKey = os.Getenv("EXAMPLE_API_KEY")
    	}
    	if apiKey == "" {
    		return fmt.Errorf(`the Example plug-in requires you to specify an API
     key for the Example service, either by passing it to example.Init() or by
     setting the EXAMPLE_API_KEY environment variable`)
    	}
    
    	return nil
    }
    

Cómo compilar funciones de complementos

Un solo complemento puede activar muchas funciones nuevas dentro de Genkit. Por ejemplo, el El complemento de Vertex AI activa varios modelos nuevos, así como un incorporaciones.

Complementos del modelo

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 como entrada y generar texto, contenido multimedia o datos como salida.

Consulta Escribe un complemento de modelo 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 supervisión o visualización en particular herramienta.

Consulta Escribe un complemento de telemetría de Genkit.

Publica un complemento

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

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