Kemampuan Firebase Genkit dirancang untuk diperluas melalui plugin. Plugin Genkit adalah modul yang dapat dikonfigurasi yang dapat menyediakan model, pengambil, pengindeks, penyimpanan rekaman aktivitas, dan banyak lagi. Anda telah melihat cara kerja plugin hanya dengan menggunakan Genkit:
import { genkit } from 'genkit';
import { vertexAI } from '@genkit-ai/vertexai';
const ai = genkit({
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 dan memeriksa model, perintah, dan lainnya serta berfungsi sebagai layanan pencarian untuk tindakan bernama saat runtime.
Membuat Plugin
Untuk membuat plugin, Anda biasanya ingin membuat paket NPM baru:
mkdir genkitx-my-plugin
cd genkitx-my-plugin
npm init -y
npm i --save genkit
npm i --save-dev typescript
npx tsc --init
Kemudian, tentukan dan ekspor plugin dari titik entri utama:
import { Genkit, z } from 'genkit';
import { GenkitPlugin, genkitPlugin } from 'genkit/plugin';
interface MyPluginOptions {
// add any plugin configuration here
}
export function myPlugin(options?: MyPluginOptions) {
return genkitPlugin('myPlugin', async (ai: Genkit) => {
ai.defineModel(...);
ai.defineEmbedder(...)
// ....
});
};
Panduan opsi plugin
Secara umum, plugin Anda harus menggunakan satu argumen options
yang menyertakan
konfigurasi seluruh plugin yang diperlukan untuk berfungsi. Untuk opsi plugin apa pun yang
memerlukan nilai secret, seperti kunci API, Anda harus menawarkan opsi dan
variabel lingkungan default untuk mengonfigurasinya:
import { Genkit, z } from 'genkit';
import { GenkitPlugin, genkitPlugin } from 'genkit/plugin';
import { GenkitError } from '@genkit-ai/core';
interface MyPluginOptions {
apiKey?: string;
}
export function myPlugin(options?: MyPluginOptions) {
return genkitPlugin('myPlugin', async (ai: Genkit) => {
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.',
});
ai.defineModel(...);
ai.defineEmbedder(...)
// ....
});
};
Mem-build plugin
Satu plugin dapat mengaktifkan banyak hal baru di dalam Genkit. Misalnya, plugin Vertex AI akan mengaktifkan beberapa model baru dan penyemat.
Plugin model
Plugin model Genkit menambahkan satu atau beberapa model AI generatif ke registry Genkit. Model mewakili semua model
generatif yang mampu menerima perintah sebagai input dan menghasilkan teks, media, atau data sebagai output.
Biasanya, plugin model akan melakukan 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.
- Fungsi yang mengimplementasikan model yang menerima
GenerateRequest
dan menampilkanGenerateResponse
.
Untuk mem-build plugin model, Anda harus menggunakan paket @genkit-ai/ai
:
npm i --save @genkit-ai/ai
Pada tingkat tinggi, plugin model mungkin terlihat seperti ini:
import { genkitPlugin, GenkitPlugin } from 'genkit/plugin';
import { GenkitError } from '@genkit-ai/core';
import { GenerationCommonConfigSchema } from '@genkit-ai/ai/model';
import { simulateSystemPrompt } from '@genkit-ai/ai/model/middleware';
import { z } from 'genkit';
export function myPlugin(options?: MyPluginOptions) {
return genkitPlugin('my-plugin', async (ai: Genkit) => {
ai.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 menjadi format yang dikenali
dan didukung oleh API model Anda, lalu mengubah respons dari
model Anda menjadi format GenerateResponseData
yang digunakan oleh Genkit.
Terkadang, hal ini mungkin memerlukan pengiriman pesan 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 terdaftar menggunakan defineModel
, model akan selalu tersedia saat
diminta berdasarkan nama. Namun, untuk meningkatkan pengetikan dan pelengkapan otomatis IDE, Anda dapat
mengekspor referensi model dari paket yang hanya menyertakan metadata untuk
model, tetapi bukan 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' });
Memublikasikan plugin
Plugin genkit dapat dipublikasikan sebagai paket NPM normal. Untuk meningkatkan
visibilitas dan memaksimalkan konsistensi, paket Anda harus diberi nama
genkitx-{name}
untuk menunjukkan bahwa paket tersebut adalah plugin Genkit dan Anda harus menyertakan sebanyak mungkin
keywords
berikut di package.json
yang relevan dengan
plugin Anda:
genkit-plugin
: selalu sertakan kata kunci ini dalam paket Anda untuk menunjukkan bahwa ini adalah plugin Genkit.genkit-model
: sertakan kata kunci ini jika paket Anda menentukan model apa pun.genkit-retriever
: sertakan kata kunci ini jika paket Anda menentukan pengambil.genkit-indexer
: sertakan kata kunci ini jika paket Anda menentukan pengindeksan.genkit-embedder
: sertakan kata kunci ini jika paket Anda menentukan pengindeksan.genkit-tracestore
: sertakan kata kunci ini jika paket Anda menentukan penyimpanan rekaman aktivitas.genkit-statestore
: sertakan kata kunci ini jika paket Anda menentukan penyimpanan status.genkit-telemetry
: sertakan 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
: sertakan kata kunci ini jika paket Anda meningkatkan alur Genkit.
Plugin yang menyediakan retriever, penyemat, dan model mungkin memiliki package.json
yang terlihat seperti:
{
"name": "genkitx-my-plugin",
"keywords": ["genkit-plugin", "genkit-retriever", "genkit-embedder", "genkit-model"],
// ... dependencies etc.
}