এআই যুগে অ্যাপ্লিকেশন তৈরি করা

১. সংক্ষিপ্ত বিবরণ

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

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

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

উদ্দেশ্য

এই ল্যাবে, আপনি নিম্নলিখিত কাজগুলো কীভাবে সম্পাদন করতে হয় তা শিখবেন:

  • জেমিনি ক্লাউড অ্যাসিস্ট সক্রিয় করুন এবং ব্যবহার করুন
  • রান্নার পরামর্শ দেওয়ার চ্যাটবটটির জন্য ভার্টেক্স এআই এজেন্ট বিল্ডারে একটি সার্চ অ্যাপ তৈরি করুন।
  • Gemini Code Assist-এর সাহায্যে একটি Colab Enterprise নোটবুকে ডেটা লোড এবং পরিষ্কার করুন।
  • রেসিপি জেনারেটরের জন্য ভার্টেক্স এআই এজেন্ট বিল্ডারে একটি সার্চ অ্যাপ তৈরি করুন।
  • জেমিনির সামান্য সাহায্যে মূল পাইথন এবং স্ট্রিমলিট ওয়েব অ্যাপ্লিকেশনটির কাঠামো তৈরি করুন।
  • ওয়েব অ্যাপ্লিকেশনটি ক্লাউড রানে স্থাপন করুন
  • রান্নার পরামর্শ পৃষ্ঠাটিকে আমাদের রান্নার বই খোঁজার এজেন্ট বিল্ডার অ্যাপের সাথে সংযুক্ত করুন।
  • (ঐচ্ছিক) রেসিপি সার্চ পেজটিকে রেসিপি-সার্চ এজেন্ট বিল্ডার অ্যাপের সাথে সংযুক্ত করুন।
  • (ঐচ্ছিক) চূড়ান্ত অ্যাপ্লিকেশনটি অন্বেষণ করুন

২. পূর্বশর্তসমূহ

  1. যদি আপনার আগে থেকে কোনো গুগল অ্যাকাউন্ট না থাকে, তাহলে আপনাকে অবশ্যই একটি গুগল অ্যাকাউন্ট তৈরি করতে হবে।
    • কর্মক্ষেত্র বা শিক্ষা প্রতিষ্ঠানের অ্যাকাউন্টের পরিবর্তে ব্যক্তিগত অ্যাকাউন্ট ব্যবহার করুন। কর্মক্ষেত্র এবং শিক্ষা প্রতিষ্ঠানে এমন কিছু সীমাবদ্ধতা থাকতে পারে, যার ফলে আপনি এই ল্যাবের জন্য প্রয়োজনীয় এপিআই (API) সক্রিয় করতে পারবেন না।

৩. প্রজেক্ট সেটআপ

  1. গুগল ক্লাউড কনসোলে সাইন-ইন করুন।
  2. ক্লাউড কনসোলে বিলিং চালু করুন
    • এই ল্যাবটি সম্পন্ন করতে ক্লাউড রিসোর্সে ১ মার্কিন ডলারেরও কম খরচ হওয়া উচিত।
    • পরবর্তী চার্জ এড়াতে, এই ল্যাবের শেষে দেওয়া ধাপগুলো অনুসরণ করে আপনি রিসোর্সগুলো মুছে ফেলতে পারেন।
    • নতুন ব্যবহারকারীরা ৩০০ মার্কিন ডলারের ফ্রি ট্রায়ালের জন্য যোগ্য।
    • কোনো ভার্চুয়াল হ্যান্ডস-অন ল্যাব ইভেন্টে অংশগ্রহণ করছেন? তাহলে ৫ মার্কিন ডলারের একটি ক্রেডিট পেতে পারেন।
  3. একটি নতুন প্রজেক্ট তৈরি করুন অথবা বিদ্যমান কোনো প্রজেক্ট পুনরায় ব্যবহার করুন।
  4. ক্লাউড বিলিং-এর 'আমার প্রোজেক্ট' -এ বিলিং নিশ্চিতকরণ সক্রিয় করা আছে।
    • যদি আপনার নতুন প্রজেক্টের Billing account কলামে Billing is disabled :
      1. Actions কলামে থাকা তিনটি ডটে ক্লিক করুন।
      2. বিলিং পরিবর্তন করতে ক্লিক করুন
      3. আপনি যে বিলিং অ্যাকাউন্টটি ব্যবহার করতে চান তা নির্বাচন করুন।
    • আপনি যদি কোনো লাইভ ইভেন্টে অংশগ্রহণ করেন, তাহলে অ্যাকাউন্টটির নাম সম্ভবত Google Cloud Platform Trial Billing Account হবে।

৪. জেমিনি ক্লাউড অ্যাসিস্ট সক্রিয় করুন এবং ব্যবহার করুন।

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

  1. ক্লাউড অ্যাসিস্ট ব্যবহারের জন্য সক্রিয় করতে, ক্লাউড কনসোল UI-এর শীর্ষে থাকা সার্চ বক্সে ক্লিক করুন এবং ‘Ask Gemini’ অথবা ‘Ask Gemini for Cloud console’ নির্বাচন করুন।
  2. পেজটির Required API সেকশনে স্ক্রল করুন এবং Gemini for Google Cloud API-টি এনাবল করুন
  3. আপনি যদি সাথে সাথে কোনো চ্যাট ইন্টারফেস দেখতে না পান, তাহলে ‘চ্যাটিং শুরু করুন’ (Start chatting) -এ ক্লিক করুন। ক্লাউড শেল এডিটর (Cloud Shell Editor) ব্যবহারের কিছু সুবিধা ব্যাখ্যা করতে জেমিনিকে (Gemini) জিজ্ঞাসা করে শুরু করুন। তৈরি হওয়া উত্তরটি ভালোভাবে দেখতে কয়েক মিনিট সময় নিন।
  4. এরপর, এজেন্ট বিল্ডারের সুবিধাগুলো এবং এটি কীভাবে জেনারেটিভ রেসপন্সকে বাস্তবসম্মত করতে সাহায্য করতে পারে, সে সম্পর্কে জিজ্ঞাসা করুন।
  5. সবশেষে, চলুন একটি তুলনা দেখা যাক। গুগল ক্লাউড কনসোলের জেমিনি চ্যাট উইন্ডোতে, নিম্নলিখিত প্রশ্নটি জিজ্ঞাসা করুন:
    What are the major steps to creating a search app grounded in a GCS data source using Vertex AI Agent builder?
    

