Firebase Genkit এর ক্ষমতা প্লাগইন দ্বারা প্রসারিত করার জন্য ডিজাইন করা হয়েছে। জেনকিট প্লাগইনগুলি কনফিগারযোগ্য মডিউল যা মডেল, পুনরুদ্ধারকারী, সূচক, ট্রেস স্টোর এবং আরও অনেক কিছু সরবরাহ করতে পারে। আপনি ইতিমধ্যেই Genkit ব্যবহার করে প্লাগইনগুলিকে অ্যাকশনে দেখেছেন:
import { genkit } from 'genkit';
import { vertexAI } from '@genkit-ai/vertexai';
const ai = genkit({
plugins: [vertexAI({ projectId: 'my-project' })],
});
Vertex AI প্লাগইন কনফিগারেশন নেয় (যেমন ব্যবহারকারীর Google ক্লাউড প্রজেক্ট আইডি) এবং Genkit রেজিস্ট্রির সাথে বিভিন্ন ধরনের নতুন মডেল, এমবেডার এবং আরও অনেক কিছু নিবন্ধন করে। রেজিস্ট্রি Genkit-এর স্থানীয় UI-কে মডেল, প্রম্পট এবং আরও অনেক কিছু চালানো এবং পরিদর্শন করার ক্ষমতা দেয় সেইসাথে রানটাইমে নামকৃত ক্রিয়াগুলির জন্য একটি সন্ধান পরিষেবা হিসাবে কাজ করে৷
একটি প্লাগইন তৈরি করা হচ্ছে
একটি প্লাগইন তৈরি করতে আপনি সাধারণত একটি নতুন NPM প্যাকেজ তৈরি করতে চাইবেন:
mkdir genkitx-my-plugin
cd genkitx-my-plugin
npm init -y
npm i --save genkit
npm i --save-dev typescript
npx tsc --init
তারপর, আপনার প্রধান এন্ট্রি পয়েন্ট থেকে আপনার প্লাগইন সংজ্ঞায়িত করুন এবং রপ্তানি করুন:
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(...)
// ....
});
};
প্লাগইন বিকল্প নির্দেশিকা
সাধারণভাবে, আপনার প্লাগইনটি একটি একক options
যুক্তি গ্রহণ করবে যাতে কাজ করার জন্য প্রয়োজনীয় প্লাগইন-ব্যাপী কনফিগারেশন অন্তর্ভুক্ত থাকে। যে কোনো প্লাগইন বিকল্পের জন্য একটি গোপন মান প্রয়োজন, যেমন API কী, এটি কনফিগার করার জন্য আপনার একটি বিকল্প এবং একটি ডিফল্ট পরিবেশ পরিবর্তনশীল উভয়ই অফার করা উচিত:
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(...)
// ....
});
};
আপনার প্লাগইন নির্মাণ
একটি একক প্লাগইন জেনকিটের মধ্যে অনেক নতুন জিনিস সক্রিয় করতে পারে। উদাহরণস্বরূপ, Vertex AI প্লাগইনটি বেশ কয়েকটি নতুন মডেলের পাশাপাশি একটি এমবেডার সক্রিয় করে।
মডেল প্লাগইন
জেনকিট মডেল প্লাগইনগুলি জেনকিট রেজিস্ট্রিতে এক বা একাধিক জেনারেটিভ এআই মডেল যুক্ত করে। একটি মডেল এমন কোনো জেনারেটিভ মডেলকে উপস্থাপন করে যা ইনপুট হিসাবে একটি প্রম্পট গ্রহণ করতে এবং আউটপুট হিসাবে পাঠ্য, মিডিয়া বা ডেটা তৈরি করতে সক্ষম। সাধারণত, একটি মডেল প্লাগইন তার প্রারম্ভিক ফাংশনে এক বা একাধিক defineModel
কল করবে।
একটি কাস্টম মডেল সাধারণত তিনটি উপাদান নিয়ে গঠিত:
- মেটাডেটা মডেলের ক্ষমতা নির্ধারণ করে।
- মডেল দ্বারা সমর্থিত কোনো নির্দিষ্ট পরামিতি সহ একটি কনফিগারেশন স্কিমা।
- একটি ফাংশন যা
GenerateRequest
গ্রহণ করে এবংGenerateResponse
প্রদান করে মডেলটিকে প্রয়োগ করে।
একটি মডেল প্লাগইন তৈরি করতে, আপনাকে @genkit-ai/ai
প্যাকেজ ব্যবহার করতে হবে:
npm i --save @genkit-ai/ai
একটি উচ্চ স্তরে, একটি মডেল প্লাগইন এইরকম কিছু দেখতে পারে:
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);
});
});
};
রুপান্তরিত অনুরোধ এবং প্রতিক্রিয়া
একটি Genkit মডেল প্লাগইনের প্রাথমিক কাজ হল Genkit-এর সাধারণ বিন্যাস থেকে GenerateRequest
আপনার মডেলের API দ্বারা স্বীকৃত এবং সমর্থিত বিন্যাসে রূপান্তরিত করা, এবং তারপর আপনার মডেলের প্রতিক্রিয়াকে Genkit দ্বারা ব্যবহৃত GenerateResponseData
বিন্যাসে রূপান্তরিত করা।
কখনও কখনও, মডেলের সীমাবদ্ধতাগুলির কাছাকাছি কাজ করার জন্য এটি ম্যাসেজ বা ডেটা ম্যানিপুলেট করার প্রয়োজন হতে পারে। উদাহরণস্বরূপ, যদি আপনার মডেল স্থানীয়ভাবে একটি 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' });
একটি প্লাগইন প্রকাশ করা হচ্ছে
জেনকিট প্লাগইনগুলি সাধারণ এনপিএম প্যাকেজ হিসাবে প্রকাশ করা যেতে পারে। আবিষ্কারযোগ্যতা বাড়াতে এবং সামঞ্জস্য বাড়াতে, আপনার প্যাকেজের নাম genkitx-{name}
হওয়া উচিত যাতে বোঝা যায় এটি একটি Genkit প্লাগইন এবং আপনার package.json
.json-এ আপনার প্লাগইনের সাথে প্রাসঙ্গিক হিসাবে নিম্নলিখিত keywords
অন্তর্ভুক্ত করা উচিত:
-
genkit-plugin
: সর্বদা আপনার প্যাকেজে এই কীওয়ার্ডটি অন্তর্ভুক্ত করুন এটি একটি Genkit প্লাগইন। -
genkit-model
: এই কীওয়ার্ডটি অন্তর্ভুক্ত করুন যদি আপনার প্যাকেজ কোনো মডেলকে সংজ্ঞায়িত করে। -
genkit-retriever
: এই কীওয়ার্ডটি অন্তর্ভুক্ত করুন যদি আপনার প্যাকেজ কোনো উদ্ধারকারীকে সংজ্ঞায়িত করে। -
genkit-indexer
: এই কীওয়ার্ডটি অন্তর্ভুক্ত করুন যদি আপনার প্যাকেজ কোনো সূচককে সংজ্ঞায়িত করে। -
genkit-embedder
: এই কীওয়ার্ডটি অন্তর্ভুক্ত করুন যদি আপনার প্যাকেজ কোনো সূচককে সংজ্ঞায়িত করে। -
genkit-tracestore
: এই কীওয়ার্ডটি অন্তর্ভুক্ত করুন যদি আপনার প্যাকেজ কোনো ট্রেস স্টোরকে সংজ্ঞায়িত করে। -
genkit-statestore
: এই কীওয়ার্ডটি অন্তর্ভুক্ত করুন যদি আপনার প্যাকেজ কোনো স্টেট স্টোরকে সংজ্ঞায়িত করে। -
genkit-telemetry
: এই কীওয়ার্ডটি অন্তর্ভুক্ত করুন যদি আপনার প্যাকেজ একটি টেলিমেট্রি প্রদানকারীকে সংজ্ঞায়িত করে। -
genkit-deploy
: এই কীওয়ার্ডটি অন্তর্ভুক্ত করুন যদি আপনার প্যাকেজে ক্লাউড সরবরাহকারীদের কাছে জেনকিট অ্যাপগুলি স্থাপন করতে সাহায্যকারী অন্তর্ভুক্ত থাকে। -
genkit-flow
: এই কীওয়ার্ডটি অন্তর্ভুক্ত করুন যদি আপনার প্যাকেজ Genkit ফ্লো বাড়ায়।
একটি প্লাগইন যা একটি পুনরুদ্ধার, এমবেডার এবং মডেল প্রদান করে এমন একটি package.json
থাকতে পারে যা দেখতে এরকম:
{
"name": "genkitx-my-plugin",
"keywords": ["genkit-plugin", "genkit-retriever", "genkit-embedder", "genkit-model"],
// ... dependencies etc.
}