Kemampuan Firebase Genkit dirancang untuk diperluas melalui plugin. Plugin genkit adalah modul yang dapat dikonfigurasi yang dapat menyediakan model, pengambil, pengindeks, penyimpanan trace, dan lainnya. Anda sudah melihat plugin di tindakan hanya dengan menggunakan Genkit:
import { configureGenkit } from '@genkit-ai/core';
import { vertexAI } from '@genkit-ai/vertexai';
configureGenkit({
plugins: [vertexAI({ projectId: 'my-project' })],
});
Plugin Vertex AI mengambil konfigurasi (seperti project ID Google Cloud pengguna) dan mendaftarkan berbagai model baru, penyemat, dan masih banyak lagi dengan registry Genkit. Registry mendukung UI lokal Genkit untuk menjalankan memeriksa model, prompt, dan lainnya, serta berfungsi sebagai layanan pencarian untuk pada waktu proses.
Membuat Plugin
Untuk membuat plugin, biasanya Anda perlu membuat paket NPM baru:
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
Kemudian, tentukan dan ekspor plugin Anda dari titik entri utama:
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...
}
);
Panduan opsi plugin
Secara umum, plugin Anda harus mengambil satu argumen options
yang menyertakan
konfigurasi seluruh {i>plugin<i}
yang diperlukan agar berfungsi. Untuk setiap opsi plugin yang
memerlukan nilai rahasia, seperti kunci API, Anda harus menawarkan opsi dan
variabel lingkungan default untuk mengonfigurasinya:
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
}
);
Membuat plugin
Satu plugin dapat mengaktifkan banyak hal baru di dalam Genkit. Misalnya, plugin Vertex AI mengaktifkan beberapa model baru serta embeddingder.
Plugin model
Plugin model Genkit menambahkan satu atau beberapa model AI generatif ke registry Genkit. Model mewakili semua model
yang mampu menerima prompt sebagai input dan menghasilkan teks, media, atau data sebagai output.
Biasanya, plugin model akan membuat satu atau beberapa panggilan defineModel
dalam fungsi inisialisasinya.
Model kustom umumnya terdiri dari tiga komponen:
- Metadata yang menentukan kemampuan model.
- Skema konfigurasi dengan parameter tertentu yang didukung oleh model tersebut.
- Fungsi yang mengimplementasikan model yang menerima
GenerateRequest
dan mengembalikanGenerateResponse
.
Untuk membangun plugin model, Anda harus menggunakan paket @genkit-ai/ai
:
npm i --save @genkit-ai/ai
Pada level yang tinggi, plugin model mungkin terlihat seperti ini:
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);
});
});
Mentransformasi Permintaan dan Respons
Tugas utama plugin model Genkit adalah mengubah
GenerateRequest
dari format umum Genkit ke format yang dikenali
dan didukung oleh API model Anda, lalu mengubah respons dari
ke dalam format GenerateResponseData
yang digunakan oleh Genkit.
Terkadang, diperlukan pemijatan atau manipulasi data untuk mengatasi keterbatasan model. Misalnya, jika model Anda tidak mendukung pesan system
secara native, Anda mungkin perlu mengubah pesan sistem prompt menjadi pasangan pesan pengguna/model.
Referensi model
Setelah didaftarkan menggunakan defineModel
, model akan selalu tersedia saat
diminta oleh nama. Namun, untuk meningkatkan pengetikan dan pelengkapan otomatis IDE, Anda dapat
mengekspor referensi model dari paket Anda yang hanya menyertakan metadata untuk
model, tetapi tidak dengan implementasinya:
import { modelRef } from "@genkit-ai/ai/model";
export myModelRef = modelRef({
name: "my-plugin/my-model",
configSchema: MyConfigSchema,
info: {
// ... model-specific info
},
})
Saat memanggil generate()
, referensi model dan nama model string dapat digunakan secara bergantian:
import { myModelRef } from 'genkitx-my-plugin';
import { generate } from '@genkit-ai/ai';
generate({ model: myModelRef });
// is equivalent to
generate({ model: 'my-plugin/my-model' });
Plugin telemetri
Lihat Menulis Plugin Telemetri Genkit.
Memublikasikan plugin
Plugin genkit dapat dipublikasikan sebagai paket NPM normal. Untuk meningkatkan
untuk visibilitas dan memaksimalkan konsistensi, paket Anda harus diberi nama
genkitx-{name}
untuk menunjukkan bahwa plugin ini adalah plugin Genkit dan harus Anda sertakan sebagai
banyak dari keywords
berikut di package.json
Anda yang relevan dengan
{i>plugin<i}:
genkit-plugin
: selalu sertakan kata kunci ini dalam paket Anda untuk menunjukkan bahwa ini adalah plugin Genkit.genkit-model
: menyertakan kata kunci ini jika paket Anda menetapkan model apa pun.genkit-retriever
: menyertakan kata kunci ini jika paket Anda menentukan retriever.genkit-indexer
: menyertakan kata kunci ini jika paket Anda menentukan pengindeks.genkit-embedder
: menyertakan kata kunci ini jika paket Anda menentukan pengindeks.genkit-tracestore
: menyertakan kata kunci ini jika paket Anda menentukan penyimpanan rekaman aktivitas.genkit-statestore
: menyertakan kata kunci ini jika paket Anda menentukan penyimpanan status.genkit-telemetry
: menyertakan kata kunci ini jika paket Anda menentukan penyedia telemetri.genkit-deploy
: sertakan kata kunci ini jika paket Anda menyertakan helper untuk men-deploy aplikasi Genkit ke penyedia cloud.genkit-flow
: menyertakan kata kunci ini jika paket Anda meningkatkan alur Genkit.
Plugin yang menyediakan retriever, embeddingder, dan model mungkin memiliki package.json
yang terlihat seperti ini:
{
"name": "genkitx-my-plugin",
"keywords": ["genkit-plugin", "genkit-retriever", "genkit-embedder", "genkit-model"],
// ... dependencies etc.
}