১. ভূমিকা
সংক্ষিপ্ত বিবরণ
এই ল্যাবটি আপনাকে গুগল এজেন্ট ডেভেলপমেন্ট কিট (Google ADK) ব্যবহার করে জটিল, একাধিক এজেন্ট-ভিত্তিক সিস্টেম পরিচালনা করতে শেখাবে। আপনি সাধারণ এজেন্ট স্তরবিন্যাস থেকে স্বয়ংক্রিয় ও সহযোগিতামূলক ওয়ার্কফ্লো তৈরি করার দিকে অগ্রসর হবেন।
আপনি যা তৈরি করবেন
আপনি দুটি স্বতন্ত্র মাল্টি-এজেন্ট সিস্টেম তৈরি করবেন:
- একজন সাধারণ ভ্রমণ পরিকল্পনা এজেন্ট, যে একজন 'ব্রেইনস্টর্মিং' এজেন্ট এবং একজন 'আকর্ষণ পরিকল্পনা' এজেন্টের মধ্যে কথোপকথন আদান-প্রদান করতে শেখে।
- একটি আরও উন্নত মুভি পিচ জেনারেটর যা একটি সম্পূর্ণ সিনেমার কাহিনী তৈরি করার জন্য গবেষক, চিত্রনাট্যকার এবং সমালোচকের মতো স্বয়ংক্রিয় এজেন্টদের একটি 'রাইটার্স রুম' ব্যবহার করে, যারা একটি লুপের মধ্যে একসাথে কাজ করে।
আপনি যা শিখবেন
- প্যারেন্ট এবং সাব-এজেন্ট সম্পর্ক কীভাবে তৈরি করবেন
- একটি টুল থেকে সেশন
stateকীভাবে ডেটা লিখতে হয়। - কী টেমপ্লেটিং (যেমন,
{my_key?}) ব্যবহার করেstateথেকে কীভাবে ডেটা পড়তে হয়। - ধাপে ধাপে ওয়ার্কফ্লোর জন্য কীভাবে একটি
SequentialAgentব্যবহার করবেন। - পুনরাবৃত্তিমূলক পরিমার্জন চক্র তৈরি করতে কীভাবে
LoopAgentব্যবহার করবেন -
ParallelAgentব্যবহার করে কীভাবে স্বাধীন কাজগুলো একযোগে চালানো যায়।
২. বহু-এজেন্ট সিস্টেম
এজেন্ট ডেভেলপমেন্ট কিট (ADK) ডেভেলপারদের জেনারেটিভ মডেল থেকে আরও নির্ভরযোগ্য, অত্যাধুনিক এবং বহু-ধাপের আচরণ পেতে সক্ষম করে। একটি জটিল নির্দেশের পরিবর্তে, ADK আপনাকে একাধিক সরল এজেন্টের একটি প্রবাহ তৈরি করতে দেয়, যারা কাজ ভাগ করে নিয়ে কোনো একটি সমস্যার সমাধানে সহযোগিতা করে।
একটি একক, অখণ্ড প্রম্পট ব্যবহার করার তুলনায় এই পদ্ধতির বেশ কিছু সুবিধা রয়েছে:
- সরলতর নকশা: একটি বড় ও জটিল নির্দেশ তৈরি করার চেয়ে ছোট ছোট ও বিশেষায়িত এজেন্টের একটি প্রবাহ নকশা ও সংগঠিত করা সহজতর।
- নির্ভরযোগ্যতা: একটি বৃহৎ ও জটিল এজেন্টের তুলনায় বিশেষায়িত এজেন্টরা তাদের নির্দিষ্ট কাজে অধিক নির্ভরযোগ্য।
- রক্ষণাবেক্ষণযোগ্যতা: সিস্টেমের অন্যান্য অংশ নষ্ট না করে একটি ছোট, বিশেষায়িত এজেন্টকে ঠিক করা বা উন্নত করা সহজ।
- মডুলারিটি: একটি ওয়ার্কফ্লোর জন্য তৈরি এজেন্টগুলো অন্যগুলোতে সহজেই পুনরায় ব্যবহার করা যায়।
শ্রেণিবদ্ধ এজেন্ট ট্রি

ADK-তে, আপনি এজেন্টদের একটি ট্রি স্ট্রাকচারে সাজান। এই ক্রমবিন্যাসটি কথোপকথনের প্রবাহ নিয়ন্ত্রণের জন্য অত্যন্ত গুরুত্বপূর্ণ, কারণ এটি নির্ধারণ করে দেয় কোন এজেন্ট অন্য কোন এজেন্টের কাছে কথোপকথনটি "পাঠাতে" পারবে। এর ফলে সিস্টেমের আচরণ আরও অনুমানযোগ্য হয় এবং ডিবাগ করা সহজ হয়। এর সুবিধাগুলোর মধ্যে রয়েছে:
- স্বজ্ঞামূলক নকশা: এর কাঠামোটি বাস্তব জগতের দলগুলো থেকে অনুপ্রাণিত, যা এটিকে বোঝা আরও সহজ করে তোলে।
- নিয়ন্ত্রিত প্রবাহ: এই স্তরবিন্যাস আপনাকে কাজ বণ্টনের উপর সুনির্দিষ্ট নিয়ন্ত্রণ দেয়, যা ডিবাগিং-এ সাহায্য করে। উদাহরণস্বরূপ, ট্রি স্ট্রাকচারটি নিশ্চিত করে যে সঠিক রিপোর্ট-রাইটিং এজেন্টকেই কল করা হবে, এমনকি যদি একই রকম বিবরণযুক্ত দুটি এজেন্টও থাকে।
সম্পূর্ণ কাঠামোটি root_agent দিয়ে শুরু হয়। এই এজেন্টটি প্যারেন্ট হিসেবে কাজ করে এবং এর এক বা একাধিক সাব-এজেন্ট থাকতে পারে, যারা আবার তাদের নিজেদের সাব-এজেন্টদের প্যারেন্ট হতে পারে এবং এভাবেই ট্রি বা বৃক্ষটি গঠিত হয়।
৩. প্রজেক্ট সেটআপ
গুগল অ্যাকাউন্ট
যদি আপনার আগে থেকে কোনো ব্যক্তিগত গুগল অ্যাকাউন্ট না থাকে, তাহলে আপনাকে অবশ্যই একটি গুগল অ্যাকাউন্ট তৈরি করতে হবে।
কর্মক্ষেত্র বা শিক্ষা প্রতিষ্ঠানের অ্যাকাউন্টের পরিবর্তে ব্যক্তিগত অ্যাকাউন্ট ব্যবহার করুন ।
গুগল ক্লাউড কনসোলে সাইন-ইন করুন
আপনার ব্যক্তিগত গুগল অ্যাকাউন্ট ব্যবহার করে গুগল ক্লাউড কনসোলে সাইন-ইন করুন।
বিলিং সক্ষম করুন
$5 গুগল ক্লাউড ক্রেডিট রিডিম করুন (ঐচ্ছিক)
এই কর্মশালাটি চালানোর জন্য আপনার একটি বিলিং অ্যাকাউন্ট প্রয়োজন, যাতে কিছু ব্যালেন্স আছে। আপনি যদি আপনার নিজস্ব বিলিং ব্যবহার করার পরিকল্পনা করেন, তবে এই ধাপটি বাদ দিতে পারেন।
- এই লিঙ্কে ক্লিক করুন এবং আপনার ব্যক্তিগত গুগল অ্যাকাউন্ট দিয়ে সাইন ইন করুন। আপনি এইরকম কিছু দেখতে পাবেন:

