ক্লাউড রানে ADK এজেন্ট স্থাপন, পরিচালনা এবং পর্যবেক্ষণ করুন

1. ভূমিকা

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

এই টিউটোরিয়াল জুড়ে, আমরা ক্লাউড রানের সাথে ADK-এর নির্বিঘ্ন সংহতকরণ অন্বেষণ করব। আপনি শিখবেন কীভাবে আপনার এজেন্টকে মোতায়েন করতে হয় এবং তারপরে প্রোডাকশনের মতো সেটিংয়ে আপনার অ্যাপ্লিকেশন পরিচালনার ব্যবহারিক দিকগুলিতে ডুব দিতে হয়। আমরা কভার করব কীভাবে আপনার এজেন্টের নতুন সংস্করণগুলিকে নিরাপদে ট্র্যাফিক পরিচালনা করে রোল আউট করতে হয়, আপনাকে সম্পূর্ণ প্রকাশের আগে ব্যবহারকারীদের একটি উপসেটের সাথে নতুন বৈশিষ্ট্যগুলি পরীক্ষা করতে সক্ষম করে৷

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

কোডল্যাবের মাধ্যমে, আপনি নিম্নলিখিত হিসাবে একটি ধাপে ধাপে পদ্ধতি ব্যবহার করবেন:

  1. ADK এজেন্ট ডাটাবেস সেশন পরিষেবার জন্য ব্যবহার করার জন্য CloudSQL-এ একটি PostgreSQL ডাটাবেস তৈরি করুন
  2. একটি মৌলিক ADK এজেন্ট সেট আপ করুন
  3. ADK রানার দ্বারা ব্যবহার করা ডাটাবেস সেশন পরিষেবা সেটআপ করুন৷
  4. প্রাথমিকভাবে ক্লাউড চালানোর জন্য এজেন্টকে মোতায়েন করুন
  5. লোড টেস্টিং এবং ক্লাউড রান স্বয়ংক্রিয় স্কেলিং পরিদর্শন করুন
  6. নতুন এজেন্ট সংশোধন স্থাপন করুন এবং ধীরে ধীরে নতুন সংশোধনগুলিতে ট্রাফিক বাড়ান
  7. ক্লাউড ট্রেসিং সেটআপ করুন এবং এজেন্ট রান ট্রেসিং পরিদর্শন করুন

আর্কিটেকচার ওভারভিউ

5e38fc5607fb4543.jpeg

পূর্বশর্ত

  • পাইথনের সাথে কাজ করা আরামদায়ক
  • HTTP পরিষেবা ব্যবহার করে মৌলিক ফুল-স্ট্যাক আর্কিটেকচারের একটি বোঝাপড়া

আপনি কি শিখবেন

  • ADK কাঠামো এবং স্থানীয় ইউটিলিটি
  • ডেটাবেস সেশন পরিষেবার সাথে ADK এজেন্ট সেটআপ করুন৷
  • ডেটাবেস সেশন পরিষেবা দ্বারা ব্যবহার করার জন্য CloudSQL-এ PostgreSQL সেটআপ করুন৷
  • ডকারফাইল ব্যবহার করে ক্লাউড রানে অ্যাপ্লিকেশন স্থাপন করুন এবং প্রাথমিক পরিবেশের ভেরিয়েবল সেটআপ করুন
  • লোড টেস্টিং সহ ক্লাউড রান অটোস্কেলিং কনফিগার করুন এবং পরীক্ষা করুন
  • ক্লাউড রানের মাধ্যমে ধীরে ধীরে মুক্তির কৌশল
  • ক্লাউড ট্রেসে ADK এজেন্ট ট্রেসিং সেটআপ করুন

আপনি কি প্রয়োজন হবে

  • ক্রোম ওয়েব ব্রাউজার
  • একটি জিমেইল অ্যাকাউন্ট
  • বিলিং সক্ষম সহ একটি ক্লাউড প্রকল্প৷

এই কোডল্যাব, সমস্ত স্তরের বিকাশকারীদের জন্য ডিজাইন করা হয়েছে (শিশুদের সহ), এর নমুনা অ্যাপ্লিকেশনে পাইথন ব্যবহার করে। যাইহোক, উপস্থাপিত ধারণাগুলি বোঝার জন্য পাইথন জ্ঞানের প্রয়োজন নেই।

2. আপনি শুরু করার আগে

ক্লাউড কনসোলে সক্রিয় প্রকল্প নির্বাচন করুন

এই কোডল্যাব ধরে নেয় যে আপনার কাছে ইতিমধ্যেই বিলিং সক্ষম সহ একটি Google ক্লাউড প্রকল্প রয়েছে৷ যদি আপনার কাছে এখনও এটি না থাকে তবে আপনি শুরু করতে নীচের নির্দেশাবলী অনুসরণ করতে পারেন।

  1. Google ক্লাউড কনসোলে , প্রকল্প নির্বাচক পৃষ্ঠায়, একটি Google ক্লাউড প্রকল্প নির্বাচন করুন বা তৈরি করুন।
  2. নিশ্চিত করুন যে আপনার ক্লাউড প্রকল্পের জন্য বিলিং সক্ষম করা আছে৷ একটি প্রকল্পে বিলিং সক্ষম কিনা তা পরীক্ষা করতে শিখুন।

