আপনার অ্যাপ থেকে জেনকিট ফ্লোকে আহ্বান করুন

Firebase-এর জন্য Cloud Functions-এ একটি onCallGenkit পদ্ধতি রয়েছে যা আপনাকে Genkit অ্যাকশন (একটি Flow) ব্যবহার করে একটি কলযোগ্য ফাংশন তৈরি করতে দেয়। এই ফাংশনগুলি genkit/beta/client অথবা Cloud Functions ক্লায়েন্ট SDK-এর মাধ্যমে কল করা যেতে পারে, যা স্বয়ংক্রিয়ভাবে প্রমাণীকরণ তথ্য যোগ করে।

শুরু করার আগে

  • আপনার জেনকিটের প্রবাহের ধারণা এবং সেগুলি কীভাবে লিখতে হয় তার সাথে পরিচিত হওয়া উচিত। এই পৃষ্ঠার নির্দেশাবলী ধরে নিচ্ছে যে আপনি ইতিমধ্যেই কিছু প্রবাহ সংজ্ঞায়িত করেছেন যা আপনি স্থাপন করতে চান।
  • আপনি যদি আগে Firebase-এর জন্য Cloud Functions ব্যবহার করে থাকেন, তাহলে এটি সহায়ক, কিন্তু প্রয়োজন নয়।

একটি Firebase প্রকল্প সেট আপ করুন

  1. Firebase কনসোল ব্যবহার করে একটি নতুন Firebase প্রকল্প তৈরি করুন, অথবা বিদ্যমান একটি নির্বাচন করুন।

  2. প্রকল্পটিকে ব্লেজ প্ল্যানে আপগ্রেড করুন, যা ক্লাউড ফাংশন উৎপাদন স্থাপনের জন্য প্রয়োজনীয়।

  3. ফায়ারবেস সিএলআই ইনস্টল করুন।

  4. Firebase CLI দিয়ে লগ ইন করুন:

    firebase login
    firebase login --reauth # alternative, if necessary
    firebase login --no-localhost # if running in a remote shell
  5. একটি নতুন প্রকল্প ডিরেক্টরি তৈরি করুন:

    export PROJECT_ROOT=~/tmp/genkit-firebase-project1
    mkdir -p $PROJECT_ROOT
  6. ডিরেক্টরিতে একটি Firebase প্রকল্প শুরু করুন:

    cd $PROJECT_ROOT
    firebase init functions

এই পৃষ্ঠার বাকি অংশ ধরে নেওয়া হয়েছে যে আপনি জাভাস্ক্রিপ্টে আপনার ফাংশন লেখার সিদ্ধান্ত নিয়েছেন।

onCallGenkit এ ফ্লোটি মোড়ানো

ক্লাউড ফাংশন দিয়ে একটি ফায়ারবেস প্রকল্প সেট আপ করার পরে, আপনি প্রকল্পের 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 এ উপলব্ধ। এই সহায়ক পদ্ধতিতে কলযোগ্য ফাংশনের সমস্ত বৈশিষ্ট্য রয়েছে এবং এটি স্বয়ংক্রিয়ভাবে স্ট্রিমিং এবং JSON প্রতিক্রিয়া উভয়কেই সমর্থন করে।

const {onCallGenkit} = require("firebase-functions/https");
exports.tellJoke = onCallGenkit({
  // Bind the Gemini API key secret parameter to the function.
  secrets: [apiKey],
},
// Pass in the genkit flow.
jokeTeller,
);

ডিপ্লয় করা ফ্লোতে API শংসাপত্রগুলি উপলব্ধ করুন

একবার স্থাপন করা হলে, আপনার প্রবাহগুলির উপর নির্ভরশীল যেকোনো দূরবর্তী পরিষেবার সাথে প্রমাণীকরণের একটি উপায় প্রয়োজন। কমপক্ষে, বেশিরভাগ প্রবাহের তাদের ব্যবহৃত মডেল API পরিষেবা অ্যাক্সেস করার জন্য শংসাপত্রের প্রয়োজন হয়।