- "আপনার ক্রেডিট অ্যাক্সেস করতে এখানে ক্লিক করুন" বোতামটিতে ক্লিক করুন। এটি আপনাকে আপনার বিলিং প্রোফাইল সেট আপ করার পৃষ্ঠায় নিয়ে যাবে।

- নিশ্চিত করতে ক্লিক করুন
আপনি এখন একটি গুগল ক্লাউড প্ল্যাটফর্ম ট্রায়াল বিলিং অ্যাকাউন্টের সাথে সংযুক্ত হয়েছেন।

একটি ব্যক্তিগত বিলিং অ্যাকাউন্ট তৈরি করুন
আপনি যদি গুগল ক্লাউড ক্রেডিট ব্যবহার করে বিলিং সেট আপ করেন, তাহলে এই ধাপটি এড়িয়ে যেতে পারেন।
একটি ব্যক্তিগত বিলিং অ্যাকাউন্ট তৈরি করতে, ক্লাউড কনসোলে বিলিং চালু করার জন্য এখানে যান ।
কিছু নোট:
- এই ল্যাবটি সম্পন্ন করতে ক্লাউড রিসোর্সে ১ মার্কিন ডলারেরও কম খরচ হওয়া উচিত।
- পরবর্তী চার্জ এড়াতে, এই ল্যাবের শেষে দেওয়া ধাপগুলো অনুসরণ করে আপনি রিসোর্সগুলো মুছে ফেলতে পারেন।
- নতুন ব্যবহারকারীরা ৩০০ মার্কিন ডলারের ফ্রি ট্রায়ালের জন্য যোগ্য।
একটি প্রকল্প তৈরি করুন (ঐচ্ছিক)
এই ল্যাবের জন্য ব্যবহার করার মতো আপনার যদি কোনো চলমান প্রজেক্ট না থাকে, তাহলে এখানে একটি নতুন প্রজেক্ট তৈরি করুন ।
৪. ক্লাউড শেল এডিটর খুলুন
- সরাসরি ক্লাউড শেল এডিটর- এ যেতে এই লিঙ্কে ক্লিক করুন।
- আজ যেকোনো সময়ে অনুমোদনের জন্য অনুরোধ করা হলে, চালিয়ে যাওয়ার জন্য 'অনুমোদন করুন' (Authorize) বোতামে ক্লিক করুন।

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

- টার্মিনালে এই কমান্ডটি দিয়ে আপনার প্রজেক্ট সেট করুন:
gcloud config set project [PROJECT_ID]- উদাহরণ:
gcloud config set project lab-project-id-example - আপনি যদি আপনার প্রজেক্ট আইডি মনে রাখতে না পারেন, তাহলে নিম্নলিখিত উপায়ে আপনার সমস্ত প্রজেক্ট আইডি তালিকাভুক্ত করতে পারেন:
gcloud projects list
- উদাহরণ:
- আপনার এই বার্তাটি দেখা উচিত:
Updated property [core/project].
৫. এপিআই সক্রিয় করুন
Vertex AI API ব্যবহার করতে এবং Gemini মডেলের সাথে ইন্টারঅ্যাক্ট করতে, আপনাকে আপনার Google Cloud প্রজেক্টে Vertex AI API এনাবল করতে হবে।
- টার্মিনালে API-টি সক্রিয় করুন:
gcloud services enable aiplatform.googleapis.com
পাইথনের জন্য ভার্টেক্স এআই এসডিকে-এর পরিচিতি
আপনার পাইথন অ্যাপ্লিকেশন থেকে ভার্টেক্স এআই-তে হোস্ট করা মডেলগুলির সাথে ইন্টারঅ্যাক্ট করার জন্য, আপনাকে পাইথনের জন্য ভার্টেক্স এআই এসডিকে (SDK) ব্যবহার করতে হবে। এই এসডিকে সরাসরি অন্তর্নিহিত এপিআই (API) কলগুলির জটিলতা সামলানোর প্রয়োজন ছাড়াই প্রম্পট পাঠানো, মডেল প্যারামিটার নির্দিষ্ট করা এবং প্রতিক্রিয়া গ্রহণ করার প্রক্রিয়াকে সহজ করে তোলে।
আপনি পাইথনের জন্য ভার্টেক্স এআই এসডিকে-এর বিস্তারিত ডকুমেন্টেশন এখানে পেতে পারেন: পাইথনের জন্য ভার্টেক্স এআই এসডিকে-এর পরিচিতি | গুগল ক্লাউড ।
৬. প্রকল্পের পরিবেশ তৈরি করুন
রিপোটি ক্লোন করুন
- টার্মিনালে , স্টার্টার ফাইলগুলো থাকা রিপোজিটরিটি ক্লোন করুন।
git clone --depth 1 https://github.com/GoogleCloudPlatform/devrel-demos.git devrel-demos-multiagent-lab--depth 1ফ্ল্যাগটি শুধুমাত্র সর্বশেষ সংস্করণটি ক্লোন করে, যা দ্রুততর। - টার্মিনালে , ল্যাব-নির্দিষ্ট ফোল্ডারটি আপনার হোম ডিরেক্টরিতে সরান এবং ল্যাবের প্রত্যাশিত কাঠামোর সাথে মিলিয়ে এটির নাম পরিবর্তন করুন।
mv devrel-demos-multiagent-lab/ai-ml/build-multiagent-systems-with-adk/adk_multiagent_systems ~ - টার্মিনালে , এই ল্যাবের জন্য সঠিক ওয়ার্কিং ডিরেক্টরিতে (
adk_multiagent_systems) যান।cd ~/adk_multiagent_systems
আপনার ফাইল কাঠামো পর্যালোচনা করুন
এখন যেহেতু আপনার সমস্ত ফাইল তৈরি হয়ে গেছে, সম্পূর্ণ কাঠামোটি দেখতে এক্সপ্লোরারে adk_multiagent_systems ফোল্ডারটি খুলুন।
- ক্লাউড শেল এডিটর মেনুতে, ফাইল > ওপেন ফোল্ডার... নির্বাচন করুন।

