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


এই কর্মশালায়, আপনি তিনটি মৌলিক প্রযুক্তি ব্যবহার করে একটি বিস্তৃত এজেন্টিক সিস্টেম কীভাবে তৈরি এবং তৈরি করবেন তা শিখবেন:
- কানেক্টিভিটি (এমসিপি) : আপনার এজেন্টকে স্থানীয় সরঞ্জাম এবং ডেটাতে অ্যাক্সেস দেওয়ার জন্য।
- অর্কেস্ট্রেশন (ADK) : এজেন্টের রিজনিং লুপ এবং অবস্থা পরিচালনা করা।
- স্মৃতি (স্মৃতি ব্যাংক) : দীর্ঘমেয়াদী, ব্যক্তিগতকৃত প্রেক্ষাপট প্রদান করা।

মূল ধারণা
উপাদান | ফাংশন |
মডেল কনটেক্সট প্রোটোকল (এমসিপি) | একটি সর্বজনীন মান যা কাস্টম ইন্টিগ্রেশন ছাড়াই AI মডেলগুলিকে বহিরাগত সিস্টেমের (ডাটাবেস, ফাইল সিস্টেম, API) সাথে সংযুক্ত করে। |
এজেন্ট ডেভেলপমেন্ট কিট (ADK) | একটি কাঠামো যা এজেন্টদের জন্য রানটাইম পরিবেশ প্রদান করে, ইভেন্ট লুপ পরিচালনা করে, স্টেট ট্রানজিশন করে এবং টুল এক্সিকিউশন করে। |
সেশন সার্ভিস | স্বল্পমেয়াদী স্মৃতি পরিচালনা করে। এটি তাৎক্ষণিক কথোপকথনের প্রেক্ষাপট সংরক্ষণ করে (যেমন, "ব্যবহারকারী কী জিজ্ঞাসা করেছেন?") কিন্তু সেশন শেষ হলে এটি সাফ হয়ে যায়। |
ভার্টেক্স এআই মেমোরি ব্যাংক | দীর্ঘমেয়াদী স্মৃতি পরিচালনা করে। এটি ব্যবহারকারী-নির্দিষ্ট তথ্য এবং পছন্দগুলি (যেমন, "ব্যবহারকারী পাইথন পছন্দ করে") অনির্দিষ্টকালের জন্য ধরে রাখে, যা এজেন্টকে ভবিষ্যতের মিথস্ক্রিয়াগুলিকে ব্যক্তিগতকৃত করার অনুমতি দেয়। |
ভার্টেক্স এআই এজেন্ট ইঞ্জিন | পরিচালিত অবকাঠামো পরিষেবা যা আপনার এজেন্ট লজিক এবং মেমরি উপাদানগুলিকে স্কেলে হোস্ট করে। |
তুমি কী তৈরি করবে
এই ধারণাগুলি প্রদর্শনের জন্য, আপনি একটি হলিডে ডিজাইন সহকারী তৈরি করবেন। এই এজেন্ট উচ্চ-স্তরের ব্যবহারকারীর অনুরোধ গ্রহণ করতে এবং ব্যক্তিগতকৃত কোড এবং চিত্র তৈরি করতে স্থানীয় পাইথন সরঞ্জামগুলিকে স্বায়ত্তশাসিতভাবে সাজাতে সক্ষম হবে।
তুমি তিনটি ধাপ অতিক্রম করবে:
- টুলিং লেয়ার : স্থানীয় পাইথন ফাংশনগুলিকে AI-তে প্রকাশ করার জন্য একটি MCP সার্ভার তৈরি করুন।
- এজেন্ট লেয়ার : ADK ব্যবহার করে এমন একটি এজেন্ট তৈরি করুন যা বহু-পদক্ষেপের কর্মপ্রবাহ পরিকল্পনা এবং সম্পাদন করে।
- মেমোরি লেয়ার : মেমোরি ব্যাংককে একীভূত করুন যাতে এজেন্ট ব্যবহারকারীর স্টাইল পছন্দগুলি শিখতে এবং মনে রাখতে পারে।
2. সেট আপ করুন
আমাদের এআই এজেন্টদের শক্তিশালী করার জন্য, আমাদের দুটি জিনিসের প্রয়োজন: ভিত্তি প্রদানের জন্য একটি গুগল ক্লাউড প্রকল্প।
প্রথম অংশ: বিলিং অ্যাকাউন্ট সক্ষম করুন
- ৫ ডলার ক্রেডিট দিয়ে আপনার বিলিং অ্যাকাউন্ট দাবি করার জন্য, আপনার এটি স্থাপনের জন্য প্রয়োজন হবে। আপনার জিমেইল অ্যাকাউন্টটি নিশ্চিত করুন।
দ্বিতীয় অংশ: উন্মুক্ত পরিবেশ
- 👉 সরাসরি ক্লাউড শেল এডিটরে যেতে এই লিঙ্কে ক্লিক করুন।
- 👉 আজই যদি যেকোনো সময় অনুমোদনের অনুরোধ জানানো হয়, তাহলে চালিয়ে যেতে অনুমোদনে ক্লিক করুন।

- 👉 যদি স্ক্রিনের নীচে টার্মিনালটি না দেখা যায়, তাহলে এটি খুলুন:
- ভিউ ক্লিক করুন
- টার্মিনাল ক্লিক করুন

