Genkit eklentileri yazma

Firebase Genkit'in özellikleri, eklentilerle genişletilecek şekilde tasarlanmıştır. Genkit eklentileri, yapılandırılabilir modüllerdir model, retriever, dizinleyici, izleme depolama alanı ve daha fazlasını sağlayabilen Buradaki eklentileri işlemi nasıl yapacağınızı öğrenmek için Genkit'i kullanabilirsiniz:

import { configureGenkit } from '@genkit-ai/core';
import { vertexAI } from '@genkit-ai/vertexai';

configureGenkit({
  plugins: [vertexAI({ projectId: 'my-project' })],
});

Vertex AI eklentisi, yapılandırma (ör. kullanıcının Google Cloud proje kimliği) sağlar ve çeşitli yeni modelleri, yerleştiricileri ve daha fazlasını Genkit kayıt defteri. Kayıt otoritesi, Genkit'in yerel kullanıcı arayüzünü çalıştırmak modellerin, istemlerin ve diğer öğelerin incelenmesi, ayrıca her görev için adlandırılmış işlem sayısı.

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-ai/core
npm i --save-dev typescript
npx tsc --init

Ardından, eklentinizi ana giriş noktanızdan tanımlayıp 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çenekleriyle ilgili rehberlik

Genel olarak, eklentinizoptions çalışması için gerekli olan eklenti genelinde yapılandırma. Eklenti seçeneği için API anahtarları gibi gizli bir değer gerektirdiğinde, hem bir seçenek hem de bir varsayılan ortam değişkenini eklemeniz 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 özellik etkinleştirilebilir. Örneğin, Vertex AI eklentisi hem yeni modelleri etkinleştirir hem de bir yerleştiriciyi etkinleştirir.

Model eklentileri

Genkit model eklentileri, Genkit kayıt defterine bir veya daha fazla üretken yapay zeka modeli ekler. Model, tüm üretken yapay zekaları giriş olarak istem alabilen ve çıkış olarak metin, medya veya veri oluşturabilen model. Genel olarak bir model eklentisi, başlatma işlevinde bir veya daha fazla defineModel çağrısı yapar.

Özel modeller genellikle üç bileşenden oluşur:

  1. Modelin özelliklerini tanımlayan meta veriler.
  2. Modelin desteklediği belirli parametreleri içeren bir yapılandırma şeması.
  3. GenerateRequest ve kabul eden modeli uygulayan bir işlev GenerateResponse dönüş.

Model eklentisi oluşturmak için @genkit-ai/ai paketini kullanmanız gerekir:

npm i --save @genkit-ai/ai

Bir model eklentisi, genel olarak 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);
  });
});

İstek ve Yanıtları Dönüştürme

Genkit model eklentisinin ana işi, GenerateRequest: Genkit'in ortak formatından tanınan bir biçime ve modelinizin API'si tarafından desteklenir ve daha sonra modeli, Genkit tarafından kullanılan GenerateResponseData biçimine dönüştürdü.

Bazen model sınırlamalarını atlatmak için verilere masaj uygulanması veya veriler manipüle edilmesi gerekebilir. Örneğin, modeliniz bir system mesajını yerel olarak desteklemiyorsa istemin sistem mesajını kullanıcı/model mesaj çiftine dönüştürmeniz gerekebilir.

Model referansları

Bir model defineModel kullanılarak kaydedildikten sonra her zaman tarafından istenmektedir. Ancak, yazma ve IDE otomatik tamamlama özelliğini iyileştirmek için şunları yapabilirsiniz: paketinizden yalnızca bir öğenin meta verilerini içeren bir model referansını dışa aktarın: model hakkında daha fazla bilgi edinin:

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 başvuruları 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 Telemetri Eklentisi Yazma başlıklı makaleye bakın.

Eklenti yayınlama

Genkit eklentileri, normal NPM paketleri olarak yayınlanabilir. Artırmak için ve tutarlılığı en üst düzeye çıkarabilmek için paketinizin genkitx-{name} öğesinin bir Genkit eklentisi olduğunu belirtmek için genkitx-{name} package.json içinde yer alan aşağıdaki keywords öğelerinin çoğu eklenti:

  • genkit-plugin: Bir Genkit eklentisi olduğunu belirtmek için bu anahtar kelimeyi her zaman paketinize ekleyin.
  • genkit-model: Paketiniz herhangi bir model tanımlıyorsa bu anahtar kelimeyi ekleyin.
  • genkit-retriever: Paketiniz herhangi bir alıcı tanımlıyorsa bu anahtar kelimeyi ekleyin.
  • genkit-indexer: Paketinizde dizine eklenenler varsa bu anahtar kelimeyi ekleyin.
  • genkit-embedder: Paketinizde dizine eklenenler varsa bu anahtar kelimeyi ekleyin.
  • genkit-tracestore: Paketiniz iz depolarını tanımlıyorsa bu anahtar kelimeyi ekleyin.
  • genkit-statestore: Paketiniz eyalet depolarını tanımlıyorsa bu anahtar kelimeyi ekleyin.
  • genkit-telemetry: Paketiniz bir telemetri sağlayıcısını 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ı artırıyorsa bu anahtar kelimeyi ekleyin.

Alıcı, yerleşik ve model sağlayan bir eklentinin package.json öğesi aşağıdaki gibi olabilir:

{
  "name": "genkitx-my-plugin",
  "keywords": ["genkit-plugin", "genkit-retriever", "genkit-embedder", "genkit-model"],
  // ... dependencies etc.
}