c714d4741fc97644.png

ক্লাউড এসকিউএল ডাটাবেস প্রস্তুত করুন

পরবর্তীতে ADK এজেন্ট দ্বারা ব্যবহার করার জন্য আমাদের একটি ডাটাবেসের প্রয়োজন হবে। ক্লাউড এসকিউএল-এ একটি PostgreSQL ডাটাবেস তৈরি করা যাক। প্রথমে, ক্লাউড কনসোলের উপরের অংশে অনুসন্ধান বারে নেভিগেট করুন এবং "ক্লাউড এসকিউএল" টাইপ করুন। তারপর ক্লাউড এসকিউএল পণ্যে ক্লিক করুন

1005cb65520eb3fc.png

এর পরে, আমাদের একটি নতুন ডাটাবেস ইনস্ট্যান্স তৈরি করতে হবে, ইনস্ট্যান্স তৈরি করুন ক্লিক করুন এবং PostgreSQL নির্বাচন করুন

7f2ad19bc246895d.png

ead4a98e7a8d8a39.png

আপনি যদি নতুন প্রজেক্ট দিয়ে শুরু করেন তাহলে আপনাকে কম্পিউট ইঞ্জিন এপিআই সক্ষম করতে হতে পারে, যদি এই প্রম্পটটি দেখা যায় তবে কেবল API সক্ষম করুন ক্লিক করুন

724cf67681535679.png

এরপরে, আমরা ডাটাবেসের স্পেসিফিকেশন বেছে নেব, স্যান্ডবক্স এডিশন প্রিসেট সহ এন্টারপ্রাইজ সংস্করণ বেছে নেব

24aa9defed93a3ef.png

এর পরে, এখানে ব্যবহারকারী পোস্টগ্রেসের জন্য উদাহরণের নাম এবং ডিফল্ট পাসওয়ার্ড সেট করুন। আপনি যে কোনো শংসাপত্রের সাথে এটি সেট আপ করতে পারেন, তবে এই টিউটোরিয়ালের জন্য আমরা এখানে উদাহরণের নাম এবং পাসওয়ার্ড উভয়ের জন্য " adk-deployment " দিয়ে যাব

573719a4582f541c.png

এই টিউটোরিয়ালের জন্য একক জোন সহ us-central1 ব্যবহার করা যাক, তারপরে আমরা আমাদের ডাটাবেস তৈরিকে চূড়ান্ত করতে পারি এবং Create Instance বোতামে ক্লিক করে সমস্ত প্রয়োজনীয় সেটআপ শেষ করতে পারি।

773e2ea11d97369d.png

এটি শেষ হওয়ার জন্য অপেক্ষা করার সময়, আমরা পরবর্তী বিভাগে চালিয়ে যেতে পারি

ক্লাউড শেল টার্মিনালে ক্লাউড প্রজেক্ট সেটআপ করুন

  1. আপনি Cloud Shell ব্যবহার করবেন, Google ক্লাউডে চলমান একটি কমান্ড-লাইন পরিবেশ। গুগল ক্লাউড কনসোলের শীর্ষে সক্রিয় ক্লাউড শেল ক্লিক করুন।

1829c3759227c19b.png

  1. একবার ক্লাউড শেলের সাথে সংযুক্ত হয়ে গেলে, আপনি পরীক্ষা করে দেখুন যে আপনি ইতিমধ্যেই প্রমাণীকৃত হয়েছেন এবং নিম্নলিখিত কমান্ডটি ব্যবহার করে প্রকল্পটি আপনার প্রকল্প আইডিতে সেট করা আছে:
gcloud auth list
  1. gcloud কমান্ড আপনার প্রকল্প সম্পর্কে জানে তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান।
gcloud config list project
  1. যদি আপনার প্রজেক্ট সেট করা না থাকে, তাহলে এটি সেট করতে নিম্নলিখিত কমান্ডটি ব্যবহার করুন:
gcloud config set project <YOUR_PROJECT_ID>

বিকল্পভাবে, আপনি কনসোলে PROJECT_ID আইডিও দেখতে পারেন

4032c45803813f30.jpeg

এটিতে ক্লিক করুন এবং আপনি আপনার সমস্ত প্রকল্প এবং প্রকল্প আইডি ডানদিকে পাবেন

8dc17eb4271de6b5.jpeg

  1. নীচে দেখানো কমান্ডের মাধ্যমে প্রয়োজনীয় API গুলি সক্ষম করুন৷ এটি কয়েক মিনিট সময় নিতে পারে, তাই ধৈর্য ধরুন।
gcloud services enable aiplatform.googleapis.com \
                       run.googleapis.com \
                       cloudbuild.googleapis.com \
                       cloudresourcemanager.googleapis.com \
                       sqladmin.googleapis.com

কমান্ডের সফল সঞ্চালন হলে, আপনি নীচের দেখানো একটি অনুরূপ একটি বার্তা দেখতে হবে:

Operation "operations/..." finished successfully.

gcloud কমান্ডের বিকল্প হল কনসোলের মাধ্যমে প্রতিটি পণ্য অনুসন্ধান করে বা এই লিঙ্কটি ব্যবহার করে।