- 👉💻 টার্মিনালে, নিম্নলিখিত কমান্ড ব্যবহার করে যাচাই করুন যে আপনি ইতিমধ্যেই প্রমাণীকরণপ্রাপ্ত এবং প্রকল্পটি আপনার প্রকল্প আইডিতে সেট করা আছে:
gcloud auth list - 👉💻 GitHub থেকে বুটস্ট্র্যাপ প্রকল্পটি ক্লোন করুন:
git clone https://github.com/cuppibla/holiday_workshop - 👉💻 প্রজেক্ট ডিরেক্টরি থেকে সেটআপ স্ক্রিপ্টটি চালান।
স্ক্রিপ্টটি বাকি সেটআপ প্রক্রিয়াটি স্বয়ংক্রিয়ভাবে পরিচালনা করবে।cd ~/holiday_workshop ./init.sh - 👉💻 প্রয়োজনীয় প্রজেক্ট আইডি সেট করুন:
gcloud config set project $(cat ~/project_id.txt) --quiet
তৃতীয় অংশ: অনুমতি সেট আপ করা
- 👉💻 নিম্নলিখিত কমান্ড ব্যবহার করে প্রয়োজনীয় API গুলি সক্রিয় করুন। এতে কয়েক মিনিট সময় লাগতে পারে।
gcloud services enable \ cloudresourcemanager.googleapis.com \ servicenetworking.googleapis.com \ run.googleapis.com \ aiplatform.googleapis.com \ compute.googleapis.com - 👉💻 টার্মিনালে নিম্নলিখিত কমান্ডগুলি চালিয়ে প্রয়োজনীয় অনুমতিগুলি প্রদান করুন:
. ~/holiday_workshop/set_env.sh
লক্ষ্য করুন যে আপনার জন্য একটি .env ফাইল তৈরি করা হয়েছে। এটি আপনার প্রকল্পের তথ্য দেখায়।
৩. এমসিপি দিয়ে শক্তি বৃদ্ধি করা
এআই-এর জন্য "ইউএসবি-সি" মুহূর্ত
কল্পনা করুন, প্রতিবার নতুন মাউস কেনার সময়, যদি আপনাকে এটি আপনার মাদারবোর্ডে সোল্ডার করতে হয়। সম্প্রতি পর্যন্ত AI টুলগুলির অবস্থা এমনই ছিল। ডেভেলপারদের LLM গুলিকে ডাটাবেস, ফাইল সিস্টেম বা API-এর সাথে সংযুক্ত করার জন্য কাস্টম "গ্লু কোড" লিখতে হত।
মডেল কনটেক্সট প্রোটোকল (MCP) লিখুন। AI অ্যাপ্লিকেশনের জন্য MCP কে USB-C পোর্ট হিসেবে ভাবুন। এটি AI মডেলগুলিকে ডেটা সোর্স এবং টুলের সাথে সংযুক্ত করার একটি মানসম্মত উপায় প্রদান করে।
যদি আপনি একবার আপনার টুলের জন্য একটি MCP সার্ভার তৈরি করেন, তাহলে আপনি এটিকে Gemini CLI, একটি IDE, অথবা অন্য কোনও MCP-সম্মত ক্লায়েন্টে প্লাগ করতে পারবেন কোনও একক লাইন কোড পরিবর্তন না করেই।
তুমি কী তৈরি করবে

এই কোডল্যাবে, আপনি একটি হলিডে ডিজাইন সহকারী তৈরি করবেন যা:
- MCP ব্যবহার করে আপনার স্থানীয় পরিবেশের (স্টুডিও টুলস) সাথে সংযোগ স্থাপন করে ।
- এজেন্ট ডেভেলপমেন্ট কিট (ADK) ব্যবহার করে নির্ভরযোগ্যভাবে কথোপকথনের প্রসঙ্গ পরিচালনা করে ।
- Vertex AI Memory Bank ব্যবহার করে বিভিন্ন সেশনে আপনার পছন্দগুলি (যেমন, "আমি Python কোড পছন্দ করি") মনে রাখে ।
সার্ভার লজিক তৈরি করা
আমরা পরিবেশ প্রস্তুত করেছি, কিন্তু সার্ভার লজিক অসম্পূর্ণ। আমাদের চারটি নির্দিষ্ট সরঞ্জাম বাস্তবায়ন করতে হবে যা আমাদের এজেন্ট অবশেষে আমাদের ছুটির কার্ড তৈরি করতে ব্যবহার করবে।
প্রথম অংশ: সার্ভার কঙ্কাল খুলুন
আমরা 01-MCP-Files-Testing/01-starter ডিরেক্টরিতে কাজ করব।
- আপনার ক্লাউড শেল টার্মিনালে, নিশ্চিত করুন যে আপনি সঠিক ডিরেক্টরিতে আছেন:
cd ~/holiday_workshop/01-MCP-Files-Testing/01-starter/ - ক্লাউড শেল এডিটরে ফাইলটি খুলুন:
cloudshell edit ~/holiday_workshop/01-MCP-Files-Testing/01-starter/mcp_server.py
আপনি লক্ষ্য করবেন যে বয়লারপ্লেট কোড (MCP সার্ভার সেট আপ করা, সংযোগ পরিচালনা করা এবং Vertex AI ক্লায়েন্ট শুরু করা) ইতিমধ্যেই সম্পন্ন হয়েছে। তবে, চারটি মূল ফাংশন বর্তমানে খালি স্থানধারক।
দ্বিতীয় অংশ: ছুটির দৃশ্য জেনারেটর বাস্তবায়ন করুন
প্রথমত, আমাদের এমন একটি টুল দরকার যা ব্যবহারকারীর আগ্রহ (যেমন, "পাখি") গ্রহণ করে এবং এটিকে চিত্র তৈরির জন্য অপ্টিমাইজ করা একটি সমৃদ্ধ, বিস্তারিত প্রম্পটে পরিণত করে।
generate_holiday_scene ফাংশনের ভিতরে #REPLACE_GENERATE_HOLIDAY_SCENE মন্তব্যটি খুঁজুন।
এই পুরো লাইনটি নিম্নলিখিত কোড দিয়ে প্রতিস্থাপন করুন :
prompt = (
f"""
Create a cozy, high-fidelity 3D render of a winter holiday scene.
The scene should be warm and inviting with soft cinematic lighting.
Seamlessly integrate the following specific theme/interest into the
holiday decor or landscape: {interest}.
The style should be whimsical but detailed.
Aspect Ratio: 16:9 Landscape.
"""
)
generate_image(prompt, "16:9", "static/generated_scene.png")
return "Done! Saved at generated_scene.png"
তৃতীয় অংশ: চূড়ান্ত ছবির ফলাফল বাস্তবায়ন করুন
পরিশেষে, আমরা নিশ্চিত করতে চাই যে আলো এবং স্টাইল আলোক-বাস্তববাদী এবং উৎসবমুখর দেখাবে।
#REPLACE_GENERATE_FINAL_PHOTO মন্তব্যটি খুঁজুন।
চূড়ান্ত স্টাইল ট্রান্সফার এবং রেন্ডারিং সম্পাদন করতে এই সম্পূর্ণ লাইনটি নিম্নলিখিত কোড দিয়ে প্রতিস্থাপন করুন :
prompt = (
"""
Generate a photorealistic close-up shot of a rustic wooden fireplace mantle.
Lighting: Warm, glowing ambient light from a fire below (out of frame).
Background: Softly blurred (bokeh) pine garland and twinkling lights.
Foreground Composition:
1. A wooden picture frame containing the [attached selfie image].
The face in the photo must be clearly visible.
2. A folded holiday greeting card standing upright next to the frame.
The front of the card displays the [attached holiday scene image] as a print.
Ensure the perspective is grounded and realistic, as if taken with a 50mm lens.
"""
)
generate_image(prompt, "16:9", "static/generated_final_photo.png", ["static/generated_selfie.png", "static/generated_scene.png"])
return "Done! Saved at generated_final_photo.png"
পরিবেশ সেটআপ
এখন যেহেতু কোডটি তৈরি হয়ে গেছে, আমাদের নিশ্চিত করতে হবে যে আমাদের নির্ভরতাগুলি ইনস্টল করা আছে। আমরা uv ব্যবহার করব, একটি দ্রুত পাইথন প্যাকেজ এবং প্রকল্প ব্যবস্থাপক।
👉💻 আপনার টার্মিনালে , আমাদের প্রকল্পের নির্ভরতা হিসেবে FastMCP যোগ করতে নিম্নলিখিতটি চালান:
cd ~/holiday_workshop/01-MCP-Files-Testing/01-starter/
uv add fastmcp
আপনি দেখতে পাবেন যে আপনার ~/holiday_workshop/01-MCP-Files-Testing/01-starter/pyproject.toml ফাইলে একটি নতুন নির্ভরতা fastmcp>=2.13.3 যোগ করা হয়েছে।
৪. MCP সার্ভারের জন্য জেমিনি CLI দিয়ে পরীক্ষা করা হচ্ছে
এখন যেহেতু আমাদের সার্ভার কোড সম্পূর্ণ, আমরা কীভাবে এটি পরীক্ষা করব?
সাধারণত, একটি ব্যাকএন্ড সার্ভার পরীক্ষা করার জন্য একটি ফ্রন্টএন্ড UI তৈরি করতে হয় অথবা জটিল curl অনুরোধ লিখতে হয়। তবে, এখানে আমরা Gemini CLI ব্যবহার করতে পারি।
এটি ডেভেলপমেন্টের জন্য অবিশ্বাস্যভাবে কার্যকর কারণ এটি যুক্তিকে আলাদা করে। ওয়েব ইন্টারফেস বা এজেন্ট ফ্রেমওয়ার্ক তৈরির বিষয়ে চিন্তা করার আগে আপনি যাচাই করতে পারেন যে মডেলটি আপনার সরঞ্জামগুলি বোঝে এবং সেগুলিকে সঠিকভাবে কল করে।

