GenAI এবং ক্লাউড রানের সাথে একটি কুইজ জেনারেটর তৈরি করুন

১. ভূমিকা

এই ল্যাবে, আপনি সাধারণ জ্ঞানের কুইজ তৈরি করার জন্য একটি ওয়েব সার্ভিস তৈরি করবেন এবং এটিকে একটি মজাদার ও কার্যকরী অ্যাপে যুক্ত করবেন। আপনি এমন একটি প্রোগ্রামিং ভাষা ব্যবহার করবেন যা হয়তো আগে ব্যবহার করেননি: ইংরেজি!

আপনি যা করবেন...

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

আপনি যা শিখবেন...

  • লার্জ ল্যাঙ্গুয়েজ মডেল (LLM)-এর জন্য কীভাবে একটি টেমপ্লেটেড প্রম্পট তৈরি করবেন।
  • পাইথনে কীভাবে একটি সহজ ওয়েব সার্ভার অ্যাপ তৈরি করবেন।
  • আপনার ওয়েব অ্যাপে গুগলের এলএলএম-এর সাপোর্ট কীভাবে যুক্ত করবেন।
  • কীভাবে আপনার অ্যাপটি ক্লাউডে স্থাপন করবেন যাতে যে কেউ আপনার নতুন সৃষ্টিটি ব্যবহার করে দেখতে পারে।
  • আপনার কুইজ জেনারেটরকে একটি বৃহত্তর অ্যাপের সাথে কীভাবে একীভূত করবেন।

আপনার যা যা লাগবে...

  • ক্রোম ওয়েব ব্রাউজার
  • একটি গুগল অ্যাকাউন্ট
  • বিলিং সক্ষম একটি ক্লাউড প্রজেক্ট

এই ল্যাবটি নতুনদের সহ সকল স্তরের ডেভেলপারদের জন্য তৈরি করা হয়েছে। যদিও আপনি পাইথন ব্যবহার করবেন, কী ঘটছে তা বোঝার জন্য আপনার পাইথন প্রোগ্রামিং সম্পর্কে পরিচিতি থাকার প্রয়োজন নেই, কারণ আপনি যে কোডগুলো দেখবেন তার সবই আমরা ব্যাখ্যা করে দেব।

২. সেটআপ

a08aa5878e36b60c.png

এই ল্যাবটি শুরু করার জন্য আপনার যা যা করা প্রয়োজন, তার সবকিছু এই বিভাগে আলোচনা করা হয়েছে।