যদি কোনো API মিস হয়, আপনি সর্বদা বাস্তবায়নের সময় এটি সক্রিয় করতে পারেন।

জিক্লাউড কমান্ড এবং ব্যবহারের জন্য ডকুমেন্টেশন পড়ুন।

ক্লাউড শেল এডিটর এবং সেটআপ অ্যাপ্লিকেশন ওয়ার্কিং ডিরেক্টরিতে যান

এখন, আমরা কিছু কোডিং স্টাফ করতে আমাদের কোড এডিটর সেট আপ করতে পারি। আমরা এর জন্য ক্লাউড শেল এডিটর ব্যবহার করব

  1. Open Editor বাটনে ক্লিক করুন, এটি একটি Cloud Shell Editor খুলবে, আমরা এখানে আমাদের কোড লিখতে পারি b16d56e4979ec951.png
  2. নিশ্চিত করুন যে ক্লাউড কোড প্রকল্পটি ক্লাউড শেল সম্পাদকের নীচের বাম কোণে (স্ট্যাটাস বার) সেট করা আছে, যেমনটি নীচের ছবিতে হাইলাইট করা হয়েছে এবং সক্রিয় Google ক্লাউড প্রকল্পে সেট করা আছে যেখানে আপনি বিলিং সক্ষম করেছেন৷ অনুরোধ করা হলে অনুমোদন করুন । আপনি যদি পূর্ববর্তী কমান্ড অনুসরণ করেন, তাহলে সাইন ইন বোতামের পরিবর্তে বোতামটি সরাসরি আপনার সক্রিয় প্রকল্পের দিকে নির্দেশ করতে পারে

f5003b9c38b43262.png

  1. এর পরে, আসুন Github থেকে এই কোডল্যাবের জন্য টেমপ্লেট ওয়ার্কিং ডিরেক্টরি ক্লোন করি, নিম্নলিখিত কমান্ডটি চালান। এটি deploy_and_manage_adk ডিরেক্টরিতে কার্যকরী ডিরেক্টরি তৈরি করবে
git clone https://github.com/alphinside/deploy-and-manage-adk-service.git deploy_and_manage_adk
  1. এর পরে, ক্লাউড শেল এডিটরের উপরের বিভাগে যান এবং ফাইল->ফোল্ডার খুলুন ক্লিক করুন, আপনার ব্যবহারকারীর নাম ডিরেক্টরি খুঁজুন এবং deploy_and_manage_adk ডিরেক্টরি খুঁজুন তারপর ওকে বোতামে ক্লিক করুন। এটি নির্বাচিত ডিরেক্টরিটিকে প্রধান কার্যকারী ডিরেক্টরি হিসাবে তৈরি করবে। এই উদাহরণে, ব্যবহারকারীর নাম হল alvinprayuda , তাই ডিরেক্টরির পথটি নীচে দেখানো হয়েছে

2c53696f81d805cc.png

a51615f22ba1690f.png

এখন, আপনার ক্লাউড শেল এডিটর দেখতে এইরকম হওয়া উচিত

228d4c1844790573.png

এর পরে, আমরা আমাদের পাইথন পরিবেশ সেটআপ কনফিগার করতে পারি

পরিবেশ সেটআপ

পাইথন ভার্চুয়াল এনভায়রনমেন্ট প্রস্তুত করুন

পরবর্তী ধাপ হচ্ছে উন্নয়ন পরিবেশ প্রস্তুত করা। আপনার বর্তমান সক্রিয় টার্মিনাল ওয়ার্কিং ডিরেক্টরিটি deploy_and_manage_adk ওয়ার্কিং ডিরেক্টরির মধ্যে থাকা উচিত। আমরা এই কোডল্যাবে পাইথন 3.12 ব্যবহার করব এবং পাইথন সংস্করণ এবং ভার্চুয়াল পরিবেশ তৈরি এবং পরিচালনার প্রয়োজনীয়তা সহজ করতে আমরা ইউভি পাইথন প্রকল্প ব্যবস্থাপক ব্যবহার করব

  1. আপনি যদি এখনও টার্মিনাল না খুলে থাকেন, তাহলে টার্মিনাল -> নিউ টার্মিনাল- এ ক্লিক করে এটি খুলুন, অথবা Ctrl + Shift + C ব্যবহার করুন, এটি ব্রাউজারের নীচের অংশে একটি টার্মিনাল উইন্ডো খুলবে।

f8457daf0bed059e.jpeg

  1. uv ডাউনলোড করুন এবং নিম্নলিখিত কমান্ড দিয়ে পাইথন 3.12 ইনস্টল করুন
curl -LsSf https://astral.sh/uv/0.6.16/install.sh | sh && \
source $HOME/.local/bin/env && \
uv python install 3.12
  1. এখন uv ব্যবহার করে ভার্চুয়াল পরিবেশ শুরু করা যাক, এই কমান্ডটি চালান
uv sync --frozen

এটি .venv ডিরেক্টরি তৈরি করবে এবং নির্ভরতাগুলি ইনস্টল করবে। pyproject.toml- এ দ্রুত স্নিক পিক আপনাকে এইভাবে দেখানো নির্ভরতা সম্পর্কে তথ্য দেবে