৫. রান্নার পরামর্শ দেওয়ার চ্যাটবটটির জন্য ভার্টেক্স এআই এজেন্ট বিল্ডারে একটি সার্চ অ্যাপ তৈরি করুন।

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

  1. ক্লাউড কনসোল সার্চ বক্স ব্যবহার করে Vertex AI- তে যান। ড্যাশবোর্ড থেকে, ‘Enable All Recommended APIs’-এ ক্লিক করুন। এতে কয়েক মিনিট সময় লাগতে পারে। যদি Vertex AI API-টি নিজে সক্রিয় করার জন্য কোনো পপ-আপ বক্স আসে, তবে সেটিও সক্রিয় করুন । API-গুলো সক্রিয় হয়ে গেলে, আপনি পরবর্তী ধাপে যেতে পারবেন।
  2. সার্চ ব্যবহার করে এজেন্ট বিল্ডারে যান, তারপর কন্টিনিউ করুন এবং এপিআই (API) অ্যাক্টিভেট করুন
  3. আমাদের পূর্ববর্তী পরামর্শ চাওয়ার সময় জেমিনি যেমনটা বলেছিল, এজেন্ট বিল্ডারে একটি সার্চ অ্যাপ তৈরি করা শুরু হয় একটি নির্ভরযোগ্য ডেটা সোর্স তৈরির মাধ্যমে। যখন ব্যবহারকারী সার্চ করেন, জেমিনি প্রশ্নটি এবং কীভাবে বুদ্ধিদীপ্ত উত্তর তৈরি করতে হবে তা বুঝতে পারে, কিন্তু সেই উত্তরে ব্যবহৃত তথ্যের জন্য এটি তার সহজাত জ্ঞান থেকে তথ্য না নিয়ে, নির্ভরযোগ্য উৎসের উপর নির্ভর করে। বাম দিকের মেনু থেকে, ডেটা স্টোরস -এ যান এবং ক্রিয়েট ডেটা স্টোর- এ ক্লিক করুন।
  4. আমাদের রান্নার পরামর্শ পেজটির ভিত্তি হিসেবে ব্যবহৃত পাবলিক ডোমেইন রান্নার বইগুলো বর্তমানে একটি এক্সটার্নাল প্রজেক্টের ক্লাউড স্টোরেজ বাকেটে রয়েছে। ক্লাউড স্টোরেজ সোর্স টাইপ নির্বাচন করুন
  5. আমরা যে ধরনের তথ্য ইম্পোর্ট করছি, তার সাথে সম্পর্কিত ডিফল্ট অপশনগুলো পরীক্ষা করুন কিন্তু পরিবর্তন করবেন না। ইম্পোর্ট টাইপ ‘ফোল্ডার’ হিসেবেই রাখুন এবং বাকেট পাথের জন্য ব্যবহার করুন: labs.roitraining.com/labs/old-cookbooks , তারপর ‘কন্টিনিউ’ চাপুন
  6. ডেটা স্টোরটির নাম দিন: old-cookbooksEDIT-এ ক্লিক করে ID পরিবর্তন করে old-cookbooks-id করুন এবং ডেটা স্টোরটি তৈরি করুন

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

  1. বাম পাশের মেনু ব্যবহার করে অ্যাপস -এ যান, তারপর ক্রিয়েট এ নিউ অ্যাপ-এ ক্লিক করুন।
  2. আপনার ওয়েবসাইট অনুসন্ধান করুন কার্ডে থাকা Create বাটনে ক্লিক করুন। অ্যাপটির নাম দিন cookbook-searchEdit বাটনে ক্লিক করে অ্যাপ আইডি ` cookbook-search-id সেট করুন। কোম্পানি হিসেবে Google সেট করে Continue বাটনে ক্লিক করুন।
  3. কয়েক ধাপ আগে আপনার তৈরি করা পুরনো রান্নার বইয়ের ডেটা স্টোরটি পরীক্ষা করুন এবং সার্চ অ্যাপটি তৈরি করুন

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

৬. জেমিনি কোড অ্যাসিস্টের সাহায্যে কোলাব এন্টারপ্রাইজ নোটবুকে ডেটা লোড এবং পরিষ্কার করুন।

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

কোলাব এন্টারপ্রাইজের অন্যতম একটি বৈশিষ্ট্য হলো গুগলের জেমিনি কোড অ্যাসিস্টের সাথে ইন্টিগ্রেশন। কোড অ্যাসিস্ট বিভিন্ন কোড এডিটরে ব্যবহার করা যায় এবং কোড করার সময় এটি পরামর্শের পাশাপাশি নির্বিঘ্ন ইনলাইন সাজেশনও দিতে পারে। আমরা আমাদের রেসিপির ডেটা নিয়ে কাজ করার সময় এই জেনারেটিভ অ্যাসিস্ট্যান্টটির সাহায্য নেব।

  1. সার্চ ব্যবহার করে Colab Enterprise- এ যান এবং Create notebook-এ ক্লিক করুন। যদি Colab-এর নতুন ফিচারগুলো নিয়ে পরীক্ষা করার কোনো অফার আসে, তবে তা বাতিল করে দিন। রানটাইম, অর্থাৎ নোটবুকের পেছনের কম্পিউটিং শক্তি, চালু করতে আপনার নতুন নোটবুকের উপরের ডান কোণায় থাকা Connect- এ ক্লিক করুন। সংযোগ করুন
  2. নোটবুকটির নাম পরিবর্তন করে Data Wrangling রাখার জন্য File > Rename-এ ক্লিক করুন। ট্রিপল ডট রিনেম
  3. একটি নতুন টেক্সট বক্স তৈরি করতে + Text-এ ক্লিক করুন, এবং এটিকে পৃষ্ঠার প্রথম সেলে নিয়ে আসার জন্য আপ অ্যারো ব্যবহার করুন। + টেক্সট এবং উপরের তীরচিহ্ন
  4. টেক্সট বক্সটি সম্পাদনা করুন এবং লিখুন:
    # Data Wrangling
    
    Import the Pandas library
    
  5. আপনি এইমাত্র যে টেক্সট ব্লকটি তৈরি করেছেন তার নিচের কোড ব্লকে, imp টাইপ করা শুরু করুন এবং Gemini Code Assist ধূসর রঙে বাকি ইম্পোর্টটি সাজেস্ট করবে। সাজেশনটি গ্রহণ করতে ট্যাব চাপুন।
    import pandas as pd
    
  6. ইমপোর্ট কোড বক্সের নিচে, আরেকটি টেক্সট বক্স তৈরি করুন এবং লিখুন:
    Create a Pandas DataFrame from: gs://labs.roitraining.com/labs/recipes/recipe_dataset.csv. View the first few records.
    
  7. আরেকটি কোড ব্লক তৈরি ও সম্পাদনা করুন। আবার, df = টাইপ করা শুরু করুন এবং Gemini Code Assistant দ্বারা তৈরি কোডটি পরীক্ষা করুন। যদি তৈরি হওয়া সাজেশনের উপরে পাইথন কীওয়ার্ডের একটি অটোকমপ্লিট ড্রপ-লিস্ট দেখতে পান, তাহলে হালকা ধূসর রঙের সাজেস্টেড কোডটি দেখার জন্য escape চাপুন। সাজেশনটি গ্রহণ করার জন্য আবার tab চাপুন । যদি আপনার সাজেশনে head() ফাংশন কলটি না থাকে, তবে সেটি যোগ করুন।
    df = pd.read_csv('gs://labs.roitraining.com/labs/recipes/recipe_dataset.csv')
    df.head()
    
  8. আপনার প্রথম কোড সেলে ক্লিক করুন, যেখানে আপনি Pandas ইম্পোর্ট করেছেন, এবং নির্বাচিত সেলটি রান করার জন্য Commands মেনু বা কিবোর্ড ব্যবহার করুন। কিবোর্ডে shift+enter চাপলে সেলটি রান হবে এবং ফোকাস পরবর্তী সেলে চলে যাবে, প্রয়োজনে একটি সেল তৈরিও হবে। পরবর্তী ধাপে যাওয়ার আগে সেলটি এক্সিকিউট হওয়া পর্যন্ত অপেক্ষা করুন। দ্রষ্টব্য: যখন কোনো সেল এক্সিকিউট হয়নি, তখন আপনি ঠিক বাম পাশে [ ] দেখতে পাবেন। যখন একটি সেল এক্সিকিউট হতে থাকে, তখন আপনি একটি ঘূর্ণায়মান, চলমান অ্যানিমেশন দেখতে পাবেন। সেলটি শেষ হয়ে গেলে, [13]-এর মতো একটি সংখ্যা দেখা যাবে।
  9. যে সেলটি CSV ফাইলটিকে ডেটাফ্রেমে লোড করে, সেটি চালান। ফাইলটি লোড হওয়া পর্যন্ত অপেক্ষা করুন এবং ডেটার প্রথম পাঁচটি সারি পরীক্ষা করে দেখুন। এটিই সেই রেসিপির ডেটা যা আমরা BigQuery-তে লোড করব এবং অবশেষে আমাদের রেসিপি জেনারেটরের ভিত্তি হিসেবে এটি ব্যবহার করব।
  10. একটি নতুন কোড ব্লক তৈরি করুন এবং নিচের কমেন্টটি লিখুন। কমেন্টটি লেখার পর, পরবর্তী কোড লাইনে যান এবং আপনি df.columns সাজেশনটি পাবেন। এটি গ্রহণ করুন এবং তারপর সেলটি রান করুন।
    # List the current DataFrame column names
    
    আমরা এইমাত্র দেখিয়েছি যে, একটি জুপিটার নোটবুকে জেমিনি কোড অ্যাসিস্ট থেকে সাহায্য পাওয়ার জন্য আপনার কাছে আসলেই দুটি উপায় আছে: কোড সেলের উপরে টেক্সট সেল, অথবা কোড সেলের ভেতরেই কমেন্ট। কোড সেলের ভেতরের কমেন্ট জুপিটার নোটবুকে ভালোভাবে কাজ করে, কিন্তু এই পদ্ধতিটি গুগলের জেমিনি কোড অ্যাসিস্ট সমর্থনকারী অন্য যেকোনো IDE-তেও কাজ করবে।
  11. চলুন কলামটি কিছুটা পরিপাটি করা যাক। Unnamed: 0 কলামটির নাম পরিবর্তন করে id রাখুন এবং এটিকে uri এর সাথে link । কোডটি তৈরি করার জন্য আপনার পছন্দের prompt > code কৌশল ব্যবহার করুন, তারপর সন্তুষ্ট হলে সেলটি রান করুন।
    # Rename the column 'Unnamed: 0' to 'id' and 'link' to 'uri'
    df.rename(columns={'Unnamed: 0': 'id', 'link': 'uri'}, inplace=True)
    
  12. source এবং NER কলামগুলো মুছে ফেলুন এবং head() ব্যবহার করে প্রথম কয়েকটি সারি দেখুন। এক্ষেত্রেও, Gemini-র সাহায্য নিন। শেষ দুটি লাইন রান করুন এবং ফলাফলগুলো পরীক্ষা করে দেখুন।
    # Remove the source and NER columns
    df.drop(columns=['source', 'NER'], inplace=True)
    df.head()
    
  13. চলুন দেখি আমাদের ডেটাসেটে কতগুলো রেকর্ড আছে। আবার, আপনার পছন্দের প্রম্পটিং কৌশল দিয়ে শুরু করুন এবং দেখুন আপনি জেমিনিকে দিয়ে কোডটি তৈরি করাতে পারেন কিনা।
    # Count the records in the DataFrame
    df.shape # count() will also work
    
  14. ২২.৩ লক্ষ রেকর্ডে সম্ভবত আমাদের হাতে থাকা সময়ের চেয়ে বেশি রেসিপি রয়েছে। এজেন্ট বিল্ডারে ইনডেক্সিং প্রক্রিয়াটি আমাদের আজকের অনুশীলনের জন্য সম্ভবত অনেক বেশি সময় নেবে। একটি আপোস হিসেবে, চলুন ১,৫০,০০০ রেসিপি নমুনা হিসেবে নিয়ে তা নিয়ে কাজ করি। নমুনাটি নিতে এবং এটিকে dfs (s মানে ছোট) নামের একটি নতুন ডেটাফ্রেমে সংরক্ষণ করতে আপনার প্রম্পট > কোড পদ্ধতি ব্যবহার করুন।
    # Sample out 150,000 records into a DataFrame named dfs
    dfs = df.sample(n=150000)
    
  15. আমাদের রেসিপির উৎস ডেটা BigQuery-তে লোড করার জন্য প্রস্তুত। লোড করার আগে, চলুন BigQuery-তে গিয়ে আমাদের টেবিলটি রাখার জন্য একটি ডেটাসেট প্রস্তুত করি। Google Cloud Console-এর সার্চ বক্স ব্যবহার করে BigQuery- তে যান। আপনি BigQuery-তে রাইট-ক্লিক করে এটি একটি নতুন ব্রাউজার ট্যাবেও খুলতে পারেন।
  16. যদি এটি আগে থেকেই দেখা না যায়, তাহলে ক্লাউড কনসোলের উপরের ডানদিকে থাকা জেমিনি লোগো ব্যবহার করে জেমিনি এআই চ্যাট প্যানেলটি খুলুন। যদি আপনাকে আবার এপিআই (API) চালু করতে বলা হয়, তাহলে 'enable' চাপুন অথবা পৃষ্ঠাটি রিফ্রেশ করুন। এই প্রম্পটটি চালান: What is a dataset used for in BigQuery? উত্তরটি খতিয়ে দেখার পর জিজ্ঞাসা করুন, How can I create a dataset named recipe_data using the Cloud Console? ফলাফলগুলোকে নিম্নলিখিত কয়েকটি ধাপের সাথে তুলনা করুন। ওপেন জেমিনি ক্লাউড অ্যাসিস্ট
  17. BigQuery Explorer প্যানে, আপনার প্রজেক্ট আইডির পাশে থাকা ট্রিপল ডট ভিউ অ্যাকশনস মেনুতে ক্লিক করুন। তারপর ক্রিয়েট ডেটাসেট (Create dataset) নির্বাচন করুন। অন্বেষণ করুন কার্যকলাপ দেখুন
  18. recipe_data ডেটাসেট এবং আইডি দিন। লোকেশন টাইপ US রাখুন এবং ডেটাসেট তৈরি করুন । যদি ডেটাসেটটি আগে থেকেই বিদ্যমান থাকার কোনো ত্রুটি বার্তা পান, তবে পরবর্তী ধাপে যান। BigQuery-তে ডেটাসেট তৈরি হয়ে গেলে, চলুন আমাদের নোটবুকে ফিরে যাই এবং ইনসার্ট প্রক্রিয়াটি সম্পন্ন করি।
  19. Colab Enterprise-এ আপনার ডেটা র‍্যাঙ্গলিং নোটবুকে ফিরে যান। একটি নতুন কোড সেলে, project_id নামে একটি ভেরিয়েবল তৈরি করুন এবং আপনার বর্তমান প্রজেক্ট আইডি রাখার জন্য এটি ব্যবহার করুন। এই নির্দেশাবলীর উপরের বাম দিকে, 'এন্ড ল্যাব' (End Lab) বোতামের নিচে দেখুন, আপনি বর্তমান প্রজেক্ট আইডিটি খুঁজে পাবেন। আপনি চাইলে এটি ক্লাউড কনসোল হোম পেজেও পেতে পারেন। আপনার project_id ভেরিয়েবলে মানটি অ্যাসাইন করুন এবং সেলটি রান করুন।
    # Create a variable to hold the current project_id
    project_id='YOUR_PROJECT_ID'
    
  20. `prompt > code` পদ্ধতি ব্যবহার করে একটি কোড ব্লক তৈরি করুন যা আমাদের সদ্য তৈরি করা recipe_data ডেটাসেটের recipes নামের একটি টেবিলে dfs ডেটাফ্রেমটি সন্নিবেশ করবে। সেলটি রান করুন।
    dfs.to_gbq(destination_table='recipe_data.recipes', project_id=project_id, if_exists='replace')
    

৭. রেসিপি জেনারেটরের জন্য Vertex AI Agent Builder-এ একটি সার্চ অ্যাপ তৈরি করুন।

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

আপনি চাইলে, এজেন্ট বিল্ডার সার্চ অ্যাপ তৈরি করার ধাপগুলো মনে করিয়ে দেওয়ার জন্য গুগল ক্লাউড কনসোলে জেমিনিকে জিজ্ঞাসা করতে পারেন, অথবা নিচে তালিকাভুক্ত ধাপগুলো অনুসরণ করতে পারেন।

  1. সার্চ ব্যবহার করে এজেন্ট বিল্ডারে যান। ডেটা স্টোরস খুলুন এবং ডেটা স্টোর তৈরি করুন । এবার, বিগকোয়েরি ডেটা স্টোর টাইপটি নির্বাচন করুন
  2. টেবিল সিলেকশন সেলে, 'Browse' চাপুন এবং recipes লিখে সার্চ করুন। আপনার টেবিলের পাশের রেডিও বাটনটি সিলেক্ট করুন। যদি আপনি অন্য qwiklabs-gcp-... প্রোজেক্টের রেসিপি দেখতে পান, তাহলে নিশ্চিত করুন যে আপনি আপনার নিজের প্রোজেক্টটিই সিলেক্ট করেছেন । দ্রষ্টব্য: আপনি যদি পাশের রেডিও বাটনটি সিলেক্ট না করে recipes উপর ক্লিক করেন, তাহলে এটি আপনার ব্রাউজারে একটি নতুন ট্যাব খুলবে এবং আপনাকে BigQuery-এর টেবিল ওভারভিউ পেজে নিয়ে যাবে। সেক্ষেত্রে শুধু ব্রাউজার ট্যাবটি বন্ধ করে দিন এবং Agent Builder-এ রেডিও বাটনটি সিলেক্ট করুন।
  3. বাকি ডিফল্ট অপশনগুলো পরীক্ষা করুন কিন্তু পরিবর্তন করবেন না, তারপর চালিয়ে যান
  4. স্কিমা পর্যালোচনা পৃষ্ঠায়, প্রাথমিক ডিফল্ট কনফিগারেশনগুলো পরীক্ষা করুন, কিন্তু কোনো কিছু পরিবর্তন করবেন না। চালিয়ে যান।
  5. ডেটাস্টোরটির নাম দিন recipe-data । ডেটাস্টোর আইডি সম্পাদনা করে এটিকে recipe-data-id তে সেট করুন। ডেটা স্টোরটি তৈরি করুন
  6. বাম দিকের নেভিগেশন মেনু ব্যবহার করে অ্যাপস -এ যান এবং একটি নতুন অ্যাপ তৈরি করুন
  7. আপনার ওয়েবসাইট অনুসন্ধান করুন কার্ডে থাকা Create- এ ক্লিক করুন। অ্যাপটির নাম দিন recipe-search এবং ID-টি recipe-search-id তে সেট করতে EDIT-এ ক্লিক করুন। কোম্পানির নাম Google এ সেট করুন এবং Continue-তে যান
  8. এবার, রেসিপি-ডেটা ডেটা সোর্সগুলো পরীক্ষা করুন। অ্যাপটি তৈরি করুন

আমাদের ডাটাবেস টেবিলটি ইনডেক্স হতে কিছুটা সময় লাগবে। এই সময়ের মধ্যে, চলুন BigQuery-এর নতুন ডেটা ক্যানভাস নিয়ে পরীক্ষা-নিরীক্ষা করে দেখি এবং এক-দুটি আকর্ষণীয় উপায় খুঁজে পাওয়া যায় কিনা।

  1. সার্চ বক্স ব্যবহার করে BigQuery- তে যান। BigQuery Studio-র উপরে, একদম ডানদিকের ট্যাবের পাশের নিচের দিকে মুখ করা তীরচিহ্নে ক্লিক করুন এবং Data canvas নির্বাচন করুন। অঞ্চলটি us-central1- এ সেট করুন। ডেটা ক্যানভাস খুলুন
  2. ডেটা অনুসন্ধান করতে ক্লিক করুন। ডেটা ক্যানভাসের সার্চ বক্সে, recipes লিখে অনুসন্ধান করুন, অনুসন্ধান করতে Enter/Return চাপুন এবং আপনার টেবিলের নামের পাশে থাকা ‘Add to canvas’ বোতামে ক্লিক করুন।
  3. আপনার রেসিপি টেবিলের একটি ভিজ্যুয়াল উপস্থাপনা BigQuery ডেটা ক্যানভাসে লোড করা হবে। আপনি টেবিলের স্কিমা অন্বেষণ করতে, টেবিলের ডেটার প্রিভিউ দেখতে এবং অন্যান্য বিবরণ পরীক্ষা করতে পারেন। টেবিলের উপস্থাপনার নিচে, কোয়েরি (Query) -তে ক্লিক করুন।
  4. ক্যানভাসটি একটি মোটামুটি সাধারণ BigQuery কোয়েরি ডায়ালগ লোড করবে, তবে একটি অতিরিক্ত বিষয় থাকবে: কোয়েরি উইন্ডোর উপরে একটি টেক্সট বক্স রয়েছে যা ব্যবহার করে আপনি Gemini-র কাছে সাহায্য চাইতে পারেন। চলুন দেখি আমাদের স্যাম্পলে কিছু কেকের রেসিপি খুঁজে পাওয়া যায় কিনা। নিচের প্রম্পটটি চালান (টেক্সটটি টাইপ করে এবং SQL জেনারেশন শুরু করতে Enter/Return চাপুন):
    Please select the title and ingredients for all the recipes with a title that contains the word cake.
    
  5. তৈরি হওয়া SQL-টি দেখুন। সন্তুষ্ট হলে, কোয়েরিটি চালান
  6. মন্দ না! সামনে এগোনোর আগে আরও কয়েকটি প্রম্পট ও কোয়েরি নিয়ে পরীক্ষা করে দেখতে পারেন। পরীক্ষা করার সময়, কোনটি কাজ করে আর কোনটি করে না, তা দেখার জন্য কম সুনির্দিষ্ট প্রম্পট ব্যবহার করে দেখুন। উদাহরণস্বরূপ, এই প্রম্পটটি:
    Do I have any chili recipes?
    
    (নতুন কোয়েরিটি চালাতে ভুলবেন না) এটি চিলি রেসিপির একটি তালিকা ফেরত দিয়েছিল, কিন্তু উপকরণগুলো বাদ দিয়েছিল, যতক্ষণ না আমি এটিকে নিম্নোক্তভাবে পরিবর্তন করি:
    Do I have any chili recipes?  Please include their title and ingredients.
    
    (হ্যাঁ, কেউ বললে আমি 'প্লিজ' বলি। আমার মা খুব গর্বিত হতেন।) আমি লক্ষ্য করলাম যে একটি চিলি রেসিপিতে মাশরুম ছিল, আর চিলিতে ওটা কে-ই বা চায়? আমি জেমিনিকে ওই রেসিপিগুলো বাদ দিতে সাহায্য করতে বললাম।
    Do I have any chili recipes?  Please include their title and ingredients, and ignore any recipes with mushrooms as an ingredient.
    

৮. ক্লাউড শেল এডিটর খুলুন

  1. ক্লাউড শেল এডিটরে যান
  2. যদি স্ক্রিনের নীচে টার্মিনালটি দেখা না যায়, তাহলে এটি খুলুন:
    • হ্যামবার্গার মেনুতে ক্লিক করুন হ্যামবার্গার মেনু আইকন
    • টার্মিনালে ক্লিক করুন
    • নতুন টার্মিনালে ক্লিক করুন ক্লাউড শেল এডিটরে নতুন টার্মিনাল খুলুন
  3. টার্মিনালে এই কমান্ডটি দিয়ে আপনার প্রজেক্ট সেট করুন:
    • বিন্যাস:
      gcloud config set project [PROJECT_ID]
      
    • উদাহরণ:
      gcloud config set project lab-project-id-example
      
    • যদি আপনি আপনার প্রজেক্ট আইডি মনে করতে না পারেন:
      • আপনি আপনার সমস্ত প্রজেক্ট আইডি তালিকাভুক্ত করতে পারেন:
        gcloud projects list | awk '/PROJECT_ID/{print $2}'
        
      ক্লাউড শেল এডিটর টার্মিনালে প্রজেক্ট আইডি সেট করুন
  4. অনুমোদন করতে বলা হলে, চালিয়ে যাওয়ার জন্য 'Authorize'-এ ক্লিক করুন। ক্লাউড শেল অনুমোদন করতে ক্লিক করুন
  5. আপনি এই বার্তাটি দেখতে পাবেন:
    Updated property [core/project].
    
    যদি আপনি একটি WARNING দেখতে পান এবং আপনাকে Do you want to continue (Y/N)? জিজ্ঞাসা করা হয়, তাহলে সম্ভবত আপনি প্রজেক্ট আইডি ভুলভাবে প্রবেশ করিয়েছেন। N চাপুন, Enter চাপুন এবং gcloud config set project কমান্ডটি আবার চালানোর চেষ্টা করুন।

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

টার্মিনালে, এপিআইগুলো সক্রিয় করুন:

gcloud services enable \
  compute.googleapis.com \
  sqladmin.googleapis.com \
  run.googleapis.com \
  artifactregistry.googleapis.com \
  cloudbuild.googleapis.com \
  networkconnectivity.googleapis.com \
  servicenetworking.googleapis.com \
  cloudaicompanion.googleapis.com

অনুমোদন করতে বলা হলে, চালিয়ে যাওয়ার জন্য 'Authorize'-এ ক্লিক করুন। ক্লাউড শেল অনুমোদন করতে ক্লিক করুন

এই কমান্ডটি সম্পন্ন হতে কয়েক মিনিট সময় লাগতে পারে, কিন্তু অবশেষে এটি এইটির মতো একটি সফলতার বার্তা দেবে:

Operation "operations/acf.p2-73d90d00-47ee-447a-b600" finished successfully.

১০. জেমিনির সামান্য সাহায্যে মূল পাইথন এবং স্ট্রিমলিট ওয়েব অ্যাপ্লিকেশনটির কাঠামো তৈরি করুন।

আমাদের Vertex AI Agent Builder-এর দুটি ডেটা স্টোরই ইন্ডেক্স হয়ে যাওয়ায় এবং আমাদের সার্চ অ্যাপগুলোও চালু হওয়ার জন্য প্রায় প্রস্তুত, চলুন এবার আমাদের ওয়েব অ্যাপ্লিকেশনটি তৈরি করা শুরু করা যাক।

কাজ করার সময় আমরা Gemini Code Assist ব্যবহার করব। Visual Studio Code-এ Gemini Code Assist ব্যবহারের বিষয়ে আরও তথ্যের জন্য, এখানের ডকুমেন্টেশন দেখুন।

  1. ক্লাউড শেল এডিটর টার্মিনালে, রেসিপি অ্যাপ রিপোজিটরি ক্লোন করতে এই কমান্ডটি চালান।
    git clone https://github.com/haggman/recipe-app
    
  2. ক্লাউড শেল এডিটর-এ অ্যাপ্লিকেশন ফোল্ডারটি খোলার জন্য এই কমান্ডটি চালান।
    cloudshell open-workspace recipe-app/
    
  3. ক্লোন করা ফোল্ডারটি অন্বেষণ করার এবং আমাদের ওয়েব অ্যাপ্লিকেশনে কাজ শুরু করার আগে, আমাদের এডিটরের ক্লাউড কোড প্লাগইনটিকে গুগল ক্লাউডে লগ ইন করতে হবে এবং জেমিনি (Gemini) সক্রিয় করতে হবে। চলুন, এখন সেটাই করা যাক। আপনার এডিটরের নিচের বাম দিকে, ‘ক্লাউড কোড - সাইন ইন’ (Cloud Code - Sign in) -এ ক্লিক করুন। যদি লিঙ্কটি দেখতে না পান, তবে এক মিনিট অপেক্ষা করে আবার দেখুন। ক্লাউড কোড - সাইন ইন
  4. টার্মিনাল উইন্ডোতে একটি দীর্ঘ ইউআরএল (URL) প্রদর্শিত হবে। ব্রাউজারে ইউআরএলটি খুলুন এবং আপনার গুগল ক্লাউড এনভায়রনমেন্টে ক্লাউড কোডকে অ্যাক্সেস দেওয়ার জন্য ধাপগুলো অনুসরণ করুন। চূড়ান্ত ডায়ালগ বক্সে, ভেরিফিকেশন কোডটি কপি করে আপনার ক্লাউড শেল এডিটর ব্রাউজার ট্যাবে থাকা অপেক্ষারত টার্মিনাল উইন্ডোতে পেস্ট করুন।
  5. কিছুক্ষণ পর, আপনার এডিটরের নিচের বাম দিকের ক্লাউড কোড লিঙ্কটি ‘ক্লাউড কোড - নো প্রজেক্ট’ -এ পরিবর্তিত হবে। একটি প্রজেক্ট বেছে নিতে নতুন লিঙ্কটিতে ক্লিক করুন। এডিটরের উপরে কমান্ড প্যালেটটি খুলে যাবে। ‘সিলেক্ট আ গুগল ক্লাউড প্রজেক্ট’-এ ক্লিক করে আপনার প্রজেক্টটি বেছে নিন। কিছুক্ষণ পর, আপনার এডিটরের নিচের বাম দিকের লিঙ্কটি আপডেট হয়ে আপনার প্রজেক্ট আইডি প্রদর্শন করবে। এটি নির্দেশ করে যে ক্লাউড কোড আপনার চলমান প্রজেক্টের সাথে সফলভাবে সংযুক্ত হয়েছে।
  6. আপনার প্রোজেক্টের সাথে ক্লাউড কোড সংযুক্ত থাকলে, আপনি এখন জেমিনি কোড অ্যাসিস্ট সক্রিয় করতে পারবেন। আপনার এডিটর ইন্টারফেসের নিচের ডানদিকে, কাটা চিহ্নযুক্ত জেমিনি লোগোতে ক্লিক করুন। এডিটরের বাম দিকে জেমিনি চ্যাট প্যানেলটি খুলবে। 'সিলেক্ট এ গুগল ক্লাউড প্রোজেক্ট'-এ ক্লিক করুন। যখন কমান্ড প্যালেটটি খুলবে, তখন আপনার প্রোজেক্টটি নির্বাচন করুন। যদি আপনি ধাপগুলো সঠিকভাবে অনুসরণ করে থাকেন (এবং গুগল কোনো পরিবর্তন না করে থাকে), তাহলে আপনি এখন একটি সক্রিয় জেমিনি চ্যাট উইন্ডো দেখতে পাবেন। প্রতিবন্ধী মিথুন
  7. চমৎকার, আমাদের টার্মিনাল, জেমিনি চ্যাট এবং ক্লাউড কোড কনফিগারেশন সবকিছু প্রস্তুত হয়ে গেলে, এক্সপ্লোরার ট্যাবটি খুলুন এবং বর্তমান প্রজেক্টের ফাইলগুলো ঘুরে দেখতে কয়েক মিনিট সময় নিন। অভিযাত্রী
  8. এক্সপ্লোরারে আপনার requirements.txt ফাইলটি সম্পাদনার জন্য খুলুন। জেমিনি চ্যাট প্যানে যান এবং জিজ্ঞাসা করুন:
    From the dependencies specified in the requirements.txt file, what type of application are we building?
    
  9. তাহলে, আমরা পাইথন এবং স্ট্রিমলিট ব্যবহার করে একটি ইন্টারেক্টিভ ওয়েব অ্যাপ্লিকেশন তৈরি করছি যা ভার্টেক্স এআই এবং ডিসকভারি ইঞ্জিনের সাথে যোগাযোগ করছে, চমৎকার। আপাতত, চলুন ওয়েব অ্যাপ্লিকেশনটির উপাদানগুলোর উপর মনোযোগ দিই। জেমিনি যেমনটা বলেছেন, স্ট্রিমলিট হলো পাইথনে ডেটা-চালিত ওয়েব অ্যাপ্লিকেশন তৈরির একটি ফ্রেমওয়ার্ক। এখন জিজ্ঞাসা করুন:
    Does the current project's folder structure seem appropriate for a Streamlit app?
    
    এইখানেই জেমিনির সমস্যা হয়। জেমিনি এডিটরে আপনার বর্তমানে খোলা ফাইলটি অ্যাক্সেস করতে পারে, কিন্তু এটি আসলে পুরো প্রজেক্টটি দেখতে পায় না। এটি জিজ্ঞাসা করে দেখুন:
    Given the below, does the current project's file and folder structure seem appropriate for a Streamlit app?
    - build.sh
    - Home.py
    - requirements.txt
    - pages
    -- Cooking_Advice.py
    -- Recipe_Search.py
    
    আরও ভালো উত্তর পাবেন?
  10. চলুন স্ট্রিমলিট সম্পর্কে আরও কিছু তথ্য জেনে নেওয়া যাক:
    What can you tell me about Streamlit?
    
    বেশ, তাহলে আমরা দেখতে পাচ্ছি যে মিথুন রাশি আমাদের সুবিধা-অসুবিধা সহ একটি সুন্দর সামগ্রিক চিত্র তুলে ধরছে।
  11. যদি আপনি অসুবিধাগুলো খতিয়ে দেখতে চান, তাহলে জিজ্ঞাসা করতে পারেন:
    What are the major downsides or shortcomings?
    
    লক্ষ্য করুন, আমাদের "স্ট্রিমলিটের" কথাটা বলার প্রয়োজন হয়নি, কারণ জেমিনি চ্যাট কথোপকথনমূলক (একাধিক পালা)। আমরা একটি চ্যাট সেশনে থাকায় জেমিনি জানে আমরা কী নিয়ে কথা বলছিলাম। যদি কোনো সময়ে আপনি জেমিনি চ্যাটের ইতিহাস পুরোপুরি মুছে ফেলতে চান, তাহলে জেমিনি কোড চ্যাট উইন্ডোর উপরের দিকে থাকা ট্র্যাশক্যান আইকনটি ব্যবহার করুন।

১১. ওয়েব অ্যাপ্লিকেশনটি ক্লাউড রান-এ ডেপ্লয় করুন।

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

  1. জেমিনি চ্যাট উইন্ডোতে জিজ্ঞাসা করুন:
    If I containerize this application, what compute technologies in Google Cloud would be best for hosting it?
    
  2. মনে রাখবেন, আপনি যদি আগে থেকেই আপনার IDE-তে কাজ না করে থাকেন, তাহলে আপনি Google Cloud Assist-এর সাহায্যও নিতে পারেন। Google Cloud Console খুলুন, তারপর Gemini Cloud Assist খুলুন এবং জিজ্ঞাসা করুন:
    If I have a containerized web application, where would be the best place to run it in Google Cloud?
    
    পরামর্শের দুটি সেট কি একই ছিল? আপনি কি কোনো পরামর্শের সাথে একমত বা দ্বিমত পোষণ করেন? মনে রাখবেন, জেমিনি একটি জেনারেটিভ এআই অ্যাসিস্ট্যান্ট, এবং একজন মানব সহকারীর মতোই, এর বলা সবকিছুর সাথে আপনি সবসময় একমত হবেন না। তবুও, গুগল ক্লাউডে এবং আপনার কোড এডিটরে কাজ করার সময় এই সহায়কটিকে সবসময় পাশে পেলে তা আপনাকে অনেক বেশি দক্ষ করে তুলতে পারে।
  3. স্টেটলেস ও স্বল্পস্থায়ী কন্টেইনারাইজড ওয়েব অ্যাপ্লিকেশনের জন্য ক্লাউড রান একটি দারুণ বিকল্প হবে। আপনার কোড এডিটরের জেমিনি চ্যাট উইন্ডোতে এই প্রম্পটটি চেষ্টা করুন:
    What steps would be required to run this application in Cloud Run?
    
  4. মনে হচ্ছে, আমাদের প্রথম কাজ হলো একটি Dockerfile তৈরি করা। এডিটর ব্যবহার করে আপনার প্রজেক্ট ফোল্ডারের রুটে Dockerfile নামে একটি ফাইল তৈরি করুন। খেয়াল রাখবেন যেন ভুল করে ফাইলটি pages ফোল্ডারে না রাখেন। সম্পাদনা করার জন্য ফাইলটি খুলুন।
  5. চলুন, আমাদের ডকারফাইলটি তৈরি করার জন্য সাইড জেমিনি চ্যাট প্যানেলটি ব্যবহার করি। নিচের মতো একটি প্রম্পট ব্যবহার করুন। চ্যাটে ফলাফল প্রদর্শিত হলে, প্রস্তাবিত ডকারফাইলটির ঠিক উপরে থাকা কপি আইকনের পাশের + চিহ্নটি ব্যবহার করে প্রস্তাবিত কোডটি ডকারফাইলটিতে যুক্ত করুন।
    Create a Dockerfile for the application in the current folder. The dependencies are defined in requirements.txt and I want you to use the Python 3 slim bookworm base image.
    
    জেমিনি একই প্রম্পটের জবাবে সবসময় একই প্রতিক্রিয়া দেয় না। প্রথমবার যখন আমি জেমিনির কাছে একটি ডকারফাইল চেয়েছিলাম, তখন আমি ঠিক সেই ফাইলটিই পেয়েছিলাম যা আমি আপনাকে ব্যবহার করার পরামর্শ দেব। এইমাত্র আমি এই পরামর্শটি পেলাম:
    # Base image
    FROM python:3-bookworm-slim
    
    # Set working directory
    WORKDIR /app
    
    # Install dependencies
    RUN apt-get update && apt-get install -y \
        build-essential \
        libpq-dev \
        gcc \
        python3-dev \
        && rm -rf /var/lib/apt/lists/*
    
    # Install pip and virtualenv
    RUN pip install --upgrade pip virtualenv
    
    # Create virtual environment
    RUN python3 -m venv venv
    
    # Activate virtual environment
    WORKDIR /app/venv/bin
    RUN . activate
    
    # Install Streamlit and libraries from requirements.txt
    RUN pip install -r requirements.txt
    
    # Copy application files
    COPY . /app
    
    # Expose port 8501 for Streamlit
    EXPOSE 8501
    
    # Start Streamlit app
    CMD ["streamlit", "run", "main.py"]
    
    এটা একটা বিশাল ডকারফাইল। আমি এটাকে আরেকটু সহজ করে নিতাম। আমাদের apt-get সেকশনটার দরকার নেই, কারণ পাইথনের জন্য যা যা দরকার, তার সবই আমাদের বেস ইমেজে আগে থেকেই আছে। এছাড়াও, পাইথন কন্টেইনারে ভার্চুয়াল এনভায়রনমেন্ট ব্যবহার করাটা জায়গার অপচয়, তাই আমি ওটা সরিয়ে দিতাম। expose কমান্ডটা একেবারে অপরিহার্য না হলেও, এটা থাকলে কোনো সমস্যা নেই। তাছাড়া, এটা main.py চালু করার চেষ্টা করছে, যেটা আমার কাছে নেই।
  6. recipe-app ফোল্ডারে Dockerfile নামে একটি ফাইল তৈরি করুন এবং এই বিষয়বস্তুগুলো পেস্ট করুন:
    FROM python:3.11-slim-bookworm
    
    WORKDIR /app
    
    COPY requirements.txt .
    RUN pip install --no-cache-dir --upgrade pip && \
        pip install --no-cache-dir -r requirements.txt
    
    COPY . .
    
    CMD ["streamlit", "run", "Home.py"]
    
  7. জেমিনি চ্যাট উইন্ডোর মাধ্যমে কাজ করতে পারে, তবে এটি সরাসরি আপনার কোড ফাইলে কমেন্ট ব্যবহার করেও কাজ করতে পারে, যেমনটা আমরা ডেটা র‍্যাঙ্গলিং নোটবুকে ব্যবহার করেছি। এছাড়া, উইন্ডোজে Control+i অথবা ম্যাকে Command+i ব্যবহার করেও এটিকে চালু করা যেতে পারে। Dockerfile এর যেকোনো জায়গায় ক্লিক করুন এবং উপযুক্ত Command+i / Control+i কমান্ড ব্যবহার করে জেমিনি সক্রিয় করুন।
  8. নির্দেশনা অনুযায়ী নিচের তথ্যগুলো প্রবেশ করান। পরিবর্তনটি যাচাই করে গ্রহণ করুন
    Please comment the current file.
    
    কী দারুণ ব্যাপার, তাই না?! কতবার এমন হয়েছে যে আপনাকে অন্য কারো কোড নিয়ে কাজ করতে হয়েছে, আর নিজের পরিবর্তনগুলো শুরু করার আগেই তাদের কমেন্টবিহীন কাজটি সম্পর্কে প্রাথমিক ধারণা পেতে সময় নষ্ট করতে হয়েছে? এবার ত্রাতা হিসেবে হাজির জেমিনি!
  9. এখন জেমিনিকে জিজ্ঞাসা করুন, কীভাবে আপনি ক্লাউড রান ব্যবহার করে বর্তমান ফোল্ডারের ডকারফাইল থেকে recipe-web-app নামের একটি নতুন ইমেজ বিল্ড এবং ডিপ্লয় করতে পারেন।
    How could I use gcloud to build a new Cloud Run service named recipe-web-app from the current directory?
    
  10. চলুন আমাদের অ্যাপ্লিকেশনটি বিল্ড এবং ডিপ্লয় করি। টার্মিনাল উইন্ডোতে gcloud run deploy কমান্ডটি চালান।
    gcloud run deploy recipe-web-app \
        --allow-unauthenticated \
        --source=. \
        --region=us-central1 \
        --port=8501
    
    যদি আপনাকে একটি আর্টিফ্যাক্ট রেজিস্ট্রি রিপোজিটরি তৈরি করার জন্য প্রম্পট দেখানো হয়, তাহলে enter/return চাপুন।
    Deploying from source requires an Artifact Registry Docker repository to store built containers. A repository
    named cloud-run-source-deploy in region us-central1 will be created.
    
    Do you want to continue (Y/n)?
    
  11. আপনি যদি বিল্ড প্রক্রিয়াটি দেখেন, তাহলে দেখবেন এটি প্রথমে আর্টিফ্যাক্ট রেজিস্ট্রি ডকার রিপোটি বিল্ড করবে। এরপর, এটি ক্লাউড বিল্ড ব্যবহার করে লোকাল ফোল্ডারের ডকারফাইল থেকে কন্টেইনার ইমেজ তৈরি করবে। সবশেষে, ডকার ইমেজটি একটি নতুন ক্লাউড রান সার্ভিসে ডেপ্লয় করা হবে। স্ক্রিপ্টটির শেষে আপনি ব্যবহারের জন্য একটি ক্লাউড রান টেস্ট ইউআরএল পাবেন।

প্রাপ্ত লিঙ্কটি আপনার ব্রাউজারের একটি নতুন ট্যাবে খুলুন। একটু সময় নিয়ে অ্যাপ্লিকেশনটির গঠন এবং পৃষ্ঠাগুলো ঘুরে দেখুন। বেশ, এবার আমাদের জেনারেটিভ এআই কার্যকারিতাটি যুক্ত করতে হবে।

১২. রান্নার পরামর্শ পৃষ্ঠাটিকে আমাদের রান্নার বই খোঁজার এজেন্ট বিল্ডার অ্যাপের সাথে সংযুক্ত করুন।

আমাদের ওয়েব অ্যাপ্লিকেশনের ফ্রেমওয়ার্কটি চালু আছে, কিন্তু আমাদের দুটি ওয়ার্ক পেজকে দুটি Vertex AI Agent Builder সার্চ অ্যাপের সাথে সংযুক্ত করতে হবে। চলুন, রান্নার পরামর্শ (Cooking Advice) দিয়ে শুরু করা যাক।

  1. আপনার ক্লাউড শেল এডিটর ট্যাবটি খোলা রাখুন। গুগল ক্লাউড কনসোলে, সার্চ ব্যবহার করে ভার্টেক্স এআই -এর চ্যাট (Chat in Vertex AI) অপশনে যান।
  2. ডানদিকের সেটিংস পেজ প্যানে মডেলটি gemini-1.5-flash-002- এ সেট করুন। আউটপুট টোকেন লিমিটটি সর্বোচ্চ পর্যন্ত স্লাইড করুন, যাতে প্রয়োজনে মডেলটি আরও দীর্ঘ উত্তর দিতে পারে। সেফটি ফিল্টার সেটিংস খুলুন। হেট স্পিচ, সেক্সুয়ালি এক্সপ্লিসিট কন্টেন্ট এবং হ্যারাসমেন্ট কন্টেন্ট-কে 'ব্লক সাম'- এ সেট করুন। ডেঞ্জারাস কন্টেন্ট-কে 'ব্লক ফিউ'-তে সেট করে সেভ করুন । আমরা ডেঞ্জারাস কন্টেন্ট কিছুটা নিচে সেট করছি, কারণ ছুরি এবং কাটার বিষয়ে কথা বলাকে জেমিনি সহিংসতা হিসেবে ভুল ব্যাখ্যা করতে পারে।
  3. গ্রাউন্ডিং চালু করতে টগলটি স্লাইড করুন, তারপর কাস্টমাইজ-এ ক্লিক করুন। গ্রাউন্ডিং সোর্স হিসেবে ভার্টেক্স এআই সার্চ (Vertex AI search) সেট করুন এবং ডেটাস্টোর পাথের (datastore path) জন্য নিম্নলিখিতটি ব্যবহার করুন। এই নির্দেশাবলীতে এন্ড ল্যাব (End Lab) বাটনের কাছে থাকা প্রজেক্ট আইডি-টি YOUR_PROJECT_ID-তে পরিবর্তন করুন, তারপর গ্রাউন্ডিং সেটিংস সেভ (Save) করুন।
    projects/YOUR_PROJECT_ID/locations/global/collections/default_collection/dataStores/old-cookbooks-id
    
    দ্রষ্টব্য: যদি কোনো ত্রুটি দেখা দেয়, তাহলে হয় আপনি আপনার প্রজেক্ট আইডিটি আসল প্রজেক্ট আইডিতে পরিবর্তন করেননি, অথবা আপনি old-cookbooks এজেন্ট বিল্ডার ডেটা স্টোর আইডি পরিবর্তন করার ধাপটি বাদ দিয়েছেন। এর আসল ডেটা স্টোর আইডি জানতে আপনার এজেন্ট বিল্ডার > ডেটা স্টোর > old-cookbooks দেখুন।
  4. কয়েকটি চ্যাট বার্তা পরীক্ষা করে দেখুন। নিচেরটি দিয়ে শুরু করতে পারেন। চাইলে আরও কয়েকটি চেষ্টা করে দেখতে পারেন।
    How can I tell if a tomato is ripe?
    
  5. মডেলটি কাজ করছে, এবার চলুন কোডটি নিয়ে পরীক্ষা করা যাক। 'Clear Conversation'- এ ক্লিক করুন যাতে আমাদের কথোপকথনগুলো কোডের অংশ না হয়ে যায়, তারপর 'Get Code'-এ ক্লিক করুন। কথোপকথন পরিষ্কার করুন এবং কোডটি পান
  6. কোড উইন্ডোর উপরে, 'ওপেন নোটবুক' চাপুন, যাতে আমরা আমাদের অ্যাপে কোডটি ইন্টিগ্রেট করার আগে কোলাব এন্টারপ্রাইজে এটি নিয়ে পরীক্ষা-নিরীক্ষা ও নিখুঁত করে নিতে পারি।
  7. কোডটির সাথে পরিচিত হতে কয়েক মিনিট সময় নিন। চলুন, এটিকে আমাদের প্রয়োজন অনুযায়ী মানিয়ে নিতে কয়েকটি পরিবর্তন করি। শুরু করার আগে, কম্পিউটের সাথে সংযোগ স্থাপন করতে এবং এআই প্ল্যাটফর্ম এসডিকে (AI Platform SDK) ইনস্টল করতে প্রথম কোড সেলটি রান করুন। ব্লকটি রান হওয়ার পর আপনাকে সেশনটি পুনরায় চালু করার জন্য বলা হবে। সেটি করে ফেলুন।
  8. Vertex AI Studio থেকে নেওয়া কোডটিতে যান। multiturn_generate_content মেথডটির নাম পরিবর্তন করে start_chat_session রাখুন।
  9. model = GenerativeModel( ` মেথড কলটিতে যান। বিদ্যমান কোডটি ` generation_config এবং safety_settings সংজ্ঞায়িত করে, কিন্তু বাস্তবে সেগুলো ব্যবহার করে না। ` GenerativeModel তৈরির পদ্ধতিটি পরিবর্তন করে এমনভাবে সাজান যাতে এটি নিম্নোক্ত রূপ ধারণ করে:
    model = GenerativeModel(
        "gemini-1.5-flash-002",
        tools=tools,
        generation_config=generation_config,
        safety_settings=safety_settings,
    )
    
  10. সবশেষে, মেথডটিতে chat = model.start_chat() ঠিক নিচে একটি চূড়ান্ত লাইন যোগ করুন, যাতে ফাংশনটি chat অবজেক্টটি রিটার্ন করে। সম্পূর্ণ ফাংশনটি নিচের মতো দেখতে হবে। দ্রষ্টব্য: এই কোডটি আপনার নোটবুকে কপি করবেন না। এটি শুধুমাত্র একটি সাধারণ যাচাইয়ের জন্য এখানে রাখা হয়েছে।
    def start_chat_session():
        vertexai.init(project="qwiklabs-gcp-02-9a7298ceaaec", location="us-central1")
        tools = [
            Tool.from_retrieval(
                retrieval=grounding.Retrieval(
                    source=grounding.VertexAISearch(datastore="projects/qwiklabs-gcp-02-9a7298ceaaec/locations/global/collections/default_collection/dataStores/old-cookbooks-id"),
                )
            ),
        ]
        model = GenerativeModel(
            "gemini-1.5-flash-002",
            tools=tools,
            generation_config=generation_config,
            safety_settings=safety_settings,
        )
        chat = model.start_chat()
        return chat
    
  11. কোড সেলের একদম নিচে যান এবং পুরোনো ফাংশনটিকে কল করা শেষ লাইনটি পরিবর্তন করে নতুন ফাংশনটিকে কল করুন ও রিটার্ন করা অবজেক্টটি chat একটি ভেরিয়েবলে সংরক্ষণ করুন। আপনার পরিবর্তনগুলো সম্পন্ন হলে, সেলটি রান করুন।
    chat = start_chat_session()
    
  12. একটি নতুন কোড সেল তৈরি করুন এবং # Use chat to invoke Gemini and print out the response কমেন্টটি যোগ করুন। পরের লাইনে গিয়ে resp টাইপ করুন এবং Gemini আপনার জন্য ব্লকটি অটো কমপ্লিট করে দেবে। প্রম্পটটি “ How can I tell if a tomato is ripe? -এ আপডেট করুন। সেলটি রান করুন।
    response = chat.send_message("How can I tell if a tomato is ripe?")
    print(response)
    
  13. প্রতিক্রিয়াটা ঠিকই আছে, কিন্তু আমরা আসলে ওই নেস্টেড text ফিল্ডটি চাই। শুধু ওই অংশটি প্রিন্ট করার জন্য কোডব্লকটি পরিবর্তন করুন, যেমন:
    response = chat.send_message("How can I tell if a tomato is ripe?")
    print(response.candidates[0].content.parts[0].text)
    
  14. বেশ, এখন যেহেতু আমাদের কাছে কার্যকরী চ্যাট কোড আছে, চলুন এটিকে আমাদের ওয়েব অ্যাপ্লিকেশনে যুক্ত করি। start_chat_session ফাংশনটি তৈরি করে এমন কোড সেলের সমস্ত কন্টেন্ট কপি করুন (আমাদের টেস্ট সেলটির প্রয়োজন হবে না)। সেলটিতে ক্লিক করলে আপনি উপরের ডান কোণায় থাকা ট্রিপল ডট মেনুতে ক্লিক করে সেখান থেকে কপি করতে পারবেন। কপি সেল
  15. আপনার ক্লাউড শেল এডিটর ট্যাবে যান এবং সম্পাদনার জন্য pages\Cooking_Advice.py খুলুন।
  16. মন্তব্যটি খুঁজুন:
    #
    # Add the code you copied from your notebook below this message
    #
    
  17. আপনার কপি করা কোডটি ‘ Add the code’ কমেন্টের ঠিক নিচে পেস্ট করুন। চমৎকার, এখন আমাদের কাছে সেই অংশটি আছে যা জেমিনিতে একটি গ্রাউন্ডেড কলের মাধ্যমে চ্যাট ইঞ্জিনটিকে চালনা করে। এবার চলুন এটিকে স্ট্রিমলিটে ইন্টিগ্রেট করি।
  18. কমেন্টের ঠিক নিচে কমেন্ট করা কোডের অংশটি খুঁজুন:
    #
    # Here's the code to setup your session variables
    # Uncomment this block when instructed
    #
    
  19. কোডের এই অংশটি (পরবর্তী Setup done, let's build the page UI ) আনকমেন্ট করুন এবং এটি খতিয়ে দেখুন। এটি চ্যাট এবং হিস্ট্রি সেশন ভেরিয়েবল তৈরি বা পুনরুদ্ধার করে।
  20. এরপরে, আমাদের UI-তে হিস্ট্রি এবং চ্যাট ফাংশনালিটি যুক্ত করতে হবে। নিচের কমেন্টটি না পাওয়া পর্যন্ত কোডটি স্ক্রল করুন।
    #
    # Here's the code to create the chat interface
    # Uncomment the below code when instructed
    #
    
  21. কমেন্টের নিচের বাকি কোডটি আনকমেন্ট করুন এবং কিছুক্ষণ সময় নিয়ে এটি খতিয়ে দেখুন। আপনি চাইলে, এটি হাইলাইট করে জেমিনিকে দিয়ে এর কার্যকারিতা ব্যাখ্যা করিয়ে নিতে পারেন।
  22. চমৎকার, এবার চলুন অ্যাপ্লিকেশনটি তৈরি করে ডেপ্লয় করি। ইউআরএলটি ফিরে এলে, অ্যাপ্লিকেশনটি চালু করে কুকিং অ্যাডভাইজার পেজটি ব্যবহার করে দেখুন। হয়তো এটিকে পাকা টমেটো সম্পর্কে জিজ্ঞাসা করতে পারেন, অথবা বটটি ব্রাসেলস স্প্রাউটস তৈরির কোনো ভালো উপায় জানে।
    gcloud run deploy recipe-web-app \
        --allow-unauthenticated \
        --source=. \
        --region=us-central1 \
        --port=8501
    

কী দারুণ ব্যাপার! আপনার নিজের ব্যক্তিগত এআই রান্নার উপদেষ্টা :-)

