היכולות של 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
יחיד שכולל את כל ההגדרות ברמת התוסף שנדרשות לתפקוד שלו. לכל אפשרות של יישומי פלאגין
שנדרש ערך סודי, כמו מפתחות API, צריך להציע גם אפשרות וגם
משתנה הסביבה שמוגדר כברירת מחדל כדי להגדיר אותו:
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 מודל אחד או יותר של AI גנרטיבי. מודל מייצג כל מודל גנרטיבי שיכול לקבל הנחיה כקלט וליצור טקסט, מדיה או נתונים כפלט.
באופן כללי, פלאגין של מודל יבצע קריאה אחת או יותר ל-defineModel
בפונקציית האי initialization שלו.
מודל מותאם אישית מורכב בדרך כלל משלושה רכיבים:
- מטא-נתונים שמגדירים את היכולות של המודל.
- סכימת הגדרות אישיות עם פרמטרים ספציפיים שנתמכים על ידי המודל.
- פונקציה שמממשת את המודל שמקבל את
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 לפורמט מזוהה
שנתמכים על ידי ה-API של המודל, ואז משנים את התגובה
בפורמט 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, ולכלול ב-package.json
כמה שיותר מה-keywords
הבאים שרלוונטיים לפלאגין:
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.
}