Firebase प्लगिन

Firebase प्लग इन, Firebase सेवाओं के साथ कई इंटिग्रेशन उपलब्ध कराता है:

  • Cloud Firestore वेक्टर स्टोर का इस्तेमाल करने वाले इंडेक्स और रिट्रीवर
  • Cloud Firestore का इस्तेमाल करके स्टोरेज ट्रेस करना
  • Cloud Functions का इस्तेमाल करके फ़्लो डिप्लॉयमेंट
  • Firebase से पुष्टि करने वाले उपयोगकर्ताओं के लिए अनुमति देने से जुड़ी नीतियां

इंस्टॉल करना

npm i --save @genkit-ai/firebase

ज़रूरी शर्तें

  • सभी Firebase प्रॉडक्ट के लिए एक Firebase प्रोजेक्ट ज़रूरी है. नया प्रोजेक्ट बनाया जा सकता है या मौजूदा Google Cloud प्रोजेक्ट में Firebase को चालू करने के लिए, Firebase कंसोल.
  • इसके अलावा, अगर आपको Cloud Functions पर फ़्लो डिप्लॉय करना है, तो अपना प्रोजेक्ट अपग्रेड करें ब्लेज़ के हिसाब से पेमेंट करें.

कॉन्फ़िगरेशन

प्रोजेक्ट आईडी

इस प्लग इन का उपयोग करने के लिए, configureGenkit() को कॉल करते समय इसका उल्लेख करें:

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

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

प्लगिन के लिए, आपको अपना Firebase प्रोजेक्ट आईडी बताना होगा. यह तय किया जा सकता है कि Firebase प्रोजेक्ट आईडी को इनमें से किसी एक तरीके से इस्तेमाल करें:

  • projectId को firebase() कॉन्फ़िगरेशन ऑब्जेक्ट में सेट करें.

  • GCLOUD_PROJECT एनवायरमेंट वैरिएबल सेट करें. अगर आपको दौड़ना है, तो Google Cloud एनवायरमेंट (Cloud Functions, Cloud Run वगैरह) से, GCLOUD_PROJECT, एनवायरमेंट के प्रोजेक्ट आईडी पर अपने-आप सेट हो जाता है.

    अगर GCLOUD_PROJECT को सेट किया जाता है, तो कॉन्फ़िगरेशन पैरामीटर को छोड़ा जा सकता है: firebase()

क्रेडेंशियल

Firebase क्रेडेंशियल देने के लिए, आपको Google Cloud भी सेट अप करना होगा ऐप्लिकेशन के डिफ़ॉल्ट क्रेडेंशियल. अपने क्रेडेंशियल बताने के लिए:

  • अगर Google Cloud एनवायरमेंट (Cloud Functions, Cloud Run वगैरह), यह अपने-आप सेट हो जाता है.

  • अन्य एनवायरमेंट के लिए:

    1. अपने Firebase प्रोजेक्ट के लिए सेवा खाते के क्रेडेंशियल जनरेट करें और JSON कुंजी वाली फ़ाइल डाउनलोड करें. ऐसा करने के लिए, सेवा खाता के पेज पर क्लिक करें.
    2. फ़ाइल में, एनवायरमेंट वैरिएबल GOOGLE_APPLICATION_CREDENTIALS को सेट करें JSON फ़ाइल का पाथ शामिल किया जाना चाहिए, जिसमें आपके सेवा खाते की कुंजी शामिल है. इसके अलावा, JSON फ़ाइल के कॉन्टेंट के लिए एनवायरमेंट वैरिएबल GCLOUD_SERVICE_ACCOUNT_CREDS को सेट किया जा सकता है.

टेलिमेट्री

यह प्लगिन, Google Cloud के प्लगिन पर सीधे तौर पर निर्भर करता है. इसलिए, Google Cloud के ऑपरेशंस सुइट में टेलीमेट्री एक्सपोर्ट की सुविधा चालू करने के प्रावधान भी हैं. टेलीमेट्री एक्सपोर्ट को चालू करने के लिए, 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 Cloud प्लगिन का दस्तावेज़ देखें.

इस्तेमाल किए जाने से जुड़ी जानकारी

यह प्लगिन, Firebase सेवाओं के साथ कई इंटिग्रेशन उपलब्ध कराता है. इनसे आपको ये काम करने में मदद मिलती है एक साथ या अलग-अलग इस्तेमाल करें.

Cloud Firestore वेक्टर स्टोर

आरएजी इंडेक्स करने और डेटा वापस पाने के लिए, Cloud Firestore का इस्तेमाल वेक्टर स्टोर के तौर पर किया जा सकता है.