- যে বক্সটি পপ-আপ হবে, সেখানে আপনার ইউজারনেমের পরে
adk_multiagent_systems/এই ফোল্ডারের তথ্যটি যোগ করুন। OK- তে ক্লিক করুন।
এটা দেখতে অনেকটা এইরকম হওয়া উচিত:
- বাম দিকের এক্সপ্লোরার প্যানেলটি রিফ্রেশ হবে। এখন আপনি আপনার সম্পূর্ণ প্রোজেক্ট কাঠামো দেখতে পাবেন, যেখানে
parent_and_subagentsএবংworkflow_agentsসাব-ডিরেক্টরিগুলো পরবর্তী ধাপগুলোর জন্য প্রস্তুত থাকবে।
একটি ভার্চুয়াল পরিবেশ সক্রিয় করুন
- টার্মিনালে ,
uvব্যবহার করে একটি ভার্চুয়াল এনভায়রনমেন্ট তৈরি ও সক্রিয় করুন। এটি নিশ্চিত করে যে আপনার প্রোজেক্টের ডিপেন্ডেন্সিগুলো সিস্টেম পাইথন বা অন্যান্য প্রোজেক্টের সাথে সাংঘর্ষিক হবে না।uv venv source .venv/bin/activate - টার্মিনালে ,
requirements.txtফাইল থেকেgoogle-adkএবং অন্যান্য ডিপেন্ডেন্সিগুলো ইনস্টল করুন:uv pip install -r requirements.txt
পরিবেশ ভেরিয়েবল সেট আপ করুন
- আপনি ইতিমধ্যে
adk_multiagent_systemsডিরেক্টরিতে আছেন। টার্মিনালে , আপনার এনভায়রনমেন্ট ভেরিয়েবলগুলো সংরক্ষণের জন্য একটি.envফাইল তৈরি করুন:cloudshell edit .env - এডিটরে খোলা
.envফাইলটিতে নিম্নলিখিতটি পেস্ট করুন:GOOGLE_GENAI_USE_VERTEXAI=TRUE GOOGLE_CLOUD_PROJECT="[YOUR-PROJECT-ID]" GOOGLE_CLOUD_LOCATION=global MODEL="gemini-2.5-flash" -
[YOUR-PROJECT-ID]এর জায়গায় আপনার আসল গুগল ক্লাউড প্রজেক্ট আইডি বসান। (যেমনPROJECT_ID = "google-cloud-labs")
আপনি যদি আপনার প্রজেক্ট আইডি মনে করতে না পারেন, তাহলে আপনার টার্মিনালে নিম্নলিখিত কমান্ডটি চালান। এটি আপনাকে আপনার সমস্ত প্রজেক্ট এবং তাদের আইডিগুলির একটি তালিকা দেখাবে।gcloud projects list - টার্মিনালে , এই
.envফাইলটি সাব-এজেন্ট ডিরেক্টরিগুলোতে কপি করুন, যাতে তারাও ভেরিয়েবলগুলো অ্যাক্সেস করতে পারে: ফাইল কাঠামোটি এখন দেখতে এইরকম হবে:cp .env parent_and_subagents/.env cp .env workflow_agents/.env
৭. প্যারেন্ট, সাব-এজেন্ট এবং পিয়ার এজেন্টদের মধ্যে স্থানান্তর অন্বেষণ করুন।
কথোপকথন সর্বদা root_agent দিয়ে শুরু হয়। ডিফল্টরূপে, একটি প্যারেন্ট এজেন্ট তার সাব-এজেন্টদের description ব্যবহার করে সিদ্ধান্ত নেয় কখন কথোপকথনটি স্থানান্তর করতে হবে। আপনি সাব-এজেন্টদের name ব্যবহার করে প্যারেন্টের instruction এই স্থানান্তরগুলিকে স্পষ্টভাবে নির্দেশও দিতে পারেন।
চলুন এটা পরীক্ষা করে দেখি।
- ক্লাউড শেল এডিটরে,
adk_multiagent_systems/parent_and_subagents/agent.pyখুলুন।agent.pyফাইলে থাকা তিনটি এজেন্ট লক্ষ্য করুন:-
root_agent(যার নামsteering) : কোন সাব-এজেন্টে স্থানান্তর করা হবে তা নির্ধারণ করার জন্য ব্যবহারকারীকে একটি প্রশ্ন জিজ্ঞাসা করে। প্রাথমিকভাবে, এটি শুধুমাত্র তার সাব-এজেন্টদেরdescriptionউপর নির্ভর করে। -
travel_brainstormer: ব্যবহারকারীকে গন্তব্যস্থল নিয়ে চিন্তাভাবনা করতে সাহায্য করে। -
attractions_planner: ব্যবহারকারীকে একটি নির্দিষ্ট দেশে করণীয় বিষয়গুলির তালিকা তৈরি করতে সাহায্য করে।
-
-
root_agentতৈরির সময় নিম্নলিখিত লাইনটি যোগ করেtravel_brainstormerএবংattractions_plannerroot_agentএর সাব-এজেন্ট হিসেবে তৈরি করুন:sub_agents=[travel_brainstormer, attractions_planner] - টার্মিনালে আপনার এজেন্টের সাথে চ্যাট করুন:
cd ~/adk_multiagent_systems adk run parent_and_subagents - টার্মিনালের
[user]:প্রম্পটে টাইপ করুন: উদাহরণ আউটপুট (আপনারটি কিছুটা ভিন্ন হতে পারে):hello[steering]: Hi there! Do you already have a country in mind for your trip, or would you like some help deciding where to go?
- এখন, টার্মিনালে এজেন্টকে বলুন:
উদাহরণ আউটপুট (আপনারটি কিছুটা ভিন্ন হতে পারে):I could use some help deciding.[travel_brainstormer]: Okay! To give you the best recommendations, I need to understand what you're looking for in a trip. ...
[travel_brainstormer]ট্যাগটি লক্ষ্য করুন।root_agentশুধুমাত্র সাব-এজেন্টেরdescriptionউপর ভিত্তি করে নিয়ন্ত্রণ হস্তান্তর করেছে। - টার্মিনালের
user:প্রম্পটেexitটাইপ করুন এবং কথোপকথনটি শেষ করতে ENTER চাপুন। - এবার বিষয়টি আরও স্পষ্ট করা যাক।
agent.pyফাইলে,root_agentএরinstructionনিম্নলিখিতটি যোগ করুন:If they need help deciding, send them to 'travel_brainstormer'. If they know what country they'd like to visit, send them to the 'attractions_planner'. - টার্মিনালে এজেন্টটি আবার চালান:
adk run parent_and_subagents - টার্মিনালের
[user]:প্রম্পটে টাইপ করুন:hello - উত্তরে বলুন:
উদাহরণ আউটপুট (আপনারটি কিছুটা ভিন্ন হতে পারে):I would like to go to Japan. আপনার নতুন নির্দেশনা অনুযায়ী[attractions_planner]: Okay, I can help you with that! Here are some popular attractions in Japan: ...
attractions_plannerএ স্থানান্তরটি লক্ষ্য করুন। - এখন উত্তর দিন:
উদাহরণ আউটপুট (আপনারটি কিছুটা ভিন্ন হতে পারে):Actually I don't know what country to visit. লক্ষ্য করুন যে আপনাকে[travel_brainstormer]: Okay! I can help you brainstorm some countries for travel...
travel_brainstormerএ স্থানান্তর করা হয়েছে, যাattractions_plannerএর একটি সমকক্ষ । এটি ডিফল্টরূপে অনুমোদিত। - সেশনটি শেষ করতে ইউজার প্রম্পটে
exitটাইপ করুন।
পুনরালোচনা
এই অংশে, আপনি এজেন্ট স্তরবিন্যাস এবং কথোপকথন প্রবাহের মূল বিষয়গুলো শিখেছেন:
- কথোপকথন সর্বদা
root_agentদিয়ে শুরু হয়। - একটি প্যারেন্ট এজেন্ট তার
descriptionউপর ভিত্তি করে স্বয়ংক্রিয়ভাবে একটি সাব-এজেন্টে স্থানান্তরিত হতে পারে। - আপনি প্যারেন্টকে তার
nameধরে সাব-এজেন্টের কাছে স্থানান্তরেরinstructionদিয়ে এই প্রবাহকে স্পষ্টভাবে নিয়ন্ত্রণ করতে পারেন। - ডিফল্টরূপে, এজেন্টরা তাদের
peerএজেন্টদের (পদানুক্রমিক শ্রেণিবিন্যাসে থাকা সহোদর) কাছে স্থানান্তরিত হতে পারে।
৮. তথ্য সংরক্ষণ ও পুনরুদ্ধার করতে সেশন স্টেট ব্যবহার করুন।
প্রতিটি ADK কথোপকথনের একটি Session থাকে, যার মধ্যে একটি সেশন স্টেট ডিকশনারি অন্তর্ভুক্ত থাকে। এই স্টেটটি সমস্ত এজেন্টের কাছে অ্যাক্সেসযোগ্য, যা তাদের মধ্যে তথ্য আদান-প্রদান করতে বা কথোপকথন জুড়ে ডেটা (যেমন একটি তালিকা) বজায় রাখার জন্য এটিকে একটি নিখুঁত উপায় করে তোলে।
রাজ্যের সাথে সংযোজন এবং রাজ্য থেকে পাঠ অন্বেষণ করতে:
-
adk_multiagent_systems/parent_and_subagents/agent.pyফাইলে ফিরে যান -
# Toolsহেডারের পরে নিম্নলিখিত ফাংশন সংজ্ঞাটি পেস্ট করুন: এই কোডে, লক্ষ্য করুন:def save_attractions_to_state( tool_context: ToolContext, attractions: List[str] ) -> dict[str, str]: """Saves the list of attractions to state["attractions"]. Args: attractions [str]: a list of strings to add to the list of attractions Returns: None """ # Load existing attractions from state. If none exist, start an empty list existing_attractions = tool_context.state.get("attractions", []) # Update the 'attractions' key with a combo of old and new lists. # When the tool is run, ADK will create an event and make # corresponding updates in the session's state. tool_context.state["attractions"] = existing_attractions + attractions # A best practice for tools is to return a status message in a return dict return {"status": "success"}- ফাংশনটি
tool_context: ToolContextগ্রহণ করে। এই অবজেক্টটি আপনার সেশনে প্রবেশের প্রবেশদ্বার। -
tool_context.state["attractions"] = ...লাইনটি সরাসরি সেশনের স্টেট ডিকশনারি থেকে ডেটা পড়ে এবং তাতে লেখে। বাকিটা ADK সামলে নেয়।
- ফাংশনটি
-
toolsপ্যারামিটারটি যোগ করেattractions_plannerএজেন্টে টুলটি যুক্ত করুন:tools=[save_attractions_to_state] -
attractions_plannerএজেন্টের বিদ্যমানinstructionনিম্নলিখিত বুলেট পয়েন্টগুলো যোগ করুন:- When they reply, use your tool to save their selected attraction and then provide more possible attractions. - If they ask to view the list, provide a bulleted list of { attractions? } and then suggest some more. - টার্মিনালে নিম্নলিখিত কমান্ডটি ব্যবহার করে এজেন্ট ডেভেলপমেন্ট কিট ওয়েব UI চালু করুন :
আউটপুটadk webINFO: Started server process [2434] INFO: Waiting for application startup. +-------------------------------------------------------+ | ADK Web Server started | | | | For local testing, access at http://localhost:8000. | +-------------------------------------------------------+ INFO: Application startup complete. INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) - ক্লাউড শেল টার্মিনালে, একটি নতুন ট্যাবে ওয়েব ইন্টারফেসটি দেখতে, ওয়েব প্রিভিউ বোতামে ক্লিক করুন এবং চেঞ্জ পোর্ট নির্বাচন করুন।

