এআই এজেন্ট এন্ড টু এন্ড - ওয়ার্কশপ

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

এআই এজেন্ট ভাইব ফুল স্ট্যাক

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

এই কর্মশালাটি পেশাদার সফটওয়্যার ডেভেলপমেন্ট লাইফসাইকেল (SDLC)-এর প্রতিটি পর্যায়ে এআই-এর সাথে অংশীদারিত্বের জন্য একটি সুসংগঠিত ও পুনরাবৃত্তিযোগ্য কার্যপদ্ধতি প্রদান করে। আপনি লাইন-বাই-লাইন কোড লেখক থেকে একজন টেকনিক্যাল ডিরেক্টরে রূপান্তরিত হবেন—একজন দূরদর্শী স্থপতি এবং একজন প্রধান ঠিকাদার, যিনি সেই দূরদৃষ্টিকে নির্ভুলভাবে বাস্তবায়ন করতে এআই ব্যবহার করেন। 🚀

ডেমো

এই টিউটোরিয়ালটি শেষে আপনি যা শিখবেন:

  • এআই ব্যবহার করে একটি উচ্চ-স্তরের ধারণাকে ক্লাউড আর্কিটেকচারে রূপান্তরিত করা হয়েছে।
  • নির্দিষ্ট প্রম্পট সহ একটি সম্পূর্ণ পাইথন ব্যাকএন্ড তৈরি করা হয়েছে।
  • কোড ডিবাগ ও সংশোধন করতে পেয়ার প্রোগ্রামার হিসেবে এআই ব্যবহার করা হয়েছে।
  • মক টেস্ট সহ ইউনিট টেস্ট তৈরির দায়িত্ব এআই-কে অর্পণ করা হয়েছে।
  • টেরাফর্ম ব্যবহার করে প্রোডাকশন-রেডি ইনফ্রাস্ট্রাকচার অ্যাজ কোড (IaC) তৈরি করা হয়েছে।
  • গিটহাব অ্যাকশনস-এ একটিমাত্র প্রম্পট ব্যবহার করে একটি সম্পূর্ণ CI/CD পাইপলাইন তৈরি করা হয়েছে।
  • এআই-চালিত অপারেশনাল টুল ব্যবহার করে আপনার লাইভ অ্যাপ্লিকেশন পর্যবেক্ষণ ও পরিচালনা করা হয়েছে।

আপনি শুধু একটি কার্যকরী অ্যাপ নিয়েই যাবেন না, বরং এআই-সহায়তাযুক্ত ডেভেলপমেন্টের একটি ব্লুপ্রিন্টও পাবেন। চলুন শুরু করা যাক!

২. পূর্বশর্ত ও প্রস্তুতি

শুরু করার আগে, চলুন আপনার পরিবেশ প্রস্তুত করে নিই। কর্মশালার অভিজ্ঞতা নির্বিঘ্ন করার জন্য এটি একটি অত্যন্ত গুরুত্বপূর্ণ পদক্ষেপ।

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

ধাপ ১: বিলিং অ্যাকাউন্ট সক্রিয় করুন

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

ধাপ ২: একটি নতুন GCP প্রজেক্ট তৈরি করুন

একটি নতুন জিসিপি অ্যাকাউন্ট তৈরি করুন

  • বাম প্যানেল খুলুন, Billing ক্লিক করুন এবং বিলিং অ্যাকাউন্টটি এই জিসিপি অ্যাকাউন্টের সাথে লিঙ্ক করা আছে কিনা তা পরীক্ষা করুন।

বিলিং অ্যাকাউন্টটি জিসিপি অ্যাকাউন্টের সাথে লিঙ্ক করুন

আপনি যদি এই পৃষ্ঠাটি দেখতে পান, তাহলে manage billing account চেক করুন, 'Google Cloud Trial One' বেছে নিন এবং সেটির সাথে লিঙ্ক করুন।

ধাপ ৩: আপনার জেমিনি এপিআই কী তৈরি করুন

চাবিটি সুরক্ষিত করার আগে, আপনার কাছে একটি চাবি থাকতে হবে।

  • গুগল এআই স্টুডিওতে যান: https://aistudio.google.com/
  • আপনার জিমেইল অ্যাকাউন্ট দিয়ে সাইন ইন করুন।
  • সাধারণত বাম দিকের নেভিগেশন প্যানে বা উপরের ডান কোণায় থাকা 'Get API key' বোতামটিতে ক্লিক করুন। নতুন প্রজেক্টে এপিআই কী তৈরি করুন
  • "API keys" ডায়ালগ বক্সে, "Create API key in new project"-এ ক্লিক করুন। নতুন প্রজেক্টে এপিআই কী তৈরি করুন
  • আপনার তৈরি করা নতুন প্রজেক্টটি বেছে নিন, যেটিতে বিলিং অ্যাকাউন্ট সেট আপ করা আছে। নতুন প্রকল্পটি বেছে নিন

নতুন প্রকল্পটি বেছে নিন

  • আপনার জন্য একটি নতুন এপিআই কী তৈরি করা হবে।

এপিআই কী

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

গিটহাব প্রমাণীকরণ

Google Cloud Console- এ গিয়ে, উপরের ডানদিকের "Activate Cloud Shell" বোতামে ক্লিক করে Cloud Shell খুলুন।

ধাপ ১: ক্লাউড শেল খুলুন

👉Google Cloud কনসোলের উপরে থাকা 'Activate Cloud Shell'-এ ক্লিক করুন (এটি Cloud Shell পেনের উপরে থাকা টার্মিনালের আকৃতির আইকন), মেঘ-খোলস.png

👉'ওপেন এডিটর' বোতামে (এটি দেখতে পেন্সিলসহ একটি খোলা ফোল্ডারের মতো) ক্লিক করুন। এটি উইন্ডোতে ক্লাউড শেল কোড এডিটর খুলে দেবে। আপনি বাম দিকে একটি ফাইল এক্সপ্লোরার দেখতে পাবেন। open-editor.png

👉এডিটর খুলে গেলে, ক্লাউড IDE-তে টার্মিনালটি খুলুন,

03-05-new-terminal.png