স্ব-গতিতে পরিবেশ সেটআপ

  1. Google Cloud Console- এ সাইন-ইন করুন এবং একটি নতুন প্রজেক্ট তৈরি করুন অথবা বিদ্যমান কোনো প্রজেক্ট পুনরায় ব্যবহার করুন। যদি আপনার আগে থেকে Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তবে আপনাকে অবশ্যই একটি তৈরি করতে হবে।

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • প্রজেক্টের নামটি হলো এই প্রজেক্টের অংশগ্রহণকারীদের প্রদর্শিত নাম। এটি একটি ক্যারেক্টার স্ট্রিং যা গুগল এপিআই ব্যবহার করে না। আপনি যেকোনো সময় এটি আপডেট করতে পারেন।
  • প্রজেক্ট আইডি সমস্ত গুগল ক্লাউড প্রজেক্ট জুড়ে অনন্য এবং অপরিবর্তনীয় (একবার সেট করার পর এটি পরিবর্তন করা যায় না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত এটি কী তা নিয়ে আপনার মাথা ঘামানোর দরকার নেই। বেশিরভাগ কোডল্যাবে, আপনাকে আপনার প্রজেক্ট আইডি উল্লেখ করতে হবে (যা সাধারণত PROJECT_ID হিসাবে চিহ্নিত করা হয়)। তৈরি করা আইডিটি আপনার পছন্দ না হলে, আপনি এলোমেলোভাবে আরেকটি তৈরি করতে পারেন। বিকল্পভাবে, আপনি আপনার নিজের আইডি দিয়ে চেষ্টা করে দেখতে পারেন যে সেটি উপলব্ধ আছে কিনা। এই ধাপের পরে এটি পরিবর্তন করা যাবে না এবং প্রজেক্টের পুরো সময়কাল জুড়ে এটি অপরিবর্তিত থাকবে।
  • আপনার অবগতির জন্য জানাচ্ছি যে, তৃতীয় একটি ভ্যালু রয়েছে, যা হলো প্রজেক্ট নম্বর , এবং কিছু এপিআই এটি ব্যবহার করে থাকে। ডকুমেন্টেশনে এই তিনটি ভ্যালু সম্পর্কে আরও বিস্তারিত জানুন।
  1. এরপর, ক্লাউড রিসোর্স/এপিআই ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং চালু করতে হবে। এই কোডল্যাবটি সম্পন্ন করতে খুব বেশি খরচ হবে না, এমনকি আদৌ কোনো খরচ নাও হতে পারে। এই টিউটোরিয়ালের পর বিলিং এড়াতে রিসোর্সগুলো বন্ধ করার জন্য, আপনি আপনার তৈরি করা রিসোর্সগুলো অথবা প্রজেক্টটি ডিলিট করে দিতে পারেন। নতুন গুগল ক্লাউড ব্যবহারকারীরা ৩০০ মার্কিন ডলারের ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য।

ক্লাউড শেল শুরু করুন

এই ল্যাবে আপনি একটি ক্লাউড শেল সেশনে কাজ করবেন, যা গুগলের ক্লাউডে চলমান একটি ভার্চুয়াল মেশিনে হোস্ট করা একটি কমান্ড ইন্টারপ্রেটার। আপনি চাইলে এই অংশটি আপনার নিজের কম্পিউটারেও চালাতে পারতেন, কিন্তু ক্লাউড শেল ব্যবহার করলে প্রত্যেকেই একটি সামঞ্জস্যপূর্ণ পরিবেশে পুনরায় করার মতো অভিজ্ঞতা লাভ করতে পারে। ল্যাবের পরে, আপনি আপনার নিজের কম্পিউটারে এই অংশটি আবার চেষ্টা করতে পারেন।

4a95152439f0159b.png

ক্লাউড শেল সক্রিয় করুন

  1. ক্লাউড কনসোল থেকে, Activate Cloud Shell-এ ক্লিক করুন। 853e55310c205094.png .

3c1dabeca90e44e5.png

আপনি যদি প্রথমবারের মতো ক্লাউড শেল চালু করেন, তাহলে এটি কী তা বর্ণনা করে একটি মধ্যবর্তী স্ক্রিন আপনার সামনে আসবে। যদি একটি মধ্যবর্তী স্ক্রিন আসে, তাহলে 'চালিয়ে যান' (Continue) এ ক্লিক করুন।

9c92662c6a846a5c.png

ক্লাউড শেল প্রস্তুত করতে এবং এর সাথে সংযোগ স্থাপন করতে মাত্র কয়েক মুহূর্ত সময় লাগা উচিত।

9f0e51b578fecce5.png

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

ক্লাউড শেলে সংযুক্ত হওয়ার পর, আপনি দেখতে পাবেন যে আপনাকে প্রমাণীকৃত করা হয়েছে এবং প্রজেক্টটি আপনার প্রজেক্ট আইডিতে সেট করা আছে।

  1. আপনি প্রমাণীকৃত কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud auth list

কমান্ড আউটপুট

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. gcloud কমান্ডটি আপনার প্রজেক্ট সম্পর্কে জানে কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud config list project

কমান্ড আউটপুট

[core]
project = <PROJECT_ID>

যদি তা না থাকে, তবে আপনি এই কমান্ডটি দিয়ে এটি সেট করতে পারেন:

gcloud config set project <PROJECT_ID>

কমান্ড আউটপুট

Updated property [core/project].

কিছু এপিআই সক্রিয় করুন

পরবর্তী ধাপগুলোতে আপনি দেখতে পাবেন এই পরিষেবাগুলো কোথায় (এবং কেন) প্রয়োজন, কিন্তু আপাতত, আপনার প্রোজেক্টকে ক্লাউড বিল্ড, আর্টিফ্যাক্ট রেজিস্ট্রি, ভার্টেক্স এআই, এবং ক্লাউড রান-এ অ্যাক্সেস দেওয়ার জন্য এই কমান্ডটি চালান:

gcloud services enable cloudbuild.googleapis.com        \
                       artifactregistry.googleapis.com  \
                       aiplatform.googleapis.com        \
                       run.googleapis.com          

এর ফলে নিম্নলিখিতের অনুরূপ একটি সফল বার্তা তৈরি হবে:

Operation "operations/acf.cc11852d-40af-47ad-9d59-477a12847c9e" finished successfully.

৩. প্রম্পটিং - স্বাভাবিক ভাষায় প্রোগ্রামিং

92f630373224ead8.png

আমরা একটি বৃহৎ ভাষা মডেলের (Large Language Model) জন্য কীভাবে প্রম্পট তৈরি করতে হয় তা শেখার মাধ্যমে শুরু করব। Google Cloud Console > Vertex AI > Vertex AI Studio (Language)-এ যান। আপনি এইরকম একটি পৃষ্ঠা দেখতে পাবেন:

bfe5706041ae6454.png

Generate Text নিচে, Text Prompt বোতামটিতে ক্লিক করুন। পরবর্তী ডায়ালগ বক্সে, এমন একটি প্রম্পট লিখুন যা আপনার মতে নিম্নলিখিত শর্তাবলী অনুসারে একটি ট্রিভিয়া কুইজ তৈরি করার জন্য কার্যকর হতে পারে:

  • বিষয়: বিশ্ব ইতিহাস
  • প্রশ্নের সংখ্যা: ৫
  • কঠিনতার স্তর: মধ্যম
  • ভাষা: ইংরেজি

আউটপুট দেখতে সাবমিট বাটনে ক্লিক করুন।

নিচের স্ক্রিনশটে যেমন দেখানো হয়েছে, ডানদিকের প্যানেলটি আপনাকে পছন্দের মডেলটি বেছে নিতে এবং কিছু সেটিংস সূক্ষ্মভাবে সমন্বয় করার সুযোগ দেয়:

8aa89a1970ea9335.png

নিম্নলিখিত সেটিংসগুলো উপলব্ধ আছে:

  • অঞ্চল হলো সেই স্থান যেখানে আপনার জেনারেশন অনুরোধটি চালানো উচিত।
  • মডেল নির্বাচন করে আপনি কোন বৃহৎ ল্যাঙ্গুয়েজ মডেলটি ব্যবহার করতে চান। এই কোডল্যাবের জন্য, 'gemini-1.0-pro-001' মডেলটিই ব্যবহার করুন।
  • তাপমাত্রা টোকেন নির্বাচনের ক্ষেত্রে এলোমেলোতার মাত্রা নিয়ন্ত্রণ করে। যেসব প্রম্পটে সত্য বা সঠিক উত্তর প্রত্যাশিত, সেগুলোর জন্য কম তাপমাত্রা ভালো, অন্যদিকে বেশি তাপমাত্রা আরও বৈচিত্র্যময় বা অপ্রত্যাশিত ফলাফলের দিকে নিয়ে যেতে পারে।
  • টোকেন সীমা একটি প্রম্পট থেকে আউটপুট হওয়া সর্বাধিক টেক্সটের পরিমাণ নির্ধারণ করে। একটি টোকেন প্রায় চারটি অক্ষরের সমান। এর ডিফল্ট মান হলো ১০২৪।
  • টপ-কে (Top-k) মডেলটি আউটপুটের জন্য কীভাবে টোকেন নির্বাচন করে তা পরিবর্তন করে। টপ-কে-এর মান ১ হলে তার মানে হলো, নির্বাচিত টোকেনটি মডেলের শব্দভান্ডারের সমস্ত টোকেনের মধ্যে সবচেয়ে সম্ভাব্য (একে গ্রিডি ডিকোডিংও বলা হয়), অন্যদিকে টপ-কে-এর মান ৩ হলে তার মানে হলো, পরবর্তী টোকেনটি সবচেয়ে সম্ভাব্য ৩টি টোকেনের মধ্য থেকে নির্বাচিত হবে (তাপমাত্রা ব্যবহার করে)। টপ-কে-এর ডিফল্ট মান হলো ৪০।
  • টপ-পি মডেলের আউটপুটের জন্য টোকেন নির্বাচনের পদ্ধতি পরিবর্তন করে। টোকেনগুলো সর্বাধিক সম্ভাবনা থেকে সর্বনিম্ন সম্ভাবনার ক্রমানুসারে নির্বাচিত হতে থাকে, যতক্ষণ না তাদের সম্ভাবনার যোগফল টপ-পি মানের সমান হয়।
  • সর্বোচ্চ প্রতিক্রিয়া হলো প্রতিটি প্রম্পটের জন্য তৈরি হওয়া মডেল প্রতিক্রিয়ার সর্বাধিক সংখ্যা।
  • স্টপ সিকোয়েন্স হলো অক্ষরের (স্পেস সহ) একটি ক্রম, যা মডেলের সংস্পর্শে এলে প্রতিক্রিয়া তৈরি করা থামিয়ে দেয়।
  • স্ট্রিমিং রেসপন্স নির্বাচন করে যে, প্রতিক্রিয়াগুলো তৈরি হওয়ার সাথে সাথে প্রিন্ট করা হবে, নাকি সংরক্ষণ করে সম্পূর্ণ হলে প্রদর্শন করা হবে।
  • সেফটি ফিল্টার থ্রেশহোল্ড নির্ধারণ করে যে, আপনার ক্ষতিকর প্রতিক্রিয়া দেখার সম্ভাবনা কতটা।

একবার আপনি উপরে উল্লিখিত প্রয়োজনীয়তা অনুসারে একটি যুক্তিসঙ্গত কুইজ তৈরি করতে সক্ষম এমন একটি প্রম্পট পেয়ে গেলে, আমরা কাস্টম কোড ব্যবহার করে এই কুইজটি পার্স করতে পারতাম, কিন্তু LLM যদি কুইজটিকে একটি স্ট্রাকচার্ড ফরম্যাটে তৈরি করে দিত যা আমরা সরাসরি আমাদের প্রোগ্রামে লোড করতে পারতাম, তাহলে কি আরও ভালো হতো না? এই ল্যাবে পরে আপনার জেনারেটরকে কল করার জন্য আমরা যে প্রোগ্রামটি ব্যবহার করব, সেটি আশা করে যে কুইজগুলো JSON ফরম্যাটে প্রকাশিত হবে, যা স্ট্রাকচার্ড ডেটা উপস্থাপনের জন্য একটি জনপ্রিয় আন্তঃভাষিক ফরম্যাট।

এই ল্যাবের কুইজগুলো অবজেক্টের একটি অ্যারে হিসেবে প্রকাশ করা হয়, যেখানে প্রতিটি অবজেক্টে একটি প্রশ্ন, সেই প্রশ্নের সম্ভাব্য উত্তরগুলোর একটি অ্যারে এবং একটি সঠিক উত্তর থাকে । এই ল্যাবের কুইজগুলোর JSON এনকোডিং নিচে দেওয়া হলো:

[
    {
        "question": "Who was the first person to walk on the moon?",
          "responses": [
              "Neil Armstrong",
              "Buzz Aldrin",
              "Michael Collins",
              "Yuri Gagarin"
           ],
           "correct": "Neil Armstrong"
    },
    {
        "question": "What was the name of the war that took place between the British and the French in North America from 1754 to 1763??",
          "responses": [
              "The French and Indian War",
              "The Seven Years' War",
              "The War of the Austrian Succession",
              "The Great War"
           ],
           "correct": "The French and Indian War"
    },

    ...
]

দেখুন তো, আপনি আপনার প্রম্পটটি পরিবর্তন করে কুইজটি প্রয়োজনীয় JSON ফরম্যাটে আউটপুট করতে পারেন কিনা।

  1. আপনি ঠিক কোন ফরম্যাটটি খুঁজছেন, তা কথায় উল্লেখ করুন (যেমন উপরের ইটালিক করা বাক্যটি)।
  2. আপনার নির্দেশনায় কাঙ্ক্ষিত JSON ফরম্যাটের একটি উদাহরণ অন্তর্ভুক্ত করুন।

একবার আপনার পছন্দসই স্পেসিফিকেশন অনুযায়ী কুইজ তৈরি করার জন্য প্রম্পট প্রস্তুত হয়ে গেলে, ভার্টেক্স এআই এলএলএম-এ প্রোগ্রাম্যাটিকভাবে আপনার প্রম্পট জমা দেওয়ার জন্য ব্যবহারযোগ্য পাইথন কোড দেখতে পৃষ্ঠার উপরের ডানদিকের কোণায় থাকা GET CODE বোতামে ক্লিক করুন। আপনি যদি পাইথন ছাড়া অন্য কোনো প্রোগ্রামিং ভাষা ব্যবহার করতে আগ্রহী হন, তাহলে https://cloud.google.com/vertex-ai/docs/samples?text=generative এই লিঙ্কটি দেখুন।

৪. একটি সাধারণ ওয়েব সার্ভার তৈরি করুন

c73008bb8a72b57b.png

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

আপনার ক্লাউড শেল প্যানেলের উপরের দিকে থাকা Open Editor বোতামটিতে ক্লিক করে শুরু করুন। এটি দেখতে এইরকম:

e2a06b5304079efc.png

এরপর আপনি ভিজ্যুয়াল স্টুডিও কোডের মতো একটি IDE পরিবেশে প্রবেশ করবেন, যেখানে আপনি প্রজেক্ট তৈরি করতে, সোর্স কোড সম্পাদনা করতে, আপনার প্রোগ্রাম চালাতে ইত্যাদি পারবেন।

যদি আপনার স্ক্রিনটি খুব বেশি ছোট মনে হয়, তাহলে কনসোল এবং আপনার এডিট/টার্মিনাল উইন্ডোর মাঝের বিভাজন রেখাটি প্রসারিত বা সংকুচিত করতে, এখানে হাইলাইট করা ওই দুটি অঞ্চলের মাঝের হরাইজন্টাল বারটি টেনে ধরুন:

8dea35450851af53.png

আপনি যথাক্রমে Open Editor এবং Open Terminal বোতামে ক্লিক করে এডিটর এবং টার্মিনালের মধ্যে আসা-যাওয়া করতে পারেন। এখন এই দুটি পরিবেশের মধ্যে আসা-যাওয়া করে দেখুন।

এরপরে, অ্যাড ফোল্ডার বাটনে ক্লিক করে এই ল্যাবের কাজ সংরক্ষণের জন্য একটি ফোল্ডার তৈরি করুন। 5f4e64909bc15e30.png quiz-generator লিখে এন্টার চাপুন। এই ল্যাবে আপনি যে ফাইলগুলো তৈরি করবেন এবং ক্লাউড শেলে যে কাজগুলো করবেন, তার সবই এই ফোল্ডারে সম্পন্ন হবে।

এখন একটি requirements.txt ফাইল তৈরি করুন। এটি পাইথনকে বলে দেয় যে আপনার অ্যাপটি কোন কোন লাইব্রেরির উপর নির্ভরশীল। এই সাধারণ ওয়েব অ্যাপটির জন্য, আপনি Flask, google-cloud-aiplatform ক্লায়েন্ট লাইব্রেরি এবং gunicorn নামক একটি ওয়েব সার্ভার ফ্রেমওয়ার্ক ব্যবহার করবেন। ফাইল নেভিগেশন প্যানে, quiz-generator ফোল্ডারটির উপর রাইট-ক্লিক করুন এবং New file মেনু আইটেমটি নির্বাচন করুন, ঠিক এইভাবে:

613eb3de4b9b750a.png

নতুন ফাইলের নাম জানতে চাওয়া হলে requirements.txt লিখে এন্টার কী চাপুন। নিশ্চিত করুন যেন নতুন ফাইলটি quiz-generator প্রোজেক্ট ফোল্ডারে থাকে।

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

flask==3.0.0
gunicorn==21.2.0
google-cloud-aiplatform==1.47.0

আপনাকে এই ফাইলটি আলাদাভাবে সংরক্ষণ করার প্রয়োজন নেই, কারণ ক্লাউড এডিটর আপনার জন্য পরিবর্তনগুলো স্বয়ংক্রিয়ভাবে সংরক্ষণ করে নেবে।

একই পদ্ধতি ব্যবহার করে main.py নামে আরেকটি নতুন ফাইল তৈরি করুন। এটি হবে আপনার অ্যাপের প্রধান (এবং একমাত্র) পাইথন সোর্স ফাইল। আবারও, নিশ্চিত করুন যে নতুন ফাইলটি quiz-generator ফোল্ডারে থাকে।

এই ফাইলে নিম্নলিখিত কোডটি সন্নিবেশ করুন:

from flask import Flask
import os

app = Flask(__name__)  # Create a Flask object.
PORT = os.environ.get("PORT")  # Get PORT setting from environment.
if not PORT:
    PORT = 8080

# The app.route decorator routes any GET requests sent to the root path
# to this function, which responds with a "Hello world!" HTML document.
@app.route("/", methods=["GET"])
def say_hello():
    html = "<h1>Hello world!</h1>"
    return html

# This code ensures that your Flask app is started and listens for
# incoming connections on the local interface and port 8080.
if __name__ == "__main__":
    app.run(host="0.0.0.0", port=PORT)

টার্মিনালে ফিরে যান এবং এই কমান্ডটি দিয়ে প্রজেক্ট ফোল্ডারে প্রবেশ করুন:

cd quiz-generator

আপনার প্রোজেক্টের ডিপেন্ডেন্সিগুলো ইনস্টল করতে নিম্নলিখিত কমান্ডটি চালান:

pip3 install -r requirements.txt

ডিপেন্ডেন্সিগুলো ইনস্টল করার পর আপনি এইরকম একটি আউটপুট দেখতে পাবেন:

Successfully installed flask-3.0.0

এখন টার্মিনালে এই কমান্ডটি চালিয়ে আপনার অ্যাপটি চালু করুন:

flask --app main.py --debug run --port 8080

এই মুহূর্তে, আপনার অ্যাপটি আপনার ক্লাউড শেল সেশনের জন্য নির্ধারিত ভার্চুয়াল মেশিনে চলছে। ক্লাউড শেলে একটি প্রক্সি ব্যবস্থা রয়েছে, যার মাধ্যমে আপনি বিশ্বের যেকোনো ইন্টারনেট থেকে আপনার ভার্চুয়াল মেশিনে চলমান ওয়েব সার্ভারগুলো (যেমনটি আপনি এইমাত্র চালু করেছেন) অ্যাক্সেস করতে পারেন।

এইভাবে web preview বোতামে ক্লিক করুন এবং তারপরে Preview on Port 8080 মেনু আইটেমটিতে ক্লিক করুন:

7f938c0bc1b4154c.png

এটি আপনার চলমান অ্যাপের একটি ওয়েব ব্রাউজার ট্যাব খুলবে, যা দেখতে অনেকটা এইরকম হবে:

aaaf366f9bf74a28.png

৫. প্যারামিটার পার্সিং সহ একটি generate মেথড যোগ করুন।

এখন আমরা generate নামক একটি নতুন মেথড যুক্ত করার জন্য সাপোর্ট যোগ করতে চাই। এটি করার জন্য, HTTP রিকোয়েস্টটি ম্যানিপুলেট করতে একটি ইম্পোর্ট স্টেটমেন্ট যোগ করুন এবং এই রিকোয়েস্টটি পার্স করে প্যারামিটারগুলো প্রিন্ট করার জন্য মেইন রুটটি পরিবর্তন করুন , যেমনটি নিচে দেখানো হয়েছে:

from flask import Flask
from flask import request                       #<-CHANGED
import os

app = Flask(__name__)  # Create a Flask object.
PORT = os.environ.get("PORT")  # Get PORT setting from environment.
if not PORT:
    PORT = 8080

# The app.route decorator routes any GET requests sent to the /generate
# path to this function, which responds with "Generating:" followed by
# the body of the request.
@app.route("/", methods=["GET"])                #<-CHANGED
def generate():                                 #<-CHANGED
    params = request.args.to_dict()             #<-CHANGED
    html = f"<h1>Quiz Generator</h1>"           #<-CHANGED
    for param in params:                        #<-CHANGED
        html += f"<br>{param}={params[param]}"  #<-CHANGED
    return html                                 #<-CHANGED

# This code ensures that your Flask app is started and listens for
# incoming connections on the local interface and port 8080.
if __name__ == "__main__":
    app.run(host="0.0.0.0", port=PORT)

এখন ফলাফল দেখতে আপনার বর্তমান ওয়েব ব্রাউজার ট্যাবটি রিলোড করুন। এবার আপনি "কুইজ জেনারেটর" দেখতে পাবেন, সাথে আপনার ইউআরএল-এ স্বয়ংক্রিয়ভাবে একটি কোয়েরি প্যারামিটার ( authuser ) যুক্ত হয়ে যাবে। আপনার ব্রাউজারের অ্যাড্রেস বারে থাকা ইউআরএল-এর শেষে "`&param1=val1&param2=val2`" স্ট্রিংটি যুক্ত করে আরও দুটি প্যারামিটার যোগ করার চেষ্টা করুন, পৃষ্ঠাটি রিলোড করুন, এবং আপনি এইরকম কিছু দেখতে পাবেন:

6e223ca358e4e009.png

এখন যেহেতু আমরা দেখেছি কিভাবে একটি URL-এ কোয়েরি প্যারামিটার পাঠাতে এবং পার্স করতে হয়, তাই আমরা আমাদের কুইজ জেনারেটরে যে নির্দিষ্ট প্যারামিটারগুলো পাঠাতে চাইব সেগুলোর জন্য সাপোর্ট যোগ করব, যেগুলো হলো নিম্নরূপ:

  • topic - কাঙ্ক্ষিত কুইজের বিষয়বস্তু
  • num_q - কাঙ্ক্ষিত প্রশ্নের সংখ্যা
  • diff - কাঙ্ক্ষিত কঠিনতার স্তর (সহজ, মাঝারি, কঠিন)
  • lang - কাঙ্ক্ষিত কুইজের ভাষা
from flask import Flask
from flask import request
import os

# Default quiz settings  #<-CHANGED
TOPIC = "History"        #<-CHANGED
NUM_Q = "5"              #<-CHANGED
DIFF = "intermediate"    #<-CHANGED
LANG = "English"         #<-CHANGED

app = Flask(__name__)  # Create a Flask object.
PORT = os.environ.get("PORT")  # Get PORT setting from environment.
if not PORT:
    PORT = 8080

# This function takes a dictionary, a name, and a default value.
# If the name exists as a key in the dictionary, the corresponding
# value is returned. Otherwise, the default value is returned.
def check(args, name, default):  #<-CHANGED
    if name in args:             #<-CHANGED
        return args[name]        #<-CHANGED
    return default               #<-CHANGED

# The app.route decorator routes any GET requests sent to the /generate
# path to this function, which responds with "Generating:" followed by
# the body of the request.
@app.route("/", methods=["GET"])
# This function generates a quiz using Vertex AI.
def generate():
    args = request.args.to_dict()        #<-CHANGED
    topic = check(args, "topic", TOPIC)  #<-CHANGED
    num_q = check(args, "num_q", NUM_Q)  #<-CHANGED
    diff = check(args, "diff", DIFF)     #<-CHANGED
    lang = check(args, "lang", LANG)     #<-CHANGED
    html = f"""
        <h1>Quiz Generator</h1><br>
        {topic=}<br>
        {num_q=}<br>
        {diff=}<br>
        {lang=}"""                       #<-CHANGED
    return html

# This code ensures that your Flask app is started and listens for
# incoming connections on the local interface and port 8080.
if __name__ == "__main__":
    app.run(host="0.0.0.0", port=PORT)

এখন ফলাফল দেখতে আপনার বর্তমান ওয়েব ব্রাউজার ট্যাবটি রিলোড করুন। আপনি নিচের ওয়েব পেজটির মতো কিছু দেখতে পাবেন:

15eed60f6a805212.png

বিভিন্ন প্যারামিটারের জন্য মান নির্ধারণ করতে URL পরিবর্তন করে দেখুন। উদাহরণস্বরূপ, আপনার অ্যাড্রেস বারের URL-এর শেষে " ?authuser=0&topic=Literature&num_q=10&diff=easy&lang=French " সাফিক্সটি ব্যবহার করে দেখুন:

f629dba5fa207cef.png

৬. আপনার প্রম্পট যোগ করুন এবং ফরম্যাট করুন।

এরপরে, আমরা আমাদের কুইজ জেনারেটরে যে নির্দিষ্ট প্যারামিটারগুলো পাঠাতে চাইব, সেগুলোর জন্য সমর্থন যোগ করব, যা নিম্নরূপ:

  • topic - কাঙ্ক্ষিত কুইজের বিষয়বস্তু
  • num_q - কাঙ্ক্ষিত প্রশ্নের সংখ্যা
  • diff - কাঙ্ক্ষিত কঠিনতার স্তর (সহজ, মাঝারি, কঠিন)
  • lang - কাঙ্ক্ষিত কুইজের ভাষা

পূর্ববর্তী ধাপে Vertex Generative AI Studio ব্যবহার করে তৈরি করা প্রম্পটটি কপি করুন, কিন্তু টপিক, প্রশ্নের সংখ্যা এবং কঠিনতার স্তরের জন্য হার্ড-কোডেড মানগুলি এই স্ট্রিংগুলি দিয়ে পরিবর্তন করুন:

  • {বিষয়}
  • {num_q}
  • {পার্থক্য}
  • {lang}
from flask import Flask
from flask import request
import os

# Default quiz settings
TOPIC = "History"
NUM_Q = 5
DIFF = "intermediate"
LANG = "English"

PROMPT = """
Generate a quiz according to the following specifications:

- topic: {topic}
- num_q: {num_q}
- diff:  {diff}
- lang:  {lang}

Output should be (only) an unquoted json array of objects with keys:
"Question", "responses", and "correct".

"""  #<-CHANGED

app = Flask(__name__)  # Create a Flask object.
PORT = os.environ.get("PORT")  # Get PORT setting from environment.
if not PORT:
    PORT = 8080

# This function takes a dictionary, a name, and a default value.
# If the name exists as a key in the dictionary, the corresponding
# value is returned. Otherwise, the default value is returned.
def check(args, name, default):
    if name in args:
        return args[name]
    return default

# The app.route decorator routes any GET requests sent to the /generate
# path to this function, which responds with "Generating:" followed by
# the body of the request.
@app.route("/", methods=["GET"])
# This function generates a quiz using Vertex AI.
def generate():
    args = request.args.to_dict()
    topic = check(args, "topic", TOPIC)
    num_q = check(args, "num_q", NUM_Q)
    diff = check(args, "diff", DIFF)
    lang = check(args, "lang", LANG)
    prompt = PROMPT.format(topic=topic, num_q=num_q, diff=diff, lang=lang)  #<-CHANGED 
    html = f"<h1>Prompt:</h1><br><pre>{prompt}</pre>"                       #<-CHANGED
    return html

# This code ensures that your Flask app is started and listens for
# incoming connections on the local interface and port 8080.
if __name__ == "__main__":
    app.run(host="0.0.0.0", port=PORT)

এখন ফলাফল দেখতে আপনার বর্তমান ওয়েব ব্রাউজার ট্যাবটি রিলোড করুন। আপনি নিচের ওয়েব পেজটির মতো কিছু দেখতে পাবেন:

3c2b9dfcfba86b7a.png

ওই চারটি প্যারামিটার পরিবর্তন করতে URL-টি পরিমার্জন করার চেষ্টা করুন।

৭. ভার্টেক্স এআই ক্লায়েন্ট লাইব্রেরি যোগ করুন

এখন আমরা আপনার কুইজ তৈরি করার জন্য Vertex AI পাইথন ক্লায়েন্ট লাইব্রেরি ব্যবহার করতে প্রস্তুত। এটি ধাপ #৩-এ আপনার করা ইন্টারেক্টিভ প্রম্পটিংকে স্বয়ংক্রিয় করবে এবং আপনার জেনারেটর সার্ভিসকে গুগলের LLM সক্ষমতাগুলিতে প্রোগ্রাম্যাটিক অ্যাক্সেস দেবে। আপনার main.py ফাইলটি নিম্নরূপভাবে আপডেট করুন:

'YOUR_PROJECT'-এর জায়গায় আপনার আসল প্রজেক্ট আইডিটি বসাতে ভুলবেন না।

from flask import Flask
from flask import request
from flask import Response                                          #<-CHANGED
import os

import vertexai    
from vertexai.generative_models import GenerativeModel  #<-CHANGED

# Default quiz settings
TOPIC = "History"
NUM_Q = 5
DIFF = "intermediate"
LANG = "English"
MODEL = "gemini-1.0-pro"  #<-CHANGED

PROMPT = """
Generate a quiz according to the following specifications:

- topic: {topic}
- num_q: {num_q}
- diff:  {diff}
- lang:  {lang}

Output should be (only) an unquoted json array of objects with keys "question", "responses", and "correct".

"""

app = Flask(__name__)  # Create a Flask object.
PORT = os.environ.get("PORT")  # Get PORT setting from environment.
if not PORT:
    PORT = 8080

# Initialize Vertex AI access.
vertexai.init(project="YOUR_PROJECT", location="us-central1")  #<-CHANGED
parameters = {                                                 #<-CHANGED
    "candidate_count": 1,                                      #<-CHANGED
    "max_output_tokens": 1024,                                 #<-CHANGED
    "temperature": 0.5,                                        #<-CHANGED
    "top_p": 0.8,                                              #<-CHANGED
    "top_k": 40,                                               #<-CHANGED
}                                                              #<-CHANGED
model = GenerativeModel(MODEL)             #<-CHANGED

# This function takes a dictionary, a name, and a default value.
# If the name exists as a key in the dictionary, the corresponding
# value is returned. Otherwise, the default value is returned.
def check(args, name, default):
    if name in args:
        return args[name]
    return default

# The app.route decorator routes any GET requests sent to the /generate
# path to this function, which responds with "Generating:" followed by
# the body of the request.
@app.route("/", methods=["GET"])
# This function generates a quiz using Vertex AI.
def generate():
    args = request.args.to_dict()
    topic = check(args, "topic", TOPIC)
    num_q = check(args, "num_q", NUM_Q)
    diff = check(args, "diff", DIFF)
    lang = check(args, "lang", LANG)
    prompt = PROMPT.format(topic=topic, num_q=num_q, diff=diff, lang=lang)
    response = model.generate_content(prompt, generation_config=parameters)  #<-CHANGED
    print(f"Response from Model: {response.text}")           #<-CHANGED
    html = f"{response.text}"                                #<-CHANGED
    return Response(html, mimetype="application/json")       #<-CHANGED

# This code ensures that your Flask app is started and listens for
# incoming connections on the local interface and port 8080.
if __name__ == "__main__":
    app.run(host="0.0.0.0", port=PORT)

এখন ফলাফল দেখতে আপনার বর্তমান ওয়েব ব্রাউজার ট্যাবটি রিলোড করুন। মনে রাখবেন, এতে কয়েক সেকেন্ড সময় লাগতে পারে, কারণ আপনি এখন প্রকৃতপক্ষে একটি এলএলএম (LLM) অনুরোধ করছেন । আপনি নিচের ওয়েব পেজটির মতো কিছু দেখতে পাবেন:

f43d3ba5102857b8.png

ভিন্ন কুইজের বিষয়, প্রশ্নের সংখ্যা এবং কঠিনতার স্তর অনুরোধ করতে URL-টি পরিবর্তন করে দেখুন।

এর সাথেই আপনার মাইক্রোসার্ভিসটি তৈরি হয়ে গেল - অভিনন্দন! পরবর্তী ধাপে, আপনি শিখবেন কীভাবে আপনার সার্ভিসটি ক্লাউডে ডেপ্লয় করতে হয়, যাতে যে কেউ যেকোনো জায়গা থেকে এটি অ্যাক্সেস করতে পারে।

৮. ক্লাউডের দিকে!

67c99bf45a7b7805.png

এখন যেহেতু আপনি আপনার নিজের কুইজ জেনারেটর তৈরি করে ফেলেছেন, আপনি এই চমৎকার জিনিসটি বাকি বিশ্বের সাথে শেয়ার করতে চাইবেন, তাই এটিকে ক্লাউডে ডেপ্লয় করার সময় এসেছে। কিন্তু আপনি শুধু শেয়ার করার চেয়েও বেশি কিছু করতে চান। আপনি নিশ্চিত করতে চান যে এটি:

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

গুগল ক্লাউড রান-এ আপনার অ্যাপ ডেপ্লয় করার মাধ্যমে আপনি উপরের সবকিছু এবং আরও অনেক কিছু পাবেন। ক্লাউড রান-এর সাথে আপনার অ্যাপ শেয়ার করার মূল ভিত্তি হলো একটি কন্টেইনার।

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

কন্টেইনার এবং গুগল ক্লাউড রানে সেগুলি কীভাবে কাজ করে সে সম্পর্কে আরও জানতে, "ডেভ টু প্রোড ইন থ্রি ইজি স্টেপস উইথ ক্লাউড রান" কোডল্যাবটি দেখুন।

আপনার অ্যাপটি ক্লাউড রানে স্থাপন করুন

ক্লাউড রান একটি আঞ্চলিক পরিষেবা, যার অর্থ হলো আপনার ক্লাউড রান পরিষেবাগুলো যে পরিকাঠামোতে চলে তা একটি নির্দিষ্ট অঞ্চলে অবস্থিত এবং গুগল দ্বারা পরিচালিত হয়, যাতে সেই অঞ্চলের সমস্ত জোনে এটি রিডান্ড্যান্টভাবে উপলব্ধ থাকে। সরলতার জন্য, এই ল্যাবে আমরা হার্ডকোডেড অঞ্চল us-central1 ব্যবহার করব।

আপনার কন্টেইনারটি স্বয়ংক্রিয়ভাবে তৈরি করার জন্য আমরা বিল্ডপ্যাক (buildpack) নামক একটি টুল ব্যবহার করব। ক্লাউড এডিটর (Cloud Editor)-এ Procfile নামে একটি নতুন ফাইল তৈরি করুন এবং এই এক লাইনের লেখাটি প্রবেশ করান:

web: gunicorn --bind :$PORT --workers 1 --threads 8 --timeout 0 main:app

এটি বিল্ডপ্যাক সিস্টেমকে বলে দেয় যে স্বয়ংক্রিয়ভাবে তৈরি কন্টেইনারে আপনার অ্যাপটি কীভাবে চালাতে হবে। এরপর, ক্লাউড শেল টার্মিনালে (সেই একই quiz-generator ডিরেক্টরি থেকে) নিম্নলিখিত কমান্ডটি চালান:

gcloud run deploy quiz-generator  \
    --source .                    \
    --region us-central1          \
    --allow-unauthenticated

এটি gcloud কমান্ডকে বলে দেয় যে, আপনি চান এটি বর্তমান ডিরেক্টরিতে ( --source . এর মধ্যে থাকা dot বর্তমান ডিরেক্টরির সংক্ষিপ্ত রূপ) খুঁজে পাওয়া সোর্স ফাইলগুলোর উপর ভিত্তি করে বিল্ডপ্যাক ব্যবহার করে আপনার কন্টেইনার ইমেজ তৈরি করুক। যেহেতু সার্ভিসটি স্বয়ংক্রিয়ভাবে কন্টেইনার ইমেজের বিষয়টি সামলে নেয়, তাই এই gcloud কমান্ডে আপনাকে আলাদা করে কোনো ইমেজ উল্লেখ করার প্রয়োজন নেই।

ডেপ্লয়মেন্ট সম্পূর্ণ হওয়া পর্যন্ত কিছুক্ষণ অপেক্ষা করুন। সফল হলে, gcloud কমান্ডটি নতুন সার্ভিসটির URL প্রদর্শন করে:

Building using Buildpacks and deploying container to Cloud Run service [quiz-generator] in project [YOUR_PROJECT] region [YOUR_REGION]
OK Building and deploying new service... Done.                                                                          
  OK Creating Container Repository...                                                                                   
  OK Uploading sources...                                                                                               
  OK Building Container... Logs are available at [https://console.cloud.google.com/cloud-build/builds/0cf1383f-35db-412d
  -a973-557d5e2cd4a4?project=780573810218].                                                                             
  OK Creating Revision...                                                                                               
  OK Routing traffic...                                                                                                 
  OK Setting IAM Policy...                                                                                              
Done.                                                                                                                   
Service [quiz-generator] revision [quiz-generator-00001-xnr] has been deployed and is serving 100 percent of traffic.
Service URL: https://quiz-generator-co24gukjmq-uc.a.run.app

আপনি এই কমান্ডটি ব্যবহার করে আপনার সার্ভিস ইউআরএলও পুনরুদ্ধার করতে পারেন:

gcloud run services describe quiz-generator  \
  --region us-central1                       \
  --format "value(status.url)"

এটি দেখতে অনেকটা এরকম হওয়া উচিত:

https://quiz-generator-co24gukjmq-uc.a.run.app

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

আপনার চলমান অ্যাপের একটি ওয়েব ব্রাউজার ট্যাব খুলতে হাইলাইট করা Service URL টিতে ক্লিক করুন। ফলাফলটি আপনার ডেভেলপমেন্ট এনভায়রনমেন্টে দেখা ফলাফলের মতোই কিনা তা যাচাই করুন। এছাড়াও, ইউআরএল-এর শেষে প্যারামিটার যোগ করে তৈরি হওয়া কুইজটি পরিবর্তন করা যায় কিনা, তাও যাচাই করুন।

অভিনন্দন! আপনার অ্যাপটি এখন গুগলের ক্লাউডে চলছে। কোনো রকম চিন্তা ছাড়াই আপনার অ্যাপটি TLS (HTTPS) এনক্রিপশনসহ সর্বসাধারণের জন্য উপলব্ধ এবং এটি বিপুল পরিমাণ ট্র্যাফিকের জন্য স্বয়ংক্রিয়ভাবে স্কেল করে।

৯. সমস্ত অংশগুলো একত্রিত করা

9927db1725bcd5d6.png

এই চূড়ান্ত ধাপে, আমরা quizaic অ্যাপের অংশ হিসেবে আপনার কুইজ জেনারেটরটি চালানোর জন্য প্রস্তুত। quizaic URL- এ যান, আপনার Google অ্যাকাউন্টে লগইন করুন এবং Create Quiz ট্যাবে যান। জেনারেটর টাইপ হিসেবে Custom নির্বাচন করুন, URL ফিল্ডে আপনার Cloud Run URL পেস্ট করুন, অন্যান্য প্রয়োজনীয় ফিল্ডগুলি পূরণ করুন এবং ফর্মটি সাবমিট করুন।

328ee05579ea05f9.png

কিছুক্ষণের মধ্যেই আপনি একটি নতুন কুইজ পেয়ে যাবেন (নিচের ছবিতে 'আমার নতুন কুইজ' দেখুন), যেখানে একটি এআই-নির্মিত থাম্বনেইল ছবি থাকবে, যা আপনি সংশ্লিষ্ট বাটনগুলোর মাধ্যমে সম্পাদনা, খেলা, ক্লোন বা মুছে ফেলতে পারবেন। এই নতুন কুইজটি আপনার টেমপ্লেটেড প্রম্পটের উপর ভিত্তি করে, আপনার সদ্য স্থাপন করা ওয়েব সার্ভিসটি ব্যবহার করে তৈরি করা হয়েছে!

1719169140978b63.png

১০. পরিষ্কার করা

c1592d590c563428.png

পরিষেবাটি ব্যবহার না করা হলে ক্লাউড রান কোনো চার্জ না নিলেও, বিল্ড করা কন্টেইনার ইমেজটি সংরক্ষণের জন্য আপনাকে চার্জ করা হতে পারে।

চার্জ এড়ানোর জন্য আপনি আপনার GCP প্রজেক্টটি ডিলিট করে দিতে পারেন, যার ফলে ওই প্রজেক্টে ব্যবহৃত সমস্ত রিসোর্সের বিলিং বন্ধ হয়ে যাবে, অথবা এই কমান্ডটি ব্যবহার করে আপনার কন্টেইনার ইমেজটি ডিলিট করে দিতে পারেন:

gcloud config set artifacts/repository cloud-run-source-deploy
gcloud config set artifacts/location us-central1
gcloud artifacts docker images list

# Note image tag for resulting list

gcloud artifacts docker images delete <IMAGE-TAG>

আপনার ক্লাউড রান পরিষেবাটি মুছে ফেলতে এই কমান্ডটি ব্যবহার করুন:

gcloud run services delete quiz-generator --region us-central1 --quiet

১১. তুমি পেরেছ!

910162be58c0f6d6.png

অভিনন্দন - আপনি সফলভাবে একটি এলএলএম প্রম্পট তৈরি করেছেন এবং সেই প্রম্পট ব্যবহার করে একটি ক্লাউড রান মাইক্রোসার্ভিস স্থাপন করেছেন। এখন আপনি স্বাভাবিক ভাষায় প্রোগ্রাম করতে এবং আপনার সৃষ্টি সারা বিশ্বের সাথে ভাগ করে নিতে পারেন!

আমি আপনাদের জন্য একটি গুরুত্বপূর্ণ প্রশ্ন রেখে যেতে চাই:

আপনার ডেভেলপার এনভায়রনমেন্টে অ্যাপটি চালু করার পর, ক্লাউড রানের দেওয়া সমস্ত প্রোডাকশন-গ্রেড বৈশিষ্ট্যসহ ক্লাউডে এটি ডেপ্লয় করতে আপনাকে কত লাইন কোড পরিবর্তন করতে হয়েছিল?

উত্তরটা অবশ্যই শূন্য। :)