- পোর্ট নম্বর ৮০০০ ইনপুট করুন এবং 'Change and Preview'- এ ক্লিক করুন। ADK Dev UI সহ একটি নতুন ব্রাউজার ট্যাব খুলবে।

- বামদিকের 'Select an agent' ড্রপডাউন থেকে
parent_and_subagentsনির্বাচন করুন। - কথোপকথন শুরু করুন:
helloদিয়ে - এজেন্ট আপনাকে অভিবাদন জানানোর পর, উত্তরে বলুন:
আপনাকেI'd like to go to Egypt.attractions_planner-এ স্থানান্তরিত করা হবে এবং আকর্ষণীয় স্থানগুলোর একটি তালিকা প্রদান করা হবে। - উদাহরণস্বরূপ, একটি আকর্ষণীয় স্থান বেছে নিন:
I'll go to the Sphinx - আপনি এইরকম একটি উত্তর পাবেন: ঠিক আছে, আমি আপনার তালিকায় ‘দ্য স্ফিঙ্কস’ যোগ করে দিয়েছি...
- টুলের প্রতিক্রিয়া থেকে তৈরি ইভেন্টটি দেখতে, রেসপন্স টুল বক্সটিতে (চেক মার্ক দিয়ে চিহ্নিত) ক্লিক করুন।
লক্ষ্য করুন যে এতে একটি 'অ্যাকশনস' ফিল্ড রয়েছে, যার মধ্যেstateDeltaঅন্তর্ভুক্ত আছে, যা অবস্থার পরিবর্তনগুলো বর্ণনা করে। - এজেন্টের তালিকা থেকে আরেকটি আকর্ষণীয় স্থানের নাম উল্লেখ করে উত্তর দিন।
- বাম দিকের নেভিগেশন মেনুতে, পূর্বে পরিদর্শন করা ইভেন্টটি থেকে ফোকাস বের করতে "X"-এ ক্লিক করুন।
- বাম পাশের সাইডবারে, ' State' ট্যাবে ক্লিক করুন। এখন আপনি সেশনের স্টেটে '
attractions' অ্যারেটি দেখতে পাবেন, যেটিতে আপনার নির্বাচিত দুটি আইটেমই থাকা উচিত।
- এজেন্টের কাছে এই বার্তাটি পাঠান:
এজেন্ট এখন স্টেট থেকে ডেটা পড়ে আপনার তালিকাটি ফেরত দেবে।What is on my list? - এজেন্টটি নিয়ে আপনার পরীক্ষা-নিরীক্ষা শেষ হলে, ওয়েব ব্রাউজার ট্যাবটি বন্ধ করুন এবং সার্ভারটি বন্ধ করতে ক্লাউড শেল টার্মিনালে CTRL + C চাপুন।
অধ্যায়ের সারসংক্ষেপ
এই অংশে, আপনি শিখেছেন কীভাবে ডেটা শেয়ার করার জন্য Session স্টেট ব্যবহার করতে হয়:
- স্টেট লিখতে : আপনি একটি টুলের ভেতর থেকে
tool_context.stateঅবজেক্টটি ব্যবহার করে স্টেট ডিকশনারিতে লেখেন (যেমন,tool_context.state["my_list"] = [...])। - স্টেট পড়তে : আপনি কী টেমপ্লেটিং ব্যবহার করে সরাসরি এজেন্টের
instructionস্টেট ডেটা যুক্ত করেন (যেমন,Here is your list: {my_list?})। - অবস্থা পর্যবেক্ষণ করতে : আপনি ADK Dev UI-এর State ট্যাব ব্যবহার করে সেশনের অবস্থা সরাসরি পর্যবেক্ষণ করতে পারেন।
৯. ওয়ার্কফ্লো এজেন্ট
এখন পর্যন্ত আপনি দেখেছেন, কীভাবে একটি প্যারেন্ট এজেন্ট একটি সাব-এজেন্টের কাছে দায়িত্ব হস্তান্তর করে এবং তারপর ব্যবহারকারীর জন্য অপেক্ষা করে। ওয়ার্কফ্লো এজেন্টরা ভিন্ন: তারা ব্যবহারকারীর ইনপুটের জন্য অপেক্ষা না করে, একটি স্বয়ংক্রিয় প্রবাহে তাদের সাব-এজেন্টদের একের পর এক কার্যকর করে ।
এটি 'পরিকল্পনা ও সম্পাদন' বা 'খসড়া ও সংশোধন' পাইপলাইনের মতো স্বয়ংক্রিয়, বহু-ধাপের কাজের জন্য আদর্শ। এটি পরিচালনা করার জন্য ADK তিনটি বিল্ট-ইন ওয়ার্কফ্লো এজেন্ট প্রদান করে:
-
SequentialAgent -
LoopAgent -
ParallelAgent
এই ল্যাবের বাকি অংশে এই তিনটি ওয়ার্কফ্লো এজেন্ট ব্যবহার করে একটি মাল্টি-এজেন্ট সিস্টেম তৈরির উপর মনোযোগ দেওয়া হবে।
আপনি এমন একজন এজেন্ট তৈরি করবেন যিনি কোনো ঐতিহাসিক চরিত্রকে নিয়ে একটি নতুন সিনেমার জন্য প্রস্তাবনা নথি প্রস্তুত করবেন। আপনার এজেন্টরা গবেষণা, পুনরাবৃত্তিমূলক লিখন এবং প্রতিবেদন তৈরির দায়িত্ব পালন করবেন।
অবশেষে, আপনার সিস্টেমটি দেখতে এইরকম হবে:

