ফায়ারবেস প্লাগইন

Firebase প্লাগইন Firebase পরিষেবাগুলির সাথে একীকরণ প্রদান করে, যা আপনাকে বুদ্ধিমান এবং স্কেলযোগ্য AI অ্যাপ্লিকেশন তৈরি করতে দেয়। মূল বৈশিষ্ট্য অন্তর্ভুক্ত:

  • ফায়ারস্টোর ভেক্টর স্টোর : ভেক্টর এম্বেডিংয়ের সাথে ইন্ডেক্সিং এবং পুনরুদ্ধারের জন্য ফায়ারস্টোর ব্যবহার করুন।
  • ক্লাউড ফাংশন : HTTPS-ট্রিগার ফাংশন হিসাবে প্রবাহ স্থাপন করুন।
  • ফায়ারবেস প্রমাণীকরণ : অনুমোদন নীতিগুলি প্রয়োগ করুন।
  • টেলিমেট্রি : গুগল ক্লাউডের অপারেশন স্যুটে টেলিমেট্রি রপ্তানি করুন এবং ফায়ারবেস কনসোলে বিশেষ ভিউ দেখুন

ইনস্টলেশন

npm সহ Firebase প্লাগইন ইনস্টল করুন:

npm install @genkit-ai/firebase

পূর্বশর্ত

ফায়ারবেস প্রকল্প সেটআপ

  1. সমস্ত Firebase পণ্যগুলির একটি Firebase প্রকল্প প্রয়োজন৷ আপনি একটি নতুন প্রকল্প তৈরি করতে পারেন বা Firebase কনসোল ব্যবহার করে বিদ্যমান Google ক্লাউড প্রকল্পে Firebase সক্ষম করতে পারেন৷
  2. ক্লাউড ফাংশনগুলির সাথে মোতায়েন করা হলে, আপনার ফায়ারবেস প্রকল্পটিকে ব্লেজ প্ল্যানে আপগ্রেড করুন
  3. আপনি যদি স্থানীয়ভাবে কোড চালাতে চান যা টেলিমেট্রি রপ্তানি করে, তাহলে আপনার Google Cloud CLI টুল ইনস্টল করা দরকার।

ফায়ারবেস অ্যাডমিন SDK ইনিশিয়ালাইজেশন

আপনার অ্যাপ্লিকেশনে আপনাকে অবশ্যই Firebase অ্যাডমিন SDK শুরু করতে হবে। এটি প্লাগইন দ্বারা স্বয়ংক্রিয়ভাবে পরিচালনা করা হয় না।

import { initializeApp } from 'firebase-admin/app';

initializeApp({
  projectId: 'your-project-id',
});

প্লাগইনটির জন্য আপনাকে আপনার Firebase প্রকল্প আইডি নির্দিষ্ট করতে হবে। আপনি নিম্নলিখিত যে কোনও উপায়ে আপনার ফায়ারবেস প্রকল্প আইডি নির্দিষ্ট করতে পারেন:

  • উপরের স্নিপেটে দেখানো হিসাবে initializeApp() কনফিগারেশন অবজেক্টে projectId সেট করুন।

  • GCLOUD_PROJECT পরিবেশ পরিবর্তনশীল সেট করুন। আপনি যদি Google ক্লাউড পরিবেশ (ক্লাউড ফাংশন, ক্লাউড রান ইত্যাদি) থেকে আপনার প্রবাহ চালাচ্ছেন, তাহলে GCLOUD_PROJECT স্বয়ংক্রিয়ভাবে পরিবেশের প্রকল্প আইডিতে সেট হয়ে যাবে।

    আপনি যদি GCLOUD_PROJECT সেট করেন, তাহলে আপনি initializeApp() এ কনফিগারেশন প্যারামিটারটি বাদ দিতে পারেন।

শংসাপত্র