dependencies = [
    "google-adk==1.3.0",
    "locust==2.37.10",
    "pg8000==1.31.2",
    "python-dotenv==1.1.0",
]
  1. ভার্চুয়াল env পরীক্ষা করতে, নতুন ফাইল main.py তৈরি করুন এবং নিম্নলিখিত কোডটি অনুলিপি করুন
def main():
   print("Hello from deploy_and_manage_adk!")

if __name__ == "__main__":
   main()
  1. তারপরে, নিম্নলিখিত কমান্ডটি চালান
uv run main.py

আপনি নিচের মত আউটপুট পাবেন

Using CPython 3.12
Creating virtual environment at: .venv
Hello from deploy_and_manage_adk!

এটি দেখায় যে পাইথন প্রকল্পটি সঠিকভাবে সেট আপ করা হচ্ছে।

কনফিগারেশন ফাইল সেটআপ করুন

এখন আমাদের এই প্রকল্পের জন্য কনফিগারেশন ফাইল সেট আপ করতে হবে।

.env.example ফাইলটির নাম পরিবর্তন করে .env করুন এবং এটি নীচের মানটি দেখাবে। আপনার প্রজেক্ট-আইডিতে GOOGLE_CLOUD_PROJECT মান আপডেট করুন

# Google Cloud and Vertex AI configuration
GOOGLE_CLOUD_PROJECT=your-project-id
GOOGLE_CLOUD_LOCATION=global
GOOGLE_GENAI_USE_VERTEXAI=True

# Database connection for session service
# SESSION_SERVICE_URI=postgresql+pg8000://<username>:<password>@/<database>?unix_sock=/cloudsql/<instance_connection_name>/.s.PGSQL.5432

এই কোডল্যাবের জন্য, আমরা GOOGLE_CLOUD_LOCATION এবং GOOGLE_GENAI_USE_VERTEXAI. আপাতত, আমরা SESSION_SERVICE_URI মন্তব্য রেখে দেব।

এখন আমরা পরবর্তী ধাপে যেতে পারি, এজেন্ট লজিক পরিদর্শন করতে পারি এবং এটি স্থাপন করতে পারি

3. ADK এবং Gemini 2.5 দিয়ে ওয়েদার এজেন্ট তৈরি করুন

ADK ডিরেক্টরি কাঠামোর ভূমিকা

ADK কী অফার করে এবং কীভাবে এজেন্ট তৈরি করতে হয় তা অন্বেষণ করে শুরু করা যাক। ADK সম্পূর্ণ ডকুমেন্টেশন এই URL এ অ্যাক্সেস করা যেতে পারে। ADK তার CLI কমান্ড এক্সিকিউশনের মধ্যে আমাদের অনেক ইউটিলিটি অফার করে। তাদের মধ্যে কয়েকটি নিম্নরূপ:

  • এজেন্ট ডিরেক্টরি কাঠামো সেটআপ করুন
  • দ্রুত CLI ইনপুট আউটপুট মাধ্যমে মিথস্ক্রিয়া চেষ্টা করুন
  • স্থানীয় উন্নয়ন UI ওয়েব ইন্টারফেস দ্রুত সেটআপ করুন

এখন, আবহাওয়া_এজেন্ট ডিরেক্টরিতে এজেন্ট কাঠামো পরীক্ষা করা যাক

weather_agent/
├── __init__.py
├── agent.py

এবং আপনি init.py এবং agent.py পরিদর্শন করলে আপনি এই কোডটি দেখতে পাবেন

# __init__.py

from weather_agent.agent import root_agent

__all__ = ["root_agent"]
# agent.py

import os
from pathlib import Path

import google.auth
from dotenv import load_dotenv
from google.adk.agents import Agent
from google.cloud import logging as google_cloud_logging

# Load environment variables from .env file in root directory
root_dir = Path(__file__).parent.parent
dotenv_path = root_dir / ".env"
load_dotenv(dotenv_path=dotenv_path)

# Use default project from credentials if not in .env
_, project_id = google.auth.default()
os.environ.setdefault("GOOGLE_CLOUD_PROJECT", project_id)
os.environ.setdefault("GOOGLE_CLOUD_LOCATION", "global")
os.environ.setdefault("GOOGLE_GENAI_USE_VERTEXAI", "True")

logging_client = google_cloud_logging.Client()
logger = logging_client.logger("weather-agent")


def get_weather(city: str) -> dict:
    """Retrieves the current weather report for a specified city.

    Args:
        city (str): The name of the city (e.g., "New York", "London", "Tokyo").

    Returns:
        dict: A dictionary containing the weather information.
              Includes a 'status' key ('success' or 'error').
              If 'success', includes a 'report' key with weather details.
              If 'error', includes an 'error_message' key.
    """
    logger.log_text(
        f"--- Tool: get_weather called for city: {city} ---", severity="INFO"
    )  # Log tool execution
    city_normalized = city.lower().replace(" ", "")  # Basic normalization

    # Mock weather data
    mock_weather_db = {
        "newyork": {
            "status": "success",
            "report": "The weather in New York is sunny with a temperature of 25°C.",
        },
        "london": {
            "status": "success",
            "report": "It's cloudy in London with a temperature of 15°C.",
        },
        "tokyo": {
            "status": "success",
            "report": "Tokyo is experiencing light rain and a temperature of 18°C.",
        },
    }

    if city_normalized in mock_weather_db:
        return mock_weather_db[city_normalized]
    else:
        return {
            "status": "error",
            "error_message": f"Sorry, I don't have weather information for '{city}'.",
        }


