Firebase प्लग इन, Firebase की सेवाओं के साथ इंटिग्रेशन की सुविधा देता है. इससे, बेहतर और स्केलेबल एआई ऐप्लिकेशन बनाए जा सकते हैं. मुख्य सुविधाएं:
- Firestore वेक्टर स्टोर: वेक्टर एम्बेडमेंट की मदद से, इंडेक्स करने और डेटा वापस पाने के लिए Firestore का इस्तेमाल करें.
- Cloud Functions: एचटीटीपीएस से ट्रिगर होने वाले फ़ंक्शन के तौर पर फ़्लो डिप्लॉय करें.
- Firebase Authentication: अनुमति की नीतियां लागू करें.
- टेलीमेट्री: Google Cloud के ऑपरेशंस सुइट में टेलीमेट्री एक्सपोर्ट करें और Firebase कंसोल में खास व्यू देखें
इंस्टॉल करना
npm की मदद से Firebase प्लग इन इंस्टॉल करें:
npm install @genkit-ai/firebase
ज़रूरी शर्तें
Firebase प्रोजेक्ट सेट अप करना
- Firebase के सभी प्रॉडक्ट के लिए, Firebase प्रोजेक्ट की ज़रूरत होती है. Firebase कंसोल का इस्तेमाल करके, नया प्रोजेक्ट बनाया जा सकता है या किसी मौजूदा Google Cloud प्रोजेक्ट में Firebase को चालू किया जा सकता है.
- अगर आपको Cloud Functions की मदद से फ़्लो डिप्लॉय करने हैं, तो अपने Firebase प्रोजेक्ट को ब्लेज़ प्लान पर अपग्रेड करें.
- अगर आपको टेलीमेट्री एक्सपोर्ट करने वाला कोड स्थानीय तौर पर चलाना है, तो आपके पास Google Cloud CLI टूल इंस्टॉल होना चाहिए.
Firebase Admin SDK टूल को शुरू करना
आपको अपने ऐप्लिकेशन में Firebase Admin SDK टूल को शुरू करना होगा. यह प्लग इन अपने-आप नहीं करता.
import { initializeApp } from 'firebase-admin/app';
initializeApp({
projectId: 'your-project-id',
});
प्लग इन के लिए, आपको अपना Firebase प्रोजेक्ट आईडी देना होगा. Firebase प्रोजेक्ट आईडी बताने के लिए, इनमें से कोई एक तरीका अपनाएं:
ऊपर दिए गए स्निपेट में दिखाए गए तरीके से,
initializeApp()
कॉन्फ़िगरेशन ऑब्जेक्ट मेंprojectId
सेट करें.GCLOUD_PROJECT
एनवायरमेंट वैरिएबल सेट करें. अगर आपका फ़्लो, Google Cloud के किसी एनवायरमेंट (Cloud Functions, Cloud Run वगैरह) से चल रहा है, तोGCLOUD_PROJECT
अपने-आप एनवायरमेंट के प्रोजेक्ट आईडी पर सेट हो जाता है.GCLOUD_PROJECT
सेट करने पर,initializeApp()
में कॉन्फ़िगरेशन पैरामीटर को छोड़ा जा सकता है.
क्रेडेंशियल
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 प्लग इन के दस्तावेज़ देखें.
Cloud Firestore में वेक्टर सर्च
RAG को इंडेक्स करने और उसे वापस पाने के लिए, Cloud Firestore का इस्तेमाल वेक्टर स्टोर के तौर पर किया जा सकता है.
इस सेक्शन में, firebase
प्लग इन और Cloud Firestore की वेक्टर सर्च की सुविधा के बारे में खास जानकारी दी गई है. Genkit का इस्तेमाल करके आरएजी लागू करने के बारे में ज़्यादा जानकारी के लिए, बेहतर तरीके से जानकारी हासिल करने के लिए जनरेटिव एआई पेज देखें.
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);
}
Firestore रीट्रिवर तय करना
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'
});
दस्तावेज़ वापस पाना
तय किए गए retriever का इस्तेमाल करके दस्तावेज़ों को वापस पाने के लिए, retriever इंस्टेंस और क्वेरी के विकल्पों को 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
: (number)
जितने दस्तावेज़ों को वापस लाना है उनकी संख्या बताएं. डिफ़ॉल्ट रूप से10
होता है.where
: (Record<string, any>)
Firestore फ़ील्ड के आधार पर अन्य फ़िल्टर जोड़ें. उदाहरण:where: { category: 'news', status: 'published' }
collection
: (स्ट्रिंग)
रिट्रिवर कॉन्फ़िगरेशन में बताए गए डिफ़ॉल्ट कलेक्शन को बदलें. यह सब-कलेक्शन के बारे में क्वेरी करने या कलेक्शन के बीच डाइनैमिक तौर पर स्विच करने के लिए काम आता है.
एम्बेड की मदद से Firestore को पॉप्युलेट करना
अपने Firestore कलेक्शन को पॉप्युलेट करने के लिए, Admin 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
: आपके Cloud फ़ंक्शन को कॉन्फ़िगर करने के लिए इस्तेमाल किया जाने वालाHttpsOptions
ऑब्जेक्ट: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
को अपने एकमात्र पैरामीटर के तौर पर लेगा. इस फ़ंक्शन में, उपयोगकर्ता टोकन की जांच करें और अगर उपयोगकर्ता आपके तय किए गए किसी भी मानदंड को पूरा नहीं करता है, तो गड़बड़ी का मैसेज दिखाएं.
इस विषय के बारे में ज़्यादा जानने के लिए, अनुमति और पूरी सुरक्षा लेख पढ़ें.