👉💻 টার্মিনালে, নিম্নলিখিত কমান্ডটি ব্যবহার করে যাচাই করুন যে আপনি ইতিমধ্যেই প্রমাণীকৃত এবং প্রজেক্টটি আপনার প্রজেক্ট আইডিতে সেট করা আছে:

gcloud auth list

ধাপ ২: গিটহাব ও ফর্কের সাথে প্রমাণীকরণ করুন

গিটহাবের মাধ্যমে প্রমাণীকরণ করুন:

👉💻 কমান্ডটি কপি করে আপনার ক্লাউড টার্মিনালে পেস্ট করুন:

gh auth login
  • "আপনি GitHub কোথায় ব্যবহার করেন", এর উত্তরে "GitHub.com" নির্বাচন করুন।
  • "এই হোস্টে গিট অপারেশনের জন্য আপনার পছন্দের প্রোটোকল কী?", "HTTPS" নির্বাচন করুন।
  • "আপনার GitHub ক্রেডেনশিয়াল দিয়ে Git প্রমাণীকরণ করবেন?", "হ্যাঁ" নির্বাচন করুন।
  • "আপনি কীভাবে GitHub CLI-তে প্রমাণীকরণ করতে চান?", "ওয়েব ব্রাউজার দিয়ে লগইন করুন" নির্বাচন করুন।

গুরুত্বপূর্ণ!! এখনও "এন্টার" চাপবেন না। git1.png

লগইন ও ভেরিফাই পেজে যাওয়ার জন্য টার্মিনাল থেকে কোডটি কপি করুন।

git2.png

কোড প্রবেশ করানো শেষ হলে, আপনার ক্লাউড শেল টার্মিনালে ফিরে যান এবং এগিয়ে যাওয়ার জন্য 'এন্টার' চাপুন।

প্রবেশ করুন

ধাপ ৪: রিপোটি ফর্ক এবং ক্লোন করুন:

👉💻 কমান্ডটি কপি করে আপনার ক্লাউড টার্মিনালে পেস্ট করুন:

gh repo fork cuppibla/storygen-learning --clone=true

৩. আর্কিটেকচার: ক্লাউড অ্যাসিস্টের সাহায্যে ধারণা থেকে নকশা পর্যন্ত

প্রতিটি দুর্দান্ত প্রকল্প একটি সুস্পষ্ট রূপকল্প দিয়ে শুরু হয়। আমরা আমাদের অ্যাপের কাঠামো নকশা করতে আমাদের এআই সহ-পাইলট, ক্লাউড অ্যাসিস্ট-কে ব্যবহার করব।

স্থাপত্য