১৩. (ঐচ্ছিক) রেসিপি সার্চ পেজটিকে রেসিপি-সার্চ এজেন্ট বিল্ডার অ্যাপের সাথে সংযুক্ত করুন।

যখন আমরা রান্নার পরামর্শ পৃষ্ঠাটিকে এর মূল উৎসের সাথে সংযুক্ত করেছিলাম, তখন আমরা সরাসরি জেমিনি এপিআই (Gemini API) ব্যবহার করে তা করেছিলাম। রেসিপি অনুসন্ধানের জন্য, চলুন সরাসরি ভার্টেক্স এআই এজেন্ট বিল্ডার (Vertex AI Agent Builder) সার্চ অ্যাপের সাথে সংযোগ করি।

  1. আপনার ক্লাউড শেল এডিটরে, সম্পাদনার জন্য pages/Recipe_Search.py ​​পৃষ্ঠাটি খুলুন। পৃষ্ঠাটির গঠন পরীক্ষা করে দেখুন।
  2. ফাইলের উপরের দিকে আপনার প্রজেক্ট আইডি সেট করুন।
  3. search_sample ফাংশনটি পরীক্ষা করুন। এই কোডটি কমবেশি সরাসরি এখান থেকে ডিসকভারি ইঞ্জিন ডকুমেন্টেশন থেকে নেওয়া হয়েছে। আপনি এখানে এই নোটবুকে এর একটি কার্যকরী কপি খুঁজে পেতে পারেন। আমি একমাত্র যে পরিবর্তনটি করেছি তা হলো, শুধু results-এর পরিবর্তে response.results রিটার্ন করা। এটি ছাড়া, রিটার্ন টাইপটি এমন একটি অবজেক্ট হয় যা রেজাল্টগুলোর মধ্যে দিয়ে পেজ করার জন্য ডিজাইন করা হয়েছে, এবং আমাদের বেসিক অ্যাপ্লিকেশনের জন্য এটির প্রয়োজন নেই।
  4. ফাইলটির একদম শেষে যান এবং Here are the first 5 recipes I found নিচের সম্পূর্ণ অংশটি আনকমেন্ট করুন।
  5. আপনি এইমাত্র যে অংশটি আনকমেন্ট করেছেন, তার পুরোটা হাইলাইট করুন এবং জেমিনি কোড চ্যাট খুলুন। জিজ্ঞাসা করুন, Explain the highlighted code । যদি আপনার কিছু নির্বাচিত না থাকে, জেমিনি পুরো ফাইলটি ব্যাখ্যা করতে পারে। আপনি যদি কোনো অংশ হাইলাইট করে জেমিনিকে তা ব্যাখ্যা করতে, মন্তব্য করতে বা উন্নত করতে বলেন, জেমিনি তা করবে। একটু সময় নিয়ে ব্যাখ্যাটি পড়ে দেখুন। উল্লেখ্য যে, আপনার অ্যাপ্লিকেশনে জেমিনি এপিআই (API) ইন্টিগ্রেট করার আগে সেগুলো সম্পর্কে জানার জন্য কোলাব এন্টারপ্রাইজ নোটবুক ব্যবহার করা একটি চমৎকার উপায়। এটি বিশেষ করে কিছু নতুন এপিআই সম্পর্কে জানতে সহায়ক, যেগুলোর ডকুমেন্টেশন হয়তো যতটা ভালো হওয়া উচিত ততটা ভালো নয়।
  6. আপনার এডিটর টার্মিনাল উইন্ডোতে, চূড়ান্ত অ্যাপ্লিকেশনটি ডেপ্লয় করতে build.sh চালান। পরবর্তী ধাপে যাওয়ার আগে নতুন সংস্করণটি ডেপ্লয় হওয়া পর্যন্ত অপেক্ষা করুন।

