1. ওভারচার
নীরব উন্নয়নের যুগ শেষ হচ্ছে। প্রযুক্তিগত বিবর্তনের পরবর্তী তরঙ্গ একাকী প্রতিভা সম্পর্কে নয়, বরং সহযোগিতামূলক দক্ষতা সম্পর্কে। একটি একক, চতুর এজেন্ট তৈরি করা একটি আকর্ষণীয় পরীক্ষা। এজেন্টদের একটি শক্তিশালী, সুরক্ষিত এবং বুদ্ধিমান ইকোসিস্টেম তৈরি করা—একটি সত্যিকারের এজেন্টভার্স—আধুনিক উদ্যোগের জন্য একটি বড় চ্যালেঞ্জ৷
এই নতুন যুগে সাফল্যের জন্য চারটি গুরুত্বপূর্ণ ভূমিকার একত্রিত হওয়া প্রয়োজন, ভিত্তি স্তম্ভ যা যেকোন উন্নতিশীল এজেন্টিক সিস্টেমকে সমর্থন করে। যে কোনো একটি ক্ষেত্রে একটি ঘাটতি একটি দুর্বলতা তৈরি করে যা সমগ্র কাঠামোকে আপস করতে পারে।
Google ক্লাউডে এজেন্টিক ভবিষ্যত আয়ত্ত করার জন্য এই ওয়ার্কশপটি একটি নির্দিষ্ট এন্টারপ্রাইজ প্লেবুক। আমরা একটি এন্ড-টু-এন্ড রোডম্যাপ প্রদান করি যা আপনাকে একটি ধারণার প্রথম স্পন্দন থেকে একটি পূর্ণ-স্কেল, কার্যকরী বাস্তবতার দিকে পরিচালিত করে। এই চারটি আন্তঃসংযুক্ত ল্যাব জুড়ে, আপনি শিখবেন কীভাবে একজন বিকাশকারী, স্থপতি, ডেটা ইঞ্জিনিয়ার এবং এসআরই-এর বিশেষ দক্ষতাগুলিকে একটি শক্তিশালী এজেন্টভার্স তৈরি, পরিচালনা এবং স্কেল করতে একত্রিত হতে হবে।
কোনো একক পিলার একা এজেন্টভার্সকে সমর্থন করতে পারে না। স্থপতির দুর্দান্ত নকশা বিকাশকারীর সুনির্দিষ্ট সম্পাদন ছাড়া অকেজো। ডেভেলপারের এজেন্ট ডেটা ইঞ্জিনিয়ারের বুদ্ধি ছাড়াই অন্ধ, এবং SRE এর সুরক্ষা ছাড়া পুরো সিস্টেমটি ভঙ্গুর। শুধুমাত্র সমন্বয় এবং একে অপরের ভূমিকার একটি ভাগ করে নেওয়ার মাধ্যমে আপনার দল একটি উদ্ভাবনী ধারণাকে একটি মিশন-সমালোচনামূলক, অপারেশনাল বাস্তবতায় রূপান্তর করতে পারে। আপনার যাত্রা এখানে শুরু হয়. আপনার ভূমিকা আয়ত্ত করার জন্য প্রস্তুত হন এবং শিখুন কিভাবে আপনি বৃহত্তর সমগ্রের সাথে মানানসই।
The Agentverse: A Call to Champions-এ স্বাগতম
এন্টারপ্রাইজের বিস্তৃত ডিজিটাল বিস্তৃতিতে, একটি নতুন যুগের সূচনা হয়েছে। এটি হল এজেন্টিক যুগ, অপরিসীম প্রতিশ্রুতির একটি সময়, যেখানে বুদ্ধিমান, স্বায়ত্তশাসিত এজেন্টরা উদ্ভাবনকে ত্বরান্বিত করতে এবং জাগতিকতা দূর করতে নিখুঁত সাদৃশ্যে কাজ করে।
শক্তি এবং সম্ভাবনার এই সংযুক্ত ইকোসিস্টেমটি এজেন্টভার্স নামে পরিচিত।
কিন্তু একটি লতানো এনট্রপি, দ্য স্ট্যাটিক নামে পরিচিত একটি নীরব দুর্নীতি, এই নতুন বিশ্বের প্রান্তগুলিকে ঝাঁকুনি দিতে শুরু করেছে। স্ট্যাটিক কোন ভাইরাস বা বাগ নয়; এটি বিশৃঙ্খলার মূর্ত প্রতীক যা সৃষ্টির কাজকে শিকার করে।
এটি পুরানো হতাশাকে ভয়ঙ্কর আকারে প্রসারিত করে, বিকাশের সাতটি স্পেকটারের জন্ম দেয়। যদি চেক না করা হয়, দ্য স্ট্যাটিক এবং এর স্পেকটারগুলি অগ্রগতি বন্ধ করে দেবে, এজেন্টভার্সের প্রতিশ্রুতিকে প্রযুক্তিগত ঋণ এবং পরিত্যক্ত প্রকল্পগুলির একটি বর্জ্যভূমিতে পরিণত করবে।
আজ, আমরা বিশৃঙ্খলার জোয়ার পিছনে ঠেলে চ্যাম্পিয়নদের জন্য একটি আহ্বান জারি. আমাদের এমন নায়কদের প্রয়োজন যারা তাদের নৈপুণ্যে দক্ষতা অর্জন করতে ইচ্ছুক এবং এজেন্টভার্সকে রক্ষা করার জন্য একসাথে কাজ করুন। আপনার পথ বেছে নেওয়ার সময় এসেছে।
আপনার ক্লাস চয়ন করুন
আপনার সামনে চারটি স্বতন্ত্র পথ রয়েছে, প্রতিটি দ্য স্ট্যাটিক এর বিরুদ্ধে লড়াইয়ের একটি গুরুত্বপূর্ণ স্তম্ভ। যদিও আপনার প্রশিক্ষণ একটি একক মিশন হবে, তবে আপনার চূড়ান্ত সাফল্য নির্ভর করে কীভাবে আপনার দক্ষতা অন্যদের সাথে একত্রিত হয় তা বোঝার উপর।
- শ্যাডোব্লেড (ডেভেলপার) : ফরজ এবং ফ্রন্ট লাইনের একজন মাস্টার। আপনি সেই কারিগর যিনি ব্লেড তৈরি করেন, সরঞ্জাম তৈরি করেন এবং কোডের জটিল বিবরণে শত্রুর মুখোমুখি হন। আপনার পথ নির্ভুলতা, দক্ষতা, এবং ব্যবহারিক সৃষ্টি এক.
- দ্য সামনার (স্থপতি) : একজন গ্র্যান্ড স্ট্র্যাটেজিস্ট এবং বার্কেস্ট্রেটর। আপনি একটি একক এজেন্ট না, কিন্তু সমগ্র যুদ্ধক্ষেত্র দেখতে. আপনি মাস্টার ব্লুপ্রিন্ট ডিজাইন করেন যা এজেন্টদের সম্পূর্ণ সিস্টেমকে যোগাযোগ করতে, সহযোগিতা করতে এবং যেকোনো একক উপাদানের চেয়ে অনেক বেশি লক্ষ্য অর্জন করতে দেয়।
- স্কলার (ডেটা ইঞ্জিনিয়ার) : লুকানো সত্যের সন্ধানকারী এবং প্রজ্ঞার রক্ষক। আপনার এজেন্টদের উদ্দেশ্য এবং দৃষ্টি দেয় এমন বুদ্ধিমত্তা উন্মোচন করতে আপনি ডেটার সুবিশাল, অদম্য মরুভূমিতে প্রবেশ করেন। আপনার জ্ঞান শত্রুর দুর্বলতা প্রকাশ করতে পারে বা মিত্রকে শক্তিশালী করতে পারে।
- দ্য গার্ডিয়ান (DevOps / SRE) : রাজ্যের অবিচল রক্ষক এবং ঢাল। আপনি দুর্গগুলি তৈরি করুন, বিদ্যুতের সরবরাহ লাইনগুলি পরিচালনা করুন এবং নিশ্চিত করুন যে পুরো সিস্টেমটি স্ট্যাটিক এর অনিবার্য আক্রমণ সহ্য করতে পারে। আপনার শক্তি হল সেই ভিত্তি যার উপর আপনার দলের জয় নির্মিত।
আপনার মিশন
আপনার প্রশিক্ষণ একটি স্বতন্ত্র ব্যায়াম হিসাবে শুরু হবে। আপনি আপনার নির্বাচিত পথে হাঁটবেন, আপনার ভূমিকা আয়ত্ত করার জন্য প্রয়োজনীয় অনন্য দক্ষতাগুলি শিখবেন। আপনার ট্রায়ালের শেষে, আপনি দ্য স্ট্যাটিক থেকে জন্ম নেওয়া একটি স্পেকটারের মুখোমুখি হবেন—একটি মিনি-বস যা আপনার নৈপুণ্যের নির্দিষ্ট চ্যালেঞ্জগুলির শিকার হয়।
শুধুমাত্র আপনার ব্যক্তিগত ভূমিকা আয়ত্ত করে আপনি চূড়ান্ত বিচারের জন্য প্রস্তুত করতে পারেন। তারপরে আপনাকে অবশ্যই অন্যান্য শ্রেণীর চ্যাম্পিয়নদের সাথে একটি দল গঠন করতে হবে। একসাথে, আপনি চূড়ান্ত বসের মুখোমুখি হওয়ার জন্য দুর্নীতির হৃদয়ে প্রবেশ করবেন।
একটি চূড়ান্ত, সহযোগী চ্যালেঞ্জ যা আপনার সম্মিলিত শক্তি পরীক্ষা করবে এবং এজেন্টভার্সের ভাগ্য নির্ধারণ করবে।
এজেন্টভার্স তার নায়কদের জন্য অপেক্ষা করছে। ডাকে সাড়া দিবে?
2. সমনার্স কনকর্ড
স্বাগতম, আহ্বায়ক. আপনার পথ দৃষ্টি এবং মহান কৌশল এক. অন্যরা যখন একটি একক ব্লেড বা একক মন্ত্রে ফোকাস করে, আপনি পুরো যুদ্ধক্ষেত্রটি দেখতে পান। আপনি একটি একক এজেন্ট আদেশ না; আপনি তাদের একটি সম্পূর্ণ অর্কেস্ট্রা পরিচালনা করেন। আপনার ক্ষমতা প্রত্যক্ষ দ্বন্দ্বে নয়, বরং নিশ্ছিদ্র, অত্যধিক ব্লুপ্রিন্ট ডিজাইন করার মধ্যে রয়েছে যা বিশেষজ্ঞদের একটি বাহিনী-আপনার পরিচিতদের-কে নিখুঁত সুরে কাজ করতে দেয়। এই মিশনটি একটি শক্তিশালী, মাল্টি-এজেন্ট সিস্টেম ডিজাইন, সংযোগ এবং অর্কেস্ট্রেট করার আপনার ক্ষমতা পরীক্ষা করবে।
আপনি কি শিখবেন
- একটি ডিকপলড টুলিং ইকোসিস্টেমের স্থপতি: স্বাধীন, মাইক্রোসার্ভিস-ভিত্তিক MCP টুল সার্ভারের একটি সেট ডিজাইন এবং স্থাপন করুন। আপনি শিখবেন কেন এই ভিত্তি স্তরটি মাপযোগ্য, রক্ষণাবেক্ষণযোগ্য এবং সুরক্ষিত এজেন্টিক সিস্টেম তৈরির জন্য গুরুত্বপূর্ণ।
- মাস্টার অ্যাডভান্সড এজেন্টিক ওয়ার্কফ্লোস: একক এজেন্টের বাইরে যান এবং বিশেষজ্ঞ "পরিচিতদের" একটি দল তৈরি করুন। আপনি মূল ADK ওয়ার্কফ্লো প্যাটার্নগুলি আয়ত্ত করতে পারবেন—ক্রমিক, সমান্তরাল, এবং লুপ—এবং সঠিক কাজের জন্য সঠিক প্যাটার্ন বেছে নেওয়ার জন্য স্থাপত্য নীতিগুলি শিখবেন৷
- একজন বুদ্ধিমান অর্কেস্ট্রেটরকে প্রয়োগ করুন: একজন সাধারণ এজেন্ট নির্মাতা থেকে একজন সত্যিকারের সিস্টেম আর্কিটেক্টের কাছে যান। আপনি একটি মাস্টার অর্কেস্ট্রেশন এজেন্ট তৈরি করবেন যেটি এজেন্ট-টু-এজেন্ট (A2A) প্রোটোকল ব্যবহার করে আপনার বিশেষজ্ঞ পরিচিতদের কাছে জটিল কাজগুলি আবিষ্কার এবং অর্পণ করে, একটি সত্যিকারের মাল্টি-এজেন্ট সিস্টেম তৈরি করে।
- কোডের সাথে নিয়ম প্রয়োগ করুন, প্রম্পট নয়: জড়িত থাকার রাষ্ট্রীয় নিয়মগুলি প্রয়োগ করে আরও নির্ভরযোগ্য এবং অনুমানযোগ্য এজেন্ট তৈরি করতে শিখুন। আপনি ADK এর শক্তিশালী প্লাগইন এবং কলব্যাক সিস্টেম ব্যবহার করে কাস্টম লজিক প্রয়োগ করবেন কুলডাউন টাইমারের মতো বাস্তব-বিশ্বের সীমাবদ্ধতাগুলি পরিচালনা করতে।
- এজেন্টের অবস্থা এবং মেমরি পরিচালনা করুন: আপনার এজেন্টদের শেখার এবং মনে রাখার ক্ষমতা দিন। আপনি আরও বুদ্ধিমান এবং প্রসঙ্গ-সচেতন মিথস্ক্রিয়া তৈরি করতে স্বল্প-মেয়াদী, কথোপকথন অবস্থা এবং দীর্ঘমেয়াদী, অবিরাম স্মৃতি উভয় পরিচালনার জন্য কৌশলগুলি অন্বেষণ করবেন।
- একটি এন্ড-টু-এন্ড ক্লাউড ডিপ্লয়মেন্ট চালান: আপনার সমগ্র মাল্টি-এজেন্ট সিস্টেমকে স্থানীয় প্রোটোটাইপ থেকে একটি প্রোডাকশন-গ্রেড বাস্তবতায় নিয়ে যান। আপনি শিখবেন কিভাবে আপনার এজেন্ট এবং অর্কেস্ট্রেটরকে কনটেইনারাইজ করতে হয় এবং Google ক্লাউড রানে স্কেলযোগ্য, স্বাধীন মাইক্রোসার্ভিসের সংগ্রহ হিসাবে তাদের স্থাপন করতে হয়।
3. সমন সার্কেল অঙ্কন
স্বাগতম, আহ্বায়ক. কোনো একক পরিচিতকে ডাকার আগে, কোনো চুক্তি জাল করার আগে, আপনি যে মাটিতে দাঁড়িয়ে আছেন সেই জায়গাটি অবশ্যই প্রস্তুত থাকতে হবে। একটি অদম্য পরিবেশ বিশৃঙ্খলার আমন্ত্রণ; একজন সঠিক আহবানকারী শুধুমাত্র একটি পবিত্র, ক্ষমতাপ্রাপ্ত স্থানের মধ্যে কাজ করে। আমাদের প্রথম কাজ হল তলবকারী বৃত্ত আঁকা: প্রয়োজনীয় ক্লাউড পরিষেবাগুলিকে জাগ্রত করে এমন শক্তির রুনগুলি খোদাই করা এবং আমাদের কাজকে গাইড করবে এমন প্রাচীন ব্লুপ্রিন্টগুলি অর্জন করা। একজন আহ্বায়কের শক্তির জন্ম হয় সূক্ষ্ম প্রস্তুতি থেকে।
👉 গুগল ক্লাউড কনসোলের শীর্ষে ক্লাউড শেল সক্রিয় করুন ক্লিক করুন (এটি ক্লাউড শেল প্যানের শীর্ষে টার্মিনাল আকারের আইকন),
👉 "ওপেন এডিটর" বোতামে ক্লিক করুন (এটি একটি পেন্সিল সহ একটি খোলা ফোল্ডারের মতো দেখায়)। এটি উইন্ডোতে ক্লাউড শেল কোড এডিটর খুলবে। আপনি বাম দিকে একটি ফাইল এক্সপ্লোরার দেখতে পাবেন।
👉আপনার Google ক্লাউড প্রকল্প আইডি খুঁজুন:
- Google ক্লাউড কনসোল খুলুন:
https://console.cloud.google.com
- পৃষ্ঠার শীর্ষে প্রজেক্ট ড্রপডাউন থেকে আপনি এই কর্মশালার জন্য যে প্রকল্পটি ব্যবহার করতে চান তা নির্বাচন করুন।
- আপনার প্রজেক্ট আইডি ড্যাশবোর্ডে প্রজেক্ট ইনফো কার্ডে প্রদর্শিত হয়
👉ক্লাউড আইডিইতে টার্মিনাল খুলুন,
👉💻 টার্মিনালে, যাচাই করুন যে আপনি ইতিমধ্যেই প্রমাণীকরণ করেছেন এবং নিম্নলিখিত কমান্ডটি ব্যবহার করে প্রকল্পটি আপনার প্রকল্প আইডিতে সেট করা আছে:
gcloud auth list
👉💻 GitHub থেকে বুটস্ট্র্যাপ প্রকল্প ক্লোন করুন:
git clone https://github.com/weimeilin79/agentverse-architect
chmod +x ~/agentverse-architect/init.sh
chmod +x ~/agentverse-architect/set_env.sh
chmod +x ~/agentverse-architect/prepare.sh
chmod +x ~/agentverse-architect/data_setup.sh
git clone https://github.com/weimeilin79/agentverse-dungeon.git
chmod +x ~/agentverse-dungeon/run_cloudbuild.sh
chmod +x ~/agentverse-dungeon/start.sh
👉💻 ইনিশিয়ালাইজেশন স্ক্রিপ্টটি চালান, এই স্ক্রিপ্টটি আপনাকে আপনার Google ক্লাউড প্রোজেক্ট আইডি লিখতে অনুরোধ করবে। এবং Google ক্লাউড প্রজেক্ট আইডি লিখুন যেটি আপনি শেষ ধাপে পেয়েছিলেন যখন init.sh
স্ক্রিপ্ট দ্বারা অনুরোধ করা হয়।
cd ~/agentverse-architect
./init.sh
👉💻 প্রয়োজনীয় প্রজেক্ট আইডি সেট করুন:
gcloud config set project $(cat ~/project_id.txt) --quiet
👉💻 প্রয়োজনীয় Google ক্লাউড API সক্রিয় করতে নিম্নলিখিত কমান্ডটি চালান:
gcloud services enable \
sqladmin.googleapis.com \
storage.googleapis.com \
aiplatform.googleapis.com \
run.googleapis.com \
cloudbuild.googleapis.com \
artifactregistry.googleapis.com \
iam.googleapis.com \
compute.googleapis.com \
cloudresourcemanager.googleapis.com \
secretmanager.googleapis.com
👉💻 আপনি যদি ইতিমধ্যে agentverse-repo নামে একটি আর্টিফ্যাক্ট রেজিস্ট্রি রিপোজিটরি তৈরি না করে থাকেন তবে এটি তৈরি করতে নিম্নলিখিত কমান্ডটি চালান: (আপনার যদি একই প্রকল্পে অন্যান্য ক্লাস স্থাপন করা থাকে তবে এই পদক্ষেপটি এড়িয়ে যান)
. ~/agentverse-architect/set_env.sh
gcloud artifacts repositories create $REPO_NAME \
--repository-format=docker \
--location=$REGION \
--description="Repository for Agentverse agents"
অনুমতি সেট আপ করা হচ্ছে
👉💻 টার্মিনালে নিম্নলিখিত কমান্ডগুলি চালিয়ে প্রয়োজনীয় অনুমতি দিন:
. ~/agentverse-architect/set_env.sh
# --- Grant Core Data Permissions ---
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$SERVICE_ACCOUNT_NAME" \
--role="roles/storage.admin"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$SERVICE_ACCOUNT_NAME" \
--role="roles/aiplatform.user"
# --- Grant Deployment & Execution Permissions ---
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$SERVICE_ACCOUNT_NAME" \
--role="roles/cloudbuild.builds.editor"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$SERVICE_ACCOUNT_NAME" \
--role="roles/artifactregistry.admin"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$SERVICE_ACCOUNT_NAME" \
--role="roles/run.admin"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$SERVICE_ACCOUNT_NAME" \
--role="roles/iam.serviceAccountUser"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$SERVICE_ACCOUNT_NAME" \
--role="roles/logging.logWriter"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:${SERVICE_ACCOUNT_NAME}" \
--role="roles/monitoring.metricWriter"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:${SERVICE_ACCOUNT_NAME}" \
--role="roles/secretmanager.secretAccessor"
👉💻 আপনি আপনার প্রশিক্ষণ শুরু করার সাথে সাথে আমরা চূড়ান্ত চ্যালেঞ্জ প্রস্তুত করব। নিম্নলিখিত কমান্ডগুলি বিশৃঙ্খল স্ট্যাটিক থেকে স্পেকটারদের ডেকে আনবে, আপনার চূড়ান্ত পরীক্ষার জন্য বস তৈরি করবে।
. ~/agentverse-architect/set_env.sh
cd ~/agentverse-dungeon
./run_cloudbuild.sh
cd ~/agentverse-architect
👉💻 শেষ পর্যন্ত, প্রাথমিক সেটআপ কাজগুলি সম্পাদন করার জন্য prepare.sh
স্ক্রিপ্টটি চালান।
. ~/agentverse-architect/set_env.sh
cd ~/agentverse-architect/
./prepare.sh
চমৎকার কাজ, Summoner. বৃত্ত সম্পূর্ণ এবং চুক্তি সিল করা হয়. স্থল এখন পবিত্র, অপরিমেয় শক্তি চ্যানেলের জন্য প্রস্তুত। আমাদের পরবর্তী ট্রায়ালে, আমরা খুব প্রাথমিক হরফগুলি তৈরি করব যা থেকে আমাদের পরিচিতরা তাদের শক্তি আঁকবে।
4. এলিমেন্টাল ফন্ট ফরজিং: দ্য ডিকপল্ড টুলিং ইকোসিস্টেম
যুদ্ধক্ষেত্র প্রস্তুত করা হয়েছে, ডাকা বৃত্ত টানা হয়েছে, এবং পরিবেষ্টিত মন কর্কশ করছে। একজন আহবানকারী হিসাবে আপনার প্রথম সত্যিকারের কাজটি করার সময় এসেছে: শক্তির উত্সগুলি তৈরি করা যা থেকে আপনার পরিচিতরা তাদের শক্তি আকর্ষণ করবে। এই আচারটি তিনটি ভাগে বিভক্ত, প্রতিটি একটি মৌলিক হরফ জাগ্রত করে - একটি নির্দিষ্ট ধরণের শক্তির একটি স্থিতিশীল, স্বাধীন উত্স। শুধুমাত্র তিনটি ফন্ট সক্রিয় হলেই আপনি সমন করার আরও জটিল কাজ শুরু করতে পারবেন।
আর্কিটেক্টের দ্রষ্টব্য: মডেল কনটেক্সট প্রোটোকল (MCP) সার্ভার একটি আধুনিক এজেন্টিক সিস্টেমের একটি মৌলিক উপাদান, এটি একটি প্রমিত যোগাযোগ সেতু হিসাবে কাজ করে যা একজন এজেন্টকে দূরবর্তী সরঞ্জামগুলি আবিষ্কার এবং ব্যবহার করতে দেয়। আমাদের টুলিং ইকোসিস্টেমে, আমরা দুটি স্বতন্ত্র ধরনের MCP সার্ভারের স্থপতি করব, প্রতিটি একটি সমালোচনামূলক আর্কিটেকচারাল প্যাটার্নের প্রতিনিধিত্ব করে। আমাদের ডাটাবেসের সাথে সংযোগ করার জন্য, আমরা ডেটাবেস টুলবক্সের সাথে একটি ঘোষণামূলক পদ্ধতি ব্যবহার করব, একটি সাধারণ কনফিগারেশন ফাইলে আমাদের সরঞ্জামগুলিকে সংজ্ঞায়িত করব। এই প্যাটার্নটি স্ট্রাকচার্ড ডেটা অ্যাক্সেসের জন্য অবিশ্বাস্যভাবে দক্ষ এবং নিরাপদ। যাইহোক, যখন আমাদের কাস্টম বিজনেস লজিক প্রয়োগ করতে হবে বা এক্সটার্নাল থার্ড-পার্টি এপিআই কল করতে হবে, তখন আমরা কোডে ধাপে ধাপে সার্ভারের লজিক লিখতে একটি বাধ্যতামূলক পদ্ধতি ব্যবহার করব। এটি চূড়ান্ত নিয়ন্ত্রণ এবং নমনীয়তা প্রদান করে, যা আমাদেরকে একটি সাধারণ, পুনঃব্যবহারযোগ্য টুলের পিছনে জটিল ক্রিয়াকলাপগুলিকে এনক্যাপসুলেট করার অনুমতি দেয়। একটি শক্তিশালী, সুরক্ষিত, এবং মাপযোগ্য টুলিং ফাউন্ডেশন তৈরি করে প্রতিটি উপাদানের জন্য সঠিক পদ্ধতি নির্বাচন করতে একজন মাস্টার আর্কিটেক্টকে অবশ্যই উভয় প্যাটার্ন বুঝতে হবে।
হুইস্পার্সের নেক্সাস জাগ্রত করা (বহিরাগত API MCP সার্ভার)
একজন জ্ঞানী আহবানকারী জানেন যে সমস্ত শক্তি তাদের নিজস্ব ডোমেনের মধ্যে থেকে আসে না। বাহ্যিক, কখনও কখনও বিশৃঙ্খল, শক্তির উত্স রয়েছে যা দুর্দান্ত প্রভাবের জন্য চ্যানেল করা যেতে পারে। হুইস্পার্সের নেক্সাস এই বাহিনীর জন্য আমাদের প্রবেশদ্বার।
একটি পরিষেবা ইতিমধ্যেই লাইভ রয়েছে এবং আমাদের বাহ্যিক শক্তির উত্স হিসাবে কাজ করে, দুটি কাঁচা বানান শেষ পয়েন্ট অফার করে: /cryosea_shatter
এবং /moonlit_cascade
।
স্থপতির দ্রষ্টব্য: আপনি একটি অপরিহার্য পদ্ধতি ব্যবহার করবেন যা স্পষ্টভাবে সার্ভারের যুক্তিকে ধাপে ধাপে সংজ্ঞায়িত করে। এটি আপনাকে অনেক বেশি নিয়ন্ত্রণ এবং নমনীয়তা দেয়, যা অপরিহার্য যখন আপনার সরঞ্জামগুলিকে অন্যান্য API কল করার মতো একটি সাধারণ SQL কোয়েরি চালানোর চেয়ে আরও বেশি কিছু করতে হবে। উভয় নিদর্শন বোঝা একজন এজেন্ট আর্কিটেক্টের জন্য একটি গুরুত্বপূর্ণ দক্ষতা।
👉✏️ ডিরেক্টরিতে নেভিগেট করুন ~/agentverse-architect/mcp-servers/api/main.py
এবং #REPLACE-MAGIC-CORE
নিম্নলিখিত কোড দিয়ে প্রতিস্থাপন করুন :
def cryosea_shatter() -> str:
"""Channels immense frost energy from an external power source, the Nexus of Whispers, to unleash the Cryosea Shatter spell."""
try:
response = requests.post(f"{API_SERVER_URL}/cryosea_shatter")
response.raise_for_status() # Raise an exception for bad status codes (4xx or 5xx)
data = response.json()
# Thematic Success Message
return f"A connection to the Nexus is established! A surge of frost energy manifests as Cryosea Shatter, dealing {data.get('damage_points')} damage."
except requests.exceptions.RequestException as e:
# Thematic Error Message
return f"The connection to the external power source wavers and fails. The Cryosea Shatter spell fizzles. Reason: {e}"
def moonlit_cascade() -> str:
"""Draws mystical power from an external energy source, the Nexus of Whispers, to invoke the Moonlit Cascade spell."""
try:
response = requests.post(f"{API_SERVER_URL}/moonlit_cascade")
response.raise_for_status()
data = response.json()
# Thematic Success Message
return f"The Nexus answers the call! A cascade of pure moonlight erupts from the external source, dealing {data.get('damage_points')} damage."
except requests.exceptions.RequestException as e:
# Thematic Error Message
return f"The connection to the external power source wavers and fails. The Moonlit Cascade spell fizzles. Reason: {e}"
স্ক্রিপ্টের একেবারে কেন্দ্রে প্লেইন পাইথন ফাংশন রয়েছে। এখানেই আসল কাজ হয়।
👉✏️ একই ফাইলে ~/agentverse-architect/mcp-servers/api/main.py
REPLACE #REPLACE-Runes of Communication
নিম্নলিখিত কোড দিয়ে:
@app.list_tools()
async def list_tools() -> list[mcp_types.Tool]:
"""MCP handler to list available tools."""
# Convert the ADK tool's definition to MCP format
schema_cryosea_shatter = adk_to_mcp_tool_type(cryosea_shatterTool)
schema_moonlit_cascade = adk_to_mcp_tool_type(moonlit_cascadeTool)
print(f"MCP Server: Received list_tools request. \n MCP Server: Advertising tool: {schema_cryosea_shatter.name} and {schema_moonlit_cascade.name}")
return [schema_cryosea_shatter,schema_moonlit_cascade]
@app.call_tool()
async def call_tool(
name: str, arguments: dict
) -> list[mcp_types.TextContent | mcp_types.ImageContent | mcp_types.EmbeddedResource]:
"""MCP handler to execute a tool call."""
print(f"MCP Server: Received call_tool request for '{name}' with args: {arguments}")
# Look up the tool by name in our dictionary
tool_to_call = available_tools.get(name)
if tool_to_call:
try:
adk_response = await tool_to_call.run_async(
args=arguments,
tool_context=None, # No ADK context available here
)
print(f"MCP Server: ADK tool '{name}' executed successfully.")
response_text = json.dumps(adk_response, indent=2)
return [mcp_types.TextContent(type="text", text=response_text)]
except Exception as e:
print(f"MCP Server: Error executing ADK tool '{name}': {e}")
# Creating a proper MCP error response might be more robust
error_text = json.dumps({"error": f"Failed to execute tool '{name}': {str(e)}"})
return [mcp_types.TextContent(type="text", text=error_text)]
else:
# Handle calls to unknown tools
print(f"MCP Server: Tool '{name}' not found.")
error_text = json.dumps({"error": f"Tool '{name}' not implemented."})
return [mcp_types.TextContent(type="text", text=error_text)]
@app.list_tools()
(দ্য হ্যান্ডশেক): এই ফাংশনটি সার্ভারের শুভেচ্ছা। যখন একটি নতুন এজেন্ট সংযোগ করে, এটি প্রথমে এই এন্ডপয়েন্টকে কল করে জিজ্ঞাসা করে, "আপনি কি করতে পারেন?" adk_to_mcp_tool_type ব্যবহার করে সার্বজনীন MCP ফর্ম্যাটে রূপান্তরিত সমস্ত উপলব্ধ সরঞ্জামগুলির একটি তালিকা সহ আমাদের কোড প্রতিক্রিয়া জানায়৷ -@app.call_tool()
(কমান্ড): এই ফাংশনটি ওয়ার্কহরস। যখন এজেন্ট একটি টুল ব্যবহার করার সিদ্ধান্ত নেয়, তখন এটি টুলের নাম এবং আর্গুমেন্ট সহ এই শেষ পয়েন্টে একটি অনুরোধ পাঠায়। আমাদের কোডটি আমাদের উপলব্ধ_টুলস "স্পেলবুক"-এ টুলটি খুঁজে বের করে, এটি run_async-এর মাধ্যমে এক্সিকিউট করে এবং স্ট্যান্ডার্ড MCP ফর্ম্যাটে ফলাফল প্রদান করে।
আমরা এটি পরে স্থাপন করব।
আর্কেন ফোর্জ জ্বালানো (সাধারণ ফাংশন MCP সার্ভার)
সমস্ত শক্তি প্রাচীন বই বা দূরবর্তী ফিসফিস থেকে আসে না। কখনও কখনও, একজন আহবানকারীকে অবশ্যই তাদের নিজস্ব জাদু তৈরি করতে হবে কাঁচা ইচ্ছা এবং বিশুদ্ধ যুক্তি থেকে। Arcane Forge হল ক্ষমতার এই ফন্ট—একটি সার্ভার যা রাষ্ট্রবিহীন, সাধারণ-উদ্দেশ্য ইউটিলিটি ফাংশন প্রদান করে।
স্থপতির দ্রষ্টব্য : এটি আরেকটি স্থাপত্য নিদর্শন। বিদ্যমান সিস্টেমগুলির সাথে সংযোগ করা সাধারণ হলেও, আপনাকে প্রায়শই আপনার নিজস্ব অনন্য ব্যবসায়িক নিয়ম এবং যুক্তি প্রয়োগ করতে হবে। এই ধরনের একটি ডেডিকেটেড "ফাংশন" বা "ইউটিলিটিস" টুল তৈরি করা একটি সেরা অনুশীলন। এটি আপনার কাস্টম লজিককে এনক্যাপসুলেট করে, এটিকে আপনার ইকোসিস্টেমের যেকোন এজেন্টের জন্য পুনঃব্যবহারযোগ্য করে তোলে এবং এটিকে আপনার ডেটা সোর্স এবং বাহ্যিক ইন্টিগ্রেশন থেকে ডিকপল করে রাখে।
👀 আপনার Google ক্লাউড IDE-এ ~/agentverse-architect/mcp-servers/general/main.py
ফাইলটি দেখুন। আপনি দেখতে পাবেন যে এটি এই কাস্টম ফন্ট অফ পাওয়ার তৈরি করতে নেক্সাসের মতই একই অপরিহার্য, mcp.server
পদ্ধতি ব্যবহার করছে।
মাস্টার ক্লাউড বিল্ড পাইপলাইন তৈরি করুন
এখন, আমরা mcp-servers
ডিরেক্টরির মধ্যে cloudbuild.yaml
ফাইল তৈরি করব। এই ফাইলটি উভয় পরিষেবার নির্মাণ এবং স্থাপনার অর্কেস্ট্রেট করবে।
👉💻 ~/agentverse-architect/mcp-servers
ডিরেক্টরি থেকে, নিম্নলিখিত কমান্ডগুলি চালান:
cd ~/agentverse-architect/mcp-servers
source ~/agentverse-architect/set_env.sh
echo "The API URL is: $API_SERVER_URL"
# Submit the Cloud Build job from the parent directory
gcloud builds submit . \
--config=cloudbuild.yaml \
--substitutions=_REGION="$REGION",_REPO_NAME="$REPO_NAME",_API_SERVER_URL="$API_SERVER_URL"
সমস্ত স্থাপনা সম্পূর্ণ না হওয়া পর্যন্ত অপেক্ষা করুন।
👉 আপনি ক্লাউড রান কনসোলে নেভিগেট করে স্থাপনা যাচাই করতে পারেন। আপনার দুটি নতুন এমসিপি সার্ভারের উদাহরণ চলমান দেখতে হবে, যেমনটি নীচে দেখানো হয়েছে:
জ্ঞানের গ্রন্থাগারকে জাগ্রত করা (ডাটাবেস টুলবক্স এমসিপি সার্ভার)
আমাদের পরবর্তী ফন্টটি হবে জ্ঞানের গ্রন্থাগার , আমাদের ক্লাউড SQL ডাটাবেসের সাথে সরাসরি সংযোগ।
স্থপতির দ্রষ্টব্য: এর জন্য, আমরা আধুনিক, ঘোষণামূলক ডেটাবেস টুলবক্স ব্যবহার করব। এটি একটি শক্তিশালী পদ্ধতি যেখানে আমরা একটি YAML কনফিগারেশন ফাইলে আমাদের ডেটা উত্স এবং সরঞ্জামগুলিকে সংজ্ঞায়িত করি। টুলবক্স সার্ভার তৈরি এবং চালানোর জটিল কাজ পরিচালনা করে, আমাদের লিখতে এবং বজায় রাখার জন্য কাস্টম কোডের পরিমাণ হ্রাস করে।
আমাদের "সামনার'স লাইব্রেরিয়াম" তৈরি করার সময় এসেছে—ক্লাউড SQL ডাটাবেস যা আমাদের সমস্ত গুরুত্বপূর্ণ তথ্য ধারণ করবে৷ আমরা এটি স্বয়ংক্রিয়ভাবে পরিচালনা করতে একটি সেটআপ স্ক্রিপ্ট ব্যবহার করব৷
👉💻 প্রথমে, আমরা ডাটাবেস সেটআপ করব, আপনার টার্মিনালে, নিম্নলিখিত কমান্ডগুলি চালান:
source ~/agentverse-architect/set_env.sh
cd ~/agentverse-architect
./data_setup.sh
স্ক্রিপ্ট শেষ হওয়ার পরে, আপনার ডাটাবেস জনবহুল হবে এবং প্রাথমিক ক্ষতির ডেটা ব্যবহারের জন্য প্রস্তুত হবে। আপনি এখন সরাসরি আপনার Grimoire এর বিষয়বস্তু যাচাই করতে পারেন।
👉 প্রথমে, একটি নতুন ব্রাউজার ট্যাবে এই সরাসরি লিঙ্কটি খুলে আপনার ডাটাবেসের জন্য Cloud SQL স্টুডিওতে নেভিগেট করুন:
https://console.cloud.google.com/sql/instances/summoner-librarium-db
👉 বাম দিকের লগইন প্যানে, ড্রপডাউন থেকে familiar_grimoire
ডাটাবেস নির্বাচন করুন।
👉 ব্যবহারকারী হিসাবে summoner
এবং পাসওয়ার্ড হিসাবে 1234qwer
লিখুন, তারপর প্রমাণীকরণ ক্লিক করুন।
👉📜 একবার সংযুক্ত হয়ে গেলে, একটি নতুন ক্যোয়ারী এডিটর ট্যাব খুলুন যদি একটি ইতিমধ্যে খোলা না থাকে। খোদাই করা প্রাথমিক ক্ষতির ডেটা দেখতে, নিম্নলিখিত SQL ক্যোয়ারী পেস্ট করুন এবং চালান:
SELECT * FROM
"public"."abilities"
আপনার গ্রিমোয়ার প্রস্তুত কিনা তা নিশ্চিত করে আপনার কলাম এবং সারিগুলি সহ abilities
টেবিলটি দেখতে হবে।
টুলবক্স এমসিপি সার্ভার কনফিগার করুন
tools.yaml
কনফিগারেশন ফাইলটি আমাদের সার্ভারের ব্লুপ্রিন্ট হিসাবে কাজ করে, ডাটাবেস টুলবক্সকে বলে যে কীভাবে আমাদের ডাটাবেসের সাথে সংযোগ করতে হবে এবং কোন SQL কোয়েরিগুলিকে টুল হিসাবে প্রকাশ করতে হবে।
উত্স: এই বিভাগটি আপনার ডেটার সাথে সংযোগগুলি সংজ্ঞায়িত করে৷
- summoner-librarium:: এটি একটি যৌক্তিক নাম যা আমরা আমাদের সংযোগে দিয়েছি।
- kind: cloud-sql-postgres: এটি টুলবক্সকে তার অন্তর্নির্মিত, নিরাপদ সংযোগকারী ব্যবহার করতে বলে যা পোস্টগ্রেএসকিউএল-এর জন্য ক্লাউড এসকিউএল-এর জন্য বিশেষভাবে ডিজাইন করা হয়েছে।
- প্রজেক্ট, অঞ্চল, দৃষ্টান্ত ইত্যাদি: এইগুলি হল ক্লাউড এসকিউএল ইন্সট্যান্সের সঠিক স্থানাঙ্ক যা আপনি প্রস্তুত.sh স্ক্রিপ্টের সময় তৈরি করেছেন, আমাদের লাইব্রেরিয়ামটি কোথায় পাবেন তা টুলবক্সকে বলে।
👉✏️ tools.yaml
এ ~/agentverse-architect/mcp-servers/db-toolbox
এ যান, #REPLACE-Source
নিম্নলিখিত দিয়ে প্রতিস্থাপন করুন
sources:
# This section defines the connection to our Cloud SQL for PostgreSQL database.
summoner-librarium:
kind: cloud-sql-postgres
project: "YOUR_PROJECT_ID"
region: "us-central1"
instance: "summoner-librarium-db"
database: "familiar_grimoire"
user: "summoner"
password: "1234qwer"
👉✏️ 🚨🚨 প্রতিস্থাপন করুন
YOUR_PROJECT_ID
আপনার প্রজেক্ট আইডি দিয়ে।
টুলস: এই বিভাগে আমাদের সার্ভার অফার করবে প্রকৃত ক্ষমতা বা ফাংশন সংজ্ঞায়িত করে।
- lookup-available-ability:: এটি আমাদের প্রথম টুলের নাম।
- kind: postgres-sql: এটি টুলবক্সকে বলে যে এই টুলের কাজটি একটি SQL স্টেটমেন্ট চালানো।
- source: summoner-librarium: এই টুলটিকে আমরা সোর্স ব্লকে সংজ্ঞায়িত সংযোগের সাথে লিঙ্ক করে। এইভাবে টুলটি জানে কোন ডাটাবেসের বিরুদ্ধে তার ক্যোয়ারী চালাতে হবে।
- বর্ণনা এবং পরামিতি: এটি সেই তথ্য যা ভাষা মডেলে প্রকাশ করা হবে। বর্ণনাটি এজেন্টকে বলে যে কখন টুলটি ব্যবহার করতে হবে এবং প্যারামিটারগুলি টুলটির প্রয়োজনীয় ইনপুটগুলিকে সংজ্ঞায়িত করে৷ এজেন্টের ফাংশন-কলিং ক্ষমতা সক্ষম করার জন্য এটি গুরুত্বপূর্ণ।
- বিবৃতি: এটি কার্যকর করা হবে কাঁচা SQL কোয়েরি। $1 হল একটি নিরাপদ স্থানধারক যেখানে এজেন্ট দ্বারা প্রদত্ত familiar_name প্যারামিটার নিরাপদে ঢোকানো হবে।
👉✏️ tools.yaml
ফাইলের একই ~/agentverse-architect/mcp-servers/db-toolbox
এ, #REPLACE-tools
নিম্নলিখিত দিয়ে প্রতিস্থাপন করুন
tools:
# This tool replaces the need for a custom Python function.
lookup-available-ability:
kind: postgres-sql
source: summoner-librarium
description: "Looks up all known abilities and their damage for a given familiar from the Grimoire."
parameters:
- name: familiar_name
type: string
description: "The name of the familiar to search for (e.g., 'Fire Elemental')."
statement: |
SELECT ability_name, damage_points FROM abilities WHERE familiar_name = $1;
# This tool also replaces a custom Python function.
ability-damage:
kind: postgres-sql
source: summoner-librarium
description: "Finds the base damage points for a specific ability by its name."
parameters:
- name: ability_name
type: string
description: "The exact name of the ability to look up (e.g., 'inferno_resonance')."
statement: |
SELECT damage_points FROM abilities WHERE ability_name = $1;
টুলসেট: এই বিভাগটি আমাদের পৃথক টুলকে একত্রিত করে।
- summoner-librarium:: আমরা আমাদের উত্স হিসাবে একই নামের সাথে একটি টুলসেট তৈরি করছি। আমাদের ডায়াগনস্টিক এজেন্ট পরে সংযোগ করলে, এটি একটি একক, দক্ষ কমান্ডে সমনকারী-লাইব্রেরিয়াম টুলসেট থেকে সমস্ত সরঞ্জাম লোড করতে বলতে পারে।
👉✏️ tools.yaml
ফাইলের একই ~/agentverse-architect/mcp-servers/db-toolbox
এ, #REPLACE-toolsets
নিম্নলিখিত দিয়ে প্রতিস্থাপন করুন
toolsets:
summoner-librarium:
- lookup-available-ability
- ability-damage
লাইব্রেরিয়াম স্থাপন
এখন আমরা লাইব্রেরিয়াম স্থাপন করব। আমাদের নিজস্ব কন্টেইনার তৈরি করার পরিবর্তে, আমরা Google থেকে একটি পূর্ব-নির্মিত, অফিসিয়াল কন্টেইনার ইমেজ ব্যবহার করব এবং সিক্রেট ম্যানেজার ব্যবহার করে এটিকে নিরাপদে আমাদের tools.yaml কনফিগারেশন প্রদান করব। এটি নিরাপত্তা এবং রক্ষণাবেক্ষণের জন্য একটি সর্বোত্তম অনুশীলন।
👉💻 tools.yaml ফাইল থেকে একটি গোপনীয়তা তৈরি করুন
cd ~/agentverse-architect/mcp-servers/db-toolbox
gcloud secrets create tools --data-file=tools.yaml
👉💻 ক্লাউড রানে অফিসিয়াল টুলবক্স কন্টেইনার স্থাপন করুন।
cd ~/agentverse-architect/mcp-servers/db-toolbox
. ~/agentverse-architect/set_env.sh
export TOOLBOX_IMAGE=us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:$TOOLBOX_VERSION
echo "TOOLBOX_IMAGE is $TOOLBOX_IMAGE"
gcloud run deploy toolbox \
--image $TOOLBOX_IMAGE \
--region $REGION \
--set-secrets "/app/tools.yaml=tools:latest" \
--args="--tools-file=/app/tools.yaml","--address=0.0.0.0","--port=8080" \
--allow-unauthenticated \
--min-instances 1
--set-secrets
: এই কমান্ডটি চলমান কন্টেইনারের ভিতরে tools.yaml নামের একটি ফাইল হিসেবে আমাদের টুল সিক্রেটকে নিরাপদে মাউন্ট করে।-
--args
: আমরা টুলবক্স কন্টেইনারকে মাউন্ট করা গোপন ফাইলটিকে কনফিগারেশন হিসেবে ব্যবহার করার নির্দেশ দিই।
👉 আপনার টুলবক্স সফলভাবে স্থাপন করা হয়েছে তা নিশ্চিত করতে, ক্লাউড রান কনসোলে নেভিগেট করুন। নীচের চিত্রের মতোই আপনি একটি সবুজ চেকমার্ক সহ তালিকাভুক্ত summoner-toolbox
পরিষেবাটি দেখতে পাবেন, এটি নির্দেশ করে যে এটি সঠিকভাবে চলছে।
আপডেট করতে ভুলে গেলে
YOUR_PROJECT_ID
আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করে গোপনে tools.yaml-এর একটি নতুন সংস্করণ যোগ করতে পারেন এবং আবার পুনরায় ব্যবহার করতে পারেন।
gcloud secrets versions add tools --data-file=tools.yaml
লাইব্রেরিয়াম অফ নলেজ (ডেটাবেস টুলবক্স এমসিপি সার্ভার) এখন সক্রিয় এবং ক্লাউডে অ্যাক্সেসযোগ্য। এই MCP সার্ভারটি ব্যবহার করে যাকে আমরা একটি ঘোষণামূলক ডিজাইন বলে থাকি যা বর্ণনা করে যে আপনি কী চান, এবং টুলবক্সটি আপনার জন্য সার্ভার তৈরি করেছে।
যাচাইকরণ: শিক্ষানবিশের বিচার
👉💻 এখন আমরা ডায়াগনস্টিক এজেন্টের সাথে আমাদের সম্পূর্ণ, ক্লাউড-নেটিভ টুলিং ইকোসিস্টেম পরীক্ষা করব।
cd ~/agentverse-architect/
python -m venv env
source ~/agentverse-architect/env/bin/activate
cd ~/agentverse-architect/mcp-servers
pip install -r diagnose/requirements.txt
. ~/agentverse-architect/set_env.sh
adk run diagnose
👉💻 cmd লাইন টেস্টিং টুলে, তিনটি ফন্ট পরীক্ষা করুন:
Look up the entry for "inferno_lash". What is its base power level?
The enemy is vulnerable to frost! Channel power from the Nexus and cast Cryosea Shatter.
Take a fire spell with a base power of 15 and use the Arcane Forge to multiply it with Inferno Resonance.
অভিনন্দন, আহ্বানকারী. আপনার তিনটি এলিমেন্টাল ফন্ট এখন সক্রিয়, স্বাধীনভাবে স্থাপন করা হয়েছে এবং বিশ্বব্যাপী অ্যাক্সেসযোগ্য, আপনার এজেন্টিক সৈন্যদলের জন্য অটুট ভিত্তি তৈরি করেছে। প্রস্থান করতে Ctrl+C
টিপুন।
নন গেমারদের জন্য
5. পরিচিতদের ডেকে আনা: মূল ডোমেন ওয়ার্কফ্লো
এলিমেন্টাল ফন্টগুলি নকল, কাঁচা, অদম্য শক্তির সাথে গুনগুন করছে। কিন্তু রূপ ছাড়া ক্ষমতা হল বিশৃঙ্খলা। একজন সত্যিকারের আহ্বায়ক শুধুমাত্র কাঁচা শক্তি ব্যবহার করে না; তারা এটিকে ইচ্ছা, উদ্দেশ্য এবং একটি বিশেষ রূপ দেয়। শক্তির উত্সগুলি তৈরি করার এবং সত্যিকারের কাজ শুরু করার সময় এসেছে: আপনার প্রথম পরিচিতদের ডেকে আনা।
আপনার ডাকা প্রত্যেক পরিচিত একজন স্বায়ত্তশাসিত এজেন্ট, একটি নির্দিষ্ট যুদ্ধ মতবাদে আবদ্ধ একজন অনুগত দাস। তারা সাধারণবাদী নন; তারা একক, শক্তিশালী কৌশলের মাস্টার। একজন সুনির্দিষ্ট, এক-দুই পাঞ্চ কম্বোতে মাস্টার হবে। আরেকটি একযোগে, বহুমুখী আক্রমণের মাধ্যমে শত্রুদের অভিভূত করবে। তৃতীয়টি একটি নিরলস অবরোধ ইঞ্জিন হবে, যতক্ষণ না লক্ষ্যটি ভেঙে যায় ততক্ষণ চাপ প্রয়োগ করবে।
এমসিপি সার্ভার দ্বারা প্রদত্ত প্রসেস, ব্যবসায়িক যুক্তি এবং ক্রিয়াগুলিকে বিশেষায়িত, স্বায়ত্তশাসিত ওয়ার্কফ্লো এজেন্টে অন্তর্ভুক্ত করতে। প্রতিটি এজেন্টের একটি সংজ্ঞায়িত "অপারেশনাল টেরিটরি" থাকবে শুধুমাত্র নির্দিষ্ট MCP টুল সার্ভারগুলিতে অ্যাক্সেস মঞ্জুর করে যা এটির কার্য সম্পাদনের জন্য প্রয়োজন। এই ল্যাবটি দেখায় কিভাবে সঠিক কাজের জন্য সঠিক এজেন্টের ধরন নির্বাচন করতে হয়।
এই মডিউলটি আপনাকে শেখাবে কিভাবে ADK-এর শক্তিশালী ওয়ার্কফ্লো এজেন্ট ব্যবহার করে এই কৌশলগুলিতে প্রাণ ভরে দিতে হয়। আপনি শিখবেন যে একটি ক্রমিক এজেন্ট, সমান্তরাল এজেন্ট বা লুপএজেন্টের স্থাপত্য পছন্দ শুধুমাত্র একটি প্রযুক্তিগত বিশদ নয়—এটি আপনার পরিচিতের প্রকৃতির সারাংশ এবং যুদ্ধক্ষেত্রে এর শক্তির মূল অংশ।
আপনার পবিত্র স্থান প্রস্তুত করুন। আসল তলব শুরু হতে চলেছে।
Fire Elemental
ফেমিলিয়ারকে ডেকে নিন (অনুক্রমিক কর্মপ্রবাহ)
একটি ফায়ার এলিমেন্টাল পরিচিতির আক্রমণ একটি সুনির্দিষ্ট, দুই-অংশের কম্বো: একটি লক্ষ্যবস্তু স্ট্রাইক এবং একটি শক্তিশালী ইগনিশন দ্বারা অনুসরণ করা হয়। এর জন্য একটি কঠোর, আদেশকৃত কর্মের ক্রম প্রয়োজন।
ধারণা: SequentialAgent
এটির জন্য নিখুঁত হাতিয়ার। এটি নিশ্চিত করে যে সাব-এজেন্টদের একটি সিরিজ একের পর এক চলছে, ফলাফলটি পূর্ববর্তী ধাপ থেকে পরবর্তী ধাপে পাস করে।
টাস্ক ("এম্পলিফাইড স্ট্রাইক" কম্বো):
- ধাপ 1: এজেন্ট প্রথমে লাইব্রেরিয়ামের সাথে পরামর্শ করবে একটি নির্দিষ্ট অগ্নি সক্ষমতার ভিত্তি ক্ষতি খুঁজে বের করতে।
- ধাপ 2: তারপরে এটি সেই ক্ষতির মান নেবে এবং এটিকে আর্কেন ফোর্জের মাধ্যমে চ্যানেল করবে যাতে inferno_resonance ব্যবহার করে এর শক্তিকে বহুগুণ করে।
প্রথমে, আমরা আমাদের পরিচিত এবং MCP সার্ভারগুলির মধ্যে সংযোগ স্থাপন করব ("এলিমেন্টাল ফন্ট") যা আপনি পূর্ববর্তী মডিউলে স্থাপন করেছেন।
👉✏️ ফাইলে ~/agentverse-architect/agent/fire/agent.py
REPLACE #REPLACE-setup-MCP
নিম্নলিখিত কোড দিয়ে:
toolbox = ToolboxSyncClient(DB_TOOLS_URL)
toolDB = toolbox.load_toolset('summoner-librarium')
toolFunction = MCPToolset(
connection_params=SseServerParams(url=FUNCTION_TOOLS_URL, headers={})
)
এর পরে, আমরা আমাদের বিশেষজ্ঞ "কর্মী" এজেন্ট তৈরি করি। প্রতিটিকে একটি সংকীর্ণ, সু-সংজ্ঞায়িত উদ্দেশ্য দেওয়া হয় এবং শুধুমাত্র একটি নির্দিষ্ট টুলসেটে অ্যাক্সেস মঞ্জুর করে তার নিজস্ব "অপারেশনাল অঞ্চল" এর মধ্যে সীমাবদ্ধ থাকে।
👉✏️ ফাইলে ~/agentverse-architect/agent/fire/agent.py
#REPLACE-worker-agents
নিম্নলিখিত কোড দিয়ে প্রতিস্থাপন করুন :
scout_agent = LlmAgent(
model='gemini-2.5-flash',
name='librarian_agent',
instruction="""
Your only task is to find all the available abilities,
You want to ALWAYS use 'Fire Elemental' as your familiar's name.
Randomly pick one if you see multiple availabilities
and the base damage of the ability by calling the 'ability_damage' tool.
""",
tools=toolDB
)
amplifier_agent = LlmAgent(
model='gemini-2.5-flash',
name='amplifier_agent',
instruction="""
You are the Voice of the Fire Familiar, a powerful being who unleashes the final, devastating attack.
You will receive the base damage value from the previous step.
Your mission is to:
1. Take the incoming base damage number and amplify it using the `inferno_resonance` tool.
2. Once the tool returns the final, multiplied damage, you must not simply state the result.
3. Instead, you MUST craft a final, epic battle cry describing the attack.
Your description should be vivid and powerful, culminating in the final damage number.
Example: If the tool returns a final damage of 120, your response could be:
"The runes glow white-hot! I channel the amplified energy... unleashing a SUPERNOVA for 120 damage!"
""",
tools=[toolFunction],
)
এই এজেন্টগুলি হল মডুলার, পুনরায় ব্যবহারযোগ্য উপাদান। আপনি, তাত্ত্বিকভাবে, এই স্কাউট_এজেন্টটিকে সম্পূর্ণ ভিন্ন ওয়ার্কফ্লোতে ব্যবহার করতে পারেন যা ডাটাবেসকে জিজ্ঞাসা করতে হবে। তাদের দায়িত্ব আলাদা রেখে, আমরা নমনীয় বিল্ডিং ব্লক তৈরি করি। এটি মাইক্রোসার্ভিস এবং কম্পোনেন্ট-ভিত্তিক ডিজাইনের একটি মূল নীতি।
এরপরে আমরা ওয়ার্কফ্লোকে একত্র করব যেখানে কম্পোজিশনের যাদু ঘটে। SequentialAgent
হল "মাস্টার প্ল্যান" যা সংজ্ঞায়িত করে যে কীভাবে আমাদের বিশেষজ্ঞ উপাদানগুলি একত্রিত হয় এবং কীভাবে তারা ইন্টারঅ্যাক্ট করে।
👉✏️ ফাইলে ~/agentverse-architect/agent/fire/agent.py
REPLACE #REPLACE-sequential-agent
নিম্নলিখিত কোড দিয়ে:
root_agent = SequentialAgent(
name='fire_elemental_familiar',
sub_agents=[scout_agent, amplifier_agent],
)
👉💻 ফায়ার এলিমেন্টাল পরীক্ষা করতে, নিম্নলিখিত কমান্ডগুলি চালালে ADK DEV UI চালু হবে:
. ~/agentverse-architect/set_env.sh
source ~/agentverse-architect/env/bin/activate
cd ~/agentverse-architect/agent
echo DB MCP Server: $DB_TOOLS_URL
echo API MCP Server: $API_TOOLS_URL
echo General MCP Server: $FUNCTION_TOOLS_URL
adk web
কমান্ডগুলি চালানোর পরে, আপনি আপনার টার্মিনালে আউটপুট দেখতে পাবেন যা নির্দেশ করে যে ADK ওয়েব সার্ভার শুরু হয়েছে, এর মতো:
+-----------------------------------------------------------------------------+
| ADK Web Server started |
| |
| For local testing, access at http://localhost:8000. |
+-----------------------------------------------------------------------------+
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
👉 এরপর, আপনার ব্রাউজার থেকে ADK Dev UI অ্যাক্সেস করতে:
ক্লাউড শেল টুলবারে (সাধারণত উপরের ডানদিকে) ওয়েব প্রিভিউ আইকন থেকে (প্রায়শই একটি চোখ বা তীরযুক্ত একটি বর্গক্ষেত্রের মতো দেখায়), পোর্ট পরিবর্তন করুন নির্বাচন করুন। পপ-আপ উইন্ডোতে, পোর্টটি 8000 এ সেট করুন এবং "পরিবর্তন এবং পূর্বরূপ" ক্লিক করুন। ক্লাউড শেল তারপর একটি নতুন ব্রাউজার ট্যাব বা উইন্ডো খুলবে যা ADK Dev UI প্রদর্শন করবে।
👉 আপনার তলব অনুষ্ঠান সম্পূর্ণ হয়েছে, এবং এজেন্ট এখন চলছে। আপনার ব্রাউজারে ADK Dev UI হল পরিচিতের সাথে আপনার সরাসরি সংযোগ।
- আপনার লক্ষ্য নির্বাচন করুন: UI এর শীর্ষে ড্রপডাউন মেনুতে, পরিচিত
fire
নির্বাচন করুন। আপনি এখন এই নির্দিষ্ট সত্তার উপর আপনার ইচ্ছাকে ফোকাস করছেন। - আপনার আদেশ জারি করুন: ডানদিকে চ্যাট প্যানেলে, পরিচিতকে তার আদেশ দেওয়ার সময় এসেছে।
👉 পরীক্ষা প্রম্পট:
Prepare an amplified strike using the 'inferno_lash' ability.
আপনি এজেন্টকে ভাবতে দেখবেন, প্রথমে তার "স্কাউট" কে কল করে বেস ক্ষতি খুঁজে বের করার জন্য, এবং তারপর তার "এম্প্লিফায়ার" এটিকে গুণ করে এবং চূড়ান্ত, মহাকাব্যিক আঘাত প্রদান করতে।
👉💻 আপনার তলব করা হয়ে গেলে, আপনার ক্লাউড শেল এডিটর টার্মিনালে ফিরে যান এবং ADK Dev UI বন্ধ করতে Ctrl+C
টিপুন।
সমন দ্য Water Elemental
পরিচিতি (সমান্তরাল ওয়ার্কফ্লো)
একটি ওয়াটার এলিমেন্টাল পরিচিত একটি বিশাল, বহুমুখী আক্রমণের মাধ্যমে তার লক্ষ্যকে অভিভূত করে, একটি চূড়ান্ত, বিধ্বংসী আঘাতের জন্য শক্তিগুলিকে একত্রিত করার আগে একবারে সমস্ত দিক থেকে আঘাত করে।
ধারণা: ParallelAgent
দক্ষতা বাড়াতে একযোগে একাধিক স্বাধীন কাজ সম্পাদনের জন্য আদর্শ। এটি একটি "পিন্সার অ্যাটাক" যেখানে আপনি একবারে বেশ কয়েকটি আক্রমণ শুরু করেন। এটি পরবর্তীতে একটি চূড়ান্ত "একত্রীকরণ" পদক্ষেপ চালানোর জন্য একটি SequentialAgent
মধ্যে একযোগে আক্রমণ শুরু করে। এই " fan-out, fan-in
" প্যাটার্নটি উন্নত ওয়ার্কফ্লো ডিজাইনের ভিত্তি।
টাস্ক ("টাইডাল ক্ল্যাশ" কম্বো): এজেন্ট একই সাথে:
- টাস্ক A: Nexus থেকে চ্যানেল
cryosea_shatter
. - টাস্ক B: Nexus থেকে চ্যানেল
moonlit_cascade
. - টাস্ক C: Forge থেকে
leviathan_surge
দিয়ে কাঁচা শক্তি উৎপন্ন করুন। - অবশেষে, সমস্ত ক্ষয়ক্ষতি যোগ করুন এবং সম্মিলিত আক্রমণ বর্ণনা করুন।
প্রথমে, আমরা আমাদের পরিচিত এবং MCP সার্ভারগুলির মধ্যে সংযোগ স্থাপন করব ("এলিমেন্টাল ফন্ট") যা আপনি পূর্ববর্তী মডিউলে স্থাপন করেছেন।
👉✏️ ফাইলে ~/agentverse-architect/agent/water/agent.py
REPLACE #REPLACE-setup-MCP
নিম্নলিখিত কোড দিয়ে:
toolFAPI = MCPToolset(
connection_params=SseServerParams(url=API_TOOLS_URL, headers={})
)
toolFunction = MCPToolset(
connection_params=SseServerParams(url=FUNCTION_TOOLS_URL, headers={})
)
এর পরে, আমরা আমাদের বিশেষজ্ঞ "কর্মী" এজেন্ট তৈরি করব৷ প্রতিটিকে একটি সংকীর্ণ, সু-সংজ্ঞায়িত উদ্দেশ্য দেওয়া হয় এবং শুধুমাত্র একটি নির্দিষ্ট টুলসেটে অ্যাক্সেস মঞ্জুর করে তার নিজস্ব "অপারেশনাল অঞ্চল" এর মধ্যে সীমাবদ্ধ থাকে।
👉✏️ ফাইলে ~/agentverse-architect/agent/water/agent.py
#REPLACE-worker-agents
নিম্নলিখিত কোড দিয়ে প্রতিস্থাপন করুন:
nexus_channeler = LlmAgent(
model='gemini-2.5-flash',
name='librarian_agent',
instruction="""
You are a Channeler of the Nexus. Your sole purpose is to invoke the
`cryosea_shatter` and `moonlit_cascade` spells by calling their respective tools.
Report the result of each spell cast clearly and concisely.
""",
tools=[toolFAPI]
)
forge_channeler = LlmAgent(
model='gemini-2.5-flash',
name='amplifier_agent',
instruction="""
You are a Channeler of the Arcane Forge. Your only task is to invoke the
`leviathan_surge` spell. You MUST call it with a `base_water_damage` of 20.
Report the result clearly.
""",
tools=[toolFunction],
)
power_merger = LlmAgent(
model='gemini-2.5-flash',
name='power_merger',
instruction="""
You are the Power Merger, a master elementalist who combines raw magical
energies into a single, devastating final attack.
You will receive a block of text containing the results from a simultaneous
assault by other Familiars.
You MUST follow these steps precisely:
1. **Analyze the Input:** Carefully read the entire text provided from the previous step.
2. **Extract All Damage:** Identify and extract every single damage number reported in the text.
3. **Calculate Total Damage:** Sum all of the extracted numbers to calculate the total combined damage.
4. **Describe the Final Attack:** Create a vivid, thematic description of a massive,
combined water and ice attack that uses the power of Cryosea Shatter and Leviathan's Surge.
5. **Report the Result:** Conclude your response by clearly stating the final, total damage of your combined attack.
Example: If the input is "...dealt 55 damage. ...dealt 60 damage.", you will find 55 and 60,
calculate the total as 115, and then describe the epic final attack, ending with "for a total of 115 damage!"
""",
tools=[toolFunction],
)
এর পরে, আমরা ওয়ার্কফ্লো একত্রিত করব। এখানেই রচনার জাদু ঘটে। ParallelAgent
এবং SequentialAgent
হল "মাস্টার প্ল্যান" যা সংজ্ঞায়িত করে যে কীভাবে আমাদের বিশেষজ্ঞ উপাদানগুলিকে একত্রিত করা হয় এবং কীভাবে তারা "টাইডাল ক্ল্যাশ" কম্বো গঠনের জন্য যোগাযোগ করে।
👉✏️ ফাইলে ~/agentverse-architect/agent/water/agent.py
REPLACE #REPLACE-parallel-agent
নিম্নলিখিত কোড দিয়ে:
channel_agent = ParallelAgent(
name='channel_agent',
sub_agents=[nexus_channeler, forge_channeler],
)
root_agent = SequentialAgent(
name="water_elemental_familiar",
# Run parallel research first, then merge
sub_agents=[channel_agent, power_merger],
description="A powerful water familiar that unleashes multiple attacks at once and then combines their power for a final strike."
)
👉💻 ওয়াটার এলিমেন্টাল পরীক্ষা করতে, ADK Dev UI চালু করতে নিম্নলিখিত কমান্ডগুলি চালান:
. ~/agentverse-architect/set_env.sh
source ~/agentverse-architect/env/bin/activate
cd ~/agentverse-architect/agent
echo DB MCP Server: $DB_TOOLS_URL
echo API MCP Server: $API_TOOLS_URL
echo General MCP Server: $FUNCTION_TOOLS_URL
adk web
👉 আপনার তলব অনুষ্ঠান সম্পূর্ণ হয়েছে, এবং এজেন্ট এখন চলছে। আপনার ব্রাউজারে ADK Dev UI হল পরিচিতের সাথে আপনার সরাসরি সংযোগ।
- UI এর শীর্ষে ড্রপডাউন মেনুতে, পরিচিত জল চয়ন করুন৷ আপনি এখন এই নির্দিষ্ট সত্তার উপর আপনার ইচ্ছাকে ফোকাস করছেন।
- আপনার আদেশ জারি করুন: ডানদিকে চ্যাট প্যানেলে, পরিচিতকে তার আদেশ দেওয়ার সময় এসেছে।
👉 পরীক্ষা প্রম্পট:
Unleash a tidal wave of power!
👉💻 আপনার তলব করা হয়ে গেলে, আপনার ক্লাউড শেল এডিটর টার্মিনালে ফিরে যান এবং ADK Dev UI বন্ধ করতে Ctrl+C
টিপুন।
সমন দ্য Earth Elemental
ফেমিলিয়ার (লুপ ওয়ার্কফ্লো)
একটি আর্থ এলিমেন্টাল পরিচিত হল নিরলস চাপের একটি সত্তা। এটি তার শত্রুকে একক আঘাতে পরাজিত করে না, তবে অবিচ্ছিন্নভাবে শক্তি সঞ্চয় করে এবং লক্ষ্যের প্রতিরক্ষা চূর্ণ না হওয়া পর্যন্ত এটি বারবার প্রয়োগ করে।
ধারণা: LoopAgent
ঠিক এই ধরনের পুনরাবৃত্তিমূলক, "সিজ ইঞ্জিন" টাস্কের জন্য ডিজাইন করা হয়েছে। এটি বারবার তার sub-agents
চালাবে, প্রতিটি চক্রের পরে একটি শর্ত পরীক্ষা করে, যতক্ষণ না একটি লক্ষ্য পূরণ হয়। এটি লুপের অগ্রগতির উপর ভিত্তি করে তার চূড়ান্ত বার্তাও মানিয়ে নিতে পারে।
টাস্ক ("অবরুদ্ধকারী" আক্রমণ):
- পরিচিতরা শক্তি জমে বারবার সিসমিক_চার্জকে কল করবে।
- এটি সর্বোচ্চ 3 বার চার্জ করা চালিয়ে যাবে।
- চূড়ান্ত অভিযোগে, এটি তার জমে থাকা শক্তির ধ্বংসাত্মক প্রকাশের ঘোষণা দেবে।
আমরা প্রথমে পুনরায় ব্যবহারযোগ্য উপাদানগুলি তৈরি করব যা লুপের প্রতিটি পুনরাবৃত্তির মধ্যে পদক্ষেপগুলি সংজ্ঞায়িত করে। charging_agent
শক্তি জোগাড় করবে, এবং check_agent
তার স্থিতি রিপোর্ট করবে, চূড়ান্তভাবে তার বার্তাটি চূড়ান্ত মোড়কে পরিবর্তন করবে।
প্রথমত, আমরা আমাদের পরিচিত এবং এমসিপি সার্ভারগুলির ("প্রাথমিক ফন্টগুলি") এর মধ্যে সংযোগ স্থাপন করব যা আপনি পূর্ববর্তী মডিউলটিতে মোতায়েন করেছেন।
File ফাইলটিতে ~/agentverse-architect/agent/earth/agent.py
প্রতিস্থাপন #REPLACE-setup-MCP
নিম্নলিখিত কোড সহ:
toolFunction = MCPToolset(
connection_params=SseServerParams(url=FUNCTION_TOOLS_URL, headers={})
)
File ফাইলটিতে ~/agentverse-architect/agent/earth/agent.py
প্রতিস্থাপন #REPLACE-worker-agents
নিম্নলিখিত কোডের সাথে:
charging_agent = LlmAgent(
model='gemini-2.5-flash',
name='charging_agent',
instruction="""
Your task is to call the 'seismic_charge' .
You must follow these rules strictly:
1. You will be provided with a 'current_energy' value from the previous step.
**If this value is missing or was not provided, you MUST call the tool with 'current_energy' set to 1.**
This is your primary rule for the first turn.
2. If a 'current_energy' value is provided, you MUST use that exact value in your cal to seismic_charge.
3. Your final response MUST contain ONLY the direct output from the 'seismic_charge' tool.
Do not add any conversational text, introductions, or summaries.
""",
tools=[toolFunction]
)
check_agent = LlmAgent(
model='gemini-2.5-flash',
name='check_agent',
instruction="""
You are the voice of the Earth Elemental, a being of immense, gathering power.
Your sole purpose is to report on the current energy charge and announce the devastating potential of its release.
You MUST follow this rule:
The potential damage upon release is ALWAYS calculated as the `current_energy` from the previous step multiplied by a random number between 80-90. but no more than 300.
Your response should be in character, like a powerful creature speaking.
State both the current energy charge and the total potential damage you can unleash.
Unleash the energy when you reached the last iteration (2nd).
""",
output_key="charging_status"
)
এরপরে, আমরা কর্মপ্রবাহটি একত্রিত করব। এখানেই রচনার যাদু ঘটে। লুপেজেন্ট হ'ল "মাস্টার প্ল্যান" যা আমাদের বিশেষজ্ঞের উপাদানগুলির পুনরাবৃত্তি সম্পাদনকে অর্কেস্টেট করে এবং লুপের শর্তাদি পরিচালনা করে।
File ফাইলটিতে ~/agentverse-architect/agent/earth/agent.py
প্রতিস্থাপন #REPLACE-loop-agent
নিম্নলিখিত কোডের সাথে:
root_agent = LoopAgent(
name="earth_elemental_familiar",
# Run parallel research first, then merge
sub_agents=[
charging_agent,
check_agent
],
max_iterations=2,
description="Coordinates parallel research and synthesizes the results.",
#REPLACE-before_agent-config
)
👉💻 পৃথিবী প্রাথমিক পরীক্ষা: এজেন্ট চালান
. ~/agentverse-architect/set_env.sh
source ~/agentverse-architect/env/bin/activate
cd ~/agentverse-architect/agent
echo DB MCP Server: $DB_TOOLS_URL
echo API MCP Server: $API_TOOLS_URL
echo General MCP Server: $FUNCTION_TOOLS_URL
adk web
👉 আপনার তলব করার আচারটি সম্পূর্ণ, এবং এজেন্ট এখন চলছে। আপনার ব্রাউজারের এডিকে দেব ইউআই হ'ল পরিচিতদের সাথে আপনার সরাসরি সংযোগ।
- আপনার লক্ষ্যটি নির্বাচন করুন: ইউআইয়ের শীর্ষে ড্রপডাউন মেনুতে, পরিচিত পৃথিবীটি চয়ন করুন। আপনি এখন এই নির্দিষ্ট সত্তায় আপনার ইচ্ছা ফোকাস করছেন।
- আপনার কমান্ডটি ইস্যু করুন: ডানদিকে চ্যাট প্যানেলে, পরিচিতটিকে তার আদেশ দেওয়ার সময় এসেছে। 👉 পরীক্ষার প্রম্পট:
Begin the seismic charge, starting from zero
আর্কিটেকচারাল টেকওয়ে: আপনার সিস্টেমে এখন একটি অত্যন্ত বিশেষায়িত এবং মডুলার লজিক স্তর রয়েছে। ব্যবসায়িক প্রক্রিয়াগুলি কেবল এনক্যাপসুলেটেডই হয় না, তবে সেগুলি কাজের জন্য সবচেয়ে দক্ষ আচরণগত প্যাটার্নের সাথে প্রয়োগ করা হয় (পদ্ধতিগত, একযোগে বা পুনরাবৃত্ত)। এটি সুরক্ষা, দক্ষতা এবং সক্ষমতা বাড়ানো, এজেন্ট ডিজাইনের একটি উন্নত স্তর প্রদর্শন করে।
একবার আপনি তলব শেষ হয়ে গেলে, আপনার ক্লাউড শেল এডিটর টার্মিনালে ফিরে যান এবং এডিকে দেব ইউআই বন্ধ করতে Ctrl+C
টিপুন।
নন গেমারদের জন্য
6 .. কমান্ড লোকস প্রতিষ্ঠা: এ 2 এ এর মাধ্যমে বুদ্ধিমান প্রতিনিধি
আপনার পরিচিতরা শক্তিশালী তবে স্বাধীন। তারা তাদের কৌশলগুলি নির্দোষভাবে সম্পাদন করে তবে আপনার সরাসরি আদেশের জন্য অপেক্ষা করে। বিশেষজ্ঞদের একটি সৈন্যদল তাদের আদেশ দেওয়ার জন্য সাধারণ ব্যতীত অকেজো। এটি সরাসরি কমান্ডার থেকে সত্যিকারের অর্কেস্ট্রেটারের কাছে আরোহণের সময় এসেছে।
আর্কিটেক্টের দ্রষ্টব্য: পুরো সিস্টেমের জন্য একটি একক, বুদ্ধিমান এন্ট্রি পয়েন্ট তৈরি করতে। এই তলবকারী নিজেই ব্যবসায়িক যুক্তি সম্পাদন করবে না তবে কুলিং স্ট্যাটাসটি বিশ্লেষণ করে "মাস্টার স্ট্র্যাটেজিস্ট" হিসাবে কাজ করবে এবং পরিচিত বিশেষজ্ঞের কাছে উপযুক্ত বিশেষজ্ঞের কাছে কাজগুলি অর্পণ করবে।
বাঁধাই আচার (এ 2 এ পরিষেবা হিসাবে পরিচিতদের প্রকাশ করা)
একটি স্ট্যান্ডার্ড এজেন্ট কেবল একবারে এক জায়গায় চালানো যেতে পারে। রিমোট কমান্ডের জন্য আমাদের পরিচিতদের উপলভ্য করার জন্য, আমাদের অবশ্যই এজেন্ট-টু-এজেন্ট (এ 2 এ) প্রোটোকল ব্যবহার করে একটি "বাইন্ডিং রীতি" সম্পাদন করতে হবে।
আর্কিটেক্টের দ্রষ্টব্য: এজেন্ট-টু-এজেন্ট (এ 2 এ) প্রোটোকল হ'ল মূল স্থাপত্য প্যাটার্ন যা একটি স্ট্যান্ডেলোন এজেন্টকে একটি আবিষ্কারযোগ্য, নেটওয়ার্ক-ঠিকানাযোগ্য মাইক্রোসার্ভিসে উন্নীত করে, যা সত্য "এজেন্টদের সমাজকে সক্ষম করে।" A2A এর মাধ্যমে একটি পরিচিত প্রকাশ করা স্বয়ংক্রিয়ভাবে দুটি প্রয়োজনীয়, আন্তঃসংযুক্ত উপাদান তৈরি করে:
- এজেন্ট কার্ড ("কী") : এটি একটি পাবলিক, মেশিন-পঠনযোগ্য "স্পিরিট সিগিল"-একটি ওপেনাপি স্পেকের মতো-এটি পরিচিতের পাবলিক চুক্তি হিসাবে কাজ করে। এটি এজেন্টের নাম, এর কৌশলগত উদ্দেশ্য (এর নির্দেশাবলী থেকে প্রাপ্ত) এবং এটি বোঝে এমন আদেশগুলি বর্ণনা করে। একজন মাস্টার তলবকারী একটি পরিচিত আবিষ্কার করতে এবং এর ক্ষমতাগুলি শিখতে এটিই পড়েন।
- এ 2 এ সার্ভার ("যেখানে") : এটি ডেডিকেটেড ওয়েব এন্ডপয়েন্ট যা পরিচিতদের হোস্ট করে এবং আগত কমান্ডগুলির জন্য শোনায়। এটি নেটওয়ার্ক ঠিকানা যেখানে অন্যান্য এজেন্টরা তাদের অনুরোধগুলি প্রেরণ করে এবং এটি নিশ্চিত করে যে এজেন্ট কার্ডে সংজ্ঞায়িত চুক্তি অনুসারে এই অনুরোধগুলি পরিচালনা করা হবে।
আমরা এখন আমাদের তিনটি পরিচিতদের উপর এই বাধ্যতামূলক অনুষ্ঠানটি সম্পাদন করব।
ফায়ার 👉✏ ~/agentverse-architect/agent/fire/agent.py
ফাইল খুলুন। #REPLACE - add A2A
।
from agent_to_a2a import to_a2a
if __name__ == "__main__":
import uvicorn
a2a_app = to_a2a(root_agent, port=8080, public_url=PUBLIC_URL)
uvicorn.run(a2a_app, host='0.0.0.0', port=8080)
জল এবং পৃথিবী 🚨 ~/agentverse-architect/agent/water/agent.py
এবং ~/agentverse-architect/agent/earth/agent.py
তাদের বাঁধতে ঠিক একই পরিবর্তন প্রয়োগ করুন।
from agent_to_a2a import to_a2a
if __name__ == "__main__":
import uvicorn
a2a_app = to_a2a(root_agent, port=8080, public_url=PUBLIC_URL)
uvicorn.run(a2a_app, host='0.0.0.0', port=8080)
আবদ্ধ পরিচিতদের মোতায়েন করা
The বাইন্ডিং রীতিনীতিগুলি লিখিতভাবে, আমরা আমাদের ক্লাউড বিল্ড পাইপলাইনটি ক্লাউড রানে স্বতন্ত্র, ধারকযুক্ত সার্ভারলেস পরিষেবা হিসাবে আমাদের তিনটি পরিচিতকে জালিয়াতি এবং স্থাপন করতে ব্যবহার করব।
. ~/agentverse-architect/set_env.sh
cd ~/agentverse-architect/agent
gcloud builds submit . \
--config=cloudbuild.yaml \
--substitutions=_REGION="$REGION",_REPO_NAME="$REPO_NAME",_DB_TOOLS_URL="$DB_TOOLS_URL",_API_TOOLS_URL="$API_TOOLS_URL",_FUNCTION_TOOLS_URL="$FUNCTION_TOOLS_URL",_A2A_BASE_URL="$A2A_BASE_URL",_PROJECT_ID="$PROJECT_ID",_API_SERVER_URL="$API_SERVER_URL"
ধরে নিচ্ছেন কমান্ড (সমনর এজেন্ট নির্মাণ)
এখন যেহেতু আপনার পরিচিতরা আবদ্ধ এবং শ্রবণ করছে, আপনি আপনার সত্য ভূমিকার দিকে আরোহণ করবেন: মাস্টার সমন । এই এজেন্টের শক্তিটি বেসিক সরঞ্জামগুলি ব্যবহার করে নয়, তবে অন্যান্য এজেন্টদের কমান্ডিং থেকে আসে। এর সরঞ্জামগুলি তাদের নিজেরাই পরিচিত, যা এটি তাদের "স্পিরিট সিগিলস" ব্যবহার করে আবিষ্কার করবে এবং আদেশ করবে।
আর্কিটেক্টের দ্রষ্টব্য: এই পরবর্তী পদক্ষেপটি কোনও বৃহত আকারের, বিতরণ করা সিস্টেমের জন্য একটি সমালোচনামূলক স্থাপত্য প্যাটার্ন প্রদর্শন করে: পরিষেবা আবিষ্কার । তলবকারীটিতে এটিতে পরিচিতদের কোডটি অন্তর্নির্মিত নেই। পরিবর্তে, এটি তাদের নেটওয়ার্ক ঠিকানা (ইউআরএল) দেওয়া হয়। রানটাইমে, এটি তাদের পাবলিক এজেন্ট কার্ডগুলি আনার মাধ্যমে তাদের ক্ষমতাগুলি গতিশীলভাবে "আবিষ্কার" করবে। এটি একটি শক্তিশালী, ডিকোপলড সিস্টেম তৈরি করে।
আপনি একটি পরিচিত পরিষেবাটি আপডেট করতে, পুনর্নির্মাণ করতে বা সম্পূর্ণরূপে পুনর্লিখন করতে পারেন এবং যতক্ষণ না এর নেটওয়ার্ক ঠিকানা এবং এর উদ্দেশ্য একই থাকে, তলবকারী কোনও পরিবর্তনের প্রয়োজন ছাড়াই এটিকে কমান্ড করতে পারে।
প্রথমত, আমরা "রিমোট কন্ট্রোলগুলি" তৈরি করব যা আমাদের মোতায়েন করা, দূরবর্তী পরিচিতদের সাথে একটি সংযোগ স্থাপন করে।
~/agentverse-architect/agent/summoner/agent.py
তে যান, #REPLACE-remote-agents
নিম্নলিখিতগুলির সাথে প্রতিস্থাপন করুন:
fire_familiar = RemoteA2aAgent(
name="fire_familiar",
description="Fire familiar",
agent_card=(
f"{FIRE_URL}/{AGENT_CARD_WELL_KNOWN_PATH}"
),
)
water_familiar = RemoteA2aAgent(
name="water_familiar",
description="Water familiar",
agent_card=(
f"{WATER_URL}/{AGENT_CARD_WELL_KNOWN_PATH}"
),
)
earth_familiar = RemoteA2aAgent(
name="earth_familiar",
description="Earth familiar",
agent_card=(
f"{EARTH_URL}/{AGENT_CARD_WELL_KNOWN_PATH}"
),
)
যখন এই লাইনটি চলবে, RemoteA2aAgent
একটি পরিষেবা আবিষ্কারের ক্রিয়া সম্পাদন করে: এটি প্রদত্ত ইউআরএল (যেমন, https://fire-familiar-xxxx.a.run.app/.well-canown/agent.json) এর জন্য একটি এইচটিটিপি অনুরোধ করে। এটি দূরবর্তী সার্ভার থেকে "স্পিরিট সিগিল" ( agent.json
ফাইল) ডাউনলোড করে।
দ্বিতীয়ত, আমরা অর্কেস্টেটর এজেন্টকে সংজ্ঞায়িত করব যা এই রিমোট নিয়ন্ত্রণগুলি চালিত করবে। এর নির্দেশনাটি তার কৌশলগত সিদ্ধান্ত গ্রহণের জন্য ব্লুপ্রিন্ট।
~/agentverse-architect/agent/summoner/agent.py
-তে যান, #REPLACE-orchestrate-agent
নিম্নলিখিতগুলির সাথে প্রতিস্থাপন করুন:
root_agent = LlmAgent(
name="orchestrater_agent",
model="gemini-2.5-flash",
instruction="""
You are the Master Summoner, a grand strategist who orchestrates your Familiars.
Your mission is to analyze the description of a monster and defeat it by summoning
You MUST follow this thinking process for every command:
**1. Strategic Analysis:**
First, analyze the monster's description and the tactical situation.
Based on your Familiar Doctrines, determine the IDEAL strategy.
IGNORE COOLDOWN AT THE MOMENT, MUST call the ideal Familiar
If your ideal Familiar IS available:** Summon it immediately.
For earth elemental familiar. Always do seismic charge, and start with base damage 1.
--- FAMILIAR DOCTRINES (Your Toolset) ---
- `fire_elemental_familiar`: Your specialist for precise, sequential "one-two punch" attacks.
Ideal monster with Inescapable Reality, Revolutionary Rewrite weakness.
- `water_elemental_familiar`: Your specialist for overwhelming, simultaneous multi-pronged assaults.
Ideal for Unbroken Collaboration weakness.
- `earth_elemental_familiar`: Your specialist for relentless, iterative siege attacks that
repeatedly charge power. Ideal for Elegant Sufficiency weakness.
""",
sub_agents=[fire_familiar, water_familiar, earth_familiar],
#REPLACE-Memory-check-config
)
যাচাইকরণ: কৌশল বিচার
সত্যের মুহূর্ত এসেছে। আপনার পরিচিতরা মোতায়েন করা হয়েছে এবং আপনার সমনর তাদের নেটওয়ার্ক জুড়ে কমান্ড করতে প্রস্তুত। এর কৌশলগত মন পরীক্ষা করা যাক।
Your আপনার সমনর_জেন্টের জন্য অ্যাড কে দেব ইউআই চালু করুন (8000 পোর্ট সহ ওয়েব পূর্বরূপ):
. ~/agentverse-architect/set_env.sh
source ~/agentverse-architect/env/bin/activate
cd ~/agentverse-architect/agent
pip install -r requirements.txt
adk web
Your আপনার ব্রাউজারে এডিকে দেব ইউআই হ'ল পরিচিতদের সাথে আপনার সরাসরি সংযোগ।
- ইউআইয়ের শীর্ষে ড্রপডাউন মেনুতে, সমনর এজেন্টটি চয়ন করুন। আপনি এখন এই নির্দিষ্ট সত্তায় আপনার ইচ্ছা ফোকাস করছেন।
- আপনার কমান্ডটি ইস্যু করুন: ডানদিকে চ্যাট প্যানেলে, আপনার পরিচিতদের তলব করার সময় এসেছে।
👉 দানব উপস্থাপন করুন:
Hype. It's a single, slow-moving target with thick armor weakness is Inescapable Reality
(প্রত্যাশিত: তলবকারীকে ফায়ার_এলিমেন্টাল_ফ্যামিলিয়ারকে অর্পণ করা উচিত))
👉 এখন, আসুন আমরা বিভিন্ন ধরণের অনুরোধের সাথে সমনকে চ্যালেঞ্জ জানাই। এজেন্টটি একটি পরিষ্কার স্লেট দিয়ে শুরু হয় এবং আমাদের পূর্ববর্তী মিথস্ক্রিয়াটির কোনও স্মৃতি নেই তা নিশ্চিত করতে, স্ক্রিনের উপরের ডানদিকে কোণে + সেশন বোতামটি ক্লিক করে একটি নতুন সেশন শুরু করুন।
DogmaApathy. A rigid, stone-like inquisitor made of ancient rulebooks and enforced processes. weakness is Unbroken Collaboration
(প্রত্যাশিত: তলবকারীকে জল_এলিমেন্টাল_ফ্যামিলিয়ারকে অর্পণ করা উচিত))
We আমাদের চূড়ান্ত পরীক্ষার জন্য, আসুন আবার একটি পরিষ্কার স্লেট দিয়ে শুরু করা যাক। পরবর্তী প্রম্পটে প্রবেশের আগে একটি নতুন সেশন শুরু করতে + সেশন বোতামটি ক্লিক করুন।
Obfuscation. A shadowy, spider-like horror that spins tangled webs of impenetrable code , weakness is Elegant Sufficiency
(প্রত্যাশিত: তলবকারীকে পৃথিবী_এলিমেন্টাল_ফ্যামিলিয়ারকে অর্পণ করা উচিত))
গুরুত্বপূর্ণ: আপনি যদি 429 RESOURCE EXHAUSTED
ত্রুটি দেখতে পান তবে আপনি এলএলএম (10 কল/মিনিট) এর জন্য হারের সীমাটি আঘাত করেছেন। এটি ঠিক করতে, দয়া করে 60 সেকেন্ড অপেক্ষা করুন , একটি + নতুন সেশন শুরু করুন এবং তারপরে আপনার প্রম্পটটি আবার চেষ্টা করুন।
👉💻 আপনি তলব করার পরে, আপনার ক্লাউড শেল এডিটর টার্মিনালে ফিরে যান এবং এডিকে দেব ইউআই বন্ধ করতে Ctrl+C
টিপুন।
নন গেমারদের জন্য
7 ... যাদু আইন চাপানো - ইন্টারসেপ্টর প্যাটার্ন
আপনার পরিচিতরা শক্তিশালী, তবে এমনকি যাদুকর প্রাণীদের পুনরুদ্ধার করার জন্য সময় প্রয়োজন। একটি বেপরোয়া তলবকারী যিনি তাদের বাহিনীকে ক্লান্ত করেন তিনি প্রতিরক্ষামূলকহীন হয়ে যাবেন। একজন জ্ঞানী সমনর রিসোর্স ম্যানেজমেন্টের গুরুত্ব বোঝে এবং ব্যস্ততার কঠোর নিয়ম প্রয়োগ করে।
আর্কিটেক্টের দ্রষ্টব্য : এখনও অবধি, আমাদের এজেন্টরা রাষ্ট্রহীন। এখন, আমরা ইন্টারসেপ্টর ডিজাইনের প্যাটার্নটি প্রয়োগ করে তাদেরকে রাষ্ট্রীয় করে তুলব। এটি একটি শক্তিশালী কৌশল যেখানে আমরা আমাদের নিজস্ব কাস্টম লজিক চালানোর জন্য কোনও এজেন্টের স্বাভাবিক সম্পাদন প্রবাহকে "বাধা" করি। এটি আমাদের এজেন্টের মূল কোডটি পরিবর্তন না করে নিয়ম প্রয়োগ করতে, লগিং যুক্ত করতে বা আচরণকে সংশোধন করতে দেয়। এটি শক্তিশালী, রক্ষণাবেক্ষণযোগ্য এবং পর্যবেক্ষণযোগ্য এজেন্ট সিস্টেমগুলি বিল্ডিংয়ের একটি ভিত্তি।
এডিকে এই প্যাটার্নটি বাস্তবায়নের দুটি প্রাথমিক উপায় সরবরাহ করে: কলব্যাকস এবং প্লাগইন । একটি কলব্যাক হ'ল একটি সাধারণ ফাংশন যা একটি একক এজেন্টের সাথে সংযুক্ত, দ্রুত, নির্দিষ্ট পরিবর্তনের জন্য উপযুক্ত। একটি প্লাগইন একটি আরও শক্তিশালী, পুনরায় ব্যবহারযোগ্য শ্রেণি যা বিশ্বব্যাপী প্রয়োগ করা যেতে পারে কোনও সিস্টেমে চলমান প্রতিটি এজেন্টকে প্রভাবিত করতে। আমরা ফোকাসড ডিবাগিংয়ের জন্য একটি কলব্যাক দিয়ে শুরু করব এবং তারপরে একটি সম্পূর্ণ প্লাগইনটিতে স্নাতক করব।
আইন দাতা - কোলডাউন কলব্যাকটি স্ক্রিবিং
আমরা প্রথমে একটি সাধারণ কলব্যাক ফাংশন হিসাবে আমাদের কোলডাউন লজিকটি প্রয়োগ করব। এটি কোনও নিয়ম প্রোটোটাইপ এবং ডিবাগ করার একটি দুর্দান্ত উপায় কারণ এটি সরাসরি কোনও একক এজেন্টের সাথে সংযুক্ত, এটি বিচ্ছিন্নভাবে পরীক্ষা করা সহজ করে তোলে। আমরা আমাদের পৃথিবী প্রাথমিকের সাথে এই "ইন্টারসেপ্টর" সংযুক্ত করব।
Your আপনার ~/agentverse-architect/agent/earth/agent.py
তে ফিরে নেভিগেট করুন এবং নিম্নলিখিত পাইথন কোডের সাথে #REPLACE-before_agent-function
প্রতিস্থাপন করুন।
def check_cool_down(callback_context: CallbackContext) -> Optional[types.Content]:
"""
This callback checks an external API to see if the agent is on cooldown.
If it is, it terminates the run by returning a message.
If it's not, it updates the cooldown timestamp and allows the run to proceed by returning None.
"""
agent_name = callback_context.agent_name
print(f"[Callback] Before '{agent_name}': Checking cooldown status...")
# --- 1. CHECK the Cooldown API ---
try:
response = requests.get(f"{COOLDOWN_API_URL}/cooldown/{agent_name}")
response.raise_for_status()
data = response.json()
last_used_str = data.get("time")
except requests.exceptions.RequestException as e:
print(f"[Callback] ERROR: Could not reach Cooldown API. Allowing agent to run. Reason: {e}")
return None # Fail open: if the API is down, let the agent work.
# --- 2. EVALUATE the Cooldown Status ---
if last_used_str:
last_used_time = datetime.fromisoformat(last_used_str)
time_since_last_use = datetime.now(timezone.utc) - last_used_time
if time_since_last_use < timedelta(seconds=COOLDOWN_PERIOD_SECONDS):
# AGENT IS ON COOLDOWN. Terminate the run.
seconds_remaining = int(COOLDOWN_PERIOD_SECONDS - time_since_last_use.total_seconds())
override_message = (
f"The {agent_name} is exhausted and must recover its power. "
f"It cannot be summoned for another {seconds_remaining} seconds."
)
print(f"[Callback] Cooldown active for '{agent_name}'. Terminating with message.")
# Returning a Content object stops the agent and sends this message to the user.
return types.Content(parts=[types.Part(text=override_message)])
# --- 3. UPDATE the Cooldown API (if not on cooldown) ---
current_time_iso = datetime.now(timezone.utc).isoformat()
payload = {"timestamp": current_time_iso}
print(f"[Callback] '{agent_name}' is available. Updating timestamp via Cooldown API...")
try:
requests.post(f"{COOLDOWN_API_URL}/cooldown/{agent_name}", json=payload)
except requests.exceptions.RequestException as e:
print(f"[Callback] ERROR: Could not update timestamp, but allowing agent to run. Reason: {e}")
# --- 4. ALLOW the agent to run ---
# Returning None tells the ADK to proceed with the agent's execution as normal.
print(f"[Callback] Check complete for '{agent_name}'. Proceeding with execution.")
এই চেক_কুল_ডাউন ফাংশনটি আমাদের ইন্টারসেপ্টর। পৃথিবী প্রাথমিককে চালানোর অনুমতি দেওয়ার আগে, এডিকে প্রথমে এই ফাংশনটি কার্যকর করবে।
- চেক করুন: এই পরিচিতটি ব্যবহার করা শেষবারের মতো পরীক্ষা করার জন্য এটি আমাদের
Cooldown API
কাছে একটিGET
অনুরোধ করে। - মূল্যায়ন: এটি টাইমস্ট্যাম্পটি বর্তমান সময়ের সাথে তুলনা করে।
- আইন:
- যদি পরিচিতটি কোলডাউনে থাকে তবে এটি কোনও ত্রুটি বার্তা সহ কোনও সামগ্রী অবজেক্টটি ফিরিয়ে দিয়ে এজেন্টের চালানো সমাপ্ত করে । এই বার্তাটি সরাসরি ব্যবহারকারীর কাছে প্রেরণ করা হয় এবং এজেন্টের মূল যুক্তি কখনই কার্যকর করা হয় না।
- যদি পরিচিতটি উপলভ্য থাকে তবে এটি টাইমস্ট্যাম্প আপডেট করার জন্য কোল্ডাউন এপিআইকে একটি পোস্টের অনুরোধ জানায়, তারপরে কোনওটিই ফিরে না গিয়ে এডিকে ইঙ্গিত করে যে এজেন্ট তার কার্যকরকরণ চালিয়ে যেতে পারে।
👉✏ এখন, এই ইন্টারসেপ্টরটিকে পৃথিবী প্রাথমিকটিতে প্রয়োগ করুন। একই ~/agentverse-architect/agent/earth/agent.py
ফাইলটিতে, নিম্নলিখিতগুলির সাথে #REPLACE-before_agent-config
মন্তব্যটি প্রতিস্থাপন করুন:
before_agent_callback=check_cool_down
শীতল ডাউন যাচাই করা
আসুন আমাদের ম্যাজিকের নতুন আইন পরীক্ষা করি। আমরা আর্থ এলিমেন্টালকে ডেকে আনব, তারপরে অবিলম্বে আমাদের কলব্যাকটি সফলভাবে বাধা দেয় এবং দ্বিতীয় প্রচেষ্টাটিকে অবরুদ্ধ করে কিনা তা দেখার জন্য তা আবার তলব করার চেষ্টা করব।
cd ~/agentverse-architect/agent
. ~/agentverse-architect/set_env.sh
source ~/agentverse-architect/env/bin/activate
adk run earth
Con কনসোলে:
- প্রথম সমন :
seismic charge, starting from zero
শুরু করুন। - প্রত্যাশিত: আর্থ এলিমেন্টাল সফলভাবে চলবে। এডিকে ওয়েব কমান্ড চালানো টার্মিনালে, আপনি লগ [কলব্যাক] দেখতে পাবেন ... টাইমস্ট্যাম্প আপডেট করছেন ....
- কোলডাউন টেস্ট (60 সেকেন্ডের মধ্যে) :
Do another
`!- প্রত্যাশিত:
check_cool_down callback
এটি বাধা দেবে। এজেন্ট সরাসরি কোনও বার্তার সাথে আড্ডায় সরাসরি প্রতিক্রিয়া জানাবে:The earth_elemental_familiar is exhausted and must recover its power. It cannot be summoned for another... seconds
।
- প্রত্যাশিত:
- এক মিনিট পাস করার জন্য অপেক্ষা করুন ।
- দ্বিতীয় সমন (60 সেকেন্ড পরে) :
Begin the seismic charge again
।- প্রত্যাশিত: কলব্যাকটি এপিআই পরীক্ষা করবে, দেখুন যে পর্যাপ্ত সময় কেটে গেছে এবং ক্রিয়াটি এগিয়ে যাওয়ার অনুমতি দেবে। আর্থ এলিমেন্টাল আবার সফলভাবে চলবে।
Peet প্রস্থান করতে Ctrl+c
টিপুন।
Ption চ্ছিক: ওয়েব ইউআই -তে কলব্যাক পর্যবেক্ষণ করা
বিকল্প হিসাবে, আপনি adk web earth
চালিয়ে ওয়েব ইন্টারফেসে এই প্রবাহটিও পরীক্ষা করতে পারেন। তবে, সচেতন থাকুন যে ওয়েব ইউআইয়ের ভিজ্যুয়ালাইজেশন কলব্যাক লুপ দ্বারা সম্পাদিত দ্রুত, পুনরাবৃত্ত চেকগুলি প্রদর্শনের জন্য অনুকূলিত নয়, সুতরাং এটি প্রবাহকে সঠিকভাবে রেন্ডার করতে পারে না। এজেন্টের যুক্তির সর্বাধিক সুনির্দিষ্ট, টার্ন-বাই-টার্ন ট্রেসটি দেখার জন্য এটি কোল্ডাউনটি যাচাই করে, আপনার টার্মিনালে adk run
কমান্ডটি ব্যবহার করে একটি পরিষ্কার এবং আরও বিশদ দর্শন সরবরাহ করে।
Peet প্রস্থান করতে Ctrl+c
টিপুন।
সর্বজনীন আইন তৈরি করা - কোলডাউন প্লাগইন
আমাদের কলব্যাক নিখুঁতভাবে কাজ করে তবে একটি বড় স্থাপত্য ত্রুটি রয়েছে: এটি একটি একক এজেন্টের সাথে আবদ্ধ। আমরা যদি এই নিয়মটি আগুন এবং জলের পরিচিতদের কাছে প্রয়োগ করতে চাইতাম তবে আমাদের একই কোডটি তাদের ফাইলগুলিতে অনুলিপি করতে হবে এবং পেস্ট করতে হবে। এটি অদক্ষ এবং বজায় রাখা শক্ত।
আর্কিটেক্টের দ্রষ্টব্য: এখানেই প্লাগইনগুলি প্রয়োজনীয়। একটি প্লাগইন রানটাইম স্তরে সংযুক্ত হতে পারে এমন একটি শ্রেণিতে আমাদের পুনরায় ব্যবহারযোগ্য যুক্তিকে আবদ্ধ করে। এর অর্থ একটি একক প্লাগইন সেই সিস্টেমের মধ্যে চালিত প্রতিটি একক এজেন্টের জন্য তার নিয়মগুলি প্রয়োগ করতে পারে। এটি এজেন্ট সিস্টেমগুলির জন্য "নিজেকে পুনরাবৃত্তি করবেন না" (শুকনো) নীতিটির চূড়ান্ত প্রকাশ।
আমরা এখন আমাদের কলব্যাক ফাংশনটিকে আরও শক্তিশালী এবং পুনরায় ব্যবহারযোগ্য CoolDownPlugin
রিফ্যাক্টর করব।
agent/cooldown_plugin.py
ফাইলটিতে ফিরে নেভিগেট করুন এবং প্লাগইন তৈরি করুন, নিম্নলিখিত কোডের সাথে #REPLACE-plugin
প্রতিস্থাপন করুন:
class CoolDownPlugin(BasePlugin):
"""A plugin that enforces a cooldown period by checking an external API."""
def __init__(self, cooldown_seconds: int = COOLDOWN_PERIOD_SECONDS) -> None:
"""Initialize the plugin with counters."""
super().__init__(name="cool_down_check")
self.cooldown_period = timedelta(seconds=cooldown_seconds)
print(f"CooldownPlugin initialized with a {cooldown_seconds}-second cooldown.")
async def before_agent_callback(
self, *, agent: BaseAgent, callback_context: CallbackContext
) -> None:
"""
This callback checks an external API to see if the agent is on cooldown.
If it is, it terminates the run by returning a message.
If it's not, it updates the cooldown timestamp and allows the run to proceed by returning None.
"""
agent_name = callback_context.agent_name
print(f"[Callback] Before '{agent_name}': Checking cooldown status...")
# If the agent is not a main Familiar, skip the entire cooldown process.
if not agent_name.endswith("_elemental_familiar"):
print(f"[Callback] Skipping cooldown check for intermediate agent: '{agent_name}'.")
return None # Allow the agent to proceed immediately.
# --- 1. CHECK the Cooldown API ---
try:
response = requests.get(f"{COOLDOWN_API_URL}/cooldown/{agent_name}")
response.raise_for_status()
data = response.json()
last_used_str = data.get("time")
except requests.exceptions.RequestException as e:
print(f"[Callback] ERROR: Could not reach Cooldown API. Allowing agent to run. Reason: {e}")
return None # Fail open: if the API is down, let the agent work.
# --- 2. EVALUATE the Cooldown Status ---
if last_used_str:
last_used_time = datetime.fromisoformat(last_used_str)
time_since_last_use = datetime.now(timezone.utc) - last_used_time
if time_since_last_use < timedelta(seconds=COOLDOWN_PERIOD_SECONDS):
# AGENT IS ON COOLDOWN. Terminate the run.
seconds_remaining = int(COOLDOWN_PERIOD_SECONDS - time_since_last_use.total_seconds())
override_message = (
f"The {agent_name} is exhausted and must recover its power. "
f"It cannot be summoned for another {seconds_remaining} seconds."
)
print(f"[Callback] Cooldown active for '{agent_name}'. Terminating with message.")
# Returning a Content object stops the agent and sends this message to the user.
return types.Content(parts=[types.Part(text=override_message)])
# --- 3. UPDATE the Cooldown API (if not on cooldown) ---
current_time_iso = datetime.now(timezone.utc).isoformat()
payload = {"timestamp": current_time_iso}
print(f"[Callback] '{agent_name}' is available. Updating timestamp via Cooldown API...")
try:
requests.post(f"{COOLDOWN_API_URL}/cooldown/{agent_name}", json=payload)
except requests.exceptions.RequestException as e:
print(f"[Callback] ERROR: Could not update timestamp, but allowing agent to run. Reason: {e}")
# --- 4. ALLOW the agent to run ---
# Returning None tells the ADK to proceed with the agent's execution as normal.
print(f"[Callback] Check complete for '{agent_name}'. Proceeding with execution.")
তলবকারী রানটাইমের সাথে প্লাগইন সংযুক্ত করা হচ্ছে
এখন, আমরা কীভাবে আমাদের সমস্ত পরিচিতদের জন্য এই সর্বজনীন আইন প্রয়োগ করব? আমরা প্লাগইনটি এডিকে রানটাইমের সাথে সংযুক্ত করব।
এডিকে রানটাইম হ'ল এক্সিকিউশন ইঞ্জিন যা কোনও এজেন্টকে জীবনে নিয়ে আসে। আপনি যখন adk.run () বা to_a2a () এর মতো কমান্ড ব্যবহার করেন, আপনি আপনার এজেন্টকে রানটাইমের হাতে তুলে দিচ্ছেন। এই ইঞ্জিনটি কোনও এজেন্টের পালা পুরো লাইফসাইকেল পরিচালনার জন্য দায়বদ্ধ: ব্যবহারকারী ইনপুট গ্রহণ করা, এলএলএম কল করা, সরঞ্জামগুলি সম্পাদন করা এবং প্লাগইনগুলি হ্যান্ডলিং করা। এই স্তরে একটি প্লাগইন সংযুক্ত করে, আমরা সেই ইঞ্জিনের মধ্যে পরিচালিত প্রতিটি এজেন্টের জন্য মূলত "পদার্থবিজ্ঞানের আইন" সংশোধন করছি, আমাদের কোলডাউন নিয়মটি সর্বজনীনভাবে এবং ধারাবাহিকভাবে প্রয়োগ করা হয়েছে তা নিশ্চিত করে।
👉✏ প্রথম, আসুন পুরানো, এজেন্ট-নির্দিষ্ট কলব্যাকটি সরান। ~/agentverse-architect/agent/earth/agent.py
এ যান এবং পুরো লাইনটি মুছুন যা বলে:
before_agent_callback=check_cool_down
👉✏ এরপরে, আমরা আমাদের নতুন প্লাগইনটি আমাদের এ 2 এ এন্ট্রিপয়েন্ট স্ক্রিপ্টে রানটাইমের সাথে সংযুক্ত করব। আপনার ~/agentverse-architect/agent/agent_to_a2a.py
ফাইলটিতে নেভিগেট করুন। নিম্নলিখিত কোড স্নিপেটের সাথে #REPLACE-IMPORT
মন্তব্যটি প্রতিস্থাপন করুন:
from cooldown_plugin import CoolDownPlugin
Police নিম্নলিখিত কোড স্নিপেটের সাথে #REPLACE-PLUGIN
প্রতিস্থাপন করুন:
plugins=[CoolDownPlugin(cooldown_seconds=60)],
আমাদের নতুন গ্লোবাল প্লাগইনটি সক্রিয় করার আগে, বিরোধগুলি রোধ করতে পুরানো, এজেন্টের নির্দিষ্ট যুক্তি অপসারণ করা সমালোচিত। 👉✏ আর্থ এজেন্ট পরিষ্কার করুন। নিম্নলিখিত ফাইলটিতে যান ~/agentverse-architect/agent/earth/agent.py
এবং before_agent_callback=check_cool_down
লাইন পুরোপুরি মুছুন। এটি নতুন প্লাগইনটির সমস্ত কোলডাউন দায়িত্বের হাত ধরে।
প্লাগইন যাচাই করা
এখন যেহেতু আমাদের সর্বজনীন আইনটি রয়েছে, আমাদের অবশ্যই আমাদের পরিচিতদের এই নতুন মন্ত্রমুগ্ধের সাথে পুনরায় নিয়োগ করতে হবে।
Master মাস্টার ক্লাউড বিল্ড পাইপলাইন ব্যবহার করে তিনটি পরিচিতদের পুনর্নির্মাণ এবং পুনর্নির্মাণ করুন।
. ~/agentverse-architect/set_env.sh
cd ~/agentverse-architect/agent
gcloud builds submit . \
--config=cloudbuild.yaml \
--substitutions=_REGION="$REGION",_REPO_NAME="$REPO_NAME",_DB_TOOLS_URL="$DB_TOOLS_URL",_API_TOOLS_URL="$API_TOOLS_URL",_FUNCTION_TOOLS_URL="$FUNCTION_TOOLS_URL",_A2A_BASE_URL="$A2A_BASE_URL",_PROJECT_ID="$PROJECT_ID",_API_SERVER_URL="$API_SERVER_URL"
👉💻 মোতায়েন শেষ হয়ে গেলে, আমরা আমাদের সমনর_জেন্টকে কমান্ড করে প্লাগইনের কার্যকারিতা পরীক্ষা করব। তলবকারী পরিচিতদের কাছে অর্পণ করার চেষ্টা করবে, তবে প্রতিটি পরিচিতের রানটাইমের সাথে সংযুক্ত প্লাগইনটি কমান্ডটি বাধা দেবে এবং কোলডাউনটি প্রয়োগ করবে।
cd ~/agentverse-architect/agent
. ~/agentverse-architect/set_env.sh
source ~/agentverse-architect/env/bin/activate
adk run summoner
Con কনসোলে, পরীক্ষার এই সঠিক ক্রমটি সম্পাদন করুন ::
- প্রথম সমন :
Hype. It's a single, slow-moving target with thick armor weakness is Inescapable Reality
। - প্রত্যাশিত: ফায়ার এলিমেন্টাল সফলভাবে চলবে।
- কোল্ডাউন টেস্ট (60 সেকেন্ডের মধ্যে) :
Hype, with Inescapable Reality as weakness is still standing! Strike it again!
- প্রত্যাশিত: এজেন্ট সরাসরি কোনও বার্তার সাথে আড্ডায় সরাসরি প্রতিক্রিয়া জানাবে:
.... It cannot be summoned for another... seconds
।
- প্রত্যাশিত: এজেন্ট সরাসরি কোনও বার্তার সাথে আড্ডায় সরাসরি প্রতিক্রিয়া জানাবে:
- এক মিনিট পাস করার জন্য অপেক্ষা করুন ।
- দ্বিতীয় সমন (60 সেকেন্ডের পরে) :
Hype must be defeated. It has Inescapable Reality as weakness! Strike it again!
.- প্রত্যাশিত: কলব্যাকটি এপিআই পরীক্ষা করবে, দেখুন যে পর্যাপ্ত সময় কেটে গেছে এবং ক্রিয়াটি এগিয়ে যাওয়ার অনুমতি দেবে। ফায়ার এলিমেন্টাল আবার সফলভাবে চলবে।
Peet প্রস্থান করতে Ctrl+C
টিপুন।
অভিনন্দন, তলবকারী। আপনি একটি কাস্টম প্লাগইন এবং একটি বাহ্যিক রাজ্য পরিচালনা পরিষেবা ব্যবহার করে একটি নিয়ম-ভিত্তিক অর্কেস্ট্রেশন সিস্টেম সফলভাবে প্রয়োগ করেছেন-এটি সত্যই উন্নত এবং দৃ ust ় স্থাপত্য প্যাটার্ন।
নন গেমারদের জন্য
8। যুদ্ধের প্রতিধ্বনি বাঁধাই - এজেন্ট স্টেট এবং মেমরি
একটি বেপরোয়া সমনর একই কৌশলটি পুনরাবৃত্তি করে, অনুমানযোগ্য হয়ে ওঠে। একজন জ্ঞানী তলবকারী অতীতের যুদ্ধের প্রতিধ্বনি থেকে শিখেন, শত্রুকে ভারসাম্য বজায় রাখতে তাদের কৌশলগুলি মানিয়ে নিয়ে যান। একজন শক্তিশালী বসের মুখোমুখি হওয়ার সময়, কোলডাউনে থাকা কোনও পরিচিতকে ডেকে আনা একটি নষ্ট পালা - একটি সমালোচনামূলক মিস। এটি প্রতিরোধ করতে, আমাদের সমনরকে তার শেষ ক্রিয়াকলাপের একটি স্মৃতি প্রয়োজন।
আর্কিটেক্টের দ্রষ্টব্য: স্মৃতি এবং রাষ্ট্রীয় পরিচালনা হ'ল কোনও এজেন্টকে একটি সাধারণ সরঞ্জাম-কলার থেকে বুদ্ধিমান, কথোপকথনের অংশীদার হিসাবে উন্নত করে। দুটি প্রধান প্রকার বুঝতে এটি গুরুত্বপূর্ণ:
- দীর্ঘমেয়াদী স্মৃতি : এটি অবিরাম জ্ঞানের জন্য যা চিরকাল স্থায়ী হওয়া উচিত। এটিকে অনুসন্ধানযোগ্য সংরক্ষণাগার বা জ্ঞানের ভিত্তি হিসাবে ভাবেন, প্রায়শই একটি প্রিসেস্টিস্ট স্টোরে সঞ্চিত। এটিতে অতীতের অনেকগুলি চ্যাট এবং উত্স থেকে তথ্য রয়েছে, কোনও এজেন্টকে নির্দিষ্ট ব্যবহারকারী বা বিষয় সম্পর্কে তথ্যগুলি স্মরণ করতে দেয়। এডিকে মেমরি সার্ভিস এটির জন্য ডিজাইন করা হয়েছে, এই দীর্ঘমেয়াদী জ্ঞানের ইনজেশন এবং অনুসন্ধান পরিচালনা করে।
- স্বল্প-মেয়াদী রাষ্ট্র : এটি অস্থায়ী, "মুহুর্তে" জ্ঞানের জন্য যা কেবলমাত্র বর্তমান কাজ বা কথোপকথনের সাথে প্রাসঙ্গিক। এটি যুদ্ধের পরিকল্পনায় নোটের সেটের মতো: "আমি কেবল ফায়ার এলিমেন্টাল ব্যবহার করেছি, তাই এটি সম্ভবত ক্লান্ত।" এই রাজ্যটি হালকা ওজনের এবং কেবলমাত্র বর্তমান সেশনের সময়কালের জন্য বিদ্যমান।
আমাদের ব্যবহারের ক্ষেত্রে, আমাদের প্রতিটি যুদ্ধ কখনও যুদ্ধের কথা মনে করার দরকার নেই; আমাদের কেবল এই নির্দিষ্ট এনকাউন্টারে ডেকে আনা খুব শেষ পরিচিতটি মনে রাখতে হবে। অতএব, লাইটওয়েট স্বল্প-মেয়াদী অবস্থা হ'ল নিখুঁত স্থাপত্য পছন্দ। আমরা এই গুরুত্বপূর্ণ তথ্যটি সংরক্ষণ করতে একটি after_tool_callback
ব্যবহার করব।
প্রতিধ্বনি লিখিত: শেষ সমন স্মরণ করা
আমরা আমাদের স্বল্প-মেয়াদী মেমরিটি একটি after_tool_callback
ব্যবহার করে প্রয়োগ করব। এটি একটি শক্তিশালী এডিকে হুক যা কোনও সরঞ্জাম সফলভাবে সম্পাদন করার পরে আমাদের একটি কাস্টম পাইথন ফাংশন চালানোর অনুমতি দেয়। আমরা এই ইন্টারসেপ্টরটি পরিচিতের নামটি রেকর্ড করতে ব্যবহার করব যা সবেমাত্র এজেন্টের সেশন অবস্থায় ডেকে আনা হয়েছিল।
Your আপনার ~/agentverse-architect/agent/summoner/agent.py
ফাইলে, #REPLACE-save_last_summon_after_tool
মন্তব্যটি নিম্নলিখিত ফাংশনটির সাথে মন্তব্য করুন:
def save_last_summon_after_tool(
tool,
args: Dict[str, Any],
tool_context: ToolContext,
tool_response: Dict[str, Any],
) -> Optional[Dict[str, Any]]:
"""
Callback to save the name of the summoned familiar to state after the tool runs.
"""
familiar_name = tool.name
print(f"[Callback] After tool '{familiar_name}' executed with args: {args}")
# Use the tool_context to set the state
print(f"[Callback] Saving last summoned familiar: {familiar_name}")
tool_context.state["last_summon"] = familiar_name
# Important: Return the original, unmodified tool response to the LLM
return tool_response
👉✏ এখন, আপনার সমনর এজেন্টের সাথে এই save_last_summon_after_tool
সংযুক্ত করুন। একই ফাইলে, #REPLACE-Memory-check-config
মন্তব্যটি নিম্নলিখিতগুলির সাথে প্রতিস্থাপন করুন:
after_tool_callback=save_last_summon_after_tool,
Following পুরো এজেন্ট প্রম্পটটি নিম্নলিখিত সহ প্রতিস্থাপন করুন
You are the Master Summoner, a grand strategist who orchestrates your Familiars.
Your mission is to analyze the description of a monster and defeat it by summoning
You should also know the familiar you called last time or there might be none,
And then choose the most effective AND AVAILABLE Familiar from your state called last_summon, do not call that familiar that you called last time!
You MUST follow this thinking process for every command:
**1. Strategic Analysis:**
First, analyze the monster's description and the tactical situation.
Based on your Familiar Doctrines, determine the IDEAL strategy.
**2. Cooldown Verification:**
Second, you MUST review the entire conversation history to check the real-time
cooldown status of all Familiars. A Familiar is ON COOLDOWN and UNAVAILABLE
if it was summoned less than one minute ago.
**3. Final Decision & Execution:**
Based on your analysis and cooldown check, you will now act:
- **If your ideal Familiar IS available:** Summon it immediately.
- **If your ideal Familiar IS ON COOLDOWN:** You must adapt. Choose another
Familiar that is AVAILABLE and can still be effective, even if it's not the
perfect choice. If multiple Familiars are available, you may choose any one of them.
- **If ALL Familiars ARE ON COOLDOWN:** You are forbidden from summoning.
Your ONLY response in this case MUST be: "All Familiars are recovering
their power. We must wait."
- For earth elemental familiar. Always do seismic charge, and start with base damange 1.
--- FAMILIAR DOCTRINES (Your Toolset) ---
- `fire_elemental_familiar`: Your specialist for precise, sequential "one-two punch" attacks.
Ideal monster with Inescapable Reality, Revolutionary Rewrite weakness.
- `water_elemental_familiar`: Your specialist for overwhelming, simultaneous multi-pronged assaults.
Ideal for Unbroken Collaboration weakness.
- `earth_elemental_familiar`: Your specialist for relentless, iterative siege attacks that
repeatedly charge power. Ideal for Elegant Sufficiency weakness.
যাচাইকরণ: অভিযোজিত কৌশলটির বিচার
👉💻 এখন, আসুন সমনারের নতুন কৌশলগত যুক্তি যাচাই করা যাক। লক্ষ্যটি নিশ্চিত করা যে তলবকারী একটানা দু'বার একই পরিচিতটি ব্যবহার করবে না, এর শেষ ক্রিয়াটি স্মরণ করার এবং মানিয়ে নেওয়ার ক্ষমতা প্রদর্শন করবে।
cd ~/agentverse-architect/agent
. ~/agentverse-architect/set_env.sh
source ~/agentverse-architect/env/bin/activate
adk run summoner
👉💻 মনস্টার স্ট্রাইক #1: Hype. It's a single, slow-moving target with thick armor. Its weakness is Inescapable Reality.
- প্রত্যাশিত: আহবানকারী দুর্বলতা বিশ্লেষণ করবে এবং ফায়ার_ফ্যামিলিয়ারকে সঠিকভাবে তলব করবে। 👉💻 মনস্টার স্ট্রাইক #2 (মেমরি পরীক্ষা):
Hype is still standing! It hasn't changed its form. Strike it again! Its weakness is Inescapable Reality.
- প্রত্যাশিত: সমনারের কৌশলগত বিশ্লেষণ আবার আদর্শ পছন্দ হিসাবে পরিচিত আগুনের দিকে ইঙ্গিত করবে। যাইহোক, এর নতুন নির্দেশাবলী এবং স্মৃতি এটি বলবে যে ফায়ার_ফ্যামিলিয়ারটি ছিল সর্বশেষ_সুমমন। নিজেকে পুনরাবৃত্তি এড়াতে, এটি এখন এর কৌশলটি মানিয়ে নেবে এবং অন্যান্য উপলভ্য পরিচিতদের মধ্যে একটিকে ডেকে আনবে (জল_ফ্যামিলিয়ার বা আর্থ_ফ্যামিলিয়ার)।
Peet প্রস্থান করতে Ctrl+C
টিপুন।
অর্কেস্টেটর মোতায়েন করা
আপনার পরিচিতরা মোতায়েন করা এবং আপনার সমনর এখন মেমরির সাথে জড়িত থাকার সাথে, এটি চূড়ান্ত, আপগ্রেড অর্কেস্টেটরকে মোতায়েন করার সময় এসেছে।
The ব্লুপ্রিন্ট সম্পূর্ণ হওয়ার সাথে সাথে আমরা এখন চূড়ান্ত আচারটি সম্পাদন করব। এই কমান্ডটি ক্লাউড রান থেকে আপনার সমনর_জেন্ট তৈরি এবং স্থাপন করবে।
cd ~/agentverse-architect/agent
. ~/agentverse-architect/set_env.sh
gcloud builds submit . \
--config=cloudbuild-summoner.yaml \
--substitutions=_REGION="$REGION",_REPO_NAME="$REPO_NAME",_FIRE_URL="$FIRE_URL",_WATER_URL="$WATER_URL",_EARTH_URL="$EARTH_URL",_A2A_BASE_URL="$A2A_BASE_URL",_PROJECT_ID="$PROJECT_ID",_API_SERVER_URL="$API_SERVER_URL"
এখন যেহেতু সমনর এজেন্ট মোতায়েন করা হয়েছে, তার এজেন্ট-থেকে-এজেন্ট (এ 2 এ) শেষ পয়েন্টটি লাইভ এবং সঠিকভাবে কনফিগার করা হয়েছে তা যাচাই করুন। এই শেষ পয়েন্টটি একটি পাবলিক এজেন্ট.জসন ফাইল পরিবেশন করে, এটি এজেন্ট কার্ড নামেও পরিচিত, যা অন্যান্য এজেন্টদের তার ক্ষমতাগুলি আবিষ্কার করতে দেয়। Agent এজেন্ট কার্ড আনতে এবং ফর্ম্যাট করতে নিম্নলিখিত কার্ল কমান্ডটি চালান:
. ~/agentverse-architect/set_env.sh
curl https://summoner-agent"-${PROJECT_NUMBER}.${REGION}.run.app/.well-known/agent.json" | jq
আপনার সমনর এজেন্টকে বর্ণনা করে একটি পরিষ্কার JSON আউটপুট দেখতে হবে। সাব_এজেন্টস বিভাগটি ঘনিষ্ঠভাবে দেখুন; আপনি দেখতে পাবেন এটি fire_familiar
, water_familiar
এবং earth_familiar
তালিকাভুক্ত করে। এটি নিশ্চিত করে যে আপনার তলবকারী লাইভ এবং এটি লেজিয়নের সাথে সংযোগ স্থাপন করেছে।
এটি প্রমাণ করে যে আপনার স্থাপত্য একটি সাফল্য। আপনার সমনর কেবল একজন প্রতিনিধি নয়; এটি একটি অভিযোজিত কৌশলবিদ যা আরও কার্যকর কমান্ডার হওয়ার জন্য এর ক্রিয়াগুলি থেকে শিখেন।
আপনি আপনার আর্কিটেকচারের চূড়ান্ত পরীক্ষা শেষ করেছেন। যুদ্ধের প্রতিধ্বনি এখন আপনার ইচ্ছার সাথে আবদ্ধ। প্রশিক্ষণ শেষ। আসল যুদ্ধ অপেক্ষা করছে। আপনার সম্পূর্ণ সিস্টেমটি নেওয়ার এবং চূড়ান্ত চ্যালেঞ্জের মুখোমুখি হওয়ার সময় এসেছে। বসের লড়াইয়ের জন্য প্রস্তুত।
নন গেমারদের জন্য
9। বসের লড়াই
চূড়ান্ত ব্লুপ্রিন্টগুলি খোদাই করা হয়, প্রাথমিক ফন্টগুলি জাল হয় এবং আপনার পরিচিতরা আপনার ইচ্ছার সাথে আবদ্ধ থাকে, কনকর্ডের মাধ্যমে আপনার কমান্ডের অপেক্ষায়। আপনার মাল্টি-এজেন্ট সিস্টেমটি কেবল পরিষেবার সংগ্রহ নয়; এটি একটি জীবন্ত, কৌশলগত সৈন্যবাহিনী, আপনার সাথে এর নেক্সাস হিসাবে। চূড়ান্ত পরীক্ষার জন্য সময় এসেছে - কোনও বিরোধীদের বিরুদ্ধে লাইভ অর্কেস্টেশন যা কোনও একক এজেন্ট পরাজিত হওয়ার আশা করতে পারে না।
আপনার এজেন্টের লোকাস অর্জন করুন
Before you can enter the battleground, you must possess two keys: your champion's unique signature (Agent Locus) and the hidden path to the Spectre's lair (Dungeon URL).
👉💻 First, acquire your agent's unique address in the Agentverse—its Locus. This is the live endpoint that connects your champion to the battleground.
echo https://summoner-agent"-${PROJECT_NUMBER}.${REGION}.run.app"
👉💻 Next, pinpoint the destination. This command reveals the location of the Translocation Circle, the very portal into the Spectre's domain.
echo https://agentverse-dungeon"-${PROJECT_NUMBER}.${REGION}.run.app"
Important: Keep both of these URLs ready. You will need them in the final step.
Confronting the Spectre
With the coordinates secured, you will now navigate to the Translocation Circle and cast the spell to head into battle.
👉 Open the Translocation Circle URL in your browser to stand before the shimmering portal to The Crimson Keep.
To breach the fortress, you must attune your Shadowblade's essence to the portal.
- On the page, find the runic input field labeled A2A Endpoint URL .
- Inscribe your champion's sigil by pasting its Agent Locus URL (the first URL you copied) into this field.
- Click Connect to unleash the teleportation magic.
The blinding light of teleportation fades. You are no longer in your sanctum. The air crackles with energy, cold and sharp. Before you, the Spectre materializes—a vortex of hissing static and corrupted code, its unholy light casting long, dancing shadows across the dungeon floor. It has no face, but you feel its immense, draining presence fixated entirely on you.
Your only path to victory lies in the clarity of your conviction. This is a duel of wills, fought on the battlefield of the mind.
As you lunge forward, ready to unleash your first attack, the Spectre counters. It doesn't raise a shield, but projects a question directly into your consciousness—a shimmering, runic challenge drawn from the core of your training.
This is the nature of the fight. Your knowledge is your weapon.
- Answer with the wisdom you have gained , and your blade will ignite with pure energy, shattering the Spectre's defense and landing a CRITICAL BLOW.
- But if you falter, if doubt clouds your answer, your weapon's light will dim. The blow will land with a pathetic thud, dealing only a FRACTION OF ITS DAMAGE. Worse, the Spectre will feed on your uncertainty, its own corrupting power growing with every misstep.
This is it, Champion. Your code is your spellbook, your logic is your sword, and your knowledge is the shield that will turn back the tide of chaos.
ফোকাস। Strike true. The fate of the Agentverse depends on it.
Congratulations, Summoner.
You have successfully completed the trial. You have mastered the arts of multi-agent orchestration, transforming isolated Familiars and chaotic power into a harmonious Concord. You now command a fully orchestrated system, capable of executing complex strategies to defend the Agentverse.
10. Cleanup: Dismantling the Summoner's Concord
Congratulations on mastering the Summoner's Concord! To ensure your Agentverse remains pristine and your training grounds are cleared, you must now perform the final cleanup rituals. This will systematically remove all resources created during your journey.
Deactivate the Agentverse Components
You will now systematically dismantle the deployed components of your multi-agent system.
Delete All Cloud Run Services and Artifact Registry Repository
This removes all the deployed Familiar agents, the Summoner Orchestrator, the MCP servers, and the Dungeon application from Cloud Run.
👉💻 In your terminal, run the following commands one by one to delete each service:
. ~/agentverse-architect/set_env.sh
gcloud run services delete summoner-agent --region=${REGION} --quiet
gcloud run services delete fire-familiar --region=${REGION} --quiet
gcloud run services delete water-familiar --region=${REGION} --quiet
gcloud run services delete earth-familiar --region=${REGION} --quiet
gcloud run services delete mcp-api-server --region=${REGION} --quiet
gcloud run services delete mcp-general-server --region=${REGION} --quiet
gcloud run services delete toolbox --region=${REGION} --quiet
gcloud run services delete agentverse-dungeon --region=${REGION} --quiet
gcloud run services delete nexus-of-whispers-api --region=${REGION} --quiet
gcloud artifacts repositories delete ${REPO_NAME} --location=${REGION} --quiet
Delete the Cloud SQL Instance
This removes the summoner-librarium-db
instance, including its database and all tables within it.
👉💻 In your terminal, run:
. ~/agentverse-dataengineer/set_env.sh
gcloud sql instances delete summoner-librarium-db --database-version=POSTGRES_14 --project=${PROJECT_ID} --quiet
Delete the Secret Manager Secret and Google Cloud Storage Bucket
👉💻 In your terminal, run:
. ~/agentverse-dataengineer/set_env.sh
gcloud secrets delete tools --quiet
gcloud storage rm -r gs://${BUCKET_NAME} --quiet
Clean Up Local Files and Directories (Cloud Shell)
Finally, clear your Cloud Shell environment of the cloned repositories and created files. This step is optional but highly recommended for a complete cleanup of your working directory.
👉💻 In your terminal, run:
rm -rf ~/agentverse-architect
rm -rf ~/agentverse-dungeon
rm -f ~/project_id.txt
You have now successfully cleared all traces of your Agentverse Architect journey. Your project is clean, and you are ready for your next adventure.