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

ফায়ারবেস প্লাগইন ফায়ারবেস পরিষেবাগুলির সাথে বিভিন্ন ইন্টিগ্রেশন প্রদান করে:

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

ইনস্টলেশন

npm i --save @genkit-ai/firebase

পূর্বশর্ত

কনফিগারেশন

প্রকল্প আইডি

এই প্লাগইনটি ব্যবহার করতে, আপনি যখন configureGenkit() কল করবেন তখন এটি নির্দিষ্ট করুন :

import {configureGenkit} from "@genkit-ai/core";
import {firebase} from "@genkit-ai/firebase";

configureGenkit({
  plugins: [firebase({projectId: "your-firebase-project"})],
});

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

  • firebase() কনফিগারেশন অবজেক্টে projectId সেট করুন।

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

    আপনি যদি GCLOUD_PROJECT সেট করেন, আপনি কনফিগারেশন প্যারামিটারটি বাদ দিতে পারেন: firebase()

শংসাপত্র

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

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

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

    1. আপনার Firebase প্রকল্পের জন্য পরিষেবা অ্যাকাউন্টের শংসাপত্র তৈরি করুন এবং JSON কী ফাইলটি ডাউনলোড করুন। আপনি Firebase কনসোলের পরিষেবা অ্যাকাউন্ট পৃষ্ঠায় এটি করতে পারেন।
    2. পরিবেশ পরিবর্তনশীল GOOGLE_APPLICATION_CREDENTIALS JSON ফাইলের ফাইল পাথে সেট করুন যাতে আপনার পরিষেবা অ্যাকাউন্ট কী রয়েছে, অথবা আপনি JSON ফাইলের বিষয়বস্তুতে পরিবেশ পরিবর্তনশীল GCLOUD_SERVICE_ACCOUNT_CREDS সেট করতে পারেন৷

টেলিমেট্রি

প্লাগইনটির Google ক্লাউড প্লাগইনের উপর সরাসরি নির্ভরতা রয়েছে এবং এইভাবে Google এর ক্লাউড অপারেশন স্যুটে টেলিমেট্রি রপ্তানি সক্ষম করার বিধান রয়েছে। টেলিমেট্রি এক্সপোর্ট সক্ষম করতে, enableTracingAndMetrics true সেট করুন এবং Genkit কনফিগারেশনে একটি টেলিমেট্রি বিভাগ যোগ করুন:

import {configureGenkit} from "@genkit-ai/core";
import {firebase} from "@genkit-ai/firebase";

configureGenkit({
  plugins: [firebase()],
  enableTracingAndMetrics: true,
  telemetry: {
    instrumentation: 'firebase',
    logger: 'firebase',
  },
});

সমস্ত কনফিগারেশন বিকল্পগুলির জন্য 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)
});

এটি ব্যবহার করতে, এটি retrieve() ফাংশনে পাস করুন:

const docs = await retrieve({
  retriever: yourRetrieverRef,
  query: "look for something",
  options: {limit: 5},
});

উপলব্ধ পুনরুদ্ধার বিকল্প অন্তর্ভুক্ত:

  • limit : ফেরার জন্য মিলিত ফলাফলের সংখ্যা উল্লেখ করুন।
  • where : ভেক্টর অনুসন্ধান ছাড়াও ক্ষেত্র/মান জোড়া (যেমন {category: 'food'} ) মেলে।
  • collection : যেমন উপ-সংগ্রহ অনুসন্ধান অনুসন্ধান করতে ডিফল্ট সংগ্রহ ওভাররাইড করুন।

ইন্ডেক্সিং এবং এমবেডিং

আপনার ফায়ারস্টোর সংগ্রহকে পপুলেট করতে, অ্যাডমিন SDK-এর সাথে একটি এমবেডিং জেনারেটর ব্যবহার করুন। উদাহরণস্বরূপ, পুনরুদ্ধার-বর্ধিত প্রজন্মের পৃষ্ঠা থেকে মেনু ইনজেশন স্ক্রিপ্ট নিম্নলিখিত উপায়ে Firestore-এর জন্য অভিযোজিত হতে পারে:

import { configureGenkit } from "@genkit-ai/core";
import { embed } from "@genkit-ai/ai/embedder";
import { defineFlow, run } from "@genkit-ai/flow";
import { textEmbeddingGecko, vertexAI } 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 * as z from "zod";

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: textEmbeddingGecko,
};

configureGenkit({
  plugins: [vertexAI({ location: "us-central1" })],
  enableTracingAndMetrics: false,
});

const app = initializeApp({ credential: applicationDefault() });
const firestore = getFirestore(app);