কর্ম

  • গুগল ক্লাউড কনসোল খুলুন: [https://console.cloud.google.com](Google Cloud Console)
  • উপরের ডান কোণায়, 'ওপেন ক্লাউড অ্যাসিস্ট চ্যাট'-এ ক্লিক করুন।

ক্লাউড_অ্যাসিস্ট_১

ক্লাউড অ্যাসিস্ট সক্রিয় করুন

  • Get Gemini Assist ক্লিক করুন, তারপর Enable Cloud Assist at no cost
  • এবং চ্যাটিং শুরু করুন!

ক্লাউড_অ্যাসিস্ট_৩ ক্লাউড অ্যাসিস্টকে নিম্নলিখিত বিস্তারিত নির্দেশ প্রদান করুন:

আপনার ধারণা দিন

Generate a Python web application that uses AI to generate children's stories and illustrations. It has Python backend and React frontend host separately on Cloudrun. They communicate through Websocket. It needs to use a generative model for text and another for images. The generated images must be used by Imagen from Vertex AI and stored in a Google Cloud Storage bucket so that frontend can fetch from the bucket to render images. I do not want any load balancer or a database for the story text. We need a solution to store the API key.

আপনার অ্যাপের ব্লুপ্রিন্ট নিন

  • "অ্যাপ ডিজাইন সম্পাদনা করুন"-এ ক্লিক করুন, আপনি ডায়াগ্রামটি দেখতে পাবেন। টেরাফর্ম কোড ডাউনলোড করতে উপরের ডানদিকের প্যানেলে থাকা "<> কোড পান"-এ ক্লিক করুন।
  • ক্লাউড অ্যাসিস্ট একটি আর্কিটেকচার ডায়াগ্রাম তৈরি করবে। এটিই আমাদের দৃশ্যমান নকশা। ক্লাউড_অ্যাসিস্ট_৪

এই কোডটির জন্য কোনো পদক্ষেপের প্রয়োজন নেই। আরও ব্যাখ্যার জন্য নিচে পড়ুন।

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

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

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

  • স্বয়ংক্রিয় নির্মাণ: নির্ভরযোগ্যভাবে বারবার একই পরিবেশ তৈরি করুন।
  • ভার্সন কন্ট্রোল ব্যবহার করুন: আপনার অ্যাপ্লিকেশন কোডের মতোই, গিট-এ আপনার ইনফ্রাস্ট্রাকচারের পরিবর্তনগুলো ট্র্যাক করুন।
  • ভুল প্রতিরোধ করুন: ওয়েব ইন্টারফেসে ক্লিক করার সময় যে হস্তচালিত ভুলগুলো হতে পারে, সেগুলো এড়িয়ে চলুন।

এই ওয়ার্কশপের জন্য আপনাকে নিজে থেকে এই টেরাফর্ম কোডটি চালাতে হবে না। এটিকে একটি পেশাদার ব্লুপ্রিন্ট—অর্থাৎ আসন্ন ধাপগুলোতে আপনি যে ইনফ্রাস্ট্রাকচার তৈরি ও ডেপ্লয় করবেন তার 'উত্তরপত্র'—হিসেবে ভাবুন।

৪. উন্নয়ন: জেমিনি সিএলআই-এর পরিচিতি

👉💻 আপনার ক্লাউড শেল টার্মিনালে, আপনার ব্যক্তিগত ডিরেক্টরিতে যান।

cd ~/storygen-learning

👉💻 প্রথমবারের জন্য মিথুন রাশি চেষ্টা করুন।

clear
gemini --model=gemini-2.5-flash

যদি আপনাকে জিজ্ঞাসা করা হয় Do you want to connect Cloud Shell editor to Gemini CLI? , তাহলে “না” নির্বাচন করুন।

👉✨ প্রতিটি জেমিনি টুলের বিবরণ রয়েছে। এখনই সেগুলো পড়ুন। জেমিনি প্রম্পটে টাইপ করুন:

জেমিনি সিএলআই-তে

/help

👉✨ জেমিনি সিএলআই-এর নিজস্ব কিছু অন্তর্নির্মিত ক্ষমতা রয়েছে। সেগুলো পরীক্ষা করতে:

জেমিনি সিএলআই-তে

/tools

আপনি ReadFile , WriteFile , এবং GoogleSearch সহ একটি তালিকা দেখতে পাবেন। এগুলো হলো ডিফল্ট পদ্ধতি যা আপনি কোনো বাহ্যিক ব্যবস্থার সাহায্য ছাড়াই ব্যবহার করতে পারেন।

👉✨ জেমিনি ব্লেড তার কার্যকলাপ পরিচালনার জন্য 'কৌশলগত সচেতনতা' (প্রসঙ্গ) ধারণ করতে পারে।

জেমিনি সিএলআই-তে

/memory show

এটি বর্তমানে খালি, একটি ফাঁকা খাতা।

👉✨ প্রথমে, এজেন্টের মেমরিতে একটি পার্সোনা যোগ করুন। এটি তার দক্ষতার ক্ষেত্র নির্ধারণ করবে:

জেমিনি সিএলআই-তে

/memory add "I am master at python development"

আপনার ব্লেড এই তথ্যটি গ্রহণ করেছে কিনা তা নিশ্চিত করতে আবার /memory show চালান।

👉✨ @ চিহ্ন ব্যবহার করে কীভাবে ফাইল রেফারেন্স করতে হয় তা দেখানোর জন্য, চলুন প্রথমে একটি 'মিশন ব্রিফ' ফাইল তৈরি করি।

একটি নতুন টার্মিনাল খুলুন এবং আপনার মিশন ফাইল তৈরি করতে নিম্নলিখিত কমান্ডটি চালান:

!echo "## Mission Objective: Create Imagen ADK Agent for Story Book" > mission.md

👉✨এখন, ব্রিফিংটি বিশ্লেষণ করতে এবং এর ফলাফল জানাতে আপনার Gemini CLI-কে নির্দেশ দিন:

জেমিনি সিএলআই-তে

Explain the contents of the file @mission.md

আপনার প্রধান অস্ত্রটি এখন তার উদ্দেশ্য সম্পর্কে সচেতন।

👉💻 Gemini CLI থেকে বের হতে Ctrl+C দুইবার চাপুন।

শিক্ষা:

যেভাবে জেমিনি সিএলআই তার বিশেষ ক্ষমতা পায়: gemini.md। আমরা সামনে এগোনোর আগে, এটা বোঝা জরুরি যে কীভাবে জেমিনি সিএলআই-কে একটি নির্দিষ্ট প্রকল্পের জন্য উপযোগী করে তোলা যায়। যদিও আপনি এটিকে একটি সাধারণ চ্যাট টুল হিসেবে ব্যবহার করতে পারেন, এর আসল শক্তি আসে একটি বিশেষ কনফিগারেশন ফাইল থেকে: gemini.md।

আপনি যখন gemini কমান্ডটি চালান, তখন এটি স্বয়ংক্রিয়ভাবে বর্তমান ডিরেক্টরিতে একটি gemini.md ফাইল খুঁজে বের করে। এই ফাইলটি এআই-এর জন্য একটি প্রকল্প-নির্দিষ্ট নির্দেশিকা হিসেবে কাজ করে। এটি তিনটি মূল বিষয় সংজ্ঞায়িত করতে পারে:

  • ব্যক্তিত্ব: আপনি এআই-কে বলে দিতে পারেন যে এটি কার ভূমিকা পালন করবে। উদাহরণস্বরূপ, "আপনি গুগল ক্লাউডে বিশেষজ্ঞ একজন দক্ষ পাইথন ডেভেলপার।" এটি তার প্রতিক্রিয়া এবং ধরনকে নির্দিষ্ট দিকে চালিত করে।
  • টুলস: আপনি এটিকে নির্দিষ্ট ফাইল (@file.py) বা এমনকি গুগল সার্চ (@google)-এর অ্যাক্সেস দিতে পারেন। এটি আপনার প্রোজেক্টের কোড সম্পর্কিত প্রশ্নের উত্তর দেওয়ার জন্য AI-কে প্রয়োজনীয় প্রেক্ষাপট সরবরাহ করে।
  • স্মৃতি: আপনি এমন তথ্য বা নিয়ম সরবরাহ করতে পারেন যা এই প্রকল্পের জন্য এআই-কে সর্বদা মনে রাখতে হবে, যা সামঞ্জস্য বজায় রাখতে সাহায্য করে।

একটি gemini.md ফাইল ব্যবহার করে, আপনি সাধারণ জেমিনি মডেলটিকে এমন একজন বিশেষজ্ঞ সহকারীতে পরিণত করতে পারেন, যাকে আপনার প্রকল্পের লক্ষ্য সম্পর্কে আগে থেকেই অবহিত করা হয় এবং যার কাছে সঠিক তথ্যের অ্যাক্সেস থাকে।

৫. উন্নয়ন: Gemini CLI দিয়ে ADK তৈরি করা

এসডিএলসি

পরিবেশ কনফিগারেশন

আপনার ক্লাউড শেলে যান, "ওপেন টার্মিনাল" বোতামে ক্লিক করুন।

  1. পরিবেশ টেমপ্লেটটি কপি করুন:
    cd ~/storygen-learning
    cp ~/storygen-learning/env.template ~/storygen-learning/.env
    

আপনি .env ফাইলটি খুঁজে না পেলে এডিটরে লুকানো ফাইলটি দেখুন।

  • উপরের মেনু বারে থাকা ভিউ (View) -তে ক্লিক করুন।
  • লুকানো ফাইল টগল করুন নির্বাচন করুন।

👉আপনার গুগল ক্লাউড প্রজেক্ট আইডি খুঁজুন:

  • গুগল ক্লাউড কনসোল খুলুন: লিঙ্ক
  • পৃষ্ঠার শীর্ষে থাকা প্রজেক্ট ড্রপ-ডাউন থেকে এই কর্মশালার জন্য আপনি যে প্রজেক্টটি ব্যবহার করতে চান, সেটি নির্বাচন করুন।
  • আপনার প্রজেক্ট আইডি ড্যাশবোর্ডের প্রজেক্ট ইনফো কার্ডে প্রদর্শিত হয়।

👉আপনার গিটহাব ইউজারনেম খুঁজুন:

  • আপনার গিটহাবে যান এবং আপনার গিটহাব ইউজারনেমটি খুঁজুন।

03-04-project-id.png

.env ফাইল সম্পাদনা ২. .env ফাইলে নিম্নলিখিত মানগুলি প্রতিস্থাপন করুন:

GOOGLE_API_KEY=[REPLACE YOUR API KEY HERE]
GOOGLE_CLOUD_PROJECT_ID=[REPLACE YOUR PROJECT ID]
GITHUB_USERNAME=[REPLACE YOUR USERNAME]
GENMEDIA_BUCKET=[REPLACE YOUR PROJECT ID]-bucket

যেমন আপনার প্রজেক্ট আইডি যদি হয়: testproject , তাহলে আপনার উচিত GOOGLE_CLOUD_PROJECT_ID=testproject এবং GENMEDIA_BUCKET=testproject-bucket

সেটআপ স্ক্রিপ্ট

00_Starting_Here-এ যান এবং একটি নতুন টার্মিনাল খুলুন (Gemini CLI-তে নয়)।

cd ~/storygen-learning/00_Starting_Here

সম্পূর্ণ সেটআপটি চালান:

./setup-complete.sh

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

আপনার প্রথম এজেন্ট তৈরি করুন

01a_First_Agent_Ready-তে যান। চলুন Gemini CLI ব্যবহার করে ADK এজেন্ট তৈরি করি:**

cd ~/storygen-learning/01a_First_Agent_Ready

ওপেন জেমিনি সিএলআই

gemini

Gamini CLI উইন্ডোর ভিতরে, এই প্রম্পটটি চেষ্টা করুন:

I need you to help me create a Google ADK (Agent Development Kit) agent for story generation. I'm working on a children's storybook app that generates creative stories with visual scenes.

Please create a complete `agent.py` file that implements an LlmAgent using Google's ADK framework. The agent should:

**Requirements:**
1. Use the `google.adk.agents.LlmAgent` class
2. Use the "gemini-2.5-flash" model (supports streaming)
3. Be named "story_agent"
4. Generate structured stories with exactly 4 scenes each
5. Output valid JSON with story text, main characters, and scene data
6. No tools needed (images are handled separately)

**Agent Specifications:**
- **Model:** gemini-2.5-flash
- **Name:** story_agent  
- **Description:** "Generates creative short stories and accompanying visual keyframes based on user-provided keywords and themes."
**Story Structure Required:**
- Exactly 4 scenes: Setup  Inciting Incident  Climax  Resolution
- 100-200 words total
- Simple, charming language for all audiences
- Natural keyword integration
**JSON Output Format:**

{
  "story": "Complete story text...",
  "main_characters": [
    {
      "name": "Character Name",
      "description": "VERY detailed visual description with specific colors, features, size, etc."
    }
  ],
  "scenes": [
    {
      "index": 1,
      "title": "The Setup",
      "description": "Scene action and setting WITHOUT character descriptions",
      "text": "Story text for this scene"
    }
    // ... 3 more scenes
  ]
}


**Key Instructions for the Agent:**
- Extract 1-2 main characters maximum
- Character descriptions should be extremely detailed and visual
- Scene descriptions focus on ACTION and SETTING only
- Do NOT repeat character appearance in scene descriptions
- Always respond with valid JSON

Please include a complete example in the instructions showing the exact format using keywords like "tiny robot", "lost kitten", "rainy city".

The file should start with necessary imports, define an empty tools list, include a print statement for initialization, and then create the LlmAgent with all the detailed instructions.

Can you create this agent in backend/story_agent/agent.py

কাজ শেষ হলে, Control+C চেপে Gemini CLI টার্মিনালটি বন্ধ করুন।

ঐচ্ছিক , আপনি সরাসরি সমাধান অংশে চলে যেতে পারেন।

এখন ADK ওয়েবে আপনার পরিবর্তন যাচাই করুন

cd ~/storygen-learning/01a_First_Agent_Ready/backend

source ../../.venv/bin/activate

adk web --port 8080

চালিয়ে যেতে আপনার একটি কমান্ড প্রম্পট প্রয়োজন হবে।

ওয়েবসাইটটি চালু করুন

cd ~/storygen-learning/01a_First_Agent_Ready

./start.sh

আপনার পরিবর্তনটি কাজ না করলে, আপনি ADK ওয়েব UI এবং ওয়েবসাইটে ত্রুটি দেখতে পাবেন।

সমাধান এখান থেকে শুরু ——————————————–

সমাধান

পূর্ববর্তী প্রসেসটি বন্ধ করতে Control+C চাপুন অথবা আপনি অন্য একটি টার্মিনাল খুলতে পারেন:

cd ~/storygen-learning/01b_First_Agent_Done

ওয়েবসাইটটি চালু করুন:

./start.sh

আপনি ওয়েবসাইটটি দেখতে পাবেন:

ওয়েবসাইট

ADK UI ব্যবহার করে দেখুন: অন্য একটি টার্মিনাল খুলুন:

cd ~/storygen-learning/01b_First_Agent_Done/backend
source ../../.venv/bin/activate

adk web --port 8080

আপনি ADK UI দেখতে পাবেন যেখানে আপনি এজেন্টকে প্রশ্ন করতে পারবেন।

adkweb

পরবর্তী বিভাগে যাওয়ার আগে, প্রক্রিয়াটি শেষ করতে Ctrl+C চাপুন।

৬. উন্নয়ন: জেমিনি সিএলআই ব্যবহার করে এডিকে নির্মাণ - (কন্টেক্সট ইঞ্জিনিয়ারিং পদ্ধতি)

প্রাথমিক সেটআপ

নিশ্চিত করুন যে আমরা পূর্বে তৈরি করা এজেন্ট ফাইলটি (01a_First_Agent_Ready/backend/story_agent/agent.py-তে) মুছে ফেলেছি:

01a_First_Agent_Ready-তে যান। চলুন Gemini CLI ব্যবহার করে ADK এজেন্ট তৈরি করি:**

cd ~/storygen-learning/01a_First_Agent_Ready/backend

ওপেন জেমিনি সিএলআই

gemini

Gamini CLI উইন্ডোর ভিতরে, এই প্রম্পটটি চেষ্টা করুন:

Summarize the design doc @design.md for me, do not attempt to create file just yet. 

👉💻 কিছুক্ষণের জন্য জেমিনি থেকে বের হতে দুইবার Ctrl+C চাপুন।

👉💻 আপনার টার্মিনালে, নির্দেশিকা ফাইলটি লেখার জন্য নিম্নলিখিত কমান্ডটি চালান।

cat << 'EOF' > GEMINI.md
  ### **Coding Guidelines**
  **1. Python Best Practices:**

  *   **Type Hinting:** All function and method signatures should include type hints for arguments and return values.
  *   **Docstrings:** Every module, class, and function should have a docstring explaining its purpose, arguments, and return value, following a consistent format like reStructuredText or 
  Google Style.
  *   **Linter & Formatter:** Use a linter like `ruff` or `pylint` and a code formatter like `black` to enforce a consistent style and catch potential errors.
  *   **Imports:** Organize imports into three groups: standard library, third-party libraries, and local application imports. Sort them alphabetically within each group.
  *   **Naming Conventions:**
      *   `snake_case` for variables, functions, and methods.
      *   `PascalCase` for classes.
      *   `UPPER_SNAKE_CASE` for constants.
  *   **Dependency Management:** All Python dependencies must be listed in a `requirements.txt` file.

  **2. Web APIs (FastAPI):**

  *   **Data Validation:** Use `pydantic` models for request and response data validation.
  *   **Dependency Injection:** Utilize FastAPI's dependency injection system for managing resources like database connections.
  *   **Error Handling:** Implement centralized error handling using middleware or exception handlers.
  *   **Asynchronous Code:** Use `async` and `await` for I/O-bound operations to improve performance.
EOF
cat GEMINI.md

লিপিবদ্ধ আইনগুলো হাতে নিয়ে, চলো আমাদের এআই সঙ্গীকে পুনরায় ডেকে আনি এবং প্রত্নবস্তুটির জাদু প্রত্যক্ষ করি।

👉💻 শ্যাডোব্লেড ডিরেক্টরি থেকে জেমিনি সিএলআই পুনরায় চালু করুন:

cd ~/storygen-learning/01a_First_Agent_Ready/backend
clear
gemini

👉✨ এবার, মিথুন রাশিকে জিজ্ঞাসা করুন সে কী ভাবছে। তার মনের কথা জানা গেছে।

/memory show 

👉✨ এটিই সেই শক্তিশালী কমান্ড যা আপনার এজেন্ট তৈরি করবে। এখনই এটি ব্যবহার করুন:

You are an expert Python developer specializing in the Google Agent Development Kit (ADK). Your task is to write the complete, production-quality code for `agent.py` by following the technical specifications outlined in the provided design document verbatim.

Analyze the design document at `@design.md` and generate the corresponding Python code for `agent.py`.

I need you to generate a Python script based on the provided design document and reference examples. Follow these requirements:

Read the design document carefully - it contains the complete technical specification for the code you need to write
Follow the structure and patterns shown in the reference context files
Adhere to all Python best practices specified in the coding standards document
Implement every requirement mentioned in the design document exactly as specified
Use the exact variable names, function names, and string values mentioned in the specifications

The design document describes the complete architecture, dependencies, configuration, and logic flow. Your generated code must match these specifications precisely while following professional Python coding standards.
Generate clean, production-ready Python code that can be used immediately without modifications.

কাজ শেষ হলে, Control+C চেপে Gemini CLI টার্মিনালটি বন্ধ করুন।

ঐচ্ছিক , আপনি সরাসরি সমাধান অংশে চলে যেতে পারেন।

এখন ADK ওয়েবে আপনার পরিবর্তন যাচাই করুন

cd ~/storygen-learning/01a_First_Agent_Ready/backend

source ../../.venv/bin/activate

adk web --port 8080

চালিয়ে যেতে আপনার একটি কমান্ড প্রম্পট প্রয়োজন হবে।

ওয়েবসাইটটি চালু করুন

cd ~/storygen-learning/01a_First_Agent_Ready

./start.sh

আপনার পরিবর্তনটি কাজ না করলে, আপনি ADK ওয়েব UI এবং ওয়েবসাইটে ত্রুটি দেখতে পাবেন।

সমাধান এখান থেকে শুরু ——————————————–

সমাধান

পূর্ববর্তী প্রসেসটি বন্ধ করতে Control+C চাপুন অথবা আপনি অন্য একটি টার্মিনাল খুলতে পারেন:

cd ~/storygen-learning/01b_First_Agent_Done

ওয়েবসাইটটি চালু করুন:

./start.sh

আপনি ওয়েবসাইটটি দেখতে পাবেন:

ওয়েবসাইট

ADK UI ব্যবহার করে দেখুন: অন্য একটি টার্মিনাল খুলুন:

cd ~/storygen-learning/01b_First_Agent_Done/backend
source ../../.venv/bin/activate

adk web --port 8080

আপনি ADK UI দেখতে পাবেন যেখানে আপনি এজেন্টকে প্রশ্ন করতে পারবেন।

adkweb

পরবর্তী বিভাগে যাওয়ার আগে, প্রক্রিয়াটি শেষ করতে Ctrl+C চাপুন।

৭. উন্নয়ন: Imagen দিয়ে আপনার নিজস্ব এজেন্ট তৈরি করুন

2adk

ইমেজ টুল তৈরি করুন (দ্বিতীয় এজেন্ট)

cd ~/storygen-learning/02a_Image_Agent_Ready

ইমেজ জেনারেশন এজেন্ট তৈরি করতে Gemini CLI ব্যবহার করুন:

gemini generate "I need you to help me create a custom Google ADK (Agent Development Kit) agent for image generation. This is different from the story agent - this one handles image generation directly using the BaseAgent pattern for full control over tool execution.

Please create a complete `agent.py` file that implements a custom image generation agent. The agent should:

**Requirements:**
1. Use the `google.adk.agents.BaseAgent` class (NOT LlmAgent)
2. Be named "custom_image_agent" 
3. Directly execute the ImagenTool without LLM intermediation
4. Handle JSON input with scene descriptions and character descriptions
5. Store results in session state for retrieval by main.py
6. Use async generators and yield Events

**Key Specifications:**
- **Class Name:** CustomImageAgent (inherits from BaseAgent)
- **Agent Name:** "custom_image_agent"
- **Tool:** Uses ImagenTool for direct image generation
- **Purpose:** Bypass LLM agent limitations and directly call ImagenTool

**Input Format:**
The agent should handle JSON input like:
{
  "scene_description": "Scene action and setting",
  "character_descriptions": {
    "CharacterName": "detailed visual description"
  }
}


**Core Method:** `async def _run_async_impl(self, ctx: InvocationContext) -> AsyncGenerator[Event, None]:`
   - Extract user message from `ctx.user_content.parts`
   - Parse JSON input or fallback to plain text
   - Extract scene_description and character_descriptions
   - Build image prompt with style prefix: "Children's book cartoon illustration with bright vibrant colors, simple shapes, friendly characters."
   - Include character descriptions for consistency
   - Call `await self.imagen_tool.run()` directly
   - Store results in `ctx.session.state["image_result"]`
   - Yield Event with results


 **Session State:**
   - Store JSON results in `ctx.session.state["image_result"]`
   - Include success/error status
   - Store actual image URLs or error messages

Expected Output Structure:
- Successful results stored as JSON with image URLs
- Error results stored as JSON with error messages
- Results accessible via session state in main.py

Can you create this agent in backend/story_image_agent/agent.py

"

ঐচ্ছিক , আপনি সরাসরি সমাধান অংশে চলে যেতে পারেন।

এখন ADK ওয়েবে আপনার পরিবর্তন যাচাই করুন

cd ~/storygen-learning/02a_Image_Agent_Ready/backend

source ../../.venv/bin/activate

adk web --port 8080

ওয়েবসাইটটি চালু করুন

cd ~/storygen-learning/02a_Second_Agent_Ready

./start.sh

আপনার পরিবর্তনটি কাজ না করলে, আপনি ADK ওয়েব UI এবং ওয়েবসাইটে ত্রুটি দেখতে পাবেন।

সমাধান এখান থেকে শুরু ——————————————–

সমাধান

পূর্ববর্তী প্রসেসটি বন্ধ করতে Control+C চাপুন অথবা আপনি অন্য একটি টার্মিনাল খুলতে পারেন:

# Open new terminal
cd ~/storygen-learning/02b_Image_Agent_Done

ওয়েবসাইটটি চালু করুন:

./start.sh

আপনি ওয়েবসাইটটি দেখতে পাবেন:

ওয়েবসাইট

ADK UI ব্যবহার করে দেখুন: অন্য একটি টার্মিনাল খুলুন:

# Open new terminal
cd ~/storygen-learning/02b_Image_Agent_Done/backend

source ../../.venv/bin/activate

adk web --port 8080

আপনি ADK UI দেখতে পাবেন যেখানে আপনি এজেন্টকে প্রশ্ন করতে পারবেন:

adkweb

পরবর্তী বিভাগে যাওয়ার আগে, প্রক্রিয়াটি শেষ করতে Ctrl+C চাপুন।

শিক্ষা

আমাদের প্রথম এজেন্টটি টেক্সট তৈরিতে দারুণ ছিল, কিন্তু এখন আমাদের ছবি তৈরি করতে হবে। এই কাজের জন্য আমাদের আরও সরাসরি নিয়ন্ত্রণ প্রয়োজন। আমরা চাই না যে এলএলএম (LLM) নিজে থেকে ছবি তৈরি করার সিদ্ধান্ত নিক; আমরা সরাসরি তাকে নির্দেশ দিতে চাই। এই কাজটি একটি বেসএজেন্টের (BaseAgent) জন্য একদম উপযুক্ত।

ডিক্লারেটিভ LlmAgent-এর বিপরীতে, একটি BaseAgent হলো ইম্পারেটিভ। এর মানে হলো, আপনি, অর্থাৎ ডেভেলপার, _run_async_impl মেথডের ভেতরে সুনির্দিষ্ট ধাপে ধাপে পাইথন লজিকটি লেখেন। এক্সিকিউশন ফ্লো-এর উপর আপনার সম্পূর্ণ নিয়ন্ত্রণ থাকে।

যখন আপনার প্রয়োজন হবে, তখন আপনি একটি বেসএজেন্ট বেছে নেবেন:

নিয়তিবাদী যুক্তিবিদ্যা : এজেন্টকে অবশ্যই একটি নির্দিষ্ট, অপরিবর্তনীয় ধাপক্রম অনুসরণ করতে হবে।

সরাসরি টুল চালানো : আপনি LLM-এর হস্তক্ষেপ ছাড়াই সরাসরি একটি টুল কল করতে চান।

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

আমাদের অ্যাপের জন্য, আমরা একটি BaseAgent ব্যবহার করব যা প্রথম এজেন্ট থেকে দৃশ্যের বিবরণ গ্রহণ করবে এবং প্রতিটি দৃশ্যের জন্য একটি ছবি তৈরি হওয়া নিশ্চিত করতে সরাসরি Imagen টুলটিকে কল করবে।

৮. পরীক্ষণ: এজেন্টের মূল্যায়ন

আমাদের অ্যাপটি কাজ করে, কিন্তু আমাদের একটি স্বয়ংক্রিয় নিরাপত্তা পরীক্ষার জাল প্রয়োজন। এই কাজটি আমাদের এআই সহ-পাইলটকে অর্পণ করার জন্য এটি একটি উপযুক্ত কাজ।

কর্ম

cd ~/storygen-learning/03a_Agent_Evaluation_Ready/backend

বিশদ পরীক্ষা লেখার জন্য Gemini CLI ব্যবহার করুন:

ওপেন জেমিনি সিএলআই

gemini

Gamini CLI উইন্ডোর ভিতরে, এই প্রম্পটটি চেষ্টা করুন:

I need you to create comprehensive test files for my backend/story_agent in Google ADK. I need three specific JSON files that match the testing structure used in ADK evaluation.

**Context:** 
- The story agent generates structured JSON stories with exactly 4 scenes
- It uses LlmAgent with no tools, just direct LLM responses
- Input: Keywords
- Output: JSON with story, main_characters, and scenes arrays

**Files to Create:**

### 1. `story_agent_eval.evalset.json` (Comprehensive Integration Tests)
Create a comprehensive evaluation set with:
- **eval_set_id**: "story_agent_comprehensive_evalset"
- **name**: "Story Agent Comprehensive Evaluation Set" 
- **description**: "Comprehensive evaluation scenarios for story_agent covering various keyword combinations, edge cases, and story quality metrics"


Each eval_case should include:
- Full conversation arrays with invocation_id, user_content, final_response
- Complete expected JSON responses with detailed stories, characters, and 4 scenes
- session_input with app_name "story_agent"
- All fields: story (narrative text), main_characters (with detailed visual descriptions), scenes (with index, title, description, text)

### 2. `story_generation.test.json` (Unit Tests)
Create basic generation tests with:
- **eval_set_id**: "story_agent_basic_generation_tests"
- **name**: "Story Agent Basic Generation Tests"
- **description**: "Unit tests for story_agent focusing on JSON structure compliance, scene generation, and keyword integration"

### 3. `test_config.json` (Evaluation Configuration)
Create test configuration with:
- **criteria**: response_match_score: 0.7, tool_trajectory_avg_score: 1.0
- **custom_evaluators**: 
  - json_structure_validator (validates required fields, scene count, character fields)
  - story_quality_metrics (word count 80-250, keyword integration threshold 0.8)
- **evaluation_notes**: Story agent specifics and trajectory expectations

**Important Requirements:**
1. All responses must be valid, parseable JSON
2. Stories must have exactly 4 scenes with indices 1-4
3. Each scene must have: index, title, description, text
4. Main characters must have detailed visual descriptions
5. No tool_uses expected (empty arrays) since story agent uses direct LLM
6. Word count should be 100-200 words total
7. Keywords must be naturally integrated into the narrative

Please generate all three files with realistic example stories and comprehensive test coverage matching the ADK evaluation format.

ঐচ্ছিক , আপনি সরাসরি সমাধান অংশে চলে যেতে পারেন।

মূল্যায়ন দেখতে:

./run_adk_web_persistent.sh

ADK UI-এর eval ট্যাবে যান।

আপনার স্থায়ী পরীক্ষার সক্ষমতাসহ ADK ওয়েব UI দেখা উচিত।

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

সমাধান এখান থেকে শুরু ——————————————–

সমাধান

  • সমাধান ফোল্ডারে যান:
cd ~/storygen-learning/03b_Agent_Evaluation_Done/backend
  • ADK ওয়েব UI খুলুন
./run_adk_web_persistent.sh

আপনি Eval ট্যাব থেকে টেস্ট কেসগুলো দেখতে পারেন:

মূল্যায়ন১

এখানে মেট্রিকগুলো সমন্বয় করুন:

মূল্যায়ন২

মূল্যায়ন রানের ফলাফল এখানে দেখুন:

মূল্যায়ন৩

শিক্ষা

একটি এজেন্ট ত্রুটি ছাড়াই চলতে পারে, কিন্তু আমরা কীভাবে জানব যে এটি সঠিক আউটপুট তৈরি করছে? স্টোরিটি কি ঠিক আছে? JSON ফরম্যাটটি কি সঠিক? এখানেই ADK-এর ইভ্যালুয়েশন ফ্রেমওয়ার্কের ভূমিকা আসে।

এজেন্ট মূল্যায়ন হলো একটি স্বয়ংক্রিয় টেস্টিং সিস্টেম, যা আপনার এজেন্টের প্রতিক্রিয়ার গুণমান এবং সঠিকতা পরিমাপ করার জন্য ডিজাইন করা হয়েছে। এটি শুধু কোডের ত্রুটি পরীক্ষা না করে, এজেন্টের আচরণ আপনার প্রত্যাশা পূরণ করে কি না তা যাচাই করে। এই ফ্রেমওয়ার্কটি প্রধানত কয়েকটি গুরুত্বপূর্ণ ফাইল ব্যবহার করে:

evalset.json : এটি আপনার প্রধান টেস্ট স্যুট। এই ফাইলের ভেতরের প্রতিটি 'eval case'-এ একটি নমুনা কথোপকথন (যেমন, ব্যবহারকারীকে কোনো প্রশ্ন) এবং এজেন্টের কাছ থেকে প্রত্যাশিত আদর্শ ও 'গোল্ডেন' প্রতিক্রিয়াটি থাকে।

test_config.json : এই ফাইলটি সফলতার নিয়মাবলী নির্ধারণ করে। আপনি এখানে মানদণ্ড নির্ধারণ করেন, যেমন:

response_match_score : এজেন্টের প্রতিক্রিয়াটিকে 'গোল্ডেন' প্রতিক্রিয়ার সাথে কতটা ঘনিষ্ঠভাবে মিলতে হবে? (১.০ স্কোরের অর্থ হলো এটি অবশ্যই অভিন্ন হতে হবে)।

custom_evaluators : আপনি আপনার নিজস্ব নিয়ম তৈরি করতে পারেন, যেমন "প্রতিক্রিয়াটি অবশ্যই বৈধ JSON হতে হবে" অথবা "গল্পটিতে অবশ্যই ১০০টির বেশি শব্দ থাকতে হবে।"

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

৯. ইনফ্রাস্ট্রাকচার অ্যাজ কোড (আইএসি): ক্লাউডে একটি আবাস নির্মাণ

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

ডকার কী?

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

  • অ্যাপ্লিকেশন কোডটি নিজেই
  • প্রয়োজনীয় রানটাইম (যেমন, পাইথনের নির্দিষ্ট সংস্করণ)
  • সমস্ত সিস্টেম টুল এবং লাইব্রেরি

এই কন্টেইনারাইজড অ্যাপ্লিকেশনটি তখন ডকার ইনস্টল করা যেকোনো মেশিনে চালানো যেতে পারে, যা "আমার মেশিনে তো কাজ করছে" এই চিরাচরিত সমস্যার সমাধান করে।

এই অংশে, আমরা জেমিনিকে একটি ডকারফাইল তৈরি করতে বলব, যা মূলত আমাদের অ্যাপ্লিকেশনের কন্টেইনার ইমেজ তৈরির পদ্ধতি বা নীলনকশা।

স্থাপন প্রক্রিয়া

কর্ম

cd ~/storygen-learning/04a_Manual_Deployment_Ready

ব্যাকএন্ডের জন্য একটি ডকারফাইল তৈরি করতে Gemini CLI ব্যবহার করুন: Gemini CLI খুলুন।

Gemini

জেমিনি সিএলআই-এর ভিতরে, এই প্রম্পটটি চেষ্টা করুন:

Create a manual deployment plan for my StoryGen app with Google Cloud Platform. I have a Next.js frontend, Python backend, and Terraform infrastructure.

Generate these deployment files:
1. **01-setup.sh** - Environment setup and authentication
2. **02-build-images.sh** - Build and push Docker images to Google Container Registry
3. **03-deploy-infrastructure.sh** - Deploy with Terraform and configure services
4. **load-env.sh** - Load environment variables for deployment

**Requirements:**
- Use Google Cloud Run for both frontend and backend
- Configure Imagen API and storage buckets
- Set up proper IAM permissions
- Use environment variables from .env file
- Include error handling and status checks

Keep scripts simple, well-commented, and production-ready for manual execution.

সমাধান :

cd ~/storygen-learning/04b_Manual_Deployment_Done

দৌড়:

source ../.venv/bin/activate
./01-setup.sh
./02-build-images.sh
./03-deploy-infrastructure.sh

আপনার ডেপ্লয়মেন্টের ফলাফল এবং অবকাঠামো তৈরি দেখা উচিত।

১০. অটোমেশন (সিআই/সিডি): ডিজিটাল অ্যাসেম্বলি লাইন

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

CI/CD এর পূর্ণরূপ হলো Continuous Integration এবং Continuous Deployment । এটি এমন একটি পদ্ধতি যার মাধ্যমে প্রতিবার কোডে কোনো পরিবর্তন করার সাথে সাথে তা স্বয়ংক্রিয়ভাবে বিল্ড, টেস্ট এবং ডিপ্লয় করা হয়।

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

এই স্বয়ংক্রিয় পাইপলাইনটি একটি "ডিজিটাল অ্যাসেম্বলি লাইন" তৈরি করে, যা ডেভেলপারের মেশিন থেকে কোডকে দ্রুত, নিরাপদে এবং নির্ভরযোগ্যভাবে প্রোডাকশনে নিয়ে যায়। এই অংশে, আমরা GitHub Actions এবং Google Cloud Build ব্যবহার করে আমাদের জন্য এই অ্যাসেম্বলি লাইনটি তৈরি করতে আমাদের এআই অ্যাসিস্ট্যান্টকে অনুরোধ করব।

কর্ম

cd ~/storygen-learning/05a_CICD_Pipeline_Ready

GitHub-এর সাহায্যে আপনার CI/CD পাইপলাইন তৈরি করতে Gemini CLI ব্যবহার করুন:

ওপেন জেমিনি সিএলআই

Gemini

জেমিনি সিএলআই-এর ভিতরে, এই প্রম্পটটি চেষ্টা করুন:

Create a CI/CD pipeline for my StoryGen app using Google Cloud Build and GitHub integration.

Generate these automation files:
1. **cloudbuild.yaml** (for backend) - Automated build, test, and deploy pipeline
2. **GitHub Actions workflow** - Trigger builds on push/PR
3. **Deployment automation scripts** - Streamlined deployment process

**Requirements:**
- Auto-trigger on GitHub push to main branch
- Build and push Docker images
- Run automated tests if available
- Deploy to Google Cloud Run
- Environment-specific deployments (staging/prod)
- Notification on success/failure

Focus on fully automated deployment with minimal manual intervention. Include proper secret management and rollback capabilities.

সমাধান এখান থেকে শুরু ——————————————–

সমাধান :

cd ~/storygen-learning/06_Final_Solution/
# Copy the GitHub workflow to parent folder
cp -r 06_Final_Solution/.GitHub ../../../.GitHub

06_Final_Solution ফোল্ডারে ফিরে যান এবং স্ক্রিপ্টটি চালান:

cd ~/storygen-learning/06_Final_Solution/

./setup-cicd-complete.sh

আপনি CI/CD পাইপলাইন সেটআপ সম্পন্ন হওয়া দেখতে পাবেন।

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

git add .
git commit -m "feat: Add backend, IaC, and CI/CD workflow"
git push origin main

আপনার স্বয়ংক্রিয় ডেপ্লয়মেন্ট প্রক্রিয়াটি দেখতে আপনার গিটহাব রিপোজিটরির "অ্যাকশনস" ট্যাবে যান।

১১. কার্যক্রম: এআই কন্ট্রোল টাওয়ার

আমরা লাইভ হয়েছি! কিন্তু যাত্রা এখনো শেষ হয়নি। এটি "দ্বিতীয় দিন"—অপারেশন। আমাদের চলমান অ্যাপ্লিকেশনটি পরিচালনা করতে চলুন ক্লাউড অ্যাসিস্ট-এ ফিরে যাই।

কর্ম

  1. Google Cloud কনসোলে আপনার Cloud Run পরিষেবাতে যান। কিছু ট্র্যাফিক ও লগ তৈরি করতে আপনার লাইভ অ্যাপটি ব্যবহার করুন।
  2. ক্লাউড অ্যাসিস্ট প্যানেলটি খুলুন এবং এই ধরনের নির্দেশাবলী সহ এটিকে একটি অপারেশনাল কো-পাইলট হিসাবে ব্যবহার করুন:

লগ বিশ্লেষণ:

Summarize the errors in my Cloud Run logs for the service 'genai-backend' from the last 15 minutes.

পারফরম্যান্স টিউনিং:

My Cloud Run service 'genai-backend' has high startup latency. What are common causes for a Python app and how can I investigate with Cloud Trace?

ব্যয় অপ্টিমাইজেশন:

Analyze the costs for my 'genai-backend' service and its GCS bucket. Are there any opportunities to save money?

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