ফায়ারবেস প্লাগইন ফায়ারবেস পরিষেবাগুলির সাথে বিভিন্ন ইন্টিগ্রেশন প্রদান করে:
- ক্লাউড ফায়ারস্টোর ভেক্টর স্টোর ব্যবহার করে ইনডেক্সার এবং রিট্রিভার
- ক্লাউড ফায়ারস্টোর ব্যবহার করে স্টোরেজ ট্রেস করুন
- ক্লাউড ফাংশন ব্যবহার করে ফ্লো স্থাপনা
- ফায়ারবেস প্রমাণীকরণ ব্যবহারকারীদের জন্য অনুমোদন নীতি
- গুগল ক্লাউডের অপারেশন স্যুটে টেলিমেট্রি রপ্তানি
ইনস্টলেশন
npm i --save @genkit-ai/firebase
পূর্বশর্ত
- সমস্ত Firebase পণ্যগুলির একটি Firebase প্রকল্প প্রয়োজন৷ আপনি একটি নতুন প্রকল্প তৈরি করতে পারেন বা Firebase কনসোল ব্যবহার করে বিদ্যমান Google ক্লাউড প্রকল্পে Firebase সক্ষম করতে পারেন৷
- উপরন্তু, আপনি যদি ক্লাউড ফাংশনে ফ্লো স্থাপন করতে চান, তাহলে আপনাকে অবশ্যই আপনার প্রজেক্টকে ব্লেজ পে-অ্যাজ-ইউ-গো প্ল্যানে আপগ্রেড করতে হবে।
- আপনি যদি স্থানীয়ভাবে কোড চালাতে চান যা টেলিমেট্রি রপ্তানি করে, তাহলে আপনার Google Cloud CLI টুল ইনস্টল করা দরকার।
কনফিগারেশন
প্রকল্প আইডি
এই প্লাগইনটি ব্যবহার করতে, আপনি যখন Genkit শুরু করবেন তখন এটি নির্দিষ্ট করুন:
import { genkit } from 'genkit';
import { firebase } from '@genkit-ai/firebase';
const ai = genkit({
plugins: [firebase({ projectId: "your-firebase-project" })],
});
প্লাগইনটির জন্য আপনাকে আপনার Firebase প্রকল্প আইডি নির্দিষ্ট করতে হবে। আপনি নিম্নলিখিত যে কোনও উপায়ে আপনার ফায়ারবেস প্রকল্প আইডি নির্দিষ্ট করতে পারেন:
firebase()
কনফিগারেশন অবজেক্টেprojectId
সেট করুন।GCLOUD_PROJECT
পরিবেশ পরিবর্তনশীল সেট করুন। আপনি যদি Google ক্লাউড পরিবেশ (ক্লাউড ফাংশন, ক্লাউড রান ইত্যাদি) থেকে আপনার প্রবাহ চালাচ্ছেন, তাহলেGCLOUD_PROJECT
স্বয়ংক্রিয়ভাবে পরিবেশের প্রকল্প আইডিতে সেট হয়ে যাবে।আপনি যদি
GCLOUD_PROJECT
সেট করেন, আপনি কনফিগারেশন প্যারামিটারটি বাদ দিতে পারেন:firebase()
শংসাপত্র
Firebase শংসাপত্রগুলি প্রদান করতে, আপনাকে Google ক্লাউড অ্যাপ্লিকেশন ডিফল্ট শংসাপত্রগুলিও সেট আপ করতে হবে৷ আপনার শংসাপত্রগুলি নির্দিষ্ট করতে:
আপনি যদি Google ক্লাউড পরিবেশ (ক্লাউড ফাংশন, ক্লাউড রান ইত্যাদি) থেকে আপনার প্রবাহ চালাচ্ছেন তবে এটি স্বয়ংক্রিয়ভাবে সেট হয়ে যায়।
অন্যান্য পরিবেশের জন্য:
- আপনার Firebase প্রকল্পের জন্য পরিষেবা অ্যাকাউন্টের শংসাপত্র তৈরি করুন এবং JSON কী ফাইলটি ডাউনলোড করুন। আপনি Firebase কনসোলের পরিষেবা অ্যাকাউন্ট পৃষ্ঠায় এটি করতে পারেন।
- পরিবেশ পরিবর্তনশীল
GOOGLE_APPLICATION_CREDENTIALS
JSON ফাইলের ফাইল পাথে সেট করুন যাতে আপনার পরিষেবা অ্যাকাউন্ট কী রয়েছে, অথবা আপনি JSON ফাইলের বিষয়বস্তুতে পরিবেশ পরিবর্তনশীলGCLOUD_SERVICE_ACCOUNT_CREDS
সেট করতে পারেন৷
টেলিমেট্রি
প্লাগইনটির Google ক্লাউড প্লাগইনের উপর সরাসরি নির্ভরতা রয়েছে এবং এইভাবে Google এর ক্লাউড অপারেশন স্যুটে টেলিমেট্রি রপ্তানি সক্ষম করার বিধান রয়েছে। টেলিমেট্রি এক্সপোর্ট কল সক্ষম করতে enableFirebaseTelemetry()
:
import { enableFirebaseTelemetry } from '@genkit-ai/firebase';
enableFirebaseTelemetry();
সমস্ত কনফিগারেশন বিকল্পগুলির জন্য Google ক্লাউড প্লাগইন ডকুমেন্টেশন এবং প্রয়োজনীয় APIগুলি দেখুন যা প্রকল্পে সক্ষম করা দরকার৷
ব্যবহার
এই প্লাগইনটি ফায়ারবেস পরিষেবাগুলির সাথে বিভিন্ন ইন্টিগ্রেশন প্রদান করে, যা আপনি একসাথে বা পৃথকভাবে ব্যবহার করতে পারেন।
ক্লাউড ফায়ারস্টোর ভেক্টর স্টোর
আপনি ক্লাউড ফায়ারস্টোরকে RAG ইনডেক্সিং এবং পুনরুদ্ধারের জন্য ভেক্টর স্টোর হিসাবে ব্যবহার করতে পারেন।
এই বিভাগে firebase
প্লাগইন এবং ক্লাউড ফায়ারস্টোরের ভেক্টর অনুসন্ধান বৈশিষ্ট্যের জন্য নির্দিষ্ট তথ্য রয়েছে। Genkit ব্যবহার করে RAG বাস্তবায়নের উপর আরো বিস্তারিত আলোচনার জন্য পুনরুদ্ধার-বর্ধিত প্রজন্মের পৃষ্ঠাটি দেখুন।
GCLOUD_SERVICE_ACCOUNT_CREDS এবং ফায়ারস্টোর ব্যবহার করা হচ্ছে
আপনি যদি সরাসরি GCLOUD_SERVICE_ACCOUNT_CREDS
এর মাধ্যমে শংসাপত্রগুলি পাস করে পরিষেবা অ্যাকাউন্টের শংসাপত্রগুলি ব্যবহার করেন এবং একটি ভেক্টর স্টোর হিসাবে Firestore ব্যবহার করেন, তাহলে আপনাকে আরম্ভ করার সময় সরাসরি Firestore ইন্সট্যান্সে শংসাপত্রগুলি পাস করতে হবে বা প্লাগইনের উপর নির্ভর করে সিঙ্গলটন অ্যাপ্লিকেশন ডিফল্ট শংসাপত্রের সাথে আরম্ভ করা যেতে পারে। আদেশ
import {initializeApp} from "firebase-admin/app";
import {getFirestore} from "firebase-admin/firestore";
const app = initializeApp();
let firestore = getFirestore(app);
if (process.env.GCLOUD_SERVICE_ACCOUNT_CREDS) {
const serviceAccountCreds = JSON.parse(process.env.GCLOUD_SERVICE_ACCOUNT_CREDS);
const authOptions = { credentials: serviceAccountCreds };
firestore.settings(authOptions);
}
উদ্ধারকারী
firebase
প্লাগইন Firestore retrievers, defineFirestoreRetriever()
সংজ্ঞায়িত করার জন্য একটি সুবিধার ফাংশন প্রদান করে :
import {defineFirestoreRetriever} from "@genkit-ai/firebase";
import {retrieve} from "@genkit-ai/ai/retriever";
import {initializeApp} from "firebase-admin/app";
import {getFirestore} from "firebase-admin/firestore";
const app = initializeApp();
const firestore = getFirestore(app);
const yourRetrieverRef = defineFirestoreRetriever({
name: "yourRetriever",
firestore: getFirestore(app),
collection: "yourCollection",
contentField: "yourDataChunks",
vectorField: "embedding",
embedder: textEmbeddingGecko, // Import from '@genkit-ai/googleai' or '@genkit-ai/vertexai'
distanceMeasure: "COSINE", // "EUCLIDEAN", "DOT_PRODUCT", or "COSINE" (default)
});
এটি ব্যবহার করতে, এটি ai.retrieve()
ফাংশনে পাস করুন:
const docs = await ai.retrieve({
retriever: yourRetrieverRef,
query: "look for something",
options: { limit: 5 },
});
উপলব্ধ পুনরুদ্ধার বিকল্প অন্তর্ভুক্ত:
-
limit
: ফেরার জন্য মিলিত ফলাফলের সংখ্যা উল্লেখ করুন। -
where
: ভেক্টর অনুসন্ধান ছাড়াও ক্ষেত্র/মান জোড়া (যেমন{category: 'food'}
) মেলে। -
collection
: যেমন উপ-সংগ্রহ অনুসন্ধান অনুসন্ধান করতে ডিফল্ট সংগ্রহ ওভাররাইড করুন।
ইন্ডেক্সিং এবং এমবেডিং
আপনার ফায়ারস্টোর সংগ্রহকে পপুলেট করতে, অ্যাডমিন SDK-এর সাথে একটি এমবেডিং জেনারেটর ব্যবহার করুন। উদাহরণস্বরূপ, পুনরুদ্ধার-বর্ধিত প্রজন্মের পৃষ্ঠা থেকে মেনু ইনজেশন স্ক্রিপ্ট নিম্নলিখিত উপায়ে Firestore-এর জন্য অভিযোজিত হতে পারে:
import { genkit } from 'genkit';
import { vertexAI, textEmbedding004 } from "@genkit-ai/vertexai";
import { applicationDefault, initializeApp } from "firebase-admin/app";
import { FieldValue, getFirestore } from "firebase-admin/firestore";
import { chunk } from "llm-chunk";
import pdf from "pdf-parse";
import { readFile } from "fs/promises";
import path from "path";
// Change these values to match your Firestore config/schema
const indexConfig = {
collection: "menuInfo",
contentField: "text",
vectorField: "embedding",
embedder: textEmbedding004,
};
const ai = genkit({
plugins: [vertexAI({ location: "us-central1" })],
});
const app = initializeApp({ credential: applicationDefault() });
const firestore = getFirestore(app);
export async function indexMenu(filePath: string) {
filePath = path.resolve(filePath);
// Read the PDF.
const pdfTxt = await extractTextFromPdf(filePath);
// Divide the PDF text into segments.
const chunks = await chunk(pdfTxt);
// Add chunks to the index.
await indexToFirestore(chunks);
}
async function indexToFirestore(data: string[]) {
for (const text of data) {
const embedding = await ai.embed({
embedder: indexConfig.embedder,
content: text,
});
await firestore.collection(indexConfig.collection).add({
[indexConfig.vectorField]: FieldValue.vector(embedding),
[indexConfig.contentField]: text,
});
}
}
async function extractTextFromPdf(filePath: string) {
const pdfFile = path.resolve(filePath);
const dataBuffer = await readFile(pdfFile);
const data = await pdf(dataBuffer);
return data.text;
}
ফায়ারস্টোর সংগ্রহের উপর দ্রুত এবং দক্ষ অনুসন্ধান প্রদানের জন্য সূচকের উপর নির্ভর করে। (মনে রাখবেন যে "সূচী" এখানে ডাটাবেস সূচীগুলিকে বোঝায়, এবং জেনকিটের সূচক এবং পুনরুদ্ধারকারী বিমূর্ততা নয়।)
পূর্বের উদাহরণের জন্য embedding
ক্ষেত্রটি কাজ করার জন্য সূচিত করা প্রয়োজন। সূচক তৈরি করতে:
Firestore ডক্সের একটি একক-ক্ষেত্র ভেক্টর সূচক বিভাগে বর্ণিত
gcloud
কমান্ডটি চালান।কমান্ড নিম্নলিখিত মত দেখায়:
gcloud alpha firestore indexes composite create --project=your-project-id \ --collection-group=yourCollectionName --query-scope=COLLECTION \ --field-config=vector-config='{"dimension":"768","flat": "{}"}',field-path=yourEmbeddingField
যাইহোক, সঠিক ইন্ডেক্সিং কনফিগারেশন নির্ভর করে আপনি যে প্রশ্নগুলি করবেন এবং আপনি যে এমবেডিং মডেল ব্যবহার করছেন তার উপর।
বিকল্পভাবে,
ai.retrieve()
কল করুন এবং Firestore সূচী তৈরি করতে সঠিক কমান্ড দিয়ে একটি ত্রুটি নিক্ষেপ করবে।
আরও জানুন
- Genkit-এ সূচক এবং পুনরুদ্ধারের উপর একটি সাধারণ আলোচনার জন্য পুনরুদ্ধার-বর্ধিত প্রজন্মের পৃষ্ঠাটি দেখুন।
- ভেক্টর অনুসন্ধান বৈশিষ্ট্য সম্পর্কে আরও জানতে ক্লাউড ফায়ারস্টোর ডক্সে ভেক্টর এম্বেডিংয়ের সাথে অনুসন্ধান দেখুন।
ক্লাউড ফাংশন
প্লাগইনটি onFlow()
কনস্ট্রাক্টর প্রদান করে, যা Firebase HTTPS-ট্রিগার ফাংশনের জন্য একটি ক্লাউড ফাংশন দ্বারা সমর্থিত একটি ফ্লো তৈরি করে। এই ফাংশনগুলি Firebase-এর কলযোগ্য ফাংশন ইন্টারফেসের সাথে সামঞ্জস্যপূর্ণ এবং আপনি তাদের কল করার জন্য ক্লাউড ফাংশন ক্লায়েন্ট SDK ব্যবহার করতে পারেন৷
import { onFlow, noAuth } from "@genkit-ai/firebase/functions";
export const exampleFlow = onFlow(
ai, // Provide the Genkit instance
{
name: "exampleFlow",
authPolicy: noAuth(), // WARNING: noAuth() creates an open endpoint!
},
async (prompt) => {
// Flow logic goes here.
return response;
}
);
Firebase CLI ব্যবহার করে আপনার প্রবাহ স্থাপন করুন:
firebase deploy --only functions
onFlow()
ফাংশনের কিছু অপশন আছে যা defineFlow()
এ উপস্থিত নেই :
httpsOptions
: একটিHttpsOptions
অবজেক্ট আপনার ক্লাউড ফাংশন কনফিগার করতে ব্যবহৃত হয়:export const exampleFlow = onFlow( ai, { name: "exampleFlow", httpsOptions: { cors: true, }, // ... }, async (prompt) => { // ... } );
enforceAppCheck
:true
হলে, অনুপস্থিত বা অবৈধ অ্যাপ চেক টোকেন সহ অনুরোধগুলি প্রত্যাখ্যান করুন।consumeAppCheckToken
:true
হলে, যাচাই করার পর অ্যাপ চেক টোকেনটি বাতিল করুন।রিপ্লে সুরক্ষা দেখুন।
ফায়ারবেস প্রমাণ
এই প্লাগইনটি Firebase Auth-এর চারপাশে অনুমোদন নীতি তৈরি করতে একটি সহায়ক ফাংশন প্রদান করে:
import {firebaseAuth} from "@genkit-ai/firebase/auth";
export const exampleFlow = onFlow(
ai,
{
name: "exampleFlow",
authPolicy: firebaseAuth((user) => {
if (!user.email_verified) throw new Error("Requires verification!");
}),
},
async (prompt) => {
// ...
}
);
একটি প্রমাণীকরণ নীতি সংজ্ঞায়িত করতে, একটি কলব্যাক ফাংশন সহ firebaseAuth()
প্রদান করুন যা একটি DecodedIdToken
এর একমাত্র প্যারামিটার হিসাবে নেয়৷ এই ফাংশনে, ব্যবহারকারীর টোকেন পরীক্ষা করুন এবং ব্যবহারকারী যদি আপনার প্রয়োজনের কোনো মানদণ্ড পূরণ করতে ব্যর্থ হয় তবে একটি ত্রুটি নিক্ষেপ করুন।
এই বিষয়ের আরও পুঙ্খানুপুঙ্খ আলোচনার জন্য অনুমোদন এবং সততা দেখুন।