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

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

আপনি শুরু করার আগে

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

একটি ফায়ারবেস প্রকল্প সেট আপ করুন

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

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

  3. Firebase CLI ইনস্টল করুন।

  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. ডিরেক্টরিতে একটি ফায়ারবেস প্রকল্প শুরু করুন:

    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/v2/https");
exports.tellJoke = onCallGenkit({
  // Bind the Gemini API key secret parameter to the function.
  secrets: [apiKey],
},
// Pass in the genkit flow.
jokeTeller,
);

এপিআই শংসাপত্রগুলি স্থাপন করা প্রবাহের জন্য উপলব্ধ করুন৷

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

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

মিথুন (Google AI)

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

  2. Google AI স্টুডিও ব্যবহার করে Gemini API-এর জন্য একটি API কী তৈরি করুন

  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 কী ক্লাউড সিক্রেট ম্যানেজারে সংরক্ষণ করা হবে এবং ক্লাউড ফাংশন পরিবেশ থেকে উপলব্ধ হবে৷

মিথুন (Vertex AI)

  1. ক্লাউড কনসোলে, আপনার Firebase প্রকল্পের জন্য Vertex AI API সক্ষম করুন

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

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

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

আপনার API শুধুমাত্র আপনার অ্যাপ্লিকেশন দ্বারা কল করা হচ্ছে তা যাচাই করতে Firebase অ্যাপ চেক নেটিভ প্রত্যয়ন ব্যবহার করে। 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/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,
);

ফায়ারবেসে প্রবাহ স্থাপন করুন

আপনি onCallGenkit ব্যবহার করে প্রবাহ সংজ্ঞায়িত করার পরে, আপনি অন্যান্য ফাংশন স্থাপন করার মতো করে সেগুলি স্থাপন করতে পারেন:

cd $PROJECT_ROOT
firebase deploy --only functions