इस सेक्शन में, firebase प्लगिन और Cloud से जुड़ी जानकारी मौजूद है Firestore की वेक्टर खोजने की सुविधा. ज़्यादा जानकारी के लिए, वापस पाने की सुविधा चालू करके पेज जनरेट करें पेज देखें Genkit की मदद से RAG को लागू करने पर चर्चा.

GCloud_SERVICE_ACCOUNT_CREDS और Firestore का इस्तेमाल करना

अगर सीधे GCLOUD_SERVICE_ACCOUNT_CREDS के ज़रिए क्रेडेंशियल पास करके, सेवा खाते के क्रेडेंशियल का इस्तेमाल किया जा रहा है और Firestore स्टोर के तौर पर भी 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 के बारे में बताने के लिए एक सुविधा फ़ंक्शन देता है रिट्रीवर, 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: खोजने के लिए, डिफ़ॉल्ट कलेक्शन को बदलें उदाहरण के लिए सब-कलेक्शन खोजें.

इंडेक्स करना और एम्बेड करना

अपने Firestore कलेक्शन को पॉप्युलेट करने के लिए, एम्बेड करने वाले जनरेटर का इस्तेमाल करें एडमिन 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;
}

Firestore, इंडेक्स पर निर्भर करता है, ताकि तेज़ी और बेहतर तरीके से क्वेरी की जा सके संग्रह. ध्यान दें कि यहां "इंडेक्स" का मतलब डेटाबेस इंडेक्स से है, न कि Genkit का इंडेक्सर और रिट्रीवर ऐब्स्ट्रैक्ट.)

पिछले उदाहरण में, embedding फ़ील्ड को इंडेक्स करना ज़रूरी है काम. इंडेक्स बनाने के लिए:

  • इसमें बताया गया 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() को कॉल किया जा सकता है और Firestore को सही निर्देश का इस्तेमाल करें.

और जानें

Cloud Firestore ट्रेस का स्टोरेज

स्टोर ट्रेस के लिए Cloud Firestore का इस्तेमाल किया जा सकता है:

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

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

डिफ़ॉल्ट रूप से, प्लगिन genkit-traces नाम के कलेक्शन में ट्रेस सेव करता है प्रोजेक्ट के डिफ़ॉल्ट डेटाबेस में. किसी भी सेटिंग को बदलने के लिए:

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

Firestore पर आधारित ट्रेस स्टोरेज का इस्तेमाल करते समय, आपको ट्रेस दस्तावेज़ों के लिए टीटीएल को चालू करना होगा: https://firebase.google.com/docs/firestore/ttl

Cloud Functions

यह प्लगिन onFlow() कंस्ट्रक्टर उपलब्ध कराता है, जो एक ऐसा फ़्लो बनाता है जो Firebase के लिए Cloud Functions, एचटीटीपीएस से ट्रिगर होने वाला फ़ंक्शन. ये फ़ंक्शन, को Firebase की कॉल करने लायक फ़ंक्शन इंटरफ़ेस में उपलब्ध है और आप Cloud Functions क्लाइंट 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 सीएलआई का इस्तेमाल करके अपने फ़्लो को डिप्लॉय करें:

firebase deploy --only functions

onFlow() फ़ंक्शन में कुछ ऐसे विकल्प हैं जो defineFlow() में मौजूद नहीं हैं:

  • httpsOptions: एक HttpsOptions ऑब्जेक्ट का इस्तेमाल करके, अपने Cloud फ़ंक्शन को कॉन्फ़िगर करें:

    export const exampleFlow = onFlow(
      {
        name: "exampleFlow",
        httpsOptions: {
          cors: true,
        },
        // ...
      },
      async (prompt) => {
        // ...
      }
    );
    
  • enforceAppCheck: true होने पर, उन अनुरोधों को अस्वीकार करें जिनमें ऐप्लिकेशन की जांच मौजूद नहीं है या अमान्य है टोकन.

  • consumeAppCheckToken: true होने पर, पुष्टि करने के बाद ऐप्लिकेशन चेक टोकन अमान्य हो जाएगा.

    फिर से चलाने पर मिलने वाली सुरक्षा देखें.

Firebase पुष्टिकरण

यह प्लगिन, पुष्टि करने की नीतियां बनाने के लिए हेल्पर फ़ंक्शन उपलब्ध कराता है Firebase पुष्टि:

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 का ही पैरामीटर है. इस फ़ंक्शन में, उपयोगकर्ता टोकन की जाँच करें और गड़बड़ी का मैसेज तब दिखाया जाता है, जब उपयोगकर्ता आपकी ज़रूरत की सभी शर्तें पूरी नहीं कर पाता है.

समस्या के बारे में ज़्यादा जानने के लिए, अनुमति देना और उसका रखरखाव करना देखें इस विषय.