Firebase के लिए Cloud Functions में एक onCallGenkit
तरीका है. इसकी मदद से, Genkit ऐक्शन (फ़्लो) के साथ कॉल किया जा सकने वाला फ़ंक्शन बनाया जा सकता है. इन फ़ंक्शन को genkit/beta/client
या Cloud Functions क्लाइंट SDK टूल के साथ कॉल किया जा सकता है. ये SDK टूल, पुष्टि करने से जुड़ी जानकारी अपने-आप जोड़ देते हैं.
शुरू करने से पहले
- आपको Genkit के फ़्लो के कॉन्सेप्ट और उन्हें लिखने के तरीके के बारे में पता होना चाहिए. इस पेज पर दिए गए निर्देशों के मुताबिक, आपने पहले से ही कुछ ऐसे फ़्लो तय कर लिए हैं जिन्हें आपको डिप्लॉय करना है.
- अगर आपने पहले कभी Firebase के लिए Cloud Functions का इस्तेमाल किया है, तो यह मददगार हो सकता है. हालांकि, ऐसा करना ज़रूरी नहीं है.
Firebase प्रोजेक्ट सेट अप करना
Firebase कंसोल का इस्तेमाल करके नया Firebase प्रोजेक्ट बनाएं या कोई मौजूदा प्रोजेक्ट चुनें.
प्रोजेक्ट को ब्लेज़ प्लान पर अपग्रेड करें. यह प्लान, Cloud Functions को प्रोडक्शन में डिप्लॉय करने के लिए ज़रूरी है.
Firebase CLI इंस्टॉल करें.
Firebase CLI से लॉग इन करें:
firebase login
firebase login --reauth # alternative, if necessary
firebase login --no-localhost # if running in a remote shell
नई प्रोजेक्ट डायरेक्ट्री बनाएं:
export PROJECT_ROOT=~/tmp/genkit-firebase-project1
mkdir -p $PROJECT_ROOT
डायरेक्ट्री में Firebase प्रोजेक्ट शुरू करने के लिए:
cd $PROJECT_ROOT
firebase init functions
इस पेज के बाकी हिस्से में यह माना गया है कि आपने JavaScript में अपने फ़ंक्शन लिखने का विकल्प चुना है.
फ़्लो को onCallGenkit
में रैप करें
Cloud Functions की मदद से Firebase प्रोजेक्ट सेट अप करने के बाद, प्रोजेक्ट की functions
डायरेक्ट्री में फ़्लो डेफ़िनिशन को कॉपी या लिखा जा सकता है. इस बारे में बताने के लिए, यहां एक उदाहरण दिया गया है:
const ai = genkit({
plugins: [googleAI()],
model: gemini15Flash,
});
const jokeTeller = ai.defineFlow({
name: "jokeTeller",
inputSchema: z.string().nullable(),
outputSchema: z.string(),
streamSchema: z.string(),
}, async (jokeType = "knock-knock", {sendChunk}) => {
const prompt = `Tell me a ${jokeType} joke.`;
// Call the `generateStream()` method to
// receive the `stream` async iterable.
const {stream, response: aiResponse} = ai.generateStream(prompt);
// Send new words of the generative AI response
// to the client as they are generated.
for await (const chunk of stream) {
sendChunk(chunk.text);
}
// Return the full generative AI response
// to clients that may not support streaming.
return (await aiResponse).text;
},
);
इस तरह के फ़्लो को डिप्लॉय करने के लिए, इसे onCallGenkit
के साथ रैप करें. यह firebase-functions/https
में उपलब्ध है. इस हेल्पर तरीके में, callable
functions की सभी सुविधाएं होती हैं. साथ ही, यह अपने-आप स्ट्रीमिंग और JSON रिस्पॉन्स, दोनों के साथ काम करता है.
const {onCallGenkit} = require("firebase-functions/v2/https");
exports.tellJoke = onCallGenkit({
// Bind the Gemini API key secret parameter to the function.
secrets: [apiKey],
},
// Pass in the genkit flow.
jokeTeller,
);
डिप्लॉय किए गए फ़्लो के लिए एपीआई क्रेडेंशियल उपलब्ध कराना
डिप्लॉय होने के बाद, आपके फ़्लो को उन सभी रिमोट सेवाओं के साथ पुष्टि करने का तरीका चाहिए जिन पर वे निर्भर हैं. ज़्यादातर फ़्लो को, इस्तेमाल की जाने वाली मॉडल एपीआई सेवा को ऐक्सेस करने के लिए, कम से कम क्रेडेंशियल की ज़रूरत होती है.
इस उदाहरण के लिए, चुने गए मॉडल की सेवा देने वाली कंपनी के आधार पर, इनमें से कोई एक काम करें:
Gemini (Google का एआई)
पक्का करें कि Google का एआई आपके इलाके में उपलब्ध हो.
Google AI Studio का इस्तेमाल करके, Gemini API के लिए एपीआई पासकोड जनरेट करें.
Cloud Secret Manager में अपनी एपीआई पासकोड सेव करने के लिए:
firebase functions:secrets:set GOOGLE_GENAI_API_KEY
यह चरण ज़रूरी है, ताकि आपकी एपीआई पासकोड को गलती से लीक होने से रोका जा सके. यह पासकोड, मेज़र की जाने वाली सेवा का ऐक्सेस देता है.
गोपनीय जानकारी मैनेज करने के बारे में ज़्यादा जानने के लिए, संवेदनशील कॉन्फ़िगरेशन जानकारी को सेव और ऐक्सेस करना देखें.
src/index.js
में बदलाव करें और मौजूदा इंपोर्ट के बाद, ये जोड़ें:const {defineSecret} = require("firebase-functions/params"); // Store the Gemini API key in Cloud Secret Manager. const apiKey = defineSecret("GOOGLE_GENAI_API_KEY");
इसके बाद, कॉल किए जा सकने वाले फ़ंक्शन की परिभाषा में, यह बताएं कि फ़ंक्शन को इस गुप्त वैल्यू का ऐक्सेस चाहिए:
// Bind the Gemini API key secret parameter to the function. secrets: [apiKey],
अब, इस फ़ंक्शन को डिप्लॉय करने पर, आपकी एपीआई कुंजी Cloud Secret Manager में सेव हो जाएगी. साथ ही, यह Cloud Functions के एनवायरमेंट में उपलब्ध होगी.
Gemini (Vertex AI)
Cloud कंसोल में, अपने Firebase प्रोजेक्ट के लिए Vertex AI API को चालू करें.
IAM पेज पर, पक्का करें कि डिफ़ॉल्ट कंप्यूट सेवा खाते को Vertex AI उपयोगकर्ता की भूमिका दी गई हो.
इस ट्यूटोरियल के लिए, आपको सिर्फ़ मॉडल उपलब्ध कराने वाली कंपनी के लिए एक ही पासकोड सेट अप करना होगा. हालांकि, आम तौर पर आपको अपने फ़्लो में इस्तेमाल की जाने वाली हर सेवा के लिए ऐसा करना होगा.
(ज़रूरी नहीं) ऐप्लिकेशन की जांच करने की सुविधा जोड़ना
Firebase App Check, नेटिव पुष्टि का इस्तेमाल करके यह पुष्टि करता है कि आपके एपीआई को सिर्फ़ आपके ऐप्लिकेशन से कॉल किया जा रहा है.
onCallGenkit
, ऐप्लिकेशन की जांच करने की नीति को लागू करने के लिए, एलान करने की सुविधा के साथ काम करता है.
export const generatePoem = onCallGenkit({
enforceAppCheck: true,
// Optional. Makes App Check tokens only usable once. This adds extra security
// at the expense of slowing down your app to generate a token for every API
// call
consumeAppCheckToken: true,
}, generatePoemFlow);
सीओआरएस (क्रॉस-ऑरिजिन रिसॉर्स शेयरिंग) कॉन्फ़िगर करना
cors
विकल्प का इस्तेमाल करके, यह कंट्रोल करें कि आपके फ़ंक्शन को कौनसे ऑरिजिन ऐक्सेस कर सकते हैं.
डिफ़ॉल्ट रूप से, कॉल किए जा सकने वाले फ़ंक्शन में सीओआरएस कॉन्फ़िगर किया जाता है, ताकि सभी ऑरिजिन से अनुरोध किए जा सकें. कुछ क्रॉस-ऑरिजिन अनुरोधों को अनुमति देने के लिए, उन खास डोमेन या रेगुलर एक्सप्रेशन की सूची पास करें जिन्हें अनुमति दी जानी चाहिए. उदाहरण के लिए:
export const tellJoke = onCallGenkit({
cors: 'mydomain.com',
}, jokeTeller);
पूरा उदाहरण
ऊपर बताए गए सभी बदलाव करने के बाद, डिप्लॉय किया जा सकने वाला फ़्लो कुछ इस तरह दिखेगा:
const {onCallGenkit} = require("firebase-functions/v2/https");
const {defineSecret} = require("firebase-functions/params");
// Dependencies for Genkit.
const {gemini15Flash, googleAI} = require("@genkit-ai/googleai");
const {genkit, z} = require("genkit");
// Store the Gemini API key in Cloud Secret Manager.
const apiKey = defineSecret("GOOGLE_GENAI_API_KEY");
const ai = genkit({
plugins: [googleAI()],
model: gemini15Flash,
});
const jokeTeller = ai.defineFlow({
name: "jokeTeller",
inputSchema: z.string().nullable(),
outputSchema: z.string(),
streamSchema: z.string(),
}, async (jokeType = "knock-knock", {sendChunk}) => {
const prompt = `Tell me a ${jokeType} joke.`;
// Call the `generateStream()` method to
// receive the `stream` async iterable.
const {stream, response: aiResponse} = ai.generateStream(prompt);
// Send new words of the generative AI response
// to the client as they are generated.
for await (const chunk of stream) {
sendChunk(chunk.text);
}
// Return the full generative AI response
// to clients that may not support streaming.
return (await aiResponse).text;
},
);
exports.tellJoke = onCallGenkit({
// Bind the Gemini API key secret parameter to the function.
secrets: [apiKey],
},
// Pass in the genkit flow.
jokeTeller,
);
Firebase में फ़्लो डिप्लॉय करना
onCallGenkit
का इस्तेमाल करके फ़्लो तय करने के बाद, उन्हें उसी तरह डिप्लॉय किया जा सकता है जिस तरह अन्य फ़ंक्शन डिप्लॉय किए जाते हैं:
cd $PROJECT_ROOT
firebase deploy --only functions