আরও কিছু কোডল্যাব দেখে নিতে পারেন...

রেফারেন্স ডকুমেন্ট...

১২. পদক্ষেপ গ্রহণের আহ্বান

আপনি যদি এই কোডল্যাবটি উপভোগ করে থাকেন এবং গুগল ক্লাউডের সাথে হাতে-কলমে আরও সময় কাটাতে আগ্রহী হন, তাহলে আজই গুগল ক্লাউড ইনোভেটরস-এ যোগদান করুন !

498cab7d87ec12d3.png

গুগল ক্লাউড ইনোভেটরস বিনামূল্যে এবং এতে অন্তর্ভুক্ত রয়েছে:

  • গুগল কর্মীদের কাছ থেকে সরাসরি সর্বশেষ তথ্য জানতে লাইভ আলোচনা , এএমএ (AMA), এবং রোডম্যাপ সেশনে অংশ নিন।
  • গুগল ক্লাউডের সর্বশেষ খবর সরাসরি আপনার ইনবক্সে।
  • ডিজিটাল ব্যাজ এবং ভিডিও কনফারেন্সের পটভূমি
  • স্কিলস বুস্ট-এ ৫০০ ক্রেডিটের ল্যাব ও লার্নিং

নিবন্ধন করতে এখানে ক্লিক করুন!