Cloud Run का इस्तेमाल करके फ़्लो डिप्लॉय करना

Cloud Run का इस्तेमाल करके, Genkit फ़्लो को एचटीटीपीएस एंडपॉइंट के तौर पर डिप्लॉय किया जा सकता है. Cloud Run में, डिप्लॉय करने के कई विकल्प होते हैं. इनमें कंटेनर पर आधारित डिप्लॉयमेंट भी शामिल है. इस पेज पर, सीधे कोड से अपने फ़्लो डिप्लॉय करने का तरीका बताया गया है.

शुरू करने से पहले

  • Google Cloud सीएलआई इंस्टॉल करें.
  • आपको Genkit के फ़्लो के कॉन्सेप्ट और उन्हें लिखने के तरीके के बारे में पता होना चाहिए. इस पेज पर यह माना गया है कि आपके पास पहले से ही ऐसे फ़्लो मौजूद हैं जिन्हें आपको डिप्लॉय करना है.
  • अगर आपने पहले से ही Google Cloud और Cloud Run का इस्तेमाल किया है, तो यह आपके लिए मददगार हो सकता है. हालांकि, ऐसा करना ज़रूरी नहीं है.

1. Google Cloud प्रोजेक्ट सेट अप करना

अगर आपने पहले से कोई Google Cloud प्रोजेक्ट सेट अप नहीं किया है, तो यह तरीका अपनाएं:

  1. Cloud Console का इस्तेमाल करके, Google Cloud का नया प्रोजेक्ट बनाएं या कोई मौजूदा प्रोजेक्ट चुनें.

  2. प्रोजेक्ट को किसी बिलिंग खाते से लिंक करें. यह Cloud Run के लिए ज़रूरी है.

  3. अपने प्रोजेक्ट का इस्तेमाल करने के लिए, Google Cloud CLI को कॉन्फ़िगर करें:

    gcloud init

2. अपने Node प्रोजेक्ट को डिप्लॉयमेंट के लिए तैयार करना

अपने फ़्लो को डिप्लॉय करने के लिए, आपको अपने प्रोजेक्ट कोड में कुछ छोटे बदलाव करने होंगे:

package.json में शुरू करने और बिल्ड करने की स्क्रिप्ट जोड़ना

Cloud Run में Node.js प्रोजेक्ट को डिप्लॉय करते समय, डिप्लॉयमेंट टूल आपके प्रोजेक्ट में start स्क्रिप्ट और build स्क्रिप्ट (ज़रूरी नहीं) होने की उम्मीद करते हैं. आम तौर पर, किसी TypeScript प्रोजेक्ट के लिए ये स्क्रिप्ट काफ़ी होती हैं:

"scripts": {
  "start": "node lib/index.js",
  "build": "tsc"
},

फ़्लो सर्वर को कॉन्फ़िगर और शुरू करने के लिए कोड जोड़ना

start स्क्रिप्ट से चलने वाली फ़ाइल में, startFlowServer को कॉल जोड़ें. इस तरीके से, Express सर्वर सेट अप हो जाएगा. यह सर्वर, आपके फ़्लो को वेब एंडपॉइंट के तौर पर दिखाएगा.

कॉल करते समय, वे फ़्लो चुनें जिन्हें आपको दिखाना है:

इसके अलावा:

import { startFlowServer } from '@genkit-ai/express';

startFlowServer({
  flows: [menuSuggestionFlow],
});

कुछ वैकल्पिक पैरामीटर भी हैं जिन्हें आपके पास तय करने का विकल्प होता है:

  • port: वह नेटवर्क पोर्ट जिस पर सुनना है. अगर कोई पोर्ट नहीं दिया गया है, तो सर्वर, PORT एनवायरमेंट वैरिएबल में बताए गए पोर्ट पर सुनता है. अगर PORT सेट नहीं है, तो डिफ़ॉल्ट रूप से 3400 पर सुनता है.
  • cors: फ़्लो सर्वर की CORS नीति. अगर आपको वेब ऐप्लिकेशन से इन एंडपॉइंट को ऐक्सेस करना है, तो आपको इसकी जानकारी देनी होगी.
  • pathPrefix: फ़्लो के एंडपॉइंट से पहले जोड़ने के लिए, पाथ प्रीफ़िक्स (पाथ के पहले जोड़ा जाने वाला शब्द). यह ज़रूरी नहीं है.
  • jsonParserOptions: Express के JSON बॉडी पार्सर को पास करने के विकल्प

ज़रूरी नहीं: अनुमति की नीति तय करना

डिप्लॉय किए गए सभी फ़्लो के लिए, किसी तरह की अनुमति लेना ज़रूरी है. ऐसा न करने पर, आपके जनरेटिव एआई फ़्लो को कोई भी इस्तेमाल कर सकता है.

Cloud Run की मदद से फ़्लो डिप्लॉय करते समय, अनुमति देने के लिए आपके पास दो विकल्प होते हैं:

  • Cloud IAM पर आधारित अनुमति: अपने एंडपॉइंट का ऐक्सेस कंट्रोल करने के लिए, Google Cloud के ऐक्सेस मैनेजमेंट की नेटिव सुविधाओं का इस्तेमाल करें. ये क्रेडेंशियल देने के बारे में जानकारी पाने के लिए, Cloud Run के दस्तावेज़ों में पुष्टि करना देखें.

  • कोड में तय की गई अनुमति की नीति: कस्टम कोड का इस्तेमाल करके अनुमति की जानकारी की पुष्टि करने के लिए, Genkit एक्सप्रेस प्लग इन की अनुमति की नीति की सुविधा का इस्तेमाल करें. आम तौर पर, यह टोकन पर आधारित अनुमति होती है, लेकिन ऐसा ज़रूरी नहीं है.

