Firebase Genkit'in özellikleri, eklentilerle genişletilecek şekilde tasarlanmıştır. Genkit eklentileri, modeller, alıcı, dizine ekleyen, izleme depoları ve daha fazlasını sağlayabilen yapılandırılabilir modüllerdir. Genkit'i kullanarak eklentileri daha önce de görmüştünüz:
import { genkit } from 'genkit';
import { vertexAI } from '@genkit-ai/vertexai';
const ai = genkit({
plugins: [vertexAI({ projectId: 'my-project' })],
});
Vertex AI eklentisi, yapılandırmayı (kullanıcı Google Cloud proje kimliği gibi) alır ve çeşitli yeni modelleri, yerleşik öğeleri ve daha fazlasını Genkit kayıt defterine kaydeder. Kayıt defteri, modelleri, istemleri ve daha fazlasını çalıştırmak ve incelemek için Genkit'in yerel kullanıcı arayüzünü destekler. Ayrıca, çalışma zamanında adlandırılmış işlemler için bir arama hizmeti olarak da kullanılır.
Eklenti oluşturma
Eklenti oluşturmak için genellikle yeni bir NPM paketi oluşturmanız gerekir:
mkdir genkitx-my-plugin
cd genkitx-my-plugin
npm init -y
npm i --save genkit
npm i --save-dev typescript
npx tsc --init
Ardından, ana giriş noktanızdan eklentinizi tanımlayıp dışa aktarın:
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(...)
// ....
});
};
Eklenti seçenekleri kılavuzu
Genel olarak, eklentiniz, çalışması için gerekli olan tüm eklenti genelindeki yapılandırmaları içeren tek bir options
bağımsız değişkeni almalıdır. API anahtarları gibi gizli bir değer gerektiren tüm eklenti seçenekleri için hem bir seçenek hem de yapılandırmak üzere varsayılan bir ortam değişkeni sunmanız gerekir:
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(...)
// ....
});
};
Eklentinizi oluşturma
Tek bir eklenti, Genkit'te birçok yeni özelliği etkinleştirebilir. Örneğin, Vertex AI eklentisi, yerleştiricinin yanı sıra çeşitli yeni modelleri etkinleştirir.
Model eklentileri
Genkit model eklentileri, Genkit kayıt otoritesine bir veya daha fazla üretken yapay zeka modeli ekler. Model, giriş olarak istem alabilen ve çıkış olarak metin, medya veya veri oluşturabilen tüm üretken modelleri temsil eder.
Genellikle model eklentileri, başlatma işlevinde bir veya daha fazla defineModel
çağrısı yapar.
Özel modeller genellikle üç bileşenden oluşur:
- Modelin özelliklerini tanımlayan meta veriler.
- Model tarafından desteklenen belirli parametreleri içeren bir yapılandırma şeması.
GenerateRequest
değerini kabul edipGenerateResponse
değerini 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
Genel hatlarıyla bir model eklentisi aşağıdaki gibi görünebilir:
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);
});
});
};
İstekleri ve yanıtları dönüştürme
Genkit model eklentisinin birincil işlevi, Genkit'in ortak biçimindeki GenerateRequest
öğesini modelinizin API'si tarafından tanınan ve desteklenen bir biçime dönüştürmek ve ardından modelinizden gelen yanıtı Genkit tarafından kullanılan GenerateResponseData
biçimine dönüştürmektir.
Bazen, model sınırlamalarından kaçınmak için verileri değiştirmek veya veriler üzerinde işlem yapmak gerekebilir. Örneğin, modeliniz system
mesajını doğal olarak desteklemiyorsa bir istemin sistem mesajını kullanıcı/model mesaj çiftine dönüştürmeniz gerekebilir.
Model referansları
defineModel
kullanılarak kaydedilen modeller, adlarıyla istendiğinde her zaman kullanılabilir. Ancak yazma işlemini ve IDE otomatik tamamlama özelliğini iyileştirmek için paketinizden yalnızca bir modelin meta verilerini içeren ancak uygulamasını içermeyen bir model referansı 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' });
Eklenti yayınlama
Genkit eklentileri normal NPM paketleri olarak yayınlanabilir. Bulanıklığı artırmak ve tutarlılığı en üst düzeye çıkarmak için paketinizin, Genkit eklentisi olduğunu belirtmek üzere genkitx-{name}
olarak adlandırılması ve package.json
dosyanıza eklentinizle alakalı olan aşağıdaki keywords
dosyalarından mümkün olduğunca fazlası eklenmesi gerekir:
genkit-plugin
: Genkit eklentisi olduğunu belirtmek için paketinize her zaman bu anahtar kelimeyi ekleyin.genkit-model
: Paketinizde model tanımlanıyorsa bu anahtar kelimeyi ekleyin.genkit-retriever
: Paketinizde alıcı tanımlanıyorsa bu anahtar kelimeyi ekleyin.genkit-indexer
: Paketiniz herhangi bir dizine ekleyen tanımlarsa bu anahtar kelimeyi ekleyin.genkit-embedder
: Paketiniz herhangi bir dizine ekleyen tanımlarsa bu anahtar kelimeyi ekleyin.genkit-tracestore
: Paketinizde herhangi bir izleme mağazası tanımlanmışsa bu anahtar kelimeyi ekleyin.genkit-statestore
: Paketinizde herhangi bir eyalet mağazası tanımlanıyorsa bu anahtar kelimeyi ekleyin.genkit-telemetry
: Paketiniz bir telemetri sağlayıcısı tanıyorsa bu anahtar kelimeyi ekleyin.genkit-deploy
: Paketinizde Genkit uygulamalarını bulut sağlayıcılara dağıtmak için yardımcılar varsa bu anahtar kelimeyi ekleyin.genkit-flow
: Paketiniz Genkit akışlarını iyileştiriyorsa bu anahtar kelimeyi ekleyin.
Ayıklama, yerleştirme ve model sağlayan bir eklentide şuna benzer bir package.json
bulunabilir:
{
"name": "genkitx-my-plugin",
"keywords": ["genkit-plugin", "genkit-retriever", "genkit-embedder", "genkit-model"],
// ... dependencies etc.
}