root_agent = Agent(
    name="weather_agent",
    model="gemini-2.5-flash",
    instruction="You are a helpful AI assistant designed to provide accurate and useful information.",
    tools=[get_weather],
)

ADK কোড ব্যাখ্যা

এই স্ক্রিপ্টটিতে আমাদের এজেন্ট সূচনা রয়েছে যেখানে আমরা নিম্নলিখিত জিনিসগুলি শুরু করি:

  • gemini-2.5-flash ব্যবহার করার জন্য মডেল সেট করুন
  • আবহাওয়া এজেন্ট হিসাবে এজেন্ট কার্যকারিতা সমর্থন করার জন্য টুল get_weather প্রদান করুন

ওয়েব UI চালান

এখন, আমরা এজেন্টের সাথে যোগাযোগ করতে পারি এবং স্থানীয়ভাবে তার আচরণ পরিদর্শন করতে পারি। ADK আমাদের একটি ডেভেলপমেন্ট ওয়েব UI থাকতে দেয় যাতে ইন্টারঅ্যাকশনের সময় কী ঘটছে তা পরিদর্শন করা যায়। স্থানীয় উন্নয়ন UI সার্ভার শুরু করতে নিম্নলিখিত কমান্ডটি চালান

uv run adk web --port 8080

এটি নিম্নলিখিত উদাহরণের মতো আউটপুট তৈরি করবে, এর অর্থ হল আমরা ইতিমধ্যে ওয়েব ইন্টারফেস অ্যাক্সেস করতে পারি

INFO:     Started server process [xxxx]
INFO:     Waiting for application startup.

+-----------------------------------------------------------------------------+
| ADK Web Server started                                                      |
|                                                                             |
| For local testing, access at http://localhost:8080.                         |
+-----------------------------------------------------------------------------+

INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:8080 (Press CTRL+C to quit)

এখন, এটি পরীক্ষা করতে, আপনার ক্লাউড শেল এডিটরের উপরের অংশে ওয়েব প্রিভিউ বোতামে ক্লিক করুন এবং পোর্ট 8080-এ প্রিভিউ নির্বাচন করুন

e7c9f56c2463164.png

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

d95b1e057315fee2.png

এখন, এটির সাথে যোগাযোগ করার চেষ্টা করুন। বাম বারে, আমরা প্রতিটি ইনপুটের জন্য ট্রেস পরিদর্শন করতে পারি, তাই চূড়ান্ত উত্তর তৈরি করার আগে এজেন্টের প্রতিটি পদক্ষেপের জন্য কত সময় লাগে তা আমরা বুঝতে পারি।

39c0a06ace937683.png

এটি একটি পর্যবেক্ষণযোগ্য বৈশিষ্ট্য যা ADK-তে তৈরি করা হয়েছে, বর্তমানে আমরা এটি স্থানীয়ভাবে পরিদর্শন করি। পরবর্তীতে আমরা দেখব কিভাবে এটি ক্লাউড ট্রেসিং-এ একত্রিত হয়েছে তাই আমাদের কাছে সমস্ত অনুরোধের কেন্দ্রীভূত ট্রেস রয়েছে

4. ব্যাকএন্ড সার্ভার স্ক্রিপ্ট

এজেন্টকে একটি পরিষেবা হিসাবে অ্যাক্সেসযোগ্য করার জন্য, আমরা এজেন্টকে একটি FastAPI অ্যাপের মধ্যে আবৃত করব। আমরা এখানে এজেন্টকে সহায়তা করার জন্য প্রয়োজনীয় পরিষেবাগুলি কনফিগার করতে পারি যেমন সেশন , মেমরি বা আর্টিফ্যাক্ট পরিষেবা এখানে উত্পাদন উদ্দেশ্যে প্রস্তুত করা। এখানে server.py এর কোডটি ব্যবহার করা হবে

import os

from dotenv import load_dotenv
from fastapi import FastAPI
from google.adk.cli.fast_api import get_fast_api_app
from pydantic import BaseModel
from typing import Literal
from google.cloud import logging as google_cloud_logging
from tracing import CloudTraceLoggingSpanExporter
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider, export


# Load environment variables from .env file
load_dotenv()

logging_client = google_cloud_logging.Client()
logger = logging_client.logger(__name__)

AGENT_DIR = os.path.dirname(os.path.abspath(__file__))

# Get session service URI from environment variables
session_uri = os.getenv("SESSION_SERVICE_URI", None)

# Prepare arguments for get_fast_api_app
app_args = {"agents_dir": AGENT_DIR, "web": True}

# Only include session_service_uri if it's provided
if session_uri:
    app_args["session_service_uri"] = session_uri
else:
    logger.log_text(
        "SESSION_SERVICE_URI not provided. Using in-memory session service instead. "
        "All sessions will be lost when the server restarts.",
        severity="WARNING",
    )

provider = TracerProvider()
processor = export.BatchSpanProcessor(CloudTraceLoggingSpanExporter())
provider.add_span_processor(processor)
trace.set_tracer_provider(provider)