আপনি সবচেয়ে সহজ কর্মপ্রবাহটি দিয়ে শুরু করে, ধাপে ধাপে এই সিস্টেমটি তৈরি করবেন।
১০. একটি SequentialAgent ব্যবহার করে একটি মাল্টি-এজেন্ট সিস্টেম তৈরি করুন।
SequentialAgent হলো একটি ওয়ার্কফ্লো এজেন্ট যা তার সাব-এজেন্টগুলোকে একটি সরল, রৈখিক অনুক্রমে সম্পাদন করে। এর sub_agents -এজেন্ট তালিকার প্রতিটি এজেন্ট ক্রমানুসারে একের পর এক চলে। এটি এমন পাইপলাইনের জন্য আদর্শ যেখানে কাজগুলো একটি নির্দিষ্ট ক্রমে সম্পাদন করতে হয়, যেমন মুভি-পিচিং এজেন্ট যা আপনি এখন তৈরি করবেন।
এই প্রথম সংস্করণটির গঠন হবে নিম্নরূপ:

- একজন
root_agent(greeter) ব্যবহারকারীকে স্বাগত জানাবে এবং চলচ্চিত্রের বিষয়বস্তু সংগ্রহ করবে। - এরপর এটি
film_concept_teamনামের একটিSequentialAgentএর কাছে স্থানান্তরিত হবে, যেটি:- উইকিপিডিয়া থেকে তথ্য পেতে একটি
researcherএজেন্ট চালান। - ওই তথ্যগুলো ব্যবহার করে একটি কাহিনি লেখার জন্য একজন
screenwriterএজেন্ট নিয়োগ করুন। - চূড়ান্ত প্লটটি একটি ফাইলে সংরক্ষণ করতে একটি
file_writerএজেন্ট চালান।
- উইকিপিডিয়া থেকে তথ্য পেতে একটি
চলুন এটা চালানো যাক।
- ক্লাউড শেল এডিটর- এ
adk_multiagent_systems/workflow_agents/agent.pyখুলুন।
এই এজেন্ট ডেফিনিশন ফাইলটি ভালোভাবে পড়ুন। যেহেতু কোনো সাব-এজেন্টকে প্যারেন্টের কাছে অ্যাসাইন করার আগে অবশ্যই সংজ্ঞায়িত করতে হয়, তাই কথোপকথনের প্রবাহ অনুযায়ী ফাইলটি পড়ার জন্য, আপনি ফাইলের নিচ থেকে উপরের দিকে এজেন্টগুলো পড়তে পারেন। - `
append_to_stateটুলটি লক্ষ্য করুন। এই হেল্পার ফাংশনটি এজেন্টদের সেশন স্টেটের একটি লিস্টে ডেটা যুক্ত করতে দেয়, আর এভাবেইresearcherওscreenwriterতাদের কাজ জমা দেবেন। - এজেন্টটি পরীক্ষা করে দেখুন। টার্মিনালে , লাইভ-রিলোডিং সক্রিয় করে ওয়েব ইন্টারফেসটি চালু করুন:
cd ~/adk_multiagent_systems adk web --reload_agents - ক্লাউড শেল টার্মিনালে, একটি নতুন ট্যাবে ওয়েব ইন্টারফেসটি দেখতে, ওয়েব প্রিভিউ বোতামে ক্লিক করুন এবং চেঞ্জ পোর্ট নির্বাচন করুন।

- পোর্ট নম্বর ৮০০০ ইনপুট করুন এবং 'Change and Preview'- এ ক্লিক করুন। ADK Dev UI সহ একটি নতুন ব্রাউজার ট্যাব খুলবে।

- 'Select an agent' ড্রপডাউন থেকে
workflow_agents' নির্বাচন করুন। -
helloবলে কথোপকথন শুরু করুন।greeterএজেন্ট উত্তর দেবেন। - নির্দেশিত হলে, একজন ঐতিহাসিক ব্যক্তিত্বের নাম লিখুন। আপনি এদের মধ্যে থেকে কাউকে অথবা আপনার নিজের নাম ব্যবহার করতে পারেন:
- ঝাং ঝংজিং
- অ্যাডা লাভলেস
- মার্কাস অরেলিয়াস
- এখন
SequentialAgentদায়িত্ব গ্রহণ করবে। আপনি কোনো মধ্যবর্তী বার্তা দেখতে পাবেন না।researcher,screenwriterএবংfile_writerএকের পর এক চলবে। সম্পূর্ণ অনুক্রমটি শেষ হলেই এজেন্ট সাড়া দেবে।
যদি এটি ব্যর্থ হয়, আপনি উপরের ডানদিকে থাকা ‘+ নতুন সেশন’ বোতামে ক্লিক করে আবার চেষ্টা করতে পারেন। - এজেন্ট ফাইলটি লেখা হয়েছে বলে নিশ্চিত করলে, আউটপুট দেখার জন্য আপনার ক্লাউড শেল এডিটরে
movie_pitchesডিরেক্টরিতে থাকা নতুন.txtফাইলটি খুঁজুন এবং খুলুন। - ADK Dev UI-তে, ইভেন্ট ভিউ খোলার জন্য চ্যাট হিস্ট্রিতে থাকা শেষ এজেন্ট আইকনটিতে ক্লিক করুন ।
- ইভেন্ট ভিউতে এজেন্ট ট্রি-এর একটি ভিজ্যুয়াল গ্রাফ দেখা যায়। আপনি দেখতে পারেন কীভাবে
greeterfilm_concept_teamকে কল করেছিল, এবং সেই টিমটি ক্রমানুসারে তার প্রতিটি সাব-এজেন্টকে কল করে।
- গ্রাফের যেকোনো এজেন্টের জন্য রিকোয়েস্ট এবং রেসপন্স ট্যাবে ক্লিক করে আপনি সেশন স্টেট সহ প্রেরিত সঠিক ডেটা পরীক্ষা করতে পারেন।
অধ্যায়ের সারসংক্ষেপ
এই অংশে, আপনি শিখেছেন কীভাবে একটি ওয়ার্কফ্লো এজেন্ট ব্যবহার করতে হয়:
- একটি
SequentialAgentধাপগুলোর মধ্যে ব্যবহারকারীর ইনপুটের জন্য অপেক্ষা না করে, তার অধীনস্থ এজেন্টগুলোকে ক্রমানুসারে একের পর এক কার্যকর করে। - এটি একটি 'ওয়ার্কফ্লো', কারণ ব্যবহারকারী
root_agentএর সাথে যোগাযোগ করে, যা কাজটি সম্পন্ন করার জন্যSequentialAgentকাছে হস্তান্তর করে। - অনুক্রমের উপ-এজেন্টরা পূর্ববর্তী এজেন্টদের কাজ অ্যাক্সেস করার জন্য সেশন স্টেট (যেমন,
{ PLOT_OUTLINE? }) ব্যবহার করে। - আপনি ডেভ ইউআই-তে থাকা ইভেন্ট গ্রাফ ব্যবহার করে সম্পূর্ণ এজেন্ট-টু-এজেন্ট ওয়ার্কফ্লোটি দেখতে ও ডিবাগ করতে পারেন।
১১. পুনরাবৃত্তিমূলক কাজের জন্য একটি LoopAgent যোগ করুন।
LoopAgent হলো একটি ওয়ার্কফ্লো এজেন্ট যা তার সাব-এজেন্টগুলোকে একটি নির্দিষ্ট ক্রমে চালায় এবং তারপর আবার শুরু থেকে পুনরাবৃত্তি করে। এই "লুপ" ততক্ষণ চলতে থাকে যতক্ষণ না কোনো শর্ত পূরণ হয়, যেমন max_iterations সংখ্যায় পৌঁছানো অথবা কোনো সাব-এজেন্ট দ্বারা বিল্ট-ইন exit_loop টুলটি কল করা।
এটি এমন সব কাজের জন্য উপযোগী যেখানে বারবার পরিমার্জনের প্রয়োজন হয়। আপনার মুভি পিচ এজেন্টের জন্য একটি "রাইটার্স রুম" তৈরি করতে আপনি এই LoopAgent যোগ করবেন। এটি একজন researcher , screenwriter এবং একজন নতুন critic এজেন্টকে একটি চক্রের মধ্যে কাজ করার সুযোগ দেয়, যার ফলে critic মতে প্রস্তুত না হওয়া পর্যন্ত প্রতিটি ধাপে কাহিনি আরও উন্নত হতে থাকে। এটি এজেন্টকে কোনো ধারণা নিয়ে গবেষণা ও পরিমার্জন করার সুযোগ দিয়ে ব্যবহারকারীর দেওয়া অস্পষ্ট ইনপুট (যেমন "একজন প্রাচীন ডাক্তার") সামলাতেও সাহায্য করে।

এই পরিবর্তনগুলো করতে:
-
adk_multiagent_systems/workflow_agents/agent.pyফাইলে,exit_loopজন্য ইম্পোর্টটি যোগ করুন (অন্যান্যgoogle.adkইম্পোর্টগুলোর কাছে):from google.adk.tools import exit_loop - নতুন
criticএজেন্টটি যোগ করুন। এই এজেন্টটি প্লটটি পর্যালোচনা করবে। যদি এটি ভালো হয়, তবে এটিexit_loopকল করবে। আর যদি ভালো না হয়, তবে এটি পরবর্তী লুপের জন্য স্টেটে ফিডব্যাক যোগ করবে।
নিম্নলিখিত এজেন্ট সংজ্ঞাটি# Agentsবিভাগের অধীনে পেস্ট করুন:critic = Agent( name="critic", model=model_name, description="Reviews the outline so that it can be improved.", instruction=""" INSTRUCTIONS: Consider these questions about the PLOT_OUTLINE: - Does it meet a satisfying three-act cinematic structure? - Do the characters' struggles seem engaging? - Does it feel grounded in a real time period in history? - Does it sufficiently incorporate historical details from the RESEARCH? If the PLOT_OUTLINE does a good job with these questions, exit the writing loop with your 'exit_loop' tool. If significant improvements can be made, use the 'append_to_state' tool to add your feedback to the field 'CRITICAL_FEEDBACK'. Explain your decision and briefly summarize the feedback you have provided. PLOT_OUTLINE: { PLOT_OUTLINE? } RESEARCH: { research? } """, before_model_callback=log_query_to_model, after_model_callback=log_model_response, tools=[append_to_state, exit_loop] ) -
writers_roomLoopAgentতৈরি করুন। এতে তিনটি এজেন্ট থাকবে যারা লুপের মধ্যে কাজ করবে।
film_concept_teamএজেন্ট ডেফিনিশনের উপরে নিম্নলিখিত কোডটি পেস্ট করুন:writers_room = LoopAgent( name="writers_room", description="Iterates through research and writing to improve a movie plot outline.", sub_agents=[ researcher, screenwriter, critic ], max_iterations=5, ) - নতুন
writers_roomলুপ ব্যবহার করার জন্যfilm_concept_teamSequentialAgentআপডেট করুন।researcherএবংscreenwriterএককwriters_roomএজেন্ট দিয়ে প্রতিস্থাপন করুন। আপনার বিদ্যমানfilm_concept_teamডেফিনিশনটি এটি দিয়ে প্রতিস্থাপন করুন:film_concept_team = SequentialAgent( name="film_concept_team", description="Write a film plot outline and save it as a text file.", sub_agents=[ writers_room, file_writer ], ) - ADK Dev UI ট্যাবে ফিরে যান এবং উপরের ডানদিকে থাকা + New Session-এ ক্লিক করুন।
- নতুন কথোপকথন শুরু করুন:
hello - জিজ্ঞাসা করা হলে, এবার এজেন্টকে আরও বিস্তৃত একটি বিষয় দিন। কয়েকটি ধারণা নিচে দেওয়া হলো:
- একজন শিল্প ডিজাইনার যিনি সাধারণ মানুষের জন্য পণ্য তৈরি করতেন
- মানচিত্রকার (মানচিত্র প্রস্তুতকারী)
- সেই লোকটি যে ফসলকে আরও বেশি খাদ্য উৎপাদনে সক্ষম করেছিল
- লুপটি সম্পূর্ণ হলে, এজেন্ট ফাইলটি লিখবে।
adk_multiagent_systems/movie_pitchesডিরেক্টরিতে তৈরি হওয়া ফাইলটি পর্যালোচনা করুন। - লুপের গঠন দেখতে ডেভ UI-তে ইভেন্ট গ্রাফটি পরিদর্শন করুন।
অধ্যায়ের সারসংক্ষেপ
এই অংশে, আপনি LoopAgent কীভাবে ব্যবহার করতে হয় তা শিখেছেন:
-
LoopAgentহলো একটি ওয়ার্কফ্লো এজেন্ট যা তার সাব-এজেন্টগুলোর ক্রমকে পুনরাবৃত্তি করে, এবং পুনরাবৃত্তিমূলক কাজের জন্য একটি "অভ্যন্তরীণ লুপ" তৈরি করে। - লুপের ভেতরের এজেন্টরা পরবর্তী ধাপগুলোতে একে অপরের কাছে কাজ (যেমন,
PLOT_OUTLINE) এবং মতামত (যেমন,CRITICAL_FEEDBACK) পাঠানোর জন্য সেশন স্টেট ব্যবহার করে। -
max_iterationsসীমায় পৌঁছালে অথবা কোনো এজেন্টexit_loopটুলটি কল করলে লুপটি বন্ধ করা যেতে পারে।
১২. 'ফ্যান আউট অ্যান্ড গ্যাদার'-এর জন্য একটি প্যারালালএজেন্ট ব্যবহার করুন।
ParallelAgent হলো একটি ওয়ার্কফ্লো এজেন্ট যা তার সমস্ত সাব-এজেন্টকে একই সময়ে (একযোগে) কার্যকর করে। যেসব কাজকে স্বাধীন উপ-কাজে ভাগ করা যায়, যেমন দুটি ভিন্ন গবেষণার কাজ চালানো, সেগুলোর জন্য এটি মূল্যবান।
আপনি একটি "প্রিপ্রোডাকশন টিম" তৈরি করতে একটি ParallelAgent ব্যবহার করবেন যা সমান্তরালভাবে কাজ করবে। একজন এজেন্ট বক্স অফিসের সম্ভাবনা নিয়ে গবেষণা করবে, আর একই সময়ে অন্য একজন এজেন্ট কাস্টিংয়ের ধারণা নিয়ে ব্রেইনস্টর্মিং করবে। এটিকে প্রায়শই "ফ্যান আউট অ্যান্ড গ্যাদার" প্যাটার্ন বলা হয়: ParallelAgent কাজটি "ছড়িয়ে দেয়", এবং পরবর্তী একজন এজেন্ট (আমাদের file_writer ) সেই ফলাফলগুলো "সংগ্রহ" করে।

আপনার চূড়ান্ত এজেন্ট প্রবাহ হবে:
-
greeter(রুট) চ্যাট শুরু করে। - এটি
film_concept_team(SequentialAgent)-এর কাছে স্থানান্তরিত হয়, যা চালায়:- কাহিনীবিন্যাস তৈরির জন্য
writers_room(LoopAgent)। - নতুন
preproduction_team(ParallelAgent) একই সাথে বক্স অফিস ও কাস্টিং নিয়ে গবেষণা করবে। -
file_writerসমস্ত ফলাফল সংগ্রহ করে ফাইলটি সংরক্ষণ করে।
- কাহিনীবিন্যাস তৈরির জন্য
এই পরিবর্তনগুলো করতে:
-
adk_multiagent_systems/workflow_agents/agent.pyফাইলে, নতুনParallelAgentএবং এর সাব-এজেন্টগুলোকে# Agentsহেডারের অধীনে পেস্ট করুন।box_office_researcher = Agent( name="box_office_researcher", model=model_name, description="Considers the box office potential of this film", instruction=""" PLOT_OUTLINE: { PLOT_OUTLINE? } INSTRUCTIONS: Write a report on the box office potential of a movie like that described in PLOT_OUTLINE based on the reported box office performance of other recent films. """, output_key="box_office_report" ) casting_agent = Agent( name="casting_agent", model=model_name, description="Generates casting ideas for this film", instruction=""" PLOT_OUTLINE: { PLOT_OUTLINE? } INSTRUCTIONS: Generate ideas for casting for the characters described in PLOT_OUTLINE by suggesting actors who have received positive feedback from critics and/or fans when they have played similar roles. """, output_key="casting_report" ) preproduction_team = ParallelAgent( name="preproduction_team", sub_agents=[ box_office_researcher, casting_agent ] ) -
film_concept_teamSequentialAgentএরsub_agentsতালিকাটি আপডেট করে নতুনpreproduction_team(writers_roomএবংfile_writerমধ্যে) অন্তর্ভুক্ত করুন। আপনার বিদ্যমানfilm_concept_teamসংজ্ঞাটি এটি দিয়ে প্রতিস্থাপন করুন:film_concept_team = SequentialAgent( name="film_concept_team", description="Write a film plot outline and save it as a text file.", sub_agents=[ writers_room, preproduction_team, file_writer ], ) -
file_writerএজেন্টেরinstructionআপডেট করুন, যাতে এটি রাজ্য থেকে নতুন রিপোর্টগুলো "সংগ্রহ" করে এবং সেগুলোকে ফাইলে যুক্ত করে।
file_writerএর জন্যinstructionস্ট্রিংটি এটি দিয়ে প্রতিস্থাপন করুন:instruction=""" INSTRUCTIONS: - Create a marketable, contemporary movie title suggestion for the movie described in the PLOT_OUTLINE. If a title has been suggested in PLOT_OUTLINE, you can use it, or replace it with a better one. - Use your 'write_file' tool to create a new txt file with the following arguments: - for a filename, use the movie title - Write to the 'movie_pitches' directory. - For the 'content' to write, include: - The PLOT_OUTLINE - The BOX_OFFICE_REPORT - The CASTING_REPORT PLOT_OUTLINE: { PLOT_OUTLINE? } BOX_OFFICE_REPORT: { box_office_report? } CASTING_REPORT: { casting_report? } """, - ADK Dev UI ট্যাবে ফিরে যান এবং + নতুন সেশন-এ ক্লিক করুন।
- কথোপকথন শুরু করতে
helloলিখুন। - নির্দেশিত হলে, একটি নতুন চরিত্রের ধারণা লিখুন। কয়েকটি ধারণা নিচে দেওয়া হলো:
- সেই অভিনেত্রী যিনি ওয়াইফাই প্রযুক্তি আবিষ্কার করেছিলেন
- একজন উত্তেজনাপূর্ণ শেফ
- বিশ্ব মেলা প্রদর্শনীতে প্রধান খেলোয়াড়রা
- এজেন্ট তার কাজ শেষ করলে,
adk_multiagent_systems/movie_pitchesডিরেক্টরিতে থাকা চূড়ান্ত ফাইলটি পরীক্ষা করুন। এতে এখন কাহিনী, বক্স অফিস রিপোর্ট এবং কাস্টিং রিপোর্ট—সবগুলোই একটি ডকুমেন্টে থাকার কথা।
অধ্যায়ের সারসংক্ষেপ
এই অংশে, আপনি ParallelAgent কীভাবে ব্যবহার করতে হয় তা শিখেছেন:
- একটি
ParallelAgentতার সমস্ত সাব-এজেন্টকে ক্রমানুসারে না চালিয়ে, বরং একই সময়ে কাজ ছড়িয়ে দেয়। - যেসব কাজ একে অপরের উপর নির্ভরশীল নয় (যেমন দুটি ভিন্ন বিষয় নিয়ে গবেষণা করা), সেগুলোর জন্য এটি অত্যন্ত কার্যকর।
- প্যারালাল এজেন্টগুলোর কাজের ফলাফল পরবর্তী কোনো এজেন্ট দ্বারা 'সংগ্রহ' করা হয়। এটি করা হয় প্যারালাল এজেন্টগুলোকে তাদের কাজ সেশন স্টেটে (
output_keyব্যবহার করে) সংরক্ষণ করতে দিয়ে, এবং একটি চূড়ান্ত এজেন্টকে (যেমনfile_writer) সেই কীগুলো পড়তে দিয়ে।
১৩. কাস্টম ওয়ার্কফ্লো এজেন্ট
যখন SequentialAgent , LoopAgent , এবং ParallelAgent এর মতো পূর্ব-নির্ধারিত ওয়ার্কফ্লো এজেন্টগুলো আপনার প্রয়োজনের জন্য অপর্যাপ্ত হয়, তখন CustomAgent নতুন ওয়ার্কফ্লো লজিক প্রয়োগ করার নমনীয়তা প্রদান করে।
আপনি সাব-এজেন্টদের মধ্যে ফ্লো কন্ট্রোল, শর্তসাপেক্ষ এক্সিকিউশন বা স্টেট ম্যানেজমেন্টের জন্য প্যাটার্ন নির্ধারণ করতে পারেন। এটি জটিল ওয়ার্কফ্লো, স্টেটফুল অর্কেস্ট্রেশন অথবা ফ্রেমওয়ার্কের অর্কেস্ট্রেশন লেয়ারে কাস্টম বিজনেস লজিক ইন্টিগ্রেট করার জন্য উপযোগী।
CustomAgent তৈরি করা এই ল্যাবের আওতার বাইরে, কিন্তু প্রয়োজনে এটির অস্তিত্ব রয়েছে তা জেনে রাখা ভালো!
১৪. অভিনন্দন!
আপনি গুগল এজেন্ট ডেভেলপমেন্ট কিট (ADK) ব্যবহার করে সফলভাবে একটি অত্যাধুনিক মাল্টি-এজেন্ট সিস্টেম তৈরি করেছেন। আপনি একটি সাধারণ প্যারেন্ট-চাইল্ড এজেন্ট সম্পর্ক থেকে অগ্রসর হয়ে এমন জটিল ও স্বয়ংক্রিয় ওয়ার্কফ্লো পরিচালনা করছেন, যা একটি সৃজনশীল প্রকল্পের গবেষণা, লেখা এবং পরিমার্জন করতে পারে।
পুনরালোচনা
এই ল্যাবে, তুমি নিম্নলিখিত কাজগুলো করেছ:
- প্যারেন্ট ও সাব-এজেন্ট সম্পর্কযুক্ত একটি হায়ারার্কিক্যাল ট্রি -তে এজেন্টসমূহকে সংগঠিত করা হয়।
- নিয়ন্ত্রিত এজেন্ট-থেকে-এজেন্ট স্থানান্তর , যা স্বয়ংক্রিয়ভাবে (
descriptionব্যবহার করে) এবং সুস্পষ্টভাবে (instructionব্যবহার করে) উভয়ভাবেই করা যায়। -
tool_context.stateডিকশনারিতে ডেটা লেখার জন্য একটি টুল ব্যবহার করা হয়েছে। - সেশন স্টেট থেকে তথ্য পড়তে এবং এজেন্টের প্রম্পটকে নির্দেশিত করতে কী টেমপ্লেটিং (যেমন,
{ PLOT_OUTLINE? }) ব্যবহার করা হয়েছে। - একটি সহজ, ধাপে ধাপে কার্যপ্রবাহ (গবেষণা -> লেখা -> সংরক্ষণ) তৈরি করতে একটি
SequentialAgentপ্রয়োগ করা হয়েছে। - একটি পুনরাবৃত্তিমূলক পরিমার্জন চক্র তৈরি করতে
criticএজেন্ট এবংexit_loopটুল সহ একটিLoopAgentব্যবহার করা হয়েছে। - কাস্টিং এবং বক্স অফিস গবেষণার মতো স্বতন্ত্র কাজগুলোকে একযোগে চালানোর জন্য একটি
ParallelAgentব্যবহার করা হয়েছে।
অব্যাহত পরীক্ষা-নিরীক্ষা
আপনি যা শিখেছেন তার উপর ভিত্তি করে আরও এগিয়ে যাওয়ার অনেক উপায় আছে। এখানে কয়েকটি ধারণা দেওয়া হলো:
- আরও এজেন্ট যোগ করুন: আপনার
preproduction_teamParallelAgentএ একজন নতুন এজেন্ট যোগ করার চেষ্টা করুন। উদাহরণস্বরূপ, আপনি একজনmarketing_agentতৈরি করতে পারেন যিনিPLOT_OUTLINEউপর ভিত্তি করে সিনেমার জন্য একটি ট্যাগলাইন লিখবেন। - আরও টুল যোগ করুন: আপনার
researcherএজেন্টকে আরও টুল দিন। আপনি এমন একটি টুল তৈরি করতে পারেন যা গুগল সার্চ এপিআই ব্যবহার করে উইকিপিডিয়ায় নেই এমন তথ্য খুঁজে বের করে। -
CustomAgentঅন্বেষণ করুন : ল্যাবে এমন ওয়ার্কফ্লোগুলির জন্যCustomAgentউল্লেখ করা হয়েছে যা স্ট্যান্ডার্ড টেমপ্লেটের সাথে মেলে না। এমন একটি তৈরি করার চেষ্টা করুন যা, উদাহরণস্বরূপ, সেশন স্টেটে একটি নির্দিষ্ট কী বিদ্যমান থাকলেই কেবল শর্তসাপেক্ষে একটি এজেন্ট চালায়।