Firebase Genkit'in özellikleri, eklentilerle genişletilecek şekilde tasarlanmıştır. Genkit eklentileri; modeller, retriever'lar, dizinleyiciler, iz depoları ve daha fazlasını sağlayabilen yapılandırılabilir modüllerdir. Yalnızca Genkit'i kullanarak eklentileri çalışırken görmüştünüz:
import { configureGenkit } from '@genkit-ai/core';
import { vertexAI } from '@genkit-ai/vertexai';
configureGenkit({
plugins: [vertexAI({ projectId: 'my-project' })],
});
Vertex AI eklentisi, yapılandırmayı (kullanıcının Google Cloud proje kimliği gibi) alır ve Genkit kayıt defterine çeşitli yeni modeller, yerleştirilmiş öğeler ve daha fazlasını kaydeder. Kayıt defteri, Genkit'in modelleri, istemleri ve daha fazlasını çalıştırmak ve incelemek için yerel kullanıcı arayüzünü destekler ve çalışma zamanında adlandırılmış işlemler için bir arama hizmeti görevi görür.
Eklenti Oluşturma
Eklenti oluşturmak için genellikle yeni bir AİOY paketi oluşturmanız gerekir:
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
Ardından, eklentinizi ana giriş noktasından tanımlayın ve dışa aktarın:
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...
}
);
Eklenti seçenekleri kılavuzu
Genel olarak, eklentinizin çalışması için gerekli, eklenti genelindeki tüm yapılandırmaları içeren tek bir options
bağımsız değişkeni alması gerekir. Gizli anahtar değeri gerektiren tüm eklenti seçeneklerini (ör. API anahtarları) yapılandırmak için hem seçenek hem de varsayılan ortam değişkeni sunmanız gerekir:
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
}
);
Eklentinizi oluşturma
Tek bir eklentiyle Genkit'teki birçok yeni öğe etkinleştirilebilir. Örneğin, Vertex AI eklentisi hem birçok yeni modeli hem de bir yerleştirme aracını etkinleştirir.
Model eklentileri
Genkit model eklentileri, Genkit kayıt defterine bir veya daha fazla üretken yapay zeka modeli ekler. Model, giriş olarak istem alabilen ve çıktı olarak metin, medya veya veri oluşturabilen tüm üretken modelleri temsil eder.
Genellikle bir model eklentisi, başlatma işlevinde bir veya daha fazla defineModel
çağrısı yapar.
Özel model genellikle üç bileşenden oluşur:
- Modelin özelliklerini tanımlayan meta veri.
- Modelin desteklediği belirli parametreleri içeren bir yapılandırma şeması.
GenerateRequest
değerini kabul eden veGenerateResponse
döndüren modeli uygulayan bir işlev.
Model eklentisi oluşturmak için @genkit-ai/ai
paketini kullanmanız gerekir:
npm i --save @genkit-ai/ai
Yüksek düzeyde, bir model eklentisi aşağıdaki gibi görünebilir:
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);
});
});
İstekleri ve Yanıtları Dönüştürme
Genkit model eklentisinin ana görevi, GenerateRequest
değerini Genkit'in ortak biçiminden modelinizin API'si tarafından tanınan ve desteklenen bir biçime dönüştürmek ve ardından modelinizden alınan yanıtı Genkit tarafından kullanılan GenerateResponseData
biçimine dönüştürmektir.
Bazen bu işlem, model sınırlamalarını aşmak için verilere müdahale etmeyi veya verileri değiştirmeyi gerektirebilir. Örneğin, modeliniz bir system
mesajını yerel olarak desteklemiyorsa bir istemin sistem mesajını kullanıcı/model mesaj çiftine dönüştürmeniz gerekebilir.
Model referansları
Bir model defineModel
kullanılarak kaydedildikten sonra, adıyla istendiğinde her zaman kullanılabilir. Bununla birlikte, yazma ve IDE otomatik tamamlama özelliklerini iyileştirmek için paketinizden, modelin uygulanmasını değil yalnızca meta verilerini içeren bir model referansını dışa aktarabilirsiniz:
import { modelRef } from "@genkit-ai/ai/model";
export myModelRef = modelRef({
name: "my-plugin/my-model",
configSchema: MyConfigSchema,
info: {
// ... model-specific info
},
})
generate()
çağrılırken, model referansları ve dize model adları birbirinin yerine kullanılabilir:
import { myModelRef } from 'genkitx-my-plugin';
import { generate } from '@genkit-ai/ai';
generate({ model: myModelRef });
// is equivalent to
generate({ model: 'my-plugin/my-model' });
Telemetri eklentileri
Genkit Telemetry Eklentisi Yazma bölümüne bakın.
Eklenti yayınlama
Genkit eklentileri, normal AİOY paketleri olarak yayınlanabilir. Bulunabilirliği artırmak ve tutarlılığı en üst düzeye çıkarmak için paketiniz, Genkit eklentisi olduğunu belirtecek şekilde genkitx-{name}
olarak adlandırılmalıdır. Ayrıca package.json
öğenize aşağıdaki keywords
öğelerinden eklentinizle alakalı olabildiğince çok sayıda öğe eklemelisiniz:
genkit-plugin
: Genkit eklentisi olduğunu belirtmek için paketinize her zaman bu anahtar kelimeyi ekleyin.genkit-model
: Paketiniz herhangi bir model tanımlıyorsa bu anahtar kelimeyi ekleyin.genkit-retriever
: Paketiniz herhangi bir retriever tanımlıyorsa bu anahtar kelimeyi ekleyin.genkit-indexer
: Paketiniz herhangi bir dizinleyiciyi tanımlıyorsa bu anahtar kelimeyi ekleyin.genkit-embedder
: Paketiniz herhangi bir dizinleyiciyi tanımlıyorsa bu anahtar kelimeyi ekleyin.genkit-tracestore
: Paketiniz herhangi bir iz deposu tanımlıyorsa bu anahtar kelimeyi ekleyin.genkit-statestore
: Paketiniz herhangi bir eyalet deposunu tanımlıyorsa bu anahtar kelimeyi ekleyin.genkit-telemetry
: Paketiniz bir telemetri sağlayıcısı tanımlıyorsa bu anahtar kelimeyi ekleyin.genkit-deploy
: Paketiniz, Genkit uygulamalarını bulut sağlayıcılara dağıtmak için yardımcılar içeriyorsa bu anahtar kelimeyi ekleyin.genkit-flow
: Paketiniz Genkit akışlarını geliştiriyorsa bu anahtar kelimeyi ekleyin.
Bir retriever, yerleştirme aracı ve model sağlayan eklentide şunun gibi bir package.json
bulunabilir:
{
"name": "genkitx-my-plugin",
"keywords": ["genkit-plugin", "genkit-retriever", "genkit-embedder", "genkit-model"],
// ... dependencies etc.
}