# Create FastAPI app with appropriate arguments
app: FastAPI = get_fast_api_app(**app_args)

app.title = "weather-agent"
app.description = "API for interacting with the Agent weather-agent"


class Feedback(BaseModel):
    """Represents feedback for a conversation."""

    score: int | float
    text: str | None = ""
    invocation_id: str
    log_type: Literal["feedback"] = "feedback"
    service_name: Literal["weather-agent"] = "weather-agent"
    user_id: str = ""


@app.post("/feedback")
def collect_feedback(feedback: Feedback) -> dict[str, str]:
    """Collect and log feedback.

    Args:
        feedback: The feedback data to log

    Returns:
        Success message
    """
    logger.log_struct(feedback.model_dump(), severity="INFO")
    return {"status": "success"}


# Main execution
if __name__ == "__main__":
    import uvicorn

    uvicorn.run(app, host="0.0.0.0", port=8080)

সার্ভার কোড ব্যাখ্যা

server.py স্ক্রিপ্টে এইগুলি সংজ্ঞায়িত করা হয়েছে:

  1. get_fast_api_app পদ্ধতি ব্যবহার করে আমাদের এজেন্টকে একটি FastAPI অ্যাপে রূপান্তর করুন। এইভাবে আমরা একই রুট সংজ্ঞার উত্তরাধিকারী হব যা ওয়েব ডেভেলপমেন্ট UI এর জন্য ব্যবহৃত হয়।
  2. get_fast_api_app পদ্ধতিতে কীওয়ার্ড আর্গুমেন্ট যোগ করে প্রয়োজনীয় সেশন, মেমরি বা আর্টিফ্যাক্ট পরিষেবা কনফিগার করুন। এই টিউটোরিয়ালে, যদি আমরা SESSION_SERVICE_URI env var কনফিগার করি, তাহলে সেশন পরিষেবাটি ব্যবহার করবে অন্যথায় এটি ইন-মেমরি সেশন ব্যবহার করবে
  3. আমরা অন্যান্য ব্যাকএন্ড ব্যবসায়িক যুক্তি সমর্থন করার জন্য কাস্টম রুট যোগ করতে পারি, স্ক্রিপ্টে আমরা প্রতিক্রিয়া কার্যকারিতা রুট উদাহরণ যোগ করি
  4. Google ক্লাউড ট্রেসে ট্রেস পাঠাতে, ক্লাউড ট্রেসিং সক্ষম করুন৷

5. ক্লাউড রানে স্থাপন করা হচ্ছে

এখন, ক্লাউড রানে এই এজেন্ট পরিষেবাটি স্থাপন করা যাক। এই ডেমোর খাতিরে, এই পরিষেবাটিকে একটি পাবলিক সার্ভিস হিসাবে প্রকাশ করা হবে যা অন্যরা অ্যাক্সেস করতে পারে। যাইহোক, মনে রাখবেন যে এটি নিরাপদ নয় বলে এটি সর্বোত্তম অনুশীলন নয়

5e38fc5607fb4543.jpeg

এই কোডল্যাবে, আমরা আমাদের এজেন্টকে ক্লাউড রানে স্থাপন করতে ডকারফাইল ব্যবহার করব। নীচে ডকারফাইল সামগ্রী যা ব্যবহার করা হবে

FROM python:3.12-slim

RUN pip install --no-cache-dir uv==0.7.13

WORKDIR /app

COPY . .

RUN uv sync --frozen

EXPOSE 8080

CMD ["uv", "run", "uvicorn", "server:app", "--host", "0.0.0.0", "--port", "8080"]

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

gcloud config set project [PROJECT_ID]

তারপরে, ক্লাউড রানে এটি স্থাপন করতে নিম্নলিখিত কমান্ডটি চালান।

gcloud run deploy weather-agent \
                  --source . \
                  --port 8080 \
                  --project {YOUR_PROJECT_ID} \
                  --allow-unauthenticated \
                  --add-cloudsql-instances {YOUR_DB_CONNECTION_NAME} \
                  --update-env-vars SESSION_SERVICE_URI="postgresql+pg8000://postgres:{YOUR_DEFAULT_USER_PASS}@postgres/?unix_sock=/cloudsql/{YOUR_DB_CONNECTION_NAME}/.s.PGSQL.5432",GOOGLE_CLOUD_PROJECT={YOUR_PROJECT_ID} \
                  --region us-central1

{YOUR_DB_CONNECTION_NAME} মান পেতে, আপনি আবার Cloud SQL-এ যেতে পারেন এবং আপনার তৈরি করা উদাহরণে ক্লিক করতে পারেন। ইনস্ট্যান্স পৃষ্ঠার ভিতরে, " এই ইনস্ট্যান্সের সাথে সংযোগ করুন " বিভাগে স্ক্রোল করুন এবং আপনি {YOUR_DB_CONNECTION_NAME} মান প্রতিস্থাপন করতে সংযোগের নামটি অনুলিপি করতে পারেন৷ উদাহরণস্বরূপ নীচে দেখানো চিত্র দেখুন

5d7d6c6f17e559c1.png

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

একবার স্থাপনা সম্পূর্ণ হলে, আপনি নীচের অনুরূপ একটি লিঙ্ক পেতে হবে:

