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

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

  • ফায়ারস্টোর ভেক্টর স্টোর : ভেক্টর এম্বেডিংয়ের সাথে ইন্ডেক্সিং এবং পুনরুদ্ধারের জন্য ফায়ারস্টোর ব্যবহার করুন।
  • টেলিমেট্রি : Google এর ক্লাউড অপারেশন স্যুটে টেলিমেট্রি রপ্তানি করুন যা ফায়ারবেস জেনকিট মনিটরিং কনসোলকে শক্তি দেয়৷

ইনস্টলেশন

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 সেট করতে পারেন৷

বৈশিষ্ট্য এবং ব্যবহার

টেলিমেট্রি

Firebase প্লাগইন Firebase Genkit Monitoring-এ মেট্রিক্স, ট্রেস এবং লগ পাঠানোর জন্য একটি টেলিমেট্রি বাস্তবায়ন প্রদান করে।

শুরু করতে, ইনস্টলেশন এবং কনফিগারেশন নির্দেশাবলীর জন্য শুরু করার নির্দেশিকা দেখুন।

Google ক্লাউডের মাধ্যমে প্রমাণীকরণের জন্য প্রমাণীকরণ এবং অনুমোদন নির্দেশিকা দেখুন।

কনফিগারেশন বিকল্পের জন্য উন্নত কনফিগারেশন গাইড দেখুন।

Genkit মেট্রিক্স, ট্রেস, এবং লগ সংগৃহীত বিশদ বিবরণের জন্য টেলিমেট্রি সংগ্রহ দেখুন।

আপনি ক্লাউড ফায়ারস্টোরকে 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 : (রেকর্ড<স্ট্রিং, যেকোনো>) ফায়ারস্টোর ফিল্ডের উপর ভিত্তি করে অতিরিক্ত ফিল্টার যোগ করুন। উদাহরণ:

    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,
    }))[0].embedding;
    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-এর জন্য Firebase ফাংশন লাইব্রেরির অন্তর্নির্মিত সমর্থন ব্যবহার করুন৷ onCallGenkit পদ্ধতি আপনাকে একটি প্রবাহ থেকে একটি কলযোগ্য ফাংশন তৈরি করতে দেয়। এটি স্বয়ংক্রিয়ভাবে স্ট্রিমিং এবং JSON অনুরোধ সমর্থন করে। আপনি তাদের কল করতে ক্লাউড ফাংশন ক্লায়েন্ট SDK ব্যবহার করতে পারেন।

import { onCallGenkit } from 'firebase-functions/https';
import { defineSecret } from 'firebase-functions/params';

export const exampleFlow = ai.defineFlow({
  name: "exampleFlow",
}, async (prompt) => {
    // Flow logic goes here.

    return response;
  }
);

// WARNING: This has no authentication or app check protections.
// See github.com/firebase/genkit/blob/main/docs/auth.md for more information.
export const example = onCallGenkit({ secrets: [apiKey] }, exampleFlow);

Firebase CLI ব্যবহার করে আপনার প্রবাহ স্থাপন করুন:

firebase deploy --only functions