كتابة مكونات Genkit الإضافية

تم تصميم إمكانات Firebase Genkit لكي يتم تعزيزها باستخدام المكوّنات الإضافية. مكونات Genkit الإضافية هي وحدات قابلة للتهيئة التي يمكنها توفير نماذج وبرامج استرداد بيانات ومفهرسات ومخازن تتبع وغيرها. لقد رأيت مكونات إضافية في العمل فقط باستخدام Genkit:

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

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

يخضع المكوّن الإضافي Vertex AI لعملية إعداد (مثل حساب Google Cloud للمستخدم رقم تعريف المشروع) ويسجّل مجموعة متنوعة من النماذج والتضمينات الجديدة والمزيد في Genkit. تدعم السجل واجهة المستخدم المحلية لـ Genkit لتشغيل وفحص النماذج والمطالبات وغير ذلك كما يعمل كخدمة بحث محددة في وقت التشغيل.

إنشاء مكون إضافي

لإنشاء مكون إضافي، سيتعين عليك بشكل عام إنشاء حزمة NPM جديدة:

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

بعد ذلك، حدد المكون الإضافي وصدّره من نقطة الإدخال الرئيسية:

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...
  }
);

إرشادات بشأن خيارات المكوّنات الإضافية

بشكل عام، يجب أن يستخدم المكوّن الإضافي وسيطة options واحدة تشتمل على أي تهيئة على مستوى المكون الإضافي اللازمة لتعمل. بالنسبة لأي خيار مكون إضافي قيمة سرية، مثل مفاتيح واجهة برمجة التطبيقات، فيجب عليك تقديم خيارين متغير البيئة الافتراضي لتكوينه:

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
  }
);

إنشاء المكوّن الإضافي

بإمكان مكوّن إضافي واحد تفعيل العديد من العناصر الجديدة ضمن Genkit. على سبيل المثال، يفعّل المكوّن الإضافي Vertex AI العديد من النماذج الجديدة، بالإضافة إلى أداة التضمين.

المكوّنات الإضافية للنماذج

تضيف المكوّنات الإضافية لنماذج Genkit نموذجًا واحدًا أو أكثر من نماذج الذكاء الاصطناعي التوليدي إلى سجلّ Genkit. يمثّل النموذج أي الذكاء الاصطناعي التوليدي قادر على تلقي طلب كإدخال وإنشاء نصوص أو وسائط أو بيانات كمخرجات. بشكل عام، سيُجري المكوّن الإضافي للنموذج استدعاء defineModel واحدًا أو أكثر في دالة الإعداد الخاصة به.

يتألف النموذج المخصّص بوجه عام من ثلاثة مكونات:

  1. البيانات الوصفية التي تحدد قدرات النموذج.
  2. يشير ذلك المصطلح إلى مخطّط إعدادات يتضمّن أي معلَمات محدّدة يدعمها النموذج.
  3. دالة تنفّذ النموذج الذي يقبل GenerateRequest العودة في GenerateResponse.

لإنشاء مكوّن إضافي للنموذج، يجب استخدام الحزمة @genkit-ai/ai كما يلي:

npm i --save @genkit-ai/ai

على المستوى العالي، قد يبدو المكوِّن الإضافي للنموذج على النحو التالي:

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);
  });
});

تحويل الطلبات والردود

يتمثل العمل الأساسي للمكون الإضافي لنموذج Genkit في تحويل GenerateRequest من التنسيق المشترك لـ Genkit إلى تنسيق معروف ومدعومة بواجهة برمجة التطبيقات لنموذجك، ثم يتم تحويل الاستجابة من إلى التنسيق GenerateResponseData الذي تستخدمه شركة Genkit.

وقد يتطلب ذلك أحيانًا تدليك البيانات أو التلاعب بها لتفادي قيود النموذج. على سبيل المثال، إذا كان نموذجك لا يتيح استخدام رسالة system في الأصل، قد تحتاج إلى تحويل رسالة النظام في الطلب إلى زوج رسالة المستخدِم/النموذج.

مراجع النماذج

بعد تسجيل النموذج باستخدام defineModel، سيكون متاحًا دائمًا في الحالات التالية: مطلوبة حسب الاسم. ومع ذلك، لتحسين الكتابة والإكمال التلقائي في IDE، يمكنك تصدير مرجع نموذج من حزمتك يتضمن فقط البيانات الوصفية ولكن ليس ط��يقة تنفيذه:

import { modelRef } from "@genkit-ai/ai/model";

export myModelRef = modelRef({
  name: "my-plugin/my-model",
  configSchema: MyConfigSchema,
  info: {
    // ... model-specific info
  },
})

عند استدعاء الدالة generate()، يمكن استخدام مراجع النماذج وأسماء طُرز السلسلة بالتبادل:

import { myModelRef } from 'genkitx-my-plugin';
import { generate } from '@genkit-ai/ai';

generate({ model: myModelRef });
// is equivalent to
generate({ model: 'my-plugin/my-model' });

المكوّنات الإضافية للقياس عن بُعد

��اجع كتابة مكوّن Genkit عن بُعد الإضافي.

نشر مكوّن إضافي

يمكن نشر مكونات Genkit الإضافية كحزم NPM عادية. لزيادة قابلية الاكتشاف وتعزيز الاتساق، يجب تسمية الحزمة genkitx-{name} للإشارة إلى أنّه مكوّن إضافي من Genkit ويجب إدراجه كـ العديد من keywords التالية في package.json ذات صلة ببحثك المكون الإضافي:

  • genkit-plugin: أدرِج هذه الكلمة الرئيسية دائمًا في حزمتك للإشارة إلى أنّها مكوّن إضافي من Genkit.
  • genkit-model: تضمين هذه الكلمة الرئيسية إذا كانت الحزمة تحدِّد أي نماذج
  • genkit-retriever: يجب تضمين هذه الكلمة الرئيسية إذا كانت الحزمة تحدّد أي برامج استرداد.
  • genkit-indexer: تضمين هذه الكلمة الرئيسية إذا كانت حزمتك تحدد أي مفهرسين.
  • genkit-embedder: تضمين هذه الكلمة الرئيسية إذا كانت حزمتك تحدد أي مفهرسين.
  • genkit-tracestore: ضمِّن هذه الكلمة الرئيسية إذا كانت الحزمة تحدّد أي متاجر لبيع آثار الحياة.
  • genkit-statestore: أدرِج هذه الكلمة الرئيسية إذا كانت الحزمة تحدّد أيّ متاجر تابعة للولاية.
  • genkit-telemetry: تضمين هذه الكلمة الرئيسية إذا كانت الحزمة تحدِّد مقدّم خدمة القياس عن بُعد
  • genkit-deploy: يجب تضمين هذه الكلمة الرئيسية إذا كانت حزمتك تتضمّن أدوات مساعدة لنشر تطبيقات Genkit لموفّري السحابة الإلكترونية.
  • genkit-flow: يجب تضمين هذه الكلمة الرئيسية إذا كانت الحِزمة تحسِّن مسارات Genkit.

قد يحتوي المكوّن الإضافي الذي قدّم برنامج استرداد وأداة تضمين ونموذج على package.json على النحو التالي:

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