১৪. (ঐচ্ছিক) চূড়ান্ত অ্যাপ্লিকেশনটি অন্বেষণ করুন।

চূড়ান্ত অ্যাপ্লিকেশনটি খতিয়ে দেখতে কয়েক মিনিট সময় নিন।

  1. গুগল ক্লাউড কনসোলে, সার্চ ব্যবহার করে Cloud Run -এ যান, তারপর আপনার রেসিপি-ওয়েব-অ্যাপ- এ ক্লিক করুন।
  2. অ্যাপ্লিকেশন টেস্ট ইউআরএলটি (উপরের দিকে) খুঁজে বের করুন এবং একটি নতুন ব্রাউজার ট্যাবে এটি খুলুন।
  3. অ্যাপ্লিকেশনটির হোম পেজটি প্রদর্শিত হবে। Streamlit-এর দেওয়া মৌলিক লেআউট এবং নেভিগেশনটি লক্ষ্য করুন, যেখানে pages ফোল্ডারের পাইথন ফাইলগুলো নেভিগেশনের বিকল্প হিসেবে প্রদর্শিত হচ্ছে এবং Home.py হোম পেজ হিসেবে লোড হয়েছে। `Cooking Advice` পেজটিতে যান।
  4. After a few moments the chat interface will appear. Again, note the nice core layout provided by Streamlit.
  5. Try a few cooking cooking related questions and see how the bot functions. Something like:
    Do you have any advice for preparing broccoli?
    
    How about a classic chicken soup recipe?
    
    Tell me about meringue.
    
  6. Now let's find a recipe or two. Navigate to the Recipe Search page and try a few searches. Something like:
    Chili con carne
    
    Chili, corn, rice
    
    Lemon Meringue Pie
    
    A dessert containing strawberries
    

১৫. অভিনন্দন!

You have created an application leveraging Vertex AI Agent Builder applications. Along the way you've explored Gemini Cloud Assist, Gemini Code Assist, and the natural language to SQL features of BigQuery's Data Canvas. Fantastic job!

পরিষ্কার করা

Cloud SQL does not have a free tier and will charge you if you continue to use it. You can delete your Cloud project to avoid incurring additional charges.

While Cloud Run does not charge when the service is not in use, you might still be charged for storing the container image in Artifact Registry. Deleting your Cloud project stops billing for all the resources used within that project.

If you would like, delete the project:

gcloud projects delete $GOOGLE_CLOUD_PROJECT

You may also wish to delete unnecessary resources from your cloudshell disk. You can:

  1. Delete the codelab project directory:
    rm -rf ~/task-app
    
  2. Warning! This next action is can't be undone! If you would like to delete everything on your Cloud Shell to free up space, you can delete your whole home directory . Be careful that everything you want to keep is saved somewhere else.
    sudo rm -rf $HOME