Firebase प्लग इन, Firebase की सेवाओं के साथ कई इंटिग्रेशन उपलब्ध कराता है:
- Cloud Firestore वेक्टर स्टोर का इस्तेमाल करने वाले इंडेक्सर और रीट्रिवर
- Cloud Firestore का इस्तेमाल करके स्टोरेज को ट्रैक करना
- Cloud Functions का इस्तेमाल करके फ़्लो डिप्लॉय करना
- Firebase Authentication के उपयोगकर्ताओं के लिए अनुमति की नीतियां
- Google Cloud के ऑपरेशन सुइट में टेलीमेट्री एक्सपोर्ट करना
इंस्टॉल करना
npm i --save @genkit-ai/firebase
ज़रूरी शर्तें
- Firebase के सभी प्रॉडक्ट के लिए, Firebase प्रोजेक्ट की ज़रूरत होती है. Firebase कंसोल का इस्तेमाल करके, नया प्रोजेक्ट बनाया जा सकता है या किसी मौजूदा Google Cloud प्रोजेक्ट में Firebase को चालू किया जा सकता है.
- इसके अलावा, अगर आपको Cloud Functions में फ़्लो डिप्लॉय करने हैं, तो आपको अपने प्रोजेक्ट को, Blaze के पेमेंट के हिसाब से प्लान पर अपग्रेड करना होगा.
- अगर आपको टेलीमेट्री एक्सपोर्ट करने वाला कोड स्थानीय तौर पर चलाना है, तो आपके पास 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 प्रोजेक्ट आईडी को इनमें से किसी भी तरीके से डाला जा सकता है:
firebase()
कॉन्फ़िगरेशन ऑब्जेक्ट मेंprojectId
सेट करें.GCLOUD_PROJECT
एनवायरमेंट वैरिएबल सेट करें. अगर Google Cloud एनवायरमेंट (Cloud Functions, Cloud Run वगैरह) से फ़्लो चलाया जा रहा है, तोGCLOUD_PROJECT
अपने-आप एनवायरमेंट के प्रोजेक्ट आईडी पर सेट हो जाता है.GCLOUD_PROJECT
सेट करने पर, कॉन्फ़िगरेशन पैरामीटर को छोड़ा जा सकता है:firebase()
क्रेडेंशियल
Firebase क्रेडेंशियल देने के लिए, आपको Google Cloud ऐप्लिकेशन के लिए डिफ़ॉल्ट क्रेडेंशियल भी सेट अप करने होंगे. अपने क्रेडेंशियल डालने के लिए:
अगर आपका फ़्लो, Google Cloud के किसी एनवायरमेंट (Cloud Functions, Cloud Run वगैरह) से चलाया जा रहा है, तो यह अपने-आप सेट हो जाता है.
अन्य एनवायरमेंट के लिए:
- अपने Firebase प्रोजेक्ट के लिए सेवा खाते के क्रेडेंशियल जनरेट करें और JSON कुंजी फ़ाइल डाउनलोड करें. ऐसा करने के लिए, Firebase कंसोल के सेवा खाता पेज पर जाएं.
- एनवायरमेंट वैरिएबल
GOOGLE_APPLICATION_CREDENTIALS
को उस JSON फ़ाइल के फ़ाइल पाथ पर सेट करें जिसमें आपके सेवा खाते की कुंजी शामिल है. इसके अलावा, एनवायरमेंट वैरिएबलGCLOUD_SERVICE_ACCOUNT_CREDS
को JSON फ़ाइल के कॉन्टेंट पर सेट किया जा सकता है.
टेलिमेट्री
यह प्लग इन, Google Cloud प्लग इन पर पूरी तरह से निर्भर है. इसलिए, इसमें Google के Cloud ऑपरेशंस सुइट में टेलीमेट्री एक्सपोर्ट की सुविधा चालू करने के प्रावधान हैं. टेलीमेट्री एक्सपोर्ट कॉल enableFirebaseTelemetry()
चालू करने के लिए:
import { enableFirebaseTelemetry } from '@genkit-ai/firebase';
enableFirebaseTelemetry();
कॉन्फ़िगरेशन के सभी विकल्पों और प्रोजेक्ट पर चालू किए जाने वाले ज़रूरी एपीआई के बारे में जानने के लिए, Google Cloud प्लग इन के दस्तावेज़ देखें.
इस्तेमाल
यह प्लग इन, Firebase की सेवाओं के साथ कई इंटिग्रेशन उपलब्ध कराता है. इनका इस्तेमाल एक साथ या अलग-अलग किया जा सकता है.
Cloud Firestore वेक्टर स्टोर
RAG को इंडेक्स करने और उसे वापस पाने के लिए, Cloud Firestore का इस्तेमाल वेक्टर स्टोर के तौर पर किया जा सकता है.
इस सेक्शन में, firebase
प्लग इन और Cloud Firestore की वेक्टर सर्च की सुविधा के बारे में खास जानकारी दी गई है.
Genkit का इस्तेमाल करके आरएजी लागू करने के बारे में ज़्यादा जानकारी के लिए, Retrieval-augmented generation पेज देखें.
GCLOUD_SERVICE_ACCOUNT_CREDS और Firestore का इस्तेमाल करना
अगर 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 रीट्रिवर तय करने के लिए एक सुविधाजनक फ़ंक्शन उपलब्ध कराता है, 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
: खोजने के लिए, डिफ़ॉल्ट कलेक्शन को बदलें. उदाहरण के लिए, सब-कलेक्शन खोजना.
इंडेक्स करना और एम्बेड करना
अपने 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;
}
Firestore, कलेक्शन पर तेज़ी से और बेहतर तरीके से क्वेरी करने के लिए इंडेक्स पर निर्भर करता है. ध्यान दें कि यहां "इंडेक्स" का मतलब डेटाबेस इंडेक्स से है, न कि Genkit के इंडेक्सर और रीट्रिवर एब्स्ट्रैक्शन से.
पिछले उदाहरण में, 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 में इंडेक्स करने वाले और जानकारी वापस लाने वाले टूल के बारे में सामान्य जानकारी पाने के लिए, जानकारी वापस लाने की सुविधा के साथ जनरेशन पेज देखें.
- वेक्टर खोज की सुविधा के बारे में ज़्यादा जानने के लिए, Cloud Firestore के दस्तावेज़ों में वेक्टर एम्बेड की मदद से खोजें देखें.
Cloud Functions
प्लग इन, onFlow()
कन्स्ट्रक्टर उपलब्ध कराता है. यह Firebase के लिए Cloud Functions के एचटीटीपीएस से ट्रिगर किए गए फ़ंक्शन के ज़रिए फ़्लो बनाता है. ये फ़ंक्शन, Firebase के कॉल किए जा सकने वाले फ़ंक्शन इंटरफ़ेस के मुताबिक होते हैं. साथ ही, इन्हें कॉल करने के लिए, Cloud Functions क्लाइंट 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
ऑब्जेक्ट, जिसका इस्तेमाल आपके Cloud फ़ंक्शन को कॉन्फ़िगर करने के लिए किया जाता है:export const exampleFlow = onFlow( ai, { name: "exampleFlow", httpsOptions: { cors: true, }, // ... }, async (prompt) => { // ... } );
enforceAppCheck
: जबtrue
, ऐप्लिकेशन की जांच के लिए टोकन मौजूद न होने या अमान्य होने पर, अनुरोध अस्वीकार करें.consumeAppCheckToken
: जबtrue
, तो पुष्टि करने के बाद, ऐप्लिकेशन की जांच करने वाले टोकन को अमान्य कर दें.रीप्ले प्रोटेक्शन देखें.
Firebase पुष्टिकरण
यह प्लग इन, 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
को अपने एकमात्र पैरामीटर के तौर पर लेता है. इस फ़ंक्शन में, उपयोगकर्ता टोकन की जांच करें और अगर उपयोगकर्ता आपके तय किए गए किसी भी मानदंड को पूरा नहीं करता है, तो गड़बड़ी का मैसेज दिखाएं.
इस विषय के बारे में ज़्यादा जानने के लिए, अनुमति और पूरी सुरक्षा लेख पढ़ें.