Możliwości Firebase Genkit zostały zaprojektowane tak, aby można było je rozszerzać przez wtyczki. Wtyczki Genkit to moduły, które można skonfigurować które mogą dostarczać modele, narzędzia do pobierania, indeksujące, magazyny śledzenia i nie tylko. Wtyczki zostały już przez Ciebie wyświetlone za pomocą Genkit:
import { configureGenkit } from '@genkit-ai/core';
import { vertexAI } from '@genkit-ai/vertexai';
configureGenkit({
plugins: [vertexAI({ projectId: 'my-project' })],
});
Wtyczka Vertex AI pobiera konfigurację (np. usługę Google Cloud użytkownika identyfikatora projektu) i rejestruje różne nowe modele, elementy osadzone i nie tylko Rejestr Genkit. Lokalny interfejs użytkownika aplikacji Genkit jest zasilany przez rejestr bada modele, prompty i nie tylko, a także służy jako usługa wyszukiwania nazwane działania w czasie działania.
Tworzenie wtyczki
Aby utworzyć wtyczkę, należy utworzyć nowy pakiet NPM:
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
Następnie zdefiniuj i wyeksportuj wtyczkę z głównego punktu wejścia:
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...
}
);
Wskazówki dotyczące opcji wtyczek
Ogólnie rzecz biorąc, wtyczka powinna przyjmować pojedynczy argument options
, który zawiera
wszelkie konfiguracje obejmujące wszystkie wtyczki
niezbędne do działania. W przypadku każdej opcji wtyczki,
wymaga wartości obiektu tajnego, takiej jak klucze interfejsu API, należy udostępnić zarówno opcję, jak i
aby skonfigurować domyślną zmienną środowiskową:
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
}
);
Tworzenie wtyczki
Pojedyncza wtyczka może aktywować wiele nowych funkcji w Genkit. Na przykład wtyczka Vertex AI aktywuje kilka nowych modeli oraz komponent do umieszczania.
Wtyczki modelu
Wtyczki modelu Genkit dodają do rejestru Genkit co najmniej 1 model generatywnej AI. Model reprezentuje dowolną generatywną
model zdolny do odbierania promptu jako danych wejściowych i generowania tekstu, multimediów lub danych jako danych wyjściowych.
Ogólnie rzecz biorąc, wtyczka modelu wywoła w swojej funkcji inicjowania co najmniej 1 wywołanie defineModel
.
Model niestandardowy składa się zwykle z 3 komponentów:
- Metadane określające możliwości modelu.
- Schemat konfiguracji z dowolnymi parametrami obsługiwanymi przez model.
- Funkcja implementująca model akceptujący
GenerateRequest
i powrót:GenerateResponse
.
Aby utworzyć wtyczkę modelu, musisz użyć pakietu @genkit-ai/ai
:
npm i --save @genkit-ai/ai
Ogólnie wtyczka modelu może wyglądać tak:
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);
});
});
Przekształcanie żądań i odpowiedzi
Głównym zadaniem wtyczki modelu Genkit jest przekształcenie
GenerateRequest
z popularnego formatu Genkit na format rozpoznawalny
i obsługiwany przez interfejs API Twojego modelu, a potem przekształcenie odpowiedzi z
do formatu GenerateResponseData
używanego przez Genkit.
Czasami może to wymagać masowania lub manipulowania danymi, aby obejść ograniczenia modelu. Jeśli na przykład model nie obsługuje natywnie wiadomości system
, może być konieczne przekształcenie komunikatu systemowego promptu w parę wiadomości użytkownika/model.
Odwołania do modelu
Po zarejestrowaniu modelu za pomocą defineModel
jest on zawsze dostępny, gdy:
wymagane jest imię i nazwisko. Jednak aby usprawnić pisanie i autouzupełnianie w IDE, możesz:
wyeksportuj z pakietu odwołanie do modelu, które zawiera tylko metadane
model, ale nie jego implementacja:
import { modelRef } from "@genkit-ai/ai/model";
export myModelRef = modelRef({
name: "my-plugin/my-model",
configSchema: MyConfigSchema,
info: {
// ... model-specific info
},
})
Gdy wywołujesz funkcję generate()
, odwołania do modeli i nazwy modeli w postaci ciągów mogą być używane wymiennie:
import { myModelRef } from 'genkitx-my-plugin';
import { generate } from '@genkit-ai/ai';
generate({ model: myModelRef });
// is equivalent to
generate({ model: 'my-plugin/my-model' });
Wtyczki telemetryczne
Zobacz Pisanie wtyczki telemetrycznej Genkit.
Publikowanie wtyczki
Wtyczki Genkit można publikować jako zwykłe pakiety NPM. Aby zwiększyć
i zwiększyć wykrywalność i spójność, pakiet powinien mieć nazwę
genkitx-{name}
, aby wskazać, że jest to wtyczka Genkit i należy dodać parametr
te elementy (keywords
) w tabeli package.json
są dopasowane do
wtyczka:
genkit-plugin
: zawsze umieszczaj to słowo kluczowe w pakiecie, aby wskazać, że chodzi o wtyczkę Genkit.genkit-model
: uwzględnij to słowo kluczowe, jeśli pakiet zawiera zdefiniowane jakieś modele.genkit-retriever
: dodaj to słowo kluczowe, jeśli w pakiecie są zdefiniowane jakieś retrievery.genkit-indexer
: uwzględnij to słowo kluczowe, jeśli pakiet określa jakieś roboty indeksujące.genkit-embedder
: uwzględnij to słowo kluczowe, jeśli pakiet określa jakieś roboty indeksujące.genkit-tracestore
: uwzględnij to słowo kluczowe, jeśli Twój pakiet określa jakieś magazyny śledzenia.genkit-statestore
: uwzględnij to słowo kluczowe, jeśli Twój pakiet określa jakieś magazyny stanu.genkit-telemetry
: uwzględnij to słowo kluczowe, jeśli pakiet określa dostawcę telemetrycznego.genkit-deploy
: uwzględnij to słowo kluczowe, jeśli pakiet obejmuje osoby pomocne przy wdrażaniu aplikacji Genkit u dostawców chmury.genkit-flow
: uwzględnij to słowo kluczowe, jeśli Twój pakiet usprawnia przepływ danych w Genkit.
Wtyczka udostępniająca narzędzia do pobierania, umieszczania i modelu może mieć interfejs package.json
podobny do tego:
{
"name": "genkitx-my-plugin",
"keywords": ["genkit-plugin", "genkit-retriever", "genkit-embedder", "genkit-model"],
// ... dependencies etc.
}