https://weather-agent-*******.us-central1.run.app

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

6. লোড টেস্টিং সহ ক্লাউড রান অটো স্কেলিং পরিদর্শন করা

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

gcloud run deploy weather-agent \
                  --source . \
                  --port 8080 \
                  --project {YOUR_PROJECT_ID} \
                  --allow-unauthenticated \
                  --region us-central1 \
                  --concurrency 10

এর পরে আসুন load_test.py ফাইলটি পরিদর্শন করি। পঙ্গপাল কাঠামো ব্যবহার করে লোড টেস্টিং করতে আমরা এই স্ক্রিপ্টটি ব্যবহার করি। এই স্ক্রিপ্ট নিম্নলিখিত জিনিসগুলি করবে:

  1. এলোমেলো user_id এবং session_id
  2. user_id এর জন্য session_id তৈরি করুন
  3. তৈরি করা user_id এবং session_id সহ এন্ডপয়েন্ট "/run_sse" টিপুন

আপনি যদি এটি মিস করেন তবে আমাদের নিয়োজিত পরিষেবা URL জানতে হবে। ক্লাউড রান কনসোলে যান এবং আপনার আবহাওয়া-এজেন্ট পরিষেবাতে ক্লিক করুন

f5cc953cc422de6d.png

তারপর, আপনার আবহাওয়া-এজেন্ট পরিষেবা খুঁজুন এবং এটি ক্লিক করুন

ddd0df8544aa2bfb.png

পরিষেবা URLটি অঞ্চলের তথ্যের পাশে প্রদর্শিত হবে৷ যেমন

41b1276616379ee8.png

তারপর লোড পরীক্ষা করতে নিম্নলিখিত কমান্ডটি চালান

uv run locust -f load_test.py \
              -H {YOUR_SERVICE_URL} \
              -u 60 \
              -r 5 \
              -t 120 \
              --headless

এটি চালালে আপনি এই ধরনের মেট্রিক্স দেখতে পাবেন। (এই উদাহরণে সমস্ত সাফল্যের প্রয়োজন)

Type     Name                                  # reqs      # fails |    Avg     Min     Max    Med |   req/s  failures/s
--------|------------------------------------|-------|-------------|-------|-------|-------|-------|--------|-----------
POST     /run_sse end                             813     0(0.00%) |   5817    2217   26421   5000 |    6.79        0.00
POST     /run_sse message                         813     0(0.00%) |   2678    1107   17195   2200 |    6.79        0.00
--------|------------------------------------|-------|-------------|-------|-------|-------|-------|--------|-----------
         Aggregated                              1626     0(0.00%) |   4247    1107   26421   3500 |   13.59        0.00  

তারপর দেখা যাক ক্লাউড রানে কি ঘটেছে, আবার আপনার নিয়োজিত পরিষেবাতে যান এবং ড্যাশবোর্ডটি দেখুন। এটি দেখাবে কিভাবে ক্লাউড রান স্বয়ংক্রিয়ভাবে ইনকামিং অনুরোধগুলি পরিচালনা করার জন্য উদাহরণ স্কেল করে। যেহেতু আমরা প্রতি দৃষ্টান্তে সর্বোচ্চ 10 এ সীমাবদ্ধ করছি, তাই ক্লাউড রান ইনস্ট্যান্স স্বয়ংক্রিয়ভাবে এই শর্তটি পূরণ করতে পাত্রের সংখ্যা সামঞ্জস্য করার চেষ্টা করবে।

1ad41143eb9d95df.png

7. ধীরে ধীরে নতুন রিভিশন প্রকাশ করুন

এখন, এর নিম্নলিখিত দৃশ্যকল্প আছে. আমরা নিম্নলিখিত এজেন্টের প্রম্পট আপডেট করতে চাই:

# agent.py

...

root_agent = Agent(
    name="weather_agent",
    model="gemini-2.5-flash-preview-05-20",
    instruction="You are a helpful AI assistant designed to provide accurate and useful information. You only answer inquiries about the weather. Refuse all other user query",
    tools=[get_weather],
)

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

gcloud run deploy weather-agent \
                  --source . \
                  --port 8080 \
                  --project {YOUR_PROJECT_ID} \
                  --allow-unauthenticated \
                  --region us-central1 \
                  --no-traffic

শেষ করার পরে, আপনি পরিবেশিত ট্র্যাফিকের সংখ্যার পার্থক্য সহ পূর্ববর্তী স্থাপনা প্রক্রিয়ার মতো একটি অনুরূপ লগ পাবেন। এটি 0 শতাংশ ট্রাফিক পরিবেশিত দেখাবে।

এর পরে, আসুন ক্লাউড রান পণ্যের পৃষ্ঠায় যান এবং আপনার স্থাপন করা উদাহরণটি সন্ধান করি। সার্চ বারে ক্লাউড রান টাইপ করুন এবং ক্লাউড রান পণ্যটিতে ক্লিক করুন

f5cc953cc422de6d.png

তারপর, আপনার আবহাওয়া-এজেন্ট পরিষেবা খুঁজুন এবং এটি ক্লিক করুন

ddd0df8544aa2bfb.png

