Le funzionalità di Firebase Genkit sono progettate per essere estese tramite plug-in. I plug-in Genkit sono moduli configurabili che possono fornire modelli, retriever, indexer, archivi di tracce e altro ancora. Hai già visto i plug-in in azione semplicemente utilizzando 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
}
Il plug-in Vertex AI acquisisce la configurazione (ad esempio l'ID progetto Google Cloud dell'utente) e registra una serie di nuovi modelli, embedder e altro ancora nel registry Genkit. Il registry funge da servizio di ricerca per le azioni denominate in fase di esecuzione e supporta l'interfaccia utente locale di Genkit per l'esecuzione e l'ispezione di modelli, prompt e altro ancora.
Creazione di un plug-in
In Go, un plug-in Genkit è semplicemente un pacchetto che rispetta un piccolo insieme di convenzioni. Un singolo modulo può contenere diversi plug-in.
ID provider
Ogni plug-in deve avere una stringa di identificatore univoco che lo distingua dagli altri plug-in. Genkit utilizza questo identificatore come spazio dei nomi per ogni risorsa definita dal tuo plug-in, per evitare conflitti di nomi con altri plug-in.
Ad esempio, se il tuo plug-in ha un ID yourplugin
e fornisce un modello chiamato
text-generator
, l'identificatore completo del modello sarà yourplugin/text-generator
.
Non è necessario esportare l'ID provider, ma devi definirlo una volta per il tuo plug-in e utilizzarlo in modo coerente quando richiesto da una funzione Genkit.
const providerID = "yourplugin"
Esportazioni standard
Ogni plug-in deve definire ed esportare i seguenti simboli:
Una funzione
Init()
con una dichiarazione come la seguente:func Init(ctx context.Context, cfg *Config) (err error)
Ometti eventuali parametri che non usi (ad esempio, potresti non avere un parametro
cfg
se il tuo plug-in non fornisce opzioni di configurazione a livello di plug-in).In questa funzione, esegui tutti i passaggi di configurazione richiesti dal plug-in. Ad esempio:
- Verifica che tutti i valori di configurazione richiesti siano specificati e assegna valori predefiniti a eventuali impostazioni facoltative non specificate.
- Verifica che le opzioni di configurazione specificate siano valide insieme.
- Crea le risorse condivise richieste dal resto del plug-in. Ad esempio, crea client per tutti i servizi a cui ha accesso il tuo plug-in.
Nella misura del possibile, le risorse fornite dal plug-in non devono assumere che l'utente abbia eseguito un'azione diversa dall'aver chiamato
Init
.Devi definire ed esportare questa funzione anche se il plug-in non richiede alcuna inizializzazione. In questo caso,
Init
può semplicemente restituire un errorenil
.Un tipo di struct
Config
. Questo tipo deve incapsulare tutte le opzioni di configurazione accettate daInit
.Per qualsiasi opzione del plug-in che sia un valore segreto, ad esempio le chiavi API, devi offrire sia un'opzione
Config
sia una variabile di ambiente predefinita per configurarla. In questo modo, il tuo plug-in potrà sfruttare le funzionalità di gestione dei secret offerte da molti provider di hosting (ad esempio Cloud Secret Manager, che puoi utilizzare con Cloud Run). Ad esempio: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 }
Creazione di funzioni plug-in
Un singolo plug-in può attivare molti nuovi elementi all'interno di Genkit. Ad esempio, il plug-in Vertex AI attiva diversi nuovi modelli, oltre a un embedder.
Plugin del modello
I plug-in dei modelli Genkit aggiungono uno o più modelli di AI generativa al registry Genkit. Un modello rappresenta qualsiasi modello generativo in grado di ricevere un prompt come input e di generare testo, contenuti multimediali o dati come output.
Consulta Scrivere un plug-in del modello Genkit.
Plug-in di telemetria
I plug-in di telemetria di Genkit configurano la strumentazione OpenTelemetry di Genkit per esportare tracce, metriche e log in un particolare strumento di monitoraggio o visualizzazione.
Consulta Scrittura di un plug-in di telemetria Genkit.
Pubblicazione di un plug-in
I plug-in Genkit possono essere pubblicati come normali pacchetti Go. Per aumentare la rilevabilità, il pacchetto deve contenere genkit
nel nome in modo da poter essere trovato con una semplice ricerca su pkg.go.dev
. Ecco alcune opzioni valide:
github.com/yourorg/genkit-plugins/servicename
github.com/yourorg/your-repo/genkit/servicename