Les fonctionnalités de Firebase Genkit sont conçues pour être étendues par des plug-ins. Les plug-ins Genkit sont des modules configurables pouvant fournir des modèles, des récupérateurs, des indexeurs, des magasins de traces, etc. Vous avez déjà vu des plug-ins en action simplement en utilisant 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
}
Le plug-in Vertex AI effectue la configuration (telle que l'ID de projet Google Cloud de l'utilisateur) et enregistre divers nouveaux modèles, intégrateurs et plus encore dans le registre Genkit. Le Registre sert de service de recherche pour les actions nommées au moment de l'exécution et alimente l'UI locale de Genkit pour exécuter et inspecter des modèles, des invites, etc.
Créer un plug-in
En Go, un plug-in Genkit est simplement un package qui respecte un petit ensemble de conventions. Un même module peut contenir plusieurs plug-ins.
ID du fournisseur
Chaque plug-in doit comporter une chaîne d'identifiant unique qui le distingue des autres plug-ins. Genkit utilise cet identifiant comme espace de noms pour chaque ressource définie par votre plug-in afin d'éviter les conflits de noms avec d'autres plug-ins.
Par exemple, si votre plug-in possède un ID yourplugin
et fournit un modèle appelé text-generator
, l'identifiant complet du modèle sera yourplugin/text-generator
.
Vous n'avez pas besoin d'exporter votre ID de fournisseur, mais vous devez le définir une fois pour votre plug-in et l'utiliser de manière cohérente lorsqu'il est requis par une fonction Genkit.
const providerID = "yourplugin"
Exportations standards
Chaque plug-in doit définir et exporter les symboles suivants:
Une fonction
Init()
avec une déclaration semblable à celle-ci :func Init(ctx context.Context, cfg *Config) (err error)
Omettre les paramètres que vous n'utilisez pas (par exemple, vous n'avez peut-être pas de paramètre
cfg
si votre plug-in ne fournit aucune option de configuration au niveau du plug-in).Dans cette fonction, effectuez toutes les étapes de configuration requises par votre plug-in. Exemple :
- Vérifiez que toutes les valeurs de configuration requises sont spécifiées et attribuez des valeurs par défaut à tous les paramètres facultatifs non spécifiés.
- Vérifiez que les options de configuration données sont valides ensemble.
- Créez toutes les ressources partagées requises par le reste de votre plug-in. Par exemple, créez des clients pour tous les services auxquels votre plug-in accède.
Dans la mesure du possible, les ressources fournies par votre plug-in ne doivent pas supposer que l'utilisateur a effectué une action autre que l'appel de
Init
.Vous devez définir et exporter cette fonction même si votre plug-in ne nécessite aucune initialisation. Dans ce cas,
Init
peut simplement renvoyer une erreurnil
.Type de structure
Config
. Ce type doit encapsuler toutes les options de configuration acceptées parInit
.Pour toutes les options de plug-in qui sont des valeurs secrètes, telles que les clés API, vous devez proposer à la fois une option
Config
et une variable d'environnement par défaut pour la configurer. Cela permet à votre plug-in de profiter des fonctionnalités de gestion des secrets proposées par de nombreux fournisseurs d'hébergement (tels que Cloud Secret Manager, que vous pouvez utiliser avec Cloud Run). Exemple :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 }
Créer des fonctionnalités de plug-in
Un seul plug-in peut activer de nombreuses nouvelles fonctionnalités dans Genkit. Par exemple, le plug-in Vertex AI active plusieurs nouveaux modèles ainsi qu'un intégrateur.
Plug-ins du modèle
Les plug-ins de modèle Genkit ajoutent un ou plusieurs modèles d'IA générative au registre Genkit. Un modèle représente tout modèle génératif capable de recevoir une requête en entrée et de générer du texte, des contenus multimédias ou des données en sortie.
Consultez Écrire un plug-in de modèle Genkit.
Plug-ins de télémétrie
Les plug-ins de télémétrie Genkit configurent l'instrumentation OpenTelemetry de Genkit pour exporter des traces, des métriques et des journaux vers un outil de surveillance ou de visualisation particulier.
Consultez Écrire un plug-in de télémétrie Genkit.
Publier un plug-in
Les plug-ins Genkit peuvent être publiés en tant que packages Go normaux. Pour améliorer la visibilité, le nom de votre package doit inclure genkit
. Vous pourrez ainsi le trouver par une simple recherche sur pkg.go.dev
. Vous pouvez choisir l'une des options suivantes :
github.com/yourorg/genkit-plugins/servicename
github.com/yourorg/your-repo/genkit/servicename