Firebase শংসাপত্রগুলি প্রদান করতে, আপনাকে Google ক্লাউড অ্যাপ্লিকেশন ডিফল্ট শংসাপত্রগুলিও সেট আপ করতে হবে৷ আপনার শংসাপত্রগুলি নির্দিষ্ট করতে:

  • আপনি যদি Google ক্লাউড পরিবেশ (ক্লাউড ফাংশন, ক্লাউড রান ইত্যাদি) থেকে আপনার প্রবাহ চালাচ্ছেন তবে এটি স্বয়ংক্রিয়ভাবে সেট হয়ে যায়।

  • অন্যান্য পরিবেশের জন্য:

    1. আপনার Firebase প্রকল্পের জন্য পরিষেবা অ্যাকাউন্টের শংসাপত্র তৈরি করুন এবং JSON কী ফাইলটি ডাউনলোড করুন। আপনি Firebase কনসোলের পরিষেবা অ্যাকাউন্ট পৃষ্ঠায় এটি করতে পারেন।
    2. পরিবেশ পরিবর্তনশীল 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);
}

একটি ফায়ারস্টোর রিট্রিভার সংজ্ঞায়িত করুন

Firestore ভেক্টর-ভিত্তিক প্রশ্নের জন্য একটি পুনরুদ্ধার তৈরি করতে defineFirestoreRetriever() ব্যবহার করুন।

import { defineFirestoreRetriever } from '@genkit-ai/firebase';
import { initializeApp } from 'firebase-admin/app';
import { getFirestore } from 'firebase-admin/firestore';

const app = initializeApp();
const firestore = getFirestore(app);

const retriever = defineFirestoreRetriever(ai, {
  name: 'exampleRetriever',
  firestore,
  collection: 'documents',
  contentField: 'text', // Field containing document content
  vectorField: 'embedding', // Field containing vector embeddings
  embedder: yourEmbedderInstance, // Embedder to generate embeddings
  distanceMeasure: 'COSINE', // Default is 'COSINE'; other options: 'EUCLIDEAN', 'DOT_PRODUCT'
});

নথি উদ্ধার করুন

সংজ্ঞায়িত পুনরুদ্ধার ব্যবহার করে নথি পুনরুদ্ধার করতে, ai.retrieve এ পুনরুদ্ধারের উদাহরণ এবং অনুসন্ধান বিকল্পগুলি পাস করুন।

const docs = await ai.retrieve({
  retriever,
  query: 'search query',
  options: {
    limit: 5, // Options: Return up to 5 documents
    where: { category: 'example' }, // Optional: Filter by field-value pairs
    collection: 'alternativeCollection', // Optional: Override default collection
  },
});

উপলব্ধ পুনরুদ্ধার বিকল্প

নিম্নলিখিত অপশনগুলিকে ai.retrieve এর options ফিল্ডে পাঠানো যেতে পারে:

  • limit : (সংখ্যা)
    পুনরুদ্ধার করার জন্য সর্বাধিক সংখ্যক নথি উল্লেখ করুন। ডিফল্ট হল 10

  • where : (রেকর্ড<স্ট্রিং, যেকোনো>)
    Firestore ক্ষেত্রের উপর ভিত্তি করে অতিরিক্ত ফিল্টার যোগ করুন। উদাহরণ:

    where: { category: 'news', status: 'published' }
    
  • collection : (স্ট্রিং)
    পুনরুদ্ধার কনফিগারেশনে নির্দিষ্ট করা ডিফল্ট সংগ্রহ ওভাররাইড করুন। এটি উপ-সংগ্রহগুলি অনুসন্ধান করার জন্য বা সংগ্রহগুলির মধ্যে গতিশীলভাবে স্যুইচ করার জন্য দরকারী।

এম্বেডিং সহ Firestore পপুলেট করুন

আপনার ফায়ারস্টোর সংগ্রহকে পপুলেট করতে, অ্যাডমিন 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 সূচী তৈরি করতে সঠিক কমান্ড দিয়ে একটি ত্রুটি নিক্ষেপ করবে।

আরও জানুন

ক্লাউড ফাংশন হিসাবে প্রবাহ স্থাপন

প্লাগইনটি 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 এর একমাত্র প্যারামিটার হিসাবে নেয়৷ এই ফাংশনে, ব্যবহারকারীর টোকেন পরীক্ষা করুন এবং ব্যবহারকারী যদি আপনার প্রয়োজনের কোনো মানদণ্ড পূরণ করতে ব্যর্থ হয় তবে একটি ত্রুটি নিক্ষেপ করুন।

এই বিষয়ের আরও পুঙ্খানুপুঙ্খ আলোচনার জন্য অনুমোদন এবং সততা দেখুন।