পুনর্বিবেচনা ট্যাবে যান এবং আপনি সেখানে স্থাপন করা সংশোধনের তালিকা দেখতে পাবেন

8519c5a59bc7efa6.png

আপনি দেখতে পাবেন যে নতুন স্থাপন করা সংশোধনগুলি 0% পরিবেশন করছে, এখান থেকে আপনি কাবাব বোতামে ক্লিক করতে পারেন (⋮) এবং ট্র্যাফিক পরিচালনা নির্বাচন করতে পারেন

d4d224e20813c303.png

সদ্য পপ আপ উইন্ডোতে, আপনি ট্রাফিকের শতকরা শতাংশ সম্পাদনা করতে পারেন কোন সংশোধনীতে যাচ্ছে।

6df497c3d5847f14.png

কিছুক্ষণ অপেক্ষা করার পর, শতকরা কনফিগারেশনের উপর ভিত্তি করে ট্রাফিক আনুপাতিকভাবে নির্দেশিত হবে। এইভাবে, নতুন রিলিজের সাথে কিছু ঘটলে আমরা সহজেই পূর্ববর্তী সংশোধনগুলিতে ফিরে যেতে পারি

8. ADK ট্রেসিং

ADK দিয়ে তৈরি এজেন্টরা ইতিমধ্যেই এটিতে খোলা টেলিমেট্রি এম্বেডিং ব্যবহার করে ট্রেসিং সমর্থন করে। আমাদের কাছে ক্লাউড ট্রেস আছে সেইসব ট্রেসিং ক্যাপচার করতে এবং এটিকে কল্পনা করতে। আসুন আমরা আমাদের পূর্বে স্থাপন করা পরিষেবাতে কীভাবে এটি সক্ষম করি তার উপর server.py পরিদর্শন করি

# server.py

from tracing import CloudTraceLoggingSpanExporter
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider, export

...

provider = TracerProvider()
processor = export.BatchSpanProcessor(CloudTraceLoggingSpanExporter())
provider.add_span_processor(processor)
trace.set_tracer_provider(provider)

...

এখানে, আমরা ট্রেসার এবং রপ্তানিকারক শুরু করি। রপ্তানিকারকের বিশদ বিবরণ tracing.py এ পরিদর্শন করা যেতে পারে। এখানে আমরা একটি কাস্টম রপ্তানিকারক তৈরি করি কারণ ট্রেস ডেটার একটি সীমা রয়েছে যা ক্লাউড ট্রেসে রপ্তানি করা যেতে পারে। এই ট্রেসিং ক্ষমতার জন্য আমরা https://googlecloudplatform.github.io/agent-starter-pack/guide/observability.html থেকে একটি বাস্তবায়ন ব্যবহার করছি।

আপনার পরিষেবা ওয়েব ডেভ ইউআই অ্যাক্সেস করার চেষ্টা করুন এবং এজেন্টের সাথে চ্যাট করুন। এর পরে ক্লাউড কনসোল অনুসন্ধান বারে যান এবং "ট্রেস এক্সপ্লোরার" টাইপ করুন এবং সেখানে ট্রেস এক্সপ্লোরার পণ্যটি চয়ন করুন।

4353c0f8982361ab.png

ট্রেস এক্সপ্লোরার পৃষ্ঠায়, আপনি এজেন্ট ট্রেস জমা দেওয়া হয়েছে আমাদের কথোপকথন দেখতে পাবেন। আপনি স্প্যান নাম বিভাগ থেকে দেখতে পারেন এবং আমাদের এজেন্টের জন্য নির্দিষ্ট স্প্যানটি ফিল্টার করতে পারেন (এটির নাম agent_run [weather_agent] ) সেখানে

c4336d117a3d2f6a.png

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

76a56dff77979037.png

1a3ce0a803d6061a.png

প্রতিটি বিভাগে, আপনি নীচের মতো বৈশিষ্ট্যগুলিতে বিশদ পরিদর্শন করতে পারেন

2c87b6d67b0164a8.png

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

9. চ্যালেঞ্জ

মাল্টি-এজেন্ট বা এজেন্টিক ওয়ার্কফ্লোগুলি লোডের মধ্যে কীভাবে কাজ করে এবং ট্রেস দেখতে কেমন তা দেখতে চেষ্টা করুন

10. পরিষ্কার করুন

এই কোডল্যাবে ব্যবহৃত সংস্থানগুলির জন্য আপনার Google ক্লাউড অ্যাকাউন্টে চার্জ এড়াতে, এই পদক্ষেপগুলি অনুসরণ করুন:

  1. Google ক্লাউড কনসোলে, সম্পদ পরিচালনা পৃষ্ঠাতে যান।
  2. প্রকল্প তালিকায়, আপনি যে প্রকল্পটি মুছতে চান সেটি নির্বাচন করুন এবং তারপরে মুছুন ক্লিক করুন।
  3. ডায়ালগে, প্রজেক্ট আইডি টাইপ করুন এবং তারপরে প্রোজেক্ট মুছে ফেলতে শাট ডাউন ক্লিক করুন।
  4. বিকল্পভাবে আপনি কনসোলে ক্লাউড রানে যেতে পারেন, আপনি যে পরিষেবাটি স্থাপন করেছেন তা নির্বাচন করুন এবং মুছুন।