अगर आपको कोड में अनुमति की नीति तय करनी है, तो फ़्लो की परिभाषा में authPolicy पैरामीटर का इस्तेमाल करें:

// middleware for handling auth tokens in headers.
const authMiddleware = async (req, resp, next) => {
  // parse auth headers and convert to auth object.
  (req as RequestWithAuth).auth = {
    user: await verifyAuthToken(req.header('authorization')),
  };
  next();
};

app.post(
  '/simpleFlow',
  authMiddleware,
  expressHandler(simpleFlow, {
    authPolicy: ({ auth }) => {
      if (!auth.user) {
        throw new Error('not authorized');
      }
    },
  })
);

अनुमति की नीति का auth पैरामीटर, अनुरोध ऑब्जेक्ट की auth प्रॉपर्टी से मिलता है. आम तौर पर, इस प्रॉपर्टी को एक्सप्रेस मिडलवेयर का इस्तेमाल करके सेट किया जाता है. अनुमति और पूरी सुरक्षा देखें.

ज़्यादा जानकारी के लिए, एक्सप्रेस प्लग इन का दस्तावेज़ देखें.

डिप्लॉय किए गए फ़्लो के लिए एपीआई क्रेडेंशियल उपलब्ध कराना

डिप्लॉय होने के बाद, आपके फ़्लो को किसी भी ऐसी रिमोट सेवा के साथ पुष्टि करने का कोई तरीका चाहिए जिस पर वे निर्भर हैं. ज़्यादातर फ़्लो को, इस्तेमाल की जाने वाली मॉडल एपीआई सेवा को ऐक्सेस करने के लिए, कम से कम क्रेडेंशियल की ज़रूरत होगी.

इस उदाहरण के लिए, चुने गए मॉडल की सेवा देने वाली कंपनी के आधार पर, इनमें से कोई एक काम करें:

Gemini (Google का एआई)

  1. पक्का करें कि Google का एआई आपके इलाके में उपलब्ध हो.

  2. Google AI Studio का इस्तेमाल करके, Gemini API के लिए एपीआई पासकोड जनरेट करें.

  3. Cloud Run एनवायरमेंट में एपीआई पासकोड उपलब्ध कराएं:

    1. Cloud console में, Secret Manager API को चालू करें.
    2. Secret Manager पेज पर, अपनी एपीआई कुंजी वाला नया सीक्रेट बनाएं.
    3. सीक्रेट बनाने के बाद, उसी पेज पर अपने डिफ़ॉल्ट कंप्यूट सेवा खाते को Secret मैनेजर के तौर पर सीक्रेट ऐक्सेस करने की भूमिका के साथ, सीक्रेट का ऐक्सेस दें. (IAM पेज पर, डिफ़ॉल्ट कंप्यूट सेवा खाते का नाम देखा जा सकता है.)

    बाद के चरण में, अपनी सेवा को डिप्लॉय करते समय, आपको इस सीक्रेट का नाम बताना होगा.

Gemini (Vertex AI)

  1. Cloud Console में, अपने प्रोजेक्ट के लिए Vertex AI API चालू करें.

  2. IAM पेज पर, पक्का करें कि डिफ़ॉल्ट कंप्यूट सेवा खाते को Vertex AI उपयोगकर्ता की भूमिका दी गई हो.

इस ट्यूटोरियल के लिए, आपको सिर्फ़ मॉडल उपलब्ध कराने वाली कंपनी के लिए एक ही पासकोड सेट अप करना होगा. हालांकि, आम तौर पर आपको अपने फ़्लो में इस्तेमाल की जाने वाली हर सेवा के लिए ऐसा करना होगा.

3. Cloud Run में फ़्लो डिप्लॉय करना

अपने प्रोजेक्ट को डिप्लॉयमेंट के लिए तैयार करने के बाद, gcloud टूल का इस्तेमाल करके उसे डिप्लॉय किया जा सकता है.

Gemini (Google का एआई)

gcloud run deploy --update-secrets=GOOGLE_GENAI_API_KEY=<your-secret-name>:latest

Gemini (Vertex AI)

gcloud run deploy

डिप्लॉयमेंट टूल, आपसे वह जानकारी मांगेगा जो उसे ज़रूरी है.

जब आपसे पूछा जाए कि क्या आपको बिना पुष्टि वाले अनुरोधों की अनुमति देनी है, तो:

  • अगर IAM का इस्तेमाल नहीं किया जा रहा है और आपने कोड में अनुमति की नीति तय की है, तो Y चुनें.
  • अपनी सेवा को आईएएम क्रेडेंशियल की ज़रूरत के हिसाब से कॉन्फ़िगर करने के लिए, N का जवाब दें.

ज़रूरी नहीं: डिप्लॉय किए गए फ़्लो को आज़माना

डिप्लॉयमेंट पूरा होने के बाद, टूल सेवा का यूआरएल प्रिंट करेगा. curl की मदद से, इसकी जांच की जा सकती है:

curl -X POST https://<service-url>/menuSuggestionFlow \
  -H "Authorization: Bearer $(gcloud auth print-identity-token)" \
  -H "Content-Type: application/json" -d '{"data": "banana"}'