সংযোগ করুন এবং চালান
আমরা জেমিনি সিএলআইকে mcp add কমান্ড ব্যবহার করে আমাদের সার্ভার পরিচালনা করতে বলব।
আপনার টার্মিনালে, চালান:
gemini mcp add holidays uv run ~/holiday_workshop/01-MCP-Files-Testing/01-starter/mcp_server.py
add holidays: আমরা আমাদের সার্ভারকে একটি ডাকনাম ("ছুটির দিন") দিয়েছি।-
uv run ...: আমরা যে Python সার্ভারটি পরিবর্তন করেছি তা শুরু করার জন্য স্পষ্ট কমান্ডটি প্রদান করেছি।
চলো জাদু করি!
এখন, চ্যাট সেশন শুরু করুন:
gemini
জেমিনি আপনার নতুন টুলগুলি "দেখতে" পারে কিনা তা পরীক্ষা করার জন্য নিম্নলিখিত প্রম্পটটি চেষ্টা করে দেখুন। মনে রাখবেন যে আপনাকে জেমিনি CLI কে আমাদের ছুটির টুল ব্যবহারের অনুমতি দিতে হতে পারে।
- 👉 ব্যবহারকারী:
"I want to create a festive holiday photo. I like birds a lot." - মিথুন:
*Thinking...* *Calling tool: generate_holiday_scene(interest='birds')* Done! Saved at generated_scene.png - 👉 ব্যবহারকারী:
"Great! Now generate a knitting pattern for a sweater with reindeer on it." - মিথুন:
যেহেতু আপনি MCP ব্যবহার করেছেন, তাই AI ঠিক বুঝতে পেরেছে যে আপনার অনুরোধ পূরণের জন্য কোন Python ফাংশনটি কল করতে হবে!*Thinking...* *Calling tool: generate_sweater_pattern(motif='reindeer')* Done! Saved at generated_pattern.png
ছবিটি পর্যালোচনা করুন
-
Control+Cটিপে Gemini CLI শেষ করুন। - আপনার ফোল্ডারে তৈরি ছবিটি পরীক্ষা করুন:
~/holiday_workshop/01-MCP-Files-Testing/01-starter/static।
আপনার ছবিটি এখানে পর্যালোচনা করুন: 
উপসংহার এবং পরবর্তী পদক্ষেপ
অভিনন্দন! আপনি সফলভাবে একটি কার্যকরী MCP সার্ভার তৈরি করেছেন। আপনার কাছে এখন "AI টুলস" এর একটি কার্যকরী সেট আছে যা প্যাটার্ন তৈরি করতে, কম্পোজিট ইমেজ তৈরি করতে এবং দৃশ্যগুলিকে পরিমার্জন করতে পারে।
তবে, উপরের পরীক্ষায় কি আপনি কিছু লক্ষ্য করেছেন? আপনাকে প্রক্রিয়াটি পরিচালনা করতে হয়েছিল। আপনাকে দৃশ্যের জন্য জিজ্ঞাসা করতে হয়েছিল, তারপর প্যাটার্নের জন্য জিজ্ঞাসা করতে হয়েছিল, তারপর সেগুলিকে একত্রিত করতে বলতে হয়েছিল।
যদিও জেমিনি বুদ্ধিমান, একটি জটিল উৎপাদন কর্মপ্রবাহের জন্য - যেখানে আমাদের সোয়েটারে লাগানোর আগে একটি প্যাটার্ন তৈরি করতে হবে এবং চিত্র তৈরি ব্যর্থ হলে ত্রুটিগুলি মোকাবেলা করতে হবে - আমরা আরও নিয়ন্ত্রণ চাই। আমরা এমন একটি নিবেদিতপ্রাণ ব্যবস্থা চাই যা পরিকল্পনা করতে পারে, নিজস্ব কাজের সমালোচনা করতে পারে এবং আমাদের ছুটির কার্ডের অবস্থা পরিচালনা করতে পারে, প্রতিটি পদক্ষেপে আমরা তার হাত ধরে না গিয়েই।
পরবর্তী বিভাগে, আমরা এই সৃজনশীল বিশৃঙ্খলার শৃঙ্খলা আনব। আমরা এজেন্ট ডেভেলপমেন্ট কিট (ADK) বাস্তবায়ন করতে যাচ্ছি যাতে একটি কাঠামোগত এজেন্ট তৈরি করা যায় যা এই MCP সরঞ্জামগুলিকে একটি নিখুঁত উৎপাদন পাইপলাইনে সাজিয়ে তোলে।
৫. একটি ADK এজেন্টকে ভাইব-কোডিং করা
আমাদের কাছে টুলের একটি কার্যকরী সেট আছে (আমাদের MCP সার্ভার), কিন্তু বর্তমানে, আমরাই সমস্ত ভারী কাজ করছি—জেমিনিকে ঠিক কোন টুলটি কখন কল করতে হবে তা বলা।
এই বিভাগে, আমরা একটি AI এজেন্ট তৈরি করব: এমন একটি সিস্টেম যা স্বায়ত্তশাসিতভাবে বহু-পদক্ষেপের কাজগুলি যুক্তি, পরিকল্পনা এবং সম্পাদন করতে পারে। এটি করার জন্য, আমরা এজেন্ট ডেভেলপমেন্ট কিট (ADK) ব্যবহার করব।

