Die Funktionen von Firebase Genkit wurden durch Plug-ins erweitert. Genkit-Plug-ins sind konfigurierbare Module die Modelle, Fetcher, Indexierung, Trace-Speicher und mehr zur Verfügung stellen können. Sie haben bereits Plug-ins in ganz einfach mit Genkit:
import { configureGenkit } from '@genkit-ai/core';
import { vertexAI } from '@genkit-ai/vertexai';
configureGenkit({
plugins: [vertexAI({ projectId: 'my-project' })],
});
Das Vertex AI-Plug-in verwendet die Konfiguration (z. B. die Google Cloud-Projekt-ID des Nutzers) und registriert eine Vielzahl neuer Modelle, Embedder und mehr in der Genkit-Registrierung. Die Registry unterstützt die lokale Benutzeroberfläche von Genkit zum Ausführen und die Überprüfung von Modellen, Prompts und mehr. Außerdem dient sie als Suchdienst für benannte Aktionen zur Laufzeit ausführen.
Plug-in erstellen
Normalerweise erstellen Sie ein neues NPM-Paket, um ein Plug-in zu erstellen:
mkdir genkitx-my-plugin
cd genkitx-my-plugin
npm init -y
npm i --save @genkit-ai/core
npm i --save-dev typescript
npx tsc --init
Definieren und exportieren Sie dann Ihr Plug-in über Ihren Haupteinstiegspunkt:
import { genkitPlugin } from '@genkit-ai/core';
interface MyPluginOptions {
// add any plugin configuration here
}
export const myPlugin = genkitPlugin(
'my-plugin',
async (options: MyPluginOptions) => {
// initialize your plugin here...
}
);
Informationen zu Plug-in-Optionen
Im Allgemeinen sollte dein Plug-in ein einzelnes options
-Argument annehmen, das alle für die Funktion erforderlichen pluginweiten Konfigurationen enthält. Für alle Plug-in-Optionen,
einen Secret-Wert wie API-Schlüssel erfordert, sollten Sie sowohl eine Option
Standard-Umgebungsvariable, um sie zu konfigurieren:
import { genkitPlugin, GenkitError } from '@genkit-ai/core';
interface MyPluginOptions {
apiKey?: string;
}
export const myPlugin = genkitPlugin(
'my-plugin',
async (options: MyPluginOptions) => {
const apiKey = options.apiKey || process.env.MY_PLUGIN_API_KEY;
if (!apiKey)
throw new GenkitError({
source: 'my-plugin',
status: 'INVALID_ARGUMENT',
message:
'Must supply either `options.apiKey` or set `MY_PLUGIN_API_KEY` environment variable.',
});
// ... continue initialization
}
);
Plug-in erstellen
Ein einzelnes Plug-in kann viele neue Elemente in Genkit aktivieren. Das Vertex AI-Plug-in aktiviert beispielsweise mehrere neue Modelle sowie einen Embedder.
Modell-Plug-ins
Mit Genkit-Modell-Plug-ins werden der Genkit-Registry 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.
In der Regel führt ein Modell-Plug-in in seiner Initialisierungsfunktion einen oder mehrere defineModel
-Aufrufe aus.
Ein benutzerdefiniertes Modell besteht in der Regel aus drei Komponenten:
- Metadaten, die die Funktionen des Modells definieren.
- Ein Konfigurationsschema mit allen vom Modell unterstützten Parametern.
- Eine Funktion, die das Modell implementiert, das
GenerateRequest
und mit Rückgabe vonGenerateResponse
.
Zum Erstellen eines Modell-Plug-ins müssen Sie das Paket @genkit-ai/ai
verwenden:
npm i --save @genkit-ai/ai
Ein Modell-Plug-in könnte in etwa so aussehen:
import { genkitPlugin, GenkitError } from '@genkit-ai/core';
import { defineModel, GenerationCommonConfigSchema } from '@genkit-ai/ai/model';
import { simulateSystemPrompt } from '@genkit-ai/ai/model/middleware';
import { z } from 'zod';
export const myPlugin = genkitPlugin('my-plugin', async (options: {apiKey?: string}) => {
defineModel({
// be sure to include your plugin as a provider prefix
name: 'my-plugin/my-model',
// label for your model as shown in Genkit Developer UI
label: 'My Awesome Model',
// optional list of supported versions of your model
versions: ['my-model-001', 'my-model-001'],
// model support attributes
supports: {
multiturn: true, // true if your model supports conversations
media: true, // true if your model supports multimodal input
tools: true, // true if your model supports tool/function calling
systemRole: true, // true if your model supports the system role
output: ['text', 'media', 'json'], // types of output your model supports
},
// Zod schema for your model's custom configuration
configSchema: GenerationCommonConfigSchema.extend({
safetySettings: z.object({...}),
}),
// list of middleware for your model to use
use: [simulateSystemPrompt()]
}, async request => {
const myModelRequest = toMyModelRequest(request);
const myModelResponse = await myModelApi(myModelRequest);
return toGenerateResponse(myModelResponse);
});
});
Anfragen und Antworten transformieren
Die Hauptaufgabe eines Genkit-Modell-Plug-ins besteht darin, das GenerateRequest
aus dem gängigen Genkit-Format in ein Format umzuwandeln, das von der API Ihres Modells erkannt und unterstützt wird, und dann die Antwort Ihres Modells in das von Genkit verwendete GenerateResponseData
-Format umzuwandeln.
Manchmal müssen die Daten dabei massiert oder verändert werden, um Einschränkungen des Modells zu umgehen. Wenn Ihr Modell beispielsweise eine system
-Nachricht nicht nativ unterstützt, müssen Sie möglicherweise die Systemnachricht einer Aufforderung in ein Nutzer/Modell-Nachrichtenpaar umwandeln.
Modellreferenzen
Nachdem ein Modell mit defineModel
registriert wurde, ist es immer verfügbar, wenn es per Name angefordert wird. Zur Verbesserung der Eingabe und der IDE-Autovervollständigung können Sie
eine Modellreferenz aus Ihrem Paket zu exportieren, die nur die Metadaten für ein
Modell, aber nicht seine Implementierung:
import { modelRef } from "@genkit-ai/ai/model";
export myModelRef = modelRef({
name: "my-plugin/my-model",
configSchema: MyConfigSchema,
info: {
// ... model-specific info
},
})
Beim Aufrufen von generate()
können Modellreferenzen und Zeichenfolgenmodellnamen austauschbar verwendet werden:
import { myModelRef } from 'genkitx-my-plugin';
import { generate } from '@genkit-ai/ai';
generate({ model: myModelRef });
// is equivalent to
generate({ model: 'my-plugin/my-model' });
Telemetrie-Plug-ins
Siehe Genkit Telemetry-Plug-in schreiben.
Plug-in veröffentlichen
Genkit-Plug-ins können als normale NPM-Pakete veröffentlicht werden. Um die Auffindbarkeit zu erhöhen und für Einheitlichkeit zu sorgen, sollte Ihr Paket den Namen genkitx-{name}
haben, um anzuzeigen, dass es sich um ein Genkit-Plug-in handelt. Außerdem sollten Sie in Ihrer package.json
so viele der folgenden keywords
angeben, wie für Ihr Plug-in relevant sind:
genkit-plugin
: Nehmen Sie dieses Keyword immer in das Paket auf, um anzugeben, dass es sich um ein Genkit-Plug-in handelt.genkit-model
: Fügen Sie dieses Keyword hinzu, wenn Ihr Paket Modelle definiert.genkit-retriever
: Fügen Sie dieses Keyword hinzu, wenn Ihr Paket Abholer definiert.genkit-indexer
: Fügen Sie dieses Keyword hinzu, wenn Ihr Paket Indexierung definiert.genkit-embedder
: Fügen Sie dieses Keyword ein, wenn Ihr Paket Indexierungsprogramme definiert.genkit-tracestore
: Fügen Sie dieses Keyword hinzu, wenn Ihr Paket Trace-Stores definiert.genkit-statestore
: Fügen Sie dieses Keyword hinzu, wenn Ihr Paket Statusspeicher definiert.genkit-telemetry
: Verwenden Sie dieses Schlüsselwort, wenn in Ihrem Paket ein Telemetrieanbieter definiert ist.genkit-deploy
: Verwenden Sie dieses Schlüsselwort, wenn Ihr Paket Hilfselemente zur Bereitstellung von Genkit-Anwendungen für Cloud-Anbieter enthält.genkit-flow
: Verwenden Sie dieses Keyword, wenn Ihr Paket Genkit-Abläufe optimiert.
Ein Plug-in, das einen Retriever, einen Embedder und ein Modell bereitstellt, könnte eine package.json
haben, die so aussieht:
{
"name": "genkitx-my-plugin",
"keywords": ["genkit-plugin", "genkit-retriever", "genkit-embedder", "genkit-model"],
// ... dependencies etc.
}