export const indexMenu = defineFlow(
  {
    name: "indexMenu",
    inputSchema: z.string().describe("PDF file path"),
    outputSchema: z.void(),
  },
  async (filePath: string) => {
    filePath = path.resolve(filePath);

    // Read the PDF.
    const pdfTxt = await run("extract-text", () =>
      extractTextFromPdf(filePath)
    );

    // Divide the PDF text into segments.
    const chunks = await run("chunk-it", async () => chunk(pdfTxt));

    // Add chunks to the index.
    await run("index-chunks", async () => indexToFirestore(chunks));
  }
);

async function indexToFirestore(data: string[]) {
  for (const text of data) {
    const embedding = await 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

    যাইহোক, সঠিক ইন্ডেক্সিং কনফিগারেশন নির্ভর করে আপনি যে প্রশ্নগুলি করবেন এবং আপনি যে এমবেডিং মডেল ব্যবহার করছেন তার উপর।

  • বিকল্পভাবে, কল retrieve() এবং ফায়ারস্টোর সূচী তৈরি করতে সঠিক কমান্ডের সাথে একটি ত্রুটি নিক্ষেপ করবে।

আরও জানুন

ক্লাউড ফায়ারস্টোর ট্রেস স্টোরেজ

আপনি ট্রেস সংরক্ষণ করতে ক্লাউড ফায়ারস্টোর ব্যবহার করতে পারেন:

import {firebase} from "@genkit-ai/firebase";

configureGenkit({
  plugins: [firebase()],
  traceStore: "firebase",
  enableTracingAndMetrics: true,
});

ডিফল্টরূপে, প্লাগইনটি প্রজেক্টের ডিফল্ট ডাটাবেসে genkit-traces নামে একটি সংগ্রহে ট্রেস সংরক্ষণ করে। যেকোনো একটি সেটিং পরিবর্তন করতে:

firebase({
  traceStore: {
    collection: "your-collection";
    databaseId: "your-db";
  }
})

Firestore-ভিত্তিক ট্রেস স্টোরেজ ব্যবহার করার সময় আপনি ট্রেস নথিগুলির জন্য TTL সক্ষম করতে চাইবেন: https://firebase.google.com/docs/firestore/ttl

ক্লাউড ফাংশন

প্লাগইনটি onFlow() কনস্ট্রাক্টর প্রদান করে, যা Firebase HTTPS-ট্রিগার ফাংশনের জন্য একটি ক্লাউড ফাংশন দ্বারা সমর্থিত একটি ফ্লো তৈরি করে। এই ফাংশনগুলি Firebase-এর কলযোগ্য ফাংশন ইন্টারফেসের সাথে সামঞ্জস্যপূর্ণ এবং আপনি তাদের কল করার জন্য ক্লাউড ফাংশন ক্লায়েন্ট SDK ব্যবহার করতে পারেন৷

import {firebase} from "@genkit-ai/firebase";
import {onFlow, noAuth} from "@genkit-ai/firebase/functions";

configureGenkit({
  plugins: [firebase()],
});

export const exampleFlow = onFlow(
  {
    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(
      {
        name: "exampleFlow",
        httpsOptions: {
          cors: true,
        },
        // ...
      },
      async (prompt) => {
        // ...
      }
    );
    
  • enforceAppCheck : true হলে, অনুপস্থিত বা অবৈধ অ্যাপ চেক টোকেন সহ অনুরোধগুলি প্রত্যাখ্যান করুন।

  • consumeAppCheckToken : true হলে, যাচাই করার পর অ্যাপ চেক টোকেনটি বাতিল করুন।

    রিপ্লে সুরক্ষা দেখুন।

ফায়ারবেস প্রমাণ

এই প্লাগইনটি Firebase Auth-এর চারপাশে অনুমোদন নীতি তৈরি করতে একটি সহায়ক ফাংশন প্রদান করে:

import {firebaseAuth} from "@genkit-ai/firebase/auth";

export const exampleFlow = onFlow(
  {
    name: "exampleFlow",
    authPolicy: firebaseAuth((user) => {
      if (!user.email_verified) throw new Error("Requires verification!");
    }),
  },
  async (prompt) => {
    // ...
  }
);

একটি প্রমাণীকরণ নীতি সংজ্ঞায়িত করতে, একটি কলব্যাক ফাংশন সহ firebaseAuth() প্রদান করুন যা একটি DecodedIdToken এর একমাত্র প্যারামিটার হিসাবে নেয়৷ এই ফাংশনে, ব্যবহারকারীর টোকেন পরীক্ষা করুন এবং ব্যবহারকারী যদি আপনার প্রয়োজনের কোনো মানদণ্ড পূরণ করতে ব্যর্থ হয় তবে একটি ত্রুটি নিক্ষেপ করুন।

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