تم تصميم إمكانات 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
واحدًا أو أكثر في دالة الإعداد الخاصة به.
يتألف النموذج المخصّص بوجه عام من ثلاثة مكونات:
- البيانات الوصفية التي تحدد قدرات النموذج.
- يشير ذلك المصطلح إلى مخطّط إعدادات يتضمّن أي معلَمات محدّدة يدعمها النموذج.
- دالة تنفّذ النموذج الذي يقبل
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.
}