Genkit-এ একটি প্লাগইন রয়েছে যা আপনাকে Firebase-এর জন্য ক্লাউড ফাংশনে আপনার ফ্লো স্থাপন করতে সাহায্য করে। ফ্লো, একবার স্থাপন করা হলে, HTTPS এন্ডপয়েন্ট হিসাবে উপলব্ধ এবং ক্লাউড ফাংশন ক্লায়েন্ট লাইব্রেরি ব্যবহার করে কলযোগ্য ফাংশন হিসাবে অ্যাক্সেসযোগ্য।
আপনি শুরু করার আগে
- Firebase CLI ইনস্টল করুন।
- আপনার জেনকিটের প্রবাহের ধারণা এবং সেগুলি কীভাবে লিখতে হয় তার সাথে পরিচিত হওয়া উচিত। এই পৃষ্ঠার নির্দেশাবলী অনুমান করে যে আপনি ইতিমধ্যেই কিছু প্রবাহ সংজ্ঞায়িত করেছেন, যা আপনি স্থাপন করতে চান।
- আপনি যদি আগে ফায়ারবেসের জন্য ক্লাউড ফাংশন ব্যবহার করে থাকেন তবে এটি সহায়ক হবে, তবে প্রয়োজন নেই।
1. একটি ফায়ারবেস প্রকল্প সেট আপ করুন৷
আপনার যদি ইতিমধ্যেই টাইপস্ক্রিপ্ট ক্লাউড ফাংশন সেট আপ সহ একটি ফায়ারবেস প্রকল্প না থাকে তবে এই পদক্ষেপগুলি অনুসরণ করুন:
Firebase কনসোল ব্যবহার করে একটি নতুন Firebase প্রকল্প তৈরি করুন বা একটি বিদ্যমান একটি চয়ন করুন৷
প্রকল্পটিকে ব্লেজ প্ল্যানে আপগ্রেড করুন, যা ক্লাউড ফাংশন স্থাপনের জন্য প্রয়োজন৷
Firebase CLI দিয়ে লগ ইন করুন:
firebase login
firebase login --reauth # alternative, if necessary
firebase login --no-localhost # if running in a remote shell
একটি নতুন প্রকল্প ডিরেক্টরি তৈরি করুন:
export PROJECT_ROOT=~/tmp/genkit-firebase-project1
mkdir -p $PROJECT_ROOT
ডিরেক্টরিতে একটি ফায়ারবেস প্রকল্প শুরু করুন:
cd $PROJECT_ROOT
firebase init genkit
এই পৃষ্ঠার বাকি অংশটি ধরে নেয় যে আপনি টাইপস্ক্রিপ্টে আপনার ফাংশনগুলি লেখার জন্য নির্বাচন করেছেন, তবে আপনি যদি জাভাস্ক্রিপ্ট ব্যবহার করেন তবে আপনি আপনার জেনকিট প্রবাহও স্থাপন করতে পারেন।
2. প্রবাহের সংজ্ঞা আপডেট করুন
আপনি ক্লাউড ফাংশনগুলির সাথে একটি ফায়ারবেস প্রকল্প সেট আপ করার পরে, আপনি প্রকল্পের functions/src
ডিরেক্টরিতে প্রবাহের সংজ্ঞাগুলি অনুলিপি করতে বা লিখতে পারেন এবং সেগুলি index.ts
এ রপ্তানি করতে পারেন।
আপনার প্রবাহ স্থাপনযোগ্য হওয়ার জন্য, আপনি কীভাবে সেগুলিকে সংজ্ঞায়িত করবেন তাতে আপনাকে কিছু ছোট পরিবর্তন করতে হবে। মূল যুক্তি একই থাকবে, তবে আপনি কিছু অতিরিক্ত তথ্য যোগ করবেন যাতে সেগুলিকে মসৃণভাবে স্থাপন করা যায় এবং একবার স্থাপন করা হলে আরও নিরাপদ।
ধরুন আপনার নিম্নলিখিত প্রবাহ আছে:
const generatePoemFlow = ai.defineFlow(
{
name: "generatePoem",
inputSchema: z.string(),
outputSchema: z.string(),
},
async (subject: string) => {
const { text } = await ai.generate(`Compose a poem about ${subject}.`);
return text;
}
);
আপনি এটি স্থাপন করার আগে আপনাকে যে পরিবর্তনগুলি করতে হবে তা নিম্নলিখিত বিভাগগুলি বর্ণনা করে৷
অনফ্লো দিয়ে প্রবাহকে সংজ্ঞায়িত করুন
Genkit.defineFlow()
দিয়ে আপনার ফ্লো সংজ্ঞায়িত করার পরিবর্তে, Firebase প্লাগইন এর onFlow()
ফাংশন ব্যবহার করুন। এই ফাংশনটি ব্যবহার করে আপনার ফ্লো লজিককে একটি ক্লাউড ফাংশন রিকোয়েস্ট হ্যান্ডলারে মোড়ানো হয়, যা onCall
এর মতো।
import { onFlow } from "@genkit-ai/firebase/functions";
export const generatePoem = onFlow(
ai,
{
// ...
},
async (subject: string) => {
// ...
}
);
মনে রাখবেন যে onFlow
Genkit
এর একটি পদ্ধতি নয়, বরং একটি ফাংশন যা একটি Genkit
উদাহরণকে এর প্রথম প্যারামিটার হিসাবে নেয়। অন্যথায়, সিনট্যাক্সটি defineFlow
এর অনুরূপ।
একটি অনুমোদন নীতি সংজ্ঞায়িত করুন
ফায়ারবেসে স্থাপন করা হোক বা না হোক, সমস্ত নিয়োজিত প্রবাহের একটি অনুমোদন নীতি থাকা উচিত; একটি ছাড়া, আপনার সম্ভাব্য-ব্যয়বহুল জেনারেটিভ AI ফ্লো যে কারো দ্বারা অপ্রয়োজনীয় হবে। একটি অনুমোদন নীতি সংজ্ঞায়িত করতে, প্রবাহ সংজ্ঞায় authPolicy
প্যারামিটার ব্যবহার করুন:
import { firebaseAuth } from "@genkit-ai/firebase/auth";
export const generatePoem = onFlow(
ai,
{
name: "generatePoem",
// ...
authPolicy: firebaseAuth((user, input) => {
if (!user.email_verified) {
throw new Error("Verified email required to run flow");
}
}),
},
async (subject: string) => {
// ...
}
);
এই নীতিটি শুধুমাত্র যাচাইকৃত ইমেল ঠিকানা সহ আপনার অ্যাপের নিবন্ধিত ব্যবহারকারীদের অ্যাক্সেসের অনুমতি দিতে firebaseAuth()
সহায়ক ব্যবহার করে। ক্লায়েন্টের দিকে, আপনাকে একটি Firebase আইডি টোকেনে Authorization: Bearer
শিরোনাম সেট করতে হবে যা আপনার নীতিকে সন্তুষ্ট করে। ক্লাউড ফাংশন ক্লায়েন্ট SDK কলযোগ্য ফাংশন পদ্ধতিগুলি প্রদান করে যা এটি স্বয়ংক্রিয় করে; বিভাগটি দেখুন একটি উদাহরণের জন্য স্থাপন করা প্রবাহ চেষ্টা করুন ।
এপিআই শংসাপত্রগুলি স্থাপন করা প্রবাহের জন্য উপলব্ধ করুন৷
একবার মোতায়েন হয়ে গেলে, আপনার প্রবাহকে তারা নির্ভর করে এমন যেকোনো দূরবর্তী পরিষেবার সাথে প্রমাণীকরণের জন্য কিছু উপায় প্রয়োজন। বেশিরভাগ ফ্লোতে তারা যে মডেল API পরিষেবা ব্যবহার করে তা অ্যাক্সেস করার জন্য ন্যূনতম শংসাপত্রের প্রয়োজন হবে৷
এই উদাহরণের জন্য, আপনার বেছে নেওয়া মডেল প্রদানকারীর উপর নির্ভর করে নিম্নলিখিতগুলির মধ্যে একটি করুন:
মিথুন (Google AI)
আপনার অঞ্চলে Google AI উপলব্ধ রয়েছে তা নিশ্চিত করুন৷
Google AI স্টুডিও ব্যবহার করে Gemini API-এর জন্য একটি API কী তৈরি করুন ।
ক্লাউড সিক্রেট ম্যানেজারে আপনার API কী সংরক্ষণ করুন:
firebase functions:secrets:set GOOGLE_GENAI_API_KEY
দুর্ঘটনাক্রমে আপনার API কী ফাঁস হওয়া প্রতিরোধ করার জন্য এই পদক্ষেপটি গুরুত্বপূর্ণ, যা একটি সম্ভাব্য মিটার করা পরিষেবাতে অ্যাক্সেস মঞ্জুর করে৷
গোপনীয়তা পরিচালনার বিষয়ে আরও তথ্যের জন্য স্টোর দেখুন এবং সংবেদনশীল কনফিগারেশন তথ্য অ্যাক্সেস করুন ।
src/index.ts
সম্পাদনা করুন এবং বিদ্যমান আমদানির পরে নিম্নলিখিত যোগ করুন:import {defineSecret} from "firebase-functions/params"; const googleAIapiKey = defineSecret("GOOGLE_GENAI_API_KEY");
তারপর, প্রবাহের সংজ্ঞায়, ঘোষণা করুন যে ক্লাউড ফাংশনের এই গোপন মানটিতে অ্যাক্সেস প্রয়োজন:
export const generatePoem = onFlow( { name: "generatePoem", // ... httpsOptions: { secrets: [googleAIapiKey], // Add this line. }, }, async (subject) => { // ... } );
এখন, যখন আপনি এই ফাংশনটি স্থাপন করবেন, আপনার API কী ক্লাউড সিক্রেট ম্যানেজারে সংরক্ষণ করা হবে এবং ক্লাউড ফাংশন পরিবেশ থেকে উপলব্ধ হবে৷
মিথুন (Vertex AI)
ক্লাউড কনসোলে, আপনার Firebase প্রকল্পের জন্য Vertex AI API সক্ষম করুন ।
IAM পৃষ্ঠায়, নিশ্চিত করুন যে ডিফল্ট কম্পিউট পরিষেবা অ্যাকাউন্টটিকে Vertex AI ব্যবহারকারীর ভূমিকা দেওয়া হয়েছে।
এই টিউটোরিয়ালের জন্য আপনাকে সেট আপ করার জন্য একমাত্র গোপনীয়তাটি হল মডেল প্রদানকারীর জন্য, তবে সাধারণভাবে, আপনার প্রবাহ ব্যবহার করা প্রতিটি পরিষেবার জন্য আপনাকে অবশ্যই একই রকম কিছু করতে হবে।
একটি CORS নীতি সেট করুন
আপনি যদি একটি ওয়েব অ্যাপ থেকে আপনার ফ্লো অ্যাক্সেস করেন (যা আপনি স্থাপন করা ফ্লো বিভাগে চেষ্টা করবেন), httpsOptions
প্যারামিটারে, একটি CORS নীতি সেট করুন:
export const generatePoem = onFlow(
ai,
{
name: "generatePoem",
// ...
httpsOptions: {
cors: '*',
},
},
async (subject: string) => {
// ...
}
);
আপনি সম্ভবত প্রোডাকশন অ্যাপের জন্য আরও সীমাবদ্ধ নীতি চাইবেন, কিন্তু এটি এই টিউটোরিয়ালের জন্য করবে।
সম্পূর্ণ উদাহরণ
আপনি উপরে বর্ণিত সমস্ত পরিবর্তন করার পরে, আপনার স্থাপনযোগ্য প্রবাহটি নিম্নলিখিত উদাহরণের মতো দেখতে পাবে:
const googleAIapiKey = defineSecret("GOOGLE_GENAI_API_KEY");
export const generatePoem = onFlow(
ai,
{
name: "generatePoem",
inputSchema: z.string(),
outputSchema: z.string(),
authPolicy: firebaseAuth((user, input) => {
if (!user.email_verified) {
throw new Error("Verified email required to run flow");
}
}),
httpsOptions: {
secrets: [googleAIapiKey],
cors: '*',
},
},
async (subject: string) => {
const { text } = await ai.generate(`Compose a poem about ${subject}.`);
return text;
}
);
3. ফায়ারবেসে প্রবাহ স্থাপন করুন
আপনি onFlow
ব্যবহার করে ফ্লোগুলি সংজ্ঞায়িত করার পরে, আপনি অন্যান্য ক্লাউড ফাংশনগুলি স্থাপন করার মতো সেগুলি স্থাপন করতে পারেন:
cd $PROJECT_ROOT
firebase deploy --only functions
আপনি এখন একটি ক্লাউড ফাংশন হিসাবে প্রবাহ স্থাপন করেছেন! কিন্তু, প্রবাহের অনুমোদন নীতির কারণে আপনি curl
বা অনুরূপ সহ আপনার নিয়োজিত এন্ডপয়েন্ট অ্যাক্সেস করতে পারবেন না। কিভাবে নিরাপদে ফ্লো অ্যাক্সেস করতে হয় তা জানতে পরবর্তী বিভাগে যান।
ঐচ্ছিক: স্থাপন করা প্রবাহ চেষ্টা করুন
আপনার ফ্লো এন্ডপয়েন্ট ব্যবহার করে দেখতে, আপনি নিম্নলিখিত ন্যূনতম উদাহরণ ওয়েব অ্যাপ স্থাপন করতে পারেন:
Firebase কনসোলের প্রজেক্ট সেটিংস বিভাগে, হোস্টিং সেট আপ করার বিকল্পটি নির্বাচন করে একটি নতুন ওয়েব অ্যাপ যোগ করুন।
Firebase কনসোলের প্রমাণীকরণ বিভাগে, Google প্রদানকারী সক্ষম করুন, যা আপনি এই উদাহরণে ব্যবহার করবেন।
আপনার প্রকল্প ডিরেক্টরিতে, Firebase হোস্টিং সেট আপ করুন, যেখানে আপনি নমুনা অ্যাপ স্থাপন করবেন:
cd $PROJECT_ROOT
firebase init hosting
সমস্ত প্রম্পটের জন্য ডিফল্ট স্বীকার করুন।
নিম্নলিখিত দিয়ে
public/index.html
প্রতিস্থাপন করুন:<!DOCTYPE html> <html> <head> <title>Genkit demo</title> </head> <body> <div id="signin" hidden> <button id="signinBtn">Sign in with Google</button> </div> <div id="callGenkit" hidden> Subject: <input type="text" id="subject" /> <button id="generatePoem">Compose a poem on this subject</button> <p id="generatedPoem"></p> </div> <script type="module"> import { initializeApp } from "https://www.gstatic.com/firebasejs/11.0.1/firebase-app.js"; import { getAuth, onAuthStateChanged, GoogleAuthProvider, signInWithPopup, } from "https://www.gstatic.com/firebasejs/11.0.1/firebase-auth.js"; import { getFunctions, httpsCallable, } from "https://www.gstatic.com/firebasejs/11.0.1/firebase-functions.js"; const firebaseConfig = await fetch("/__/firebase/init.json"); initializeApp(await firebaseConfig.json()); async function generatePoem() { const poemFlow = httpsCallable(getFunctions(), "generatePoem"); const subject = document.querySelector("#subject").value; const response = await poemFlow(subject); document.querySelector("#generatedPoem").innerText = response.data; } function signIn() { signInWithPopup(getAuth(), new GoogleAuthProvider()); } document.querySelector("#signinBtn").addEventListener("click", signIn); document .querySelector("#generatePoem") .addEventListener("click", generatePoem); const signinEl = document.querySelector("#signin"); const genkitEl = document.querySelector("#callGenkit"); onAuthStateChanged(getAuth(), (user) => { if (!user) { signinEl.hidden = false; genkitEl.hidden = true; } else { signinEl.hidden = true; genkitEl.hidden = false; } }); </script> </body> </html>
ওয়েব অ্যাপ এবং ক্লাউড ফাংশন স্থাপন করুন:
cd $PROJECT_ROOT
firebase deploy
deploy
কমান্ড দ্বারা মুদ্রিত URL-এ গিয়ে ওয়েব অ্যাপটি খুলুন। অ্যাপটির জন্য আপনাকে একটি Google অ্যাকাউন্ট দিয়ে সাইন ইন করতে হবে, তারপরে আপনি এন্ডপয়েন্ট অনুরোধগুলি শুরু করতে পারেন।
ঐচ্ছিক: বিকাশকারী UI-তে ফ্লো চালান
আপনি ডেভেলপার UI-তে onFlow
ব্যবহার করে সংজ্ঞায়িত ফ্লো চালাতে পারেন, ঠিক একইভাবে আপনি defineFlow
ব্যবহার করে সংজ্ঞায়িত ফ্লো চালান, তাই স্থাপনা এবং বিকাশের মধ্যে দুটির মধ্যে স্যুইচ করার দরকার নেই।
cd $PROJECT_ROOT/functions
npx genkit start -- npx tsx --watch src/index.ts
বা
cd $PROJECT_ROOT/functions
npm run genkit:start
আপনি এখন অ্যাক্সেস করতে genkit start
কমান্ড দ্বারা মুদ্রিত URL-এ নেভিগেট করতে পারেন।
ঐচ্ছিক: ফায়ারবেস স্থানীয় এমুলেটর স্যুট ব্যবহার করে বিকাশ করা
ফায়ারবেস স্থানীয় উন্নয়নের জন্য এমুলেটরগুলির একটি স্যুট অফার করে, যা আপনি জেনকিটের সাথে ব্যবহার করতে পারেন।
Firebase এমুলেটর স্যুটের সাথে Genkit Dev UI ব্যবহার করতে, Firebase এমুলেটরগুলি এইভাবে শুরু করুন:
npx genkit start -- firebase emulators:start --inspect-functions
এটি এমুলেটরে আপনার কোড চালাবে এবং ডেভেলপমেন্ট মোডে জেনকিট ফ্রেমওয়ার্ক চালাবে, যা জেনকিট প্রতিফলন API (কিন্তু দেব UI নয়) চালু করে এবং প্রকাশ করে।
Dev UI-তে Firestore থেকে ট্রেস দেখতে আপনি পরিদর্শন ট্যাবে নেভিগেট করতে পারেন এবং "Dev/Prod" সুইচ টগল করতে পারেন। "prod" এ টগল করা হলে এটি ফায়ারস্টোর থেকে ট্রেস লোড হবে।