এই উদাহরণের জন্য, আপনার বেছে নেওয়া মডেল প্রদানকারীর উপর নির্ভর করে নিম্নলিখিতগুলির মধ্যে একটি করুন:

জেমিনি (গুগল এআই)

  1. আপনার অঞ্চলে Google AI উপলব্ধ আছে কিনা তা নিশ্চিত করুন।

  2. গুগল এআই স্টুডিও ব্যবহার করে জেমিনি এপিআই-এর জন্য একটি এপিআই কী তৈরি করুন

  3. ক্লাউড সিক্রেট ম্যানেজারে আপনার API কী সংরক্ষণ করুন:

    firebase functions:secrets:set GOOGLE_GENAI_API_KEY

    আপনার API কী দুর্ঘটনাক্রমে ফাঁস হওয়া রোধ করার জন্য এই পদক্ষেপটি গুরুত্বপূর্ণ, যা সম্ভাব্য মিটারযুক্ত পরিষেবায় অ্যাক্সেস প্রদান করে।

    গোপনীয়তা পরিচালনা সম্পর্কে আরও তথ্যের জন্য সংবেদনশীল কনফিগারেশন তথ্য সংরক্ষণ এবং অ্যাক্সেস দেখুন।

  4. 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],

এখন, যখন আপনি এই ফাংশনটি স্থাপন করবেন, তখন আপনার API কী ক্লাউড সিক্রেট ম্যানেজারে সংরক্ষণ করা হবে এবং ক্লাউড ফাংশন পরিবেশ থেকে পাওয়া যাবে।

জেমিনি (ভার্টেক্স এআই)

  1. ক্লাউড কনসোলে, আপনার ফায়ারবেস প্রকল্পের জন্য ভার্টেক্স এআই এপিআই সক্ষম করুন

  2. IAM পৃষ্ঠায়, নিশ্চিত করুন যে ডিফল্ট কম্পিউট সার্ভিস অ্যাকাউন্টটি Vertex AI ব্যবহারকারীর ভূমিকায় অনুমোদিত।

এই টিউটোরিয়ালের জন্য আপনাকে কেবলমাত্র মডেল প্রদানকারীর জন্য গোপনীয়তা সেট আপ করতে হবে, তবে সাধারণভাবে, আপনার প্রবাহ যে প্রতিটি পরিষেবা ব্যবহার করে তার জন্য আপনাকে অবশ্যই একই রকম কিছু করতে হবে।

(ঐচ্ছিক) অ্যাপ চেক এনফোর্সমেন্ট যোগ করুন

Firebase অ্যাপ চেক আপনার API শুধুমাত্র আপনার অ্যাপ্লিকেশন দ্বারা কল করা হচ্ছে তা যাচাই করার জন্য নেটিভ অ্যাটেস্টেশন ব্যবহার করে। 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 (ক্রস-অরিজিন রিসোর্স শেয়ারিং) কনফিগার করুন

কোন অরিজিন আপনার ফাংশন অ্যাক্সেস করতে পারে তা নিয়ন্ত্রণ করতে cors বিকল্পটি ব্যবহার করুন।

ডিফল্টরূপে, কলযোগ্য ফাংশনগুলিতে CORS কনফিগার করা থাকে যা সমস্ত অরিজিন থেকে অনুরোধগুলিকে অনুমতি দেয়। কিছু ক্রস-অরিজিন অনুরোধকে অনুমতি দেওয়ার জন্য, কিন্তু সমস্ত নয়, নির্দিষ্ট ডোমেন বা নিয়মিত এক্সপ্রেশনের একটি তালিকা পাস করুন যা অনুমোদিত হওয়া উচিত। উদাহরণস্বরূপ:

export const tellJoke = onCallGenkit({
  cors: 'mydomain.com',
}, jokeTeller);

সম্পূর্ণ উদাহরণ

উপরে বর্ণিত সমস্ত পরিবর্তন করার পরে, আপনার স্থাপনযোগ্য প্রবাহটি নিম্নলিখিত উদাহরণের মতো দেখাবে:

const {onCallGenkit} = require("firebase-functions/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