Genkit-Plug-ins schreiben

Die Funktionen von Firebase Genkit können durch Plug-ins erweitert werden. Genkit-Plug-ins sind konfigurierbare Module, die unter anderem Modelle, Abrufprogramme, Indexierer und Trace-Stores bereitstellen können. Sie haben bereits Plug-ins in Aktion gesehen, indem Sie Genkit verwendet haben:

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
}

Das Vertex AI-Plug-in nimmt die Konfiguration (z. B. die Google Cloud-Projekt-ID des Nutzers) an und registriert eine Vielzahl neuer Modelle, Embedder und mehr in der Genkit-Registrierung. Die Registry dient als Suchdienst für benannte Aktionen zur Laufzeit und ermöglicht die Ausführung und Prüfung von Modellen, Prompts und mehr über die lokale Benutzeroberfläche von Genkit.

Plug-in erstellen

In Go ist ein Genkit-Plug-in einfach ein Paket, das einigen Konventionen folgt. Ein einzelnes Modul kann mehrere Plug-ins enthalten.

Anbieter-ID

Jedes Plug-in muss einen eindeutigen ID-String haben, der es von anderen Plug-ins unterscheidet. Genkit verwendet diese Kennung als Namespace für jede Ressource, die in Ihrem Plug-in definiert wird, um Namenskonflikte mit anderen Plug-ins zu vermeiden.

Wenn Ihr Plug-in beispielsweise die ID yourplugin hat und ein Modell namens text-generator bereitstellt, lautet die vollständige Modell-ID yourplugin/text-generator.

Sie müssen Ihre Anbieter-ID nicht exportieren, sollten sie aber einmal für Ihr Plug-in definieren und sie konsistent verwenden, wenn dies von einer Genkit-Funktion gefordert wird.

const providerID = "yourplugin"

Standardexporte

Jedes Plug-in sollte die folgenden Symbole definieren und exportieren:

  • Eine Init()-Funktion mit einer Deklaration wie der folgenden:

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

    Lassen Sie alle nicht verwendeten Parameter weg. Beispielsweise haben Sie möglicherweise keinen cfg-Parameter, wenn Ihr Plug-in keine pluginweiten Konfigurationsoptionen bietet.

    Führen Sie in dieser Funktion alle Einrichtungsschritte aus, die für Ihr Plug-in erforderlich sind. Beispiel:

    • Prüfen Sie, ob alle erforderlichen Konfigurationswerte angegeben sind, und weisen Sie allen nicht angegebenen optionalen Einstellungen Standardwerte zu.
    • Prüfen Sie, ob die angegebenen Konfigurationsoptionen zusammen gültig sind.
    • Erstellen Sie alle freigegebenen Ressourcen, die für den Rest Ihres Plug-ins erforderlich sind. Erstellen Sie beispielsweise Clients für alle Dienste, auf die Ihr Plug-in zugreift.

    Die vom Plug-in bereitgestellten Ressourcen sollten soweit möglich nicht davon ausgehen, dass der Nutzer eine andere Aktion als Init aufgerufen hat.

    Sie sollten diese Funktion auch dann definieren und exportieren, wenn Ihr Plug-in keine Initialisierung erfordert. In diesem Fall kann Init einfach einen nil-Fehler zurückgeben.

  • Einen Config-Struct-Typ. Dieser Typ sollte alle von Init akzeptierten Konfigurationsoptionen umfassen.

    Für alle Plug-in-Optionen, die geheime Werte sind, z. B. API-Schlüssel, sollten Sie sowohl eine Config-Option als auch eine Standardumgebungsvariable zur Konfiguration anbieten. So können Sie die Secret-Verwaltungsfunktionen vieler Hostinganbieter nutzen, z. B. Cloud Secret Manager, den Sie mit Cloud Run verwenden können. Beispiel:

    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
    }
    

Plug-in-Funktionen erstellen

Mit einem einzigen Plug-in können viele neue Funktionen in Genkit aktiviert werden. Das Vertex AI-Plug-in aktiviert beispielsweise mehrere neue Modelle sowie einen Embedder.

Modell-Plug-ins

Mit Genkit-Modell-Plug-ins werden der Genkit-Registrierung ein oder mehrere generative KI-Modelle hinzugefügt. Ein Modell ist ein beliebiges generatives Modell, das einen Prompt als Eingabe entgegennehmen und Text, Medien oder Daten als Ausgabe generieren kann.

Weitere Informationen finden Sie unter Genkit-Modell-Plug-in erstellen.

Telemetrie-Plug-ins

Genkit-Telemetrie-Plug-ins konfigurieren die OpenTelemetry-Instrumentierung von Genkit so, dass Traces, Messwerte und Logs in ein bestimmtes Monitoring- oder Visualisierungstool exportiert werden.

Weitere Informationen finden Sie unter Genkit-Telemetrie-Plug-in erstellen.

Plug-in veröffentlichen

Genkit-Plug-ins können als normale Go-Pakete veröffentlicht werden. Um die Sichtbarkeit zu erhöhen, sollte der Name Ihres Pakets genkit enthalten, damit es bei einer einfachen Suche auf pkg.go.dev gefunden werden kann. Eine der folgenden Optionen ist eine gute Wahl:

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