এজেন্ট কী?
যদি MCP টুলগুলো "হাত" (কাজ করা) হয়, তাহলে এজেন্ট হলো "মস্তিষ্ক"। একজন এজেন্ট ব্যবহারকারীর উদ্দেশ্য বোঝার জন্য একটি LLM ব্যবহার করে ("আমাকে একটি ছুটির কার্ড তৈরি করুন"), এটিকে ধাপে ধাপে ভেঙে দেয় ("প্রথমে আমার একটি দৃশ্য দরকার, তারপর একটি প্যাটার্ন..."), এবং লক্ষ্য অর্জনের জন্য কোন টুল ব্যবহার করতে হবে তা নির্ধারণ করে।
ADK কি?
এজেন্ট ডেভেলপমেন্ট কিট (ADK) হল গুগলের একটি কাঠামো যা এই এজেন্টগুলি তৈরি করা সহজ করে তোলে। এটি জটিল "প্লাম্বিং" পরিচালনা করে, যেমন চ্যাট ইতিহাস পরিচালনা করা, টুলের সাথে সংযোগ স্থাপন করা এবং বিভিন্ন মডেলের মধ্যে স্যুইচ করা - যাতে আপনি আপনার অ্যাপের ব্যক্তিত্ব এবং যুক্তির উপর মনোযোগ দিতে পারেন।
প্রসঙ্গ-ভিত্তিক ভাইব-কোডিং
কোড তৈরি করার জন্য একটি একক, বিশাল প্রম্পট ব্যবহার করা একটি সাধারণ ধরণ। তবে, জটিল অ্যাপ্লিকেশন তৈরি করার সময়, AI কে এমন একটি অংশীদার হিসাবে বিবেচনা করা প্রায়শই ভাল যা সময়ের সাথে সাথে প্রেক্ষাপট বজায় রাখে।
আমরা একটি একক লাইন কোড লেখার আগে পর্যায় নির্ধারণের জন্য জেমিনি সিএলআই এর মেমোরি বৈশিষ্ট্যগুলি ব্যবহার করব।
১. পরিবেশ প্রস্তুত করুন
আপনার টার্মিনালটি খুলুন এবং স্টার্টার ডিরেক্টরিতে যান:
cd ~/holiday_workshop/02-Vibe-Coding-ADK-Agent/01-starter
জেমিনি সিএলআই শুরু করুন:
gemini
2. প্রসঙ্গ এবং স্মৃতি ব্যবস্থাপনা
ভাইব-কোডিং করার সময়, এআই-কে জানতে হবে যে তারা কে এবং তারা কী জানে। জেমিনি সিএলআই আমাদের এটি স্পষ্টভাবে পরিচালনা করার অনুমতি দেয়।
-
/memory show: আপনার প্রকল্প এবং সেশন সম্পর্কে AI বর্তমানে কী জানে তা দেখতে এটি টাইপ করুন। -
/memory add: কথোপকথন জুড়ে AI-এর মনে রাখা উচিত এমন মৌলিক জ্ঞান ইনজেক্ট করতে এটি ব্যবহার করুন।
আমাদের কোডিং পার্টনারের ব্যক্তিত্ব সংজ্ঞায়িত করে শুরু করা যাক। Gemini CLI এর ভিতরে নিম্নলিখিত কমান্ডটি চালান:
/memory add "You are an expert Python developer specialized in the Google Agent Development Kit (ADK). You write clean, modular code and prefer using the latest ADK patterns."
জেমিনি এখন তার ভূমিকা বুঝতে পারছে। এই প্রেক্ষাপট পরবর্তী প্রতিটি প্রতিক্রিয়াকে প্রভাবিত করবে, উচ্চমানের ADK-সম্মত কোড নিশ্চিত করবে।
৩. ধাপ ১: মৌলিক এজেন্টকে ভাইব-কোডিং করা
একবারে পুরো সিস্টেম তৈরি করার চেষ্টা করার পরিবর্তে, আসুন কঙ্কাল দিয়ে শুরু করি। আমরা ফাইল কাঠামো এবং মৌলিক এজেন্ট ব্যক্তিত্ব প্রতিষ্ঠা করতে চাই।
জেমিনি সিএলআই-তে নিম্নলিখিত প্রম্পটটি প্রবেশ করান:
Let's start by building the basic agent structure.
Please create a file structure for a `root_agent`.
1. Create `root_agent/__init__.py` that imports `agent`.
2. Create `root_agent/agent.py` by following exactly how this file is doing import and agent creation @~/holiday_workshop/02-Vibe-Coding-ADK-Agent/01-starter/agent_reference.py
In `agent.py`:
- Create an `Agent` named "root_agent" using the model "gemini-2.5-flash".
- The instruction string should define a "Holiday Magic Assistant".
- The personality should be enthusiastic (`🎄✨`) and prefer "cute, kawaii, cartoon" styles for any visual tasks.
জেমিনি ফাইল স্ট্রাকচার এবং প্রাথমিক পাইথন কোড তৈরি করবে। এটি সঠিক দেখাচ্ছে কিনা তা পরীক্ষা করে দেখুন, তারপর পরিবর্তনগুলি প্রয়োগ/গ্রহণ করুন।
৪. ধাপ ২: MCP সার্ভার (টুল) যোগ করা
এখন যেহেতু আমাদের একটি বেসিক এজেন্ট আছে, আমাদের এটিকে "হাত" দিতে হবে। আমাদের এজেন্টটিকে পূর্ববর্তী ল্যাবে তৈরি করা MCP সার্ভারের সাথে সংযুক্ত করতে হবে।
জেমিনি সিএলআই-তে নিম্নলিখিত প্রম্পটটি প্রবেশ করান:
Now, let's give the agent access to tools. Update `agent.py` to include our local MCP server. By following exactly how this agent is connecting to mcp tool @~/holiday_workshop/02-Vibe-Coding-ADK-Agent/01-starter/agent_reference.py
In `agent.py`:
- Import `McpToolset` to define our STDIO MCP server. as @~/holiday_workshop/02-Vibe-Coding-ADK-Agent/01-starter/agent_reference.py
- Connect to the python file located at `../mcp_server.py` relative to agent.py.
জেমিনি এখন আপনার বিদ্যমান agent.py রিফ্যাক্টর করবে যাতে টুলের সংজ্ঞা এবং সংযোগ যুক্তি অন্তর্ভুক্ত করা যায়।
দ্রষ্টব্য: যদি আপনি আপনার কাজ পরীক্ষা করতে চান অথবা জেনারেট করা কোডটি প্রত্যাশা অনুযায়ী কাজ করছে না, তাহলে আপনি আপনার ফাইলগুলি এখানে অবস্থিত রেফারেন্স সমাধানের সাথে তুলনা করতে পারেন: ~/holiday_workshop/02-Vibe-Coding-ADK-Agent/solution
৬. এজেন্ট ওয়েব ইন্টারফেস চালান
ADK-তে adk web নামে একটি অন্তর্নির্মিত টেস্টিং ইন্টারফেস রয়েছে। এটি একটি হালকা চ্যাট UI তৈরি করে যাতে আমরা আমাদের এজেন্টের সাথে তাৎক্ষণিকভাবে কথা বলতে পারি।
- যদি আপনার এখনও GeminiCLI খোলা থাকে, তাহলে এটি বন্ধ করতে
control+Cটিপুন। এখন আপনার টার্মিনালে (এটিsolutionফোল্ডারে আছে, আপনিstarterএ গিয়ে আপনার কোড পরীক্ষা করতে পারেন আপনারstarterফোল্ডারেuv run adk webচালিয়ে), রান করুন:cd ~/holiday_workshop/02-Vibe-Coding-ADK-Agent/02-solution uv run adk web --port 8000 - ক্লাউড শেল আপনাকে সতর্ক করবে যে পোর্ট 8000 এ একটি পরিষেবা চলছে । "ওয়েব প্রিভিউ" -> "পোর্ট 8000 এ প্রিভিউ" এ ক্লিক করুন।
এজেন্ট পরীক্ষা করুন
এখন তুমি একটি চ্যাট ইন্টারফেস দেখতে পাবে। দেখা যাক আমাদের এজেন্ট তার নতুন নির্দেশাবলী অনুসরণ করে এবং সঠিকভাবে MCP টুলগুলি অ্যাক্সেস করে কিনা।
এই প্রম্পটগুলি চেষ্টা করে দেখুন:
- "হাই! তুমি কে?"
- (একটি উৎসবমুখর, উৎসাহী সাড়া আশা করুন)।
- "আমার ছুটির কার্ডের জন্য একটি পটভূমি দরকার। এটিকে একটি তুষারাবৃত গ্রাম করে তুলুন।"
- (এজেন্টের উচিত
generate_holiday_sceneকল করা । লক্ষ্য করুন কিভাবে এটি সিস্টেম নির্দেশাবলীতে সংজ্ঞায়িত "cute/cartoon" স্টাইলটি স্বয়ংক্রিয়ভাবে প্রয়োগ করে)।
- (এজেন্টের উচিত
- "পিৎজার টুকরো দিয়ে একটা সোয়েটারের প্যাটার্ন তৈরি করো।"
- (এজেন্টের
generate_sweater_patternকল করা উচিত )।
- (এজেন্টের

আপনি এখানে তৈরি করা ছবিটি দেখতে পারেন:

পরীক্ষা শেষ হলে প্রস্থান করতে Control+C টিপুন।
উপসংহার এবং পরবর্তী পদক্ষেপ
আপনি এখন একটি প্রসঙ্গ-সচেতন পদ্ধতি ব্যবহার করে একটি Google ADK এজেন্টকে সফলভাবে "Vibe-Coded" করেছেন!
- আমরা Context প্রতিষ্ঠা করেছি: আমরা একজন বিশেষজ্ঞ ব্যক্তিত্বকে সংজ্ঞায়িত করতে
/memory addব্যবহার করেছি। - আমরা পুনরাবৃত্তভাবে তৈরি করেছি: আমরা প্রথমে কঙ্কাল তৈরি করেছি, তারপর টুল সংযোগগুলি যুক্ত করেছি।
বিল্ট-ইন ADK ওয়েব প্রিভিউ পরীক্ষার জন্য দুর্দান্ত, তবে আমাদের চূড়ান্ত পণ্যের জন্য, আমরা একটি কাস্টম, ব্র্যান্ডেড অভিজ্ঞতা চাই। পরবর্তী বিভাগে, আমরা এই এজেন্টটিকে একটি কাস্টম ওয়েব ফ্রন্টএন্ডে সংহত করব।
৭. UI এর সাথে ADK সংযোগ করা

এখন যেহেতু আমাদের কাছে একটি এজেন্ট সংজ্ঞা আছে, আমাদের এটি চালানো দরকার। এখানেই রানার এবং সেশন সার্ভিসের কথা আসে।
বাস্তবায়ন
- 👉 আপনার কমান্ডে নিম্নলিখিতটি টাইপ করুন:
এটি আপনার এডিটরেcloudshell edit ~/holiday_workshop/03-Connect-ADK-MCP-UI/01-starter/backend/main.py~/holiday_workshop/03-Connect-ADK-MCP-UI/01-starter/backend/main.pyখুলবে। -
# TODO: Create Session Serviceপরিবর্তে নিম্নলিখিতটি দিন:from google.adk.sessions import InMemorySessionService from google.adk.memory import InMemoryMemoryService session_service = InMemorySessionService() memory_service = InMemoryMemoryService() -
# TODO: Initialize Runner:runner = Runner( app_name="agents", agent=christmas_agent, session_service=session_service, memory_service=memory_service, )
- এই
~/holiday_workshop/03-Connect-ADK-MCP-UI/01-starter/backend/main.pyতে ১৫৮ নম্বর লাইন পর্যালোচনা করুন ( কোনও পদক্ষেপের প্রয়োজন নেই ): যদি আপনি ভাবছেন যে অ্যাপ্লিকেশনটি চূড়ান্ত প্রতিক্রিয়া কীভাবে পাবে? নিচে রানার দ্বারা চালিত ইভেন্ট লুপটি দেওয়া হল:async for event in runner.run_async( user_id=user_id, session_id=session_id, new_message=content )
ডিপ ডাইভ: স্থাপত্য ও স্থাপনা
আমরা এই এজেন্টকে পরিষেবা দেওয়ার জন্য FastAPI ব্যবহার করছি।
- কেন FastAPI? : এজেন্টরা প্রায়শই I/O-এর সাথে আবদ্ধ থাকে (LLM-এর জন্য অপেক্ষা করে)। FastAPI-এর অ্যাসিঙ্ক প্রকৃতি এটিকে নিখুঁতভাবে পরিচালনা করে।
- Statelessness : লক্ষ্য করুন আমাদের API এন্ডপয়েন্টটি stateless । আমরা গ্লোবাল স্কোপে ভেরিয়েবল সংরক্ষণ করি না। প্রতিটি অনুরোধের জন্য অবস্থা পুনর্গঠনের জন্য আমরা
session_idএবংSessionServiceএর উপর নির্ভর করি। এর অর্থ হল আপনি এটিকে Cloud Run (Serverless) এ স্থাপন করতে পারেন এবং শূন্যে স্কেল করতে পারেন!
৮. এজেন্ট ম্যাজিক দিয়ে অ্যাপ্লিকেশনটি চেষ্টা করে দেখুন
- 👉💻 আপনার কমান্ডে নিম্নলিখিতটি টাইপ করুন:
এটি আপনার এডিটরেcd ~/holiday_workshop/03-Connect-ADK-MCP-UI/01-starter ./start_app.sh~/holiday_workshop/03-Connect-ADK-MCP-UI/01-starter/backend/main.pyখুলবে। - আপনি নীচের মত ফলাফল দেখতে পাবেন:
👉👉 নিশ্চিত করুন যে আপনি http://localhost:5173/এ ক্লিক করেছেন, অথবা একটি নতুন উইন্ডো খুলুন এবংhttp://localhost:5173/টাইপ করুন। - তারপর আপনি চ্যাট ইন্টারফেস সহ ওয়েবসাইটটি পাবেন:

- একটি ছবি আপলোড করে পরীক্ষা করুন (এটি আপনি নিজেও হতে পারেন, অথবা আপনার পোষা প্রাণীও হতে পারে)

- 👉 তারপর জিজ্ঞাসা করুন
আপনি এখানে তৈরি করা ছবিটি পাবেন:Can you generate a picture my cat wearing snowflake pattern sweater?
- 👉💻 পরীক্ষা শেষ হয়ে গেলে, প্রক্রিয়াটি শেষ করতে টার্মিনালে
control+Cটিপুন।
যদি আপনি দেখতে না পান যে জিনিসগুলি প্রত্যাশা অনুযায়ী কাজ করছে, তাহলে আপনি ~/holiday_workshop/03-Connect-ADK-MCP-UI/02-solution এ যেতে পারেন এবং ./start_app.sh চালাতে পারেন, তারপর উপরের ধাপগুলি অনুসরণ করতে পারেন।
৯. ভার্টেক্স এআই মেমোরি ব্যাংক

স্বল্পমেয়াদী বনাম দীর্ঘমেয়াদী স্মৃতি
- স্বল্পমেয়াদী প্রসঙ্গ : "আমি এখনই কী বললাম?" (সেশনের ইতিহাস)। চ্যাট উইন্ডো বন্ধ হয়ে গেলে এটি হারিয়ে যায়।
- দীর্ঘমেয়াদী স্মৃতি : "আমার প্রিয় প্রোগ্রামিং ভাষা কোনটি?" (ব্যবহারকারীর পছন্দ)। এটি চিরকাল টিকে থাকা উচিত।
ভার্টেক্স এআই মেমোরি ব্যাংক এই দীর্ঘমেয়াদী স্টোরেজ প্রদান করে। এটি এজেন্টকে ব্যবহারকারী সম্পর্কে ব্যক্তিগতকৃত তথ্য সংরক্ষণ এবং পুনরুদ্ধার করতে দেয়।
সেশন বনাম মেমোরি ব্যাংক
- সেশন (
VertexAiSessionService): এটি হল লগ । এটি প্রতিটি বার্তা, টুল কল এবং ইভেন্টের (AppendEvent,ListEvents) কাঁচা, কালানুক্রমিক ক্রম সংরক্ষণ করে। এটি কী ঘটেছে তার স্থল সত্য প্রদান করে। - মেমোরি ব্যাংক (
VertexAiMemoryBankService): এটি হল জ্ঞান । এটি সংশ্লেষিত, দীর্ঘমেয়াদী তথ্য সংরক্ষণ করে (GenerateMemories,RetrieveMemories)। এটি একটি নির্দিষ্টuser_idমধ্যে সীমাবদ্ধ, যা গোপনীয়তা এবং বিচ্ছিন্নতা নিশ্চিত করে।
- 👉💻 আপনার কমান্ডে নিম্নলিখিতটি টাইপ করুন:
এটি আপনার এডিটরেcloudshell edit ~/holiday_workshop/04-Adding-Memory-Bank/01-starter/backend/main.py~/holiday_workshop/04-Adding-Memory-Bank/01-starter/backend/main.pyখুলবে। -
# TODO: Create Vertex AI Session Service & Memory Bank Service, পুরো লাইনটি নিম্নলিখিত দিয়ে প্রতিস্থাপন করুন:session_service = VertexAiSessionService( project=PROJECT_ID, location=LOCATION, agent_engine_id=AGENT_ENGINE_ID ) memory_service = VertexAiMemoryBankService( project=PROJECT_ID, location=LOCATION, agent_engine_id=AGENT_ENGINE_ID )

- 👉💻 আপনার কমান্ডে নিম্নলিখিতটি টাইপ করুন:
এটি আপনার এডিটরেcloudshell edit ~/holiday_workshop/04-Adding-Memory-Bank/01-starter/backend/deploy_agent.py~/holiday_workshop/04-Adding-Memory-Bank/01-starter/backend/deploy_agent.pyখুলবে। -
# TODO: Set Up Configurationনিম্নলিখিত দিয়ে প্রতিস্থাপন করুন:# Basic configuration types MemoryBankConfig = types.ReasoningEngineContextSpecMemoryBankConfig SimilaritySearchConfig = ( types.ReasoningEngineContextSpecMemoryBankConfigSimilaritySearchConfig ) GenerationConfig = types.ReasoningEngineContextSpecMemoryBankConfigGenerationConfig # Advanced configuration types CustomizationConfig = types.MemoryBankCustomizationConfig MemoryTopic = types.MemoryBankCustomizationConfigMemoryTopic CustomMemoryTopic = types.MemoryBankCustomizationConfigMemoryTopicCustomMemoryTopic GenerateMemoriesExample = types.MemoryBankCustomizationConfigGenerateMemoriesExample ConversationSource = ( types.MemoryBankCustomizationConfigGenerateMemoriesExampleConversationSource ) ConversationSourceEvent = ( types.MemoryBankCustomizationConfigGenerateMemoriesExampleConversationSourceEvent ) ExampleGeneratedMemory = ( types.MemoryBankCustomizationConfigGenerateMemoriesExampleGeneratedMemory )

- 👉 একই ফাইলে:
04-Adding-Memory-Bank/01-starter/backend/deploy_agent.py।# TODO: Set up topicখুঁজুন, পুরো লাইনটি নিম্নলিখিত দিয়ে প্রতিস্থাপন করুন:custom_topics = [ # Topic 1: Sweater Preference MemoryTopic( custom_memory_topic=CustomMemoryTopic( label="sweater_preference", description="""Extract the user's preferences for sweater styles, patterns, and designs. Include: - Specific patterns (snowflake, reindeer, geometric, fair isle, solid, etc.) - Style preferences (chunky knit, cardigan, pullover, turtleneck, oversized, fitted) - Color preferences (red, green, navy, pastel, etc.) - Material preferences if mentioned (wool, cotton, cashmere, itchy/soft) - Themes (retro, modern, ugly christmas sweater, elegant) Example: "User wants a retro style sweater with a pixelated reindeer pattern." Example: "User prefers dark blue colors and hates itchy wool." """, ) ), # Topic 2: Personal Context MemoryTopic( custom_memory_topic=CustomMemoryTopic( label="personal_context", description="""Extract the user's personal context including hobbies, pets, interests, job, and preferred scenes. Include: - Hobbies and activities (skiing, reading, gaming, cooking, etc.) - Pets (type, breed, name, color) - Job or profession if relevant to their style - General interests (sci-fi, nature, vintage, tech) - Preferred scenes or vibes (cozy fireplace, snowy mountain, cyberpunk city, beach) Example: "User has a golden retriever named Max." Example: "User loves skiing and wants a snowy mountain background." Example: "User is a software engineer who likes cyberpunk aesthetics." """, ) ) ] - 👉 একই ফাইলে:
04-Adding-Memory-Bank/01-starter/backend/deploy_agent.py।# TODO: Create Agent Engineখুঁজুন, পুরো লাইনটি নিম্নলিখিত দিয়ে প্রতিস্থাপন করুন:agent_engine = client.agent_engines.create( config={ "display_name": AGENT_DISPLAY_NAME, "context_spec": { "memory_bank_config": { "generation_config": { "model": f"projects/{PROJECT_ID}/locations/{LOCATION}/publishers/google/models/gemini-2.5-flash" }, "customization_configs": [customization_config] } }, } )
কেন শুধু প্রম্পট ব্যবহার করবেন না?
তুমি হয়তো জিজ্ঞেস করতে পারো, "কেন আমরা প্রম্পটে ব্যবহারকারীর ইতিহাস পেস্ট করি না?"
- আকারের সীমা : প্রসঙ্গ উইন্ডোগুলি বড়, কিন্তু অসীম নয়। আপনি ৫ বছরের ইতিহাসের সাথে মানানসই হতে পারবেন না।
- খরচ : প্রতিটি "হ্যালো" এর জন্য ১০ লক্ষ টোকেন প্রক্রিয়াকরণ অত্যন্ত ব্যয়বহুল।
- ফোকাস : মেমোরি ব্যাংক আপনার এজেন্টের জন্য একটি সার্চ ইঞ্জিন হিসেবে কাজ করে। এটি শুধুমাত্র প্রাসঙ্গিক তথ্য উদ্ধার করে।
- 👉💻 আপনার কমান্ডে নিম্নলিখিতটি টাইপ করুন:
এটি আপনার এডিটরেcloudshell edit ~/holiday_workshop/04-Adding-Memory-Bank/01-starter/backend/agent.py~/holiday_workshop/04-Adding-Memory-Bank/01-starter/backend/agent.pyখুলবে। - ফাইলটিতে:
~/holiday_workshop/04-Adding-Memory-Bank/01-starter/backend/agent.py# TODO: Add PreloadMemoryToolনিম্নলিখিত দিয়ে প্রতিস্থাপন করুন:if USE_MEMORY_BANK: agent_tools.append(PreloadMemoryTool())
PreloadMemoryTool এবং add_session_to_memory
agent.py তে, আপনি দুটি মূল উপাদান দেখতে পাবেন:
-
PreloadMemoryTool: এটি এমন একটি টুল যা এজেন্টকে "Google itself" করতে দেয়। ব্যবহারকারী যদি "আমার স্বাভাবিক কফি পান" এর মতো অস্পষ্ট কিছু জিজ্ঞাসা করে, তাহলে এজেন্ট এই টুলটি ব্যবহার করে মেমোরি ব্যাংককে "কফি পছন্দ" জিজ্ঞাসা করতে পারে। -
add_session_to_memory: এটি একটি ব্যাকগ্রাউন্ড কলব্যাক।- কেন অ্যাসিঙ্ক? মেমোরি সেভ করতে সময় লাগে (চ্যাটের সারসংক্ষেপ তৈরি, তথ্য বের করা)। আমরা চাই না যে ব্যবহারকারী এর জন্য অপেক্ষা করুক। আমরা এটি ব্যাকগ্রাউন্ডে (
add_session_to_memory)after_agent_callbackব্যবহার করে চালাই।
- কেন অ্যাসিঙ্ক? মেমোরি সেভ করতে সময় লাগে (চ্যাটের সারসংক্ষেপ তৈরি, তথ্য বের করা)। আমরা চাই না যে ব্যবহারকারী এর জন্য অপেক্ষা করুক। আমরা এটি ব্যাকগ্রাউন্ডে (
১০. মেমোরি ব্যাংক কার্যকর
- 👉💻 আপনার কমান্ডে নিম্নলিখিতটি টাইপ করুন:
আপনি নীচের মত ফলাফল দেখতে পাবেন:cd ~/holiday_workshop/04-Adding-Memory-Bank/01-starter ./use_memory_bank.sh
~/holiday_workshop/.envফাইলটি পরীক্ষা করুন, আপনি দেখতে পাবেন ( কোনও পদক্ষেপের প্রয়োজন নেই )USE_MEMORY_BANK=TRUE AGENT_ENGINE_ID={agent_engine_id} - 👉💻 অ্যাপ্লিকেশন UI দিয়ে মেমোরি পরীক্ষা করুন। আপনার কমান্ডে নিম্নলিখিতটি টাইপ করুন:
cd ~/holiday_workshop/04-Adding-Memory-Bank/01-starter ./start_app.shhttp://localhost:5173/এ ক্লিক করুন, অথবা একটি নতুন উইন্ডো খুলুন এবংhttp://localhost:5173/টাইপ করুন। মনে রাখবেন যেUvicorn running on http://0.0.0.0:8000কেবল ব্যাকএন্ড সার্ভার, আমরা যে লিঙ্কে ক্লিক করতে চাই তা নয় । এখন ওয়েবসাইটের চ্যাট ইন্টারফেস আপনার ব্যক্তিগতকৃত এজেন্ট হয়ে উঠেছে!
- 👉মেমোরি পরীক্ষা করুন। যদি আপনি UI টাইপ করেন:
I want a sweater that matches my dog. He's a golden retriever.I'm a programmer, so I want something geeky. Maybe a matrix style?I like snowflake sweater pattern
এজেন্ট এটিকে একটি পছন্দ হিসেবে চিহ্নিত করবে এবং মেমোরি ব্যাংকে সংরক্ষণ করবে।
পরের সপ্তাহে (অথবা আপনি যখনই Control+C এবং ./start_app.sh ব্যবহার করে অ্যাপ্লিকেশনটি পুনরায় চালু করবেন), যদি আপনি জিজ্ঞাসা করেন:
what is my preference on sweater pattern?
এজেন্ট মেমোরি ব্যাংকে জিজ্ঞাসা করবে, আপনার পছন্দ দেখবে এবং জিজ্ঞাসা না করেই সোয়েটার প্যাটার্ন তৈরি করবে। 
- গুগল ক্লাউড কনসোল এজেন্ট ইঞ্জিনে গিয়ে Vertex AI Agent Engine-এ যাচাই করুন
- উপরের বাম দিকের প্রকল্প নির্বাচক থেকে প্রকল্পটি নির্বাচন করেছেন তা নিশ্চিত করুন:

- এবং পূর্ববর্তী
use_memory_bank.shকমান্ড থেকে আপনি যে এজেন্ট ইঞ্জিনটি স্থাপন করেছেন তা যাচাই করুন।
আপনার তৈরি করা এজেন্ট ইঞ্জিনে ক্লিক করুন।
- উপরের বাম দিকের প্রকল্প নির্বাচক থেকে প্রকল্পটি নির্বাচন করেছেন তা নিশ্চিত করুন:
- এই ডিপ্লয় করা এজেন্টের
Memoriesট্যাবে ক্লিক করুন, আপনি এখানে সমস্ত মেমোরি দেখতে পারবেন।
অভিনন্দন! তুমি তোমার এজেন্টের সাথে মেমোরি ব্যাংক সংযুক্ত করেছ!
১১. উপসংহার
সারাংশ
তুমি সফলভাবে একটি সম্পূর্ণ এজেন্টিক সিস্টেম তৈরি এবং তৈরি করেছ।
- সংযোগ : আপনার এজেন্ট স্থানীয় সরঞ্জামগুলি কীভাবে অ্যাক্সেস করে তা মানসম্মত করার জন্য আপনি MCP ব্যবহার করেছেন।
- অর্কেস্ট্রেশন : আপনি বহু-পদক্ষেপের কাজের জন্য প্রয়োজনীয় জটিল যুক্তি লুপ পরিচালনা করতে ADK ব্যবহার করেছেন।
- ব্যক্তিগতকরণ : আপনি মেমোরি ব্যাংক ব্যবহার করে একটি স্থায়ী, শিক্ষণ স্তর তৈরি করেছেন যা ব্যবহারকারীর প্রসঙ্গ মনে রাখে।
পরবর্তী পদক্ষেপ
- আপনার নিজস্ব MCP সার্ভার তৈরি করুন : আপনার অভ্যন্তরীণ API বা ডাটাবেসের জন্য একটি সার্ভার তৈরি করুন।
- ADK প্যাটার্নগুলি অন্বেষণ করুন : ADK ডকুমেন্টেশনে "রিজনিং লুপস" এবং "অর্কেস্ট্রেশন" সম্পর্কে জানুন।
- ডিপ্লয় : আপনার এজেন্টকে স্থানীয় স্ক্রিপ্ট থেকে ক্লাউড রানের একটি প্রোডাকশন পরিষেবাতে নিয়ে যান।