ক্লাউড রানে একটি ADK এজেন্ট তৈরি এবং স্থাপন করুন

১. ভূমিকা

এই ল্যাবটি একটি ক্লায়েন্ট এজেন্ট সার্ভিসের বাস্তবায়ন এবং স্থাপনের উপর আলোকপাত করে। আপনি এজেন্ট ডেভেলপমেন্ট কিট (ADK) ব্যবহার করে এমন একটি এআই এজেন্ট তৈরি করবেন যা বিভিন্ন টুল ব্যবহার করে।

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

বাম থেকে ডানে, একটি সিংহ, দুটি পেঙ্গুইন, সাফারি টুপি পরা একজন ব্যক্তি, একটি হাতি এবং একটি ভালুক দর্শকের দিকে পিঠ করে দাঁড়িয়ে আছে এবং সাদা মেঘে ঢাকা নীল আকাশের দিকে উৎক্ষেপিত একটি বিশাল লাল ও সাদা রকেটের দিকে তাকিয়ে আছে। দূরে আরও দুটি ছোট রকেটকেও উৎক্ষেপিত হতে দেখা যাচ্ছে। দৃশ্যটি একটি কাঠের বেড়া এবং পাথুরে খাড়া পাহাড়যুক্ত চিড়িয়াখানার ঘেরা জায়গার মধ্যে চিত্রিত।

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

পূর্বশর্ত

  • বিলিং সক্ষম একটি গুগল ক্লাউড প্রজেক্ট।

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

  • ADK ডেপ্লয়মেন্টের জন্য একটি পাইথন প্রজেক্ট কীভাবে গঠন করতে হয়।
  • google-adk ব্যবহার করে কীভাবে একটি টুল-ব্যবহারকারী এজেন্ট বাস্তবায়ন করা যায়।
  • ক্লাউড রান- এ কীভাবে একটি পাইথন অ্যাপ্লিকেশনকে সার্ভারলেস কন্টেইনার হিসেবে ডেপ্লয় করবেন।
  • IAM রোল ব্যবহার করে কীভাবে সুরক্ষিত, সার্ভিস-টু-সার্ভিস অথেনটিকেশন কনফিগার করতে হয়।
  • ভবিষ্যতে খরচ এড়াতে ক্লাউড রিসোর্স কীভাবে ডিলিট করবেন।

আপনার যা যা লাগবে

  • একটি গুগল ক্লাউড অ্যাকাউন্ট এবং গুগল ক্লাউড প্রজেক্ট
  • ক্রোমের মতো একটি ওয়েব ব্রাউজার

২. ক্লাউড রান-এ কেন ডেপ্লয় করবেন?

ADK এজেন্ট হোস্ট করার জন্য ক্লাউড রান একটি চমৎকার পছন্দ, কারণ এটি একটি সার্ভারবিহীন প্ল্যাটফর্ম। এর মানে হলো, আপনি অন্তর্নিহিত পরিকাঠামো পরিচালনার পরিবর্তে আপনার কোডের উপর মনোযোগ দিতে পারবেন। আমরা আপনার জন্য পরিচালন সংক্রান্ত কাজগুলো সামলে নিই।

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

মূল বৈশিষ্ট্য

যেকোনো স্থানে কন্টেইনার চালায়:

  • আপনি এমন একটি কন্টেইনার (ডকার ইমেজ) নিয়ে আসেন যার ভেতরে আপনার অ্যাপটি রয়েছে।
  • ক্লাউড রান এটি গুগলের পরিকাঠামোতে পরিচালনা করে।
  • ওএস প্যাচিং, ভিএম সেটআপ বা স্কেলিং নিয়ে কোনো ঝামেলা নেই।

স্বয়ংক্রিয় স্কেলিং:

  • যদি ০ জন আপনার অ্যাপ ব্যবহার করে → ০টি ইনস্ট্যান্স চলবে (এটি ইনস্ট্যান্সের সংখ্যা শূন্যে নামিয়ে আনে, যা সাশ্রয়ী)।
  • যদি ১০০০টি অনুরোধ আসে → তবে এটি প্রয়োজনমতো অনুলিপি তৈরি করে নেয়।

ডিফল্টরূপে রাষ্ট্রহীন:

  • প্রতিটি অনুরোধ একটি ভিন্ন ইনস্ট্যান্সে যেতে পারে।
  • স্টেট সংরক্ষণ করার প্রয়োজন হলে ক্লাউড এসকিউএল, ফায়ারস্টোর বা মেমোরিস্টোরের মতো বাহ্যিক পরিষেবা ব্যবহার করুন।

যেকোনো ভাষা বা ফ্রেমওয়ার্ক সমর্থন করে:

  • যতক্ষণ এটি একটি লিনাক্স কন্টেইনারে চলে, ততক্ষণ এটি পাইথন, গো, নোড.জেএস, জাভা বা ডটনেট কিনা তা ক্লাউড রানের কাছে কোনো বিষয় নয়।

আপনি যা ব্যবহার করেন তার জন্য মূল্য পরিশোধ করুন:

৩. প্রজেক্ট সেটআপ

গুগল অ্যাকাউন্ট

যদি আপনার আগে থেকে কোনো ব্যক্তিগত গুগল অ্যাকাউন্ট না থাকে, তাহলে আপনাকে অবশ্যই একটি গুগল অ্যাকাউন্ট তৈরি করতে হবে।

কর্মক্ষেত্র বা শিক্ষা প্রতিষ্ঠানের অ্যাকাউন্টের পরিবর্তে ব্যক্তিগত অ্যাকাউন্ট ব্যবহার করুন

গুগল ক্লাউড কনসোলে সাইন-ইন করুন

আপনার ব্যক্তিগত গুগল অ্যাকাউন্ট ব্যবহার করে গুগল ক্লাউড কনসোলে সাইন-ইন করুন।

বিলিং সক্ষম করুন

একটি ব্যক্তিগত বিলিং অ্যাকাউন্ট তৈরি করুন

আপনি যদি গুগল ক্লাউড ক্রেডিট ব্যবহার করে বিলিং সেট আপ করেন, তাহলে এই ধাপটি এড়িয়ে যেতে পারেন।

একটি ব্যক্তিগত বিলিং অ্যাকাউন্ট তৈরি করতে, ক্লাউড কনসোলে বিলিং চালু করার জন্য এখানে যান

কিছু নোট:

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

একটি প্রকল্প তৈরি করুন (ঐচ্ছিক)

এই ল্যাবের জন্য ব্যবহার করার মতো আপনার যদি কোনো চলমান প্রজেক্ট না থাকে, তাহলে এখানে একটি নতুন প্রজেক্ট তৈরি করুন

৪. ক্লাউড শেল এডিটর খুলুন

  1. সরাসরি ক্লাউড শেল এডিটর- এ যেতে এই লিঙ্কে ক্লিক করুন।
  2. আজ যেকোনো সময়ে অনুমোদনের জন্য অনুরোধ করা হলে, চালিয়ে যাওয়ার জন্য 'অনুমোদন করুন' (Authorize) বোতামে ক্লিক করুন। ক্লাউড শেল অনুমোদন করতে ক্লিক করুন
  3. যদি স্ক্রিনের নীচে টার্মিনালটি দেখা না যায়, তাহলে এটি খুলুন:
    • ভিউ ক্লিক করুন
    • টার্মিনালে ক্লিক করুন ক্লাউড শেল এডিটরে নতুন টার্মিনাল খুলুন

৫. আপনার প্রজেক্ট সেট করুন

  1. টার্মিনালে এই কমান্ডটি দিয়ে আপনার প্রজেক্ট সেট করুন:
    gcloud config set project [PROJECT_ID]
    
    উদাহরণ: gcloud config set project lab-project-id-exampleক্লাউড শেল এডিটর টার্মিনালে প্রজেক্ট আইডি সেট করুন
  2. আপনি এই বার্তাটি দেখতে পাবেন:
    Updated property [core/project].
    

৬. এপিআই সক্রিয় করুন

Cloud Run , Artifact Registry , Cloud Build , Vertex AI , এবং Compute Engine ব্যবহার করার জন্য, আপনাকে আপনার Google Cloud প্রজেক্টে এগুলোর নিজ নিজ API সক্রিয় করতে হবে।

  • টার্মিনালে এপিআইগুলো সক্রিয় করুন:
    gcloud services enable \
      run.googleapis.com \
      artifactregistry.googleapis.com \
      cloudbuild.googleapis.com \
      aiplatform.googleapis.com \
      compute.googleapis.com
    
    এটি চালানো শেষ হলে, আপনি নিচের মতো একটি আউটপুট দেখতে পাবেন:
    Operation "operations/acat.p2-[GUID]" finished successfully.
    

এপিআইগুলো চালু করা হচ্ছে

  • ক্লাউড রান অ্যাডমিন এপিআই ( run.googleapis.com ) আপনাকে একটি সম্পূর্ণ পরিচালিত পরিবেশে ফ্রন্টএন্ড ও ব্যাকএন্ড সার্ভিস, ব্যাচ জব বা ওয়েবসাইট চালানোর সুযোগ দেয়। এটি আপনার কন্টেইনারাইজড অ্যাপ্লিকেশনগুলো ডেপ্লয় এবং স্কেল করার জন্য প্রয়োজনীয় অবকাঠামো পরিচালনা করে।
  • আর্টিফ্যাক্ট রেজিস্ট্রি এপিআই ( artifactregistry.googleapis.com ) আপনার কন্টেইনার ইমেজ সংরক্ষণের জন্য একটি সুরক্ষিত ও ব্যক্তিগত রিপোজিটরি প্রদান করে। এটি কন্টেইনার রেজিস্ট্রি-র একটি উন্নত সংস্করণ এবং ক্লাউড রান ও ক্লাউড বিল্ড-এর সাথে নির্বিঘ্নে সমন্বিত হয়।
  • ক্লাউড বিল্ড এপিআই ( cloudbuild.googleapis.com ) হলো একটি সার্ভারলেস সিআই/সিডি প্ল্যাটফর্ম যা গুগল ক্লাউড অবকাঠামোতে আপনার বিল্ডগুলো সম্পাদন করে। এটি আপনার ডকারফাইল থেকে ক্লাউডে কন্টেইনার ইমেজ তৈরি করতে ব্যবহৃত হয়।
  • ভার্টেক্স এআই এপিআই ( aiplatform.googleapis.com ) আপনার ডেপ্লয় করা অ্যাপ্লিকেশনকে জেমিনি মডেলের সাথে যোগাযোগ করে মূল এআই কাজগুলো সম্পাদন করতে সক্ষম করে। এটি গুগল ক্লাউডের সমস্ত এআই পরিষেবার জন্য একটি সমন্বিত এপিআই প্রদান করে।
  • কম্পিউট ইঞ্জিন এপিআই ( compute.googleapis.com ) গুগলের পরিকাঠামোতে চালিত নিরাপদ এবং কাস্টমাইজযোগ্য ভার্চুয়াল মেশিন সরবরাহ করে। যদিও ক্লাউড রান পরিচালিত হয়, বিভিন্ন নেটওয়ার্কিং এবং কম্পিউট রিসোর্সের জন্য কম্পিউট ইঞ্জিন এপিআই প্রায়শই একটি মৌলিক নির্ভরতা হিসেবে প্রয়োজন হয়।

৭. আপনার ডেভেলপমেন্ট পরিবেশ প্রস্তুত করুন

ডিরেক্টরি তৈরি করুন

  1. টার্মিনালে প্রজেক্ট ডিরেক্টরি এবং প্রয়োজনীয় সাবডিরেক্টরিগুলো তৈরি করুন:
    cd && mkdir zoo_guide_agent && cd zoo_guide_agent
    
  2. টার্মিনালে, ক্লাউড শেল এডিটর এক্সপ্লোরারে zoo_guide_agent ডিরেক্টরিটি খোলার জন্য নিম্নলিখিত কমান্ডটি চালান:
    cloudshell open-workspace ~/zoo_guide_agent
    
  3. বাম দিকের এক্সপ্লোরার প্যানেলটি রিফ্রেশ হবে। এখন আপনি আপনার তৈরি করা ডিরেক্টরিটি দেখতে পাবেন।
    এক্সপ্লোরার সাইড প্যানেলে নতুন ডিরেক্টরিটির স্ক্রিনশট।

ইনস্টলেশনের প্রয়োজনীয়তা

  1. requirements.txt ফাইলটি তৈরি করতে টার্মিনালে নিম্নলিখিত কমান্ডটি চালান।
    cloudshell edit requirements.txt
    
  2. নতুন তৈরি করা requirements.txt ফাইলে নিম্নলিখিত বিষয়গুলো যোগ করুন।
    google-adk==1.14.0
    langchain-community==0.3.27
    wikipedia==1.4.0
    
  3. টার্মিনালে , uv ব্যবহার করে একটি ভার্চুয়াল এনভায়রনমেন্ট তৈরি ও সক্রিয় করুন। এটি নিশ্চিত করে যে আপনার প্রোজেক্টের ডিপেন্ডেন্সিগুলো সিস্টেম পাইথনের সাথে সাংঘর্ষিক হবে না।
    uv venv
    source .venv/bin/activate
    
  4. টার্মিনালে আপনার ভার্চুয়াল এনভায়রনমেন্টে প্রয়োজনীয় প্যাকেজগুলো ইনস্টল করুন।
    uv pip install -r requirements.txt
    

পরিবেশ ভেরিয়েবল সেট আপ করুন

  • .env ফাইলটি তৈরি করতে টার্মিনালে নিম্নলিখিত কমান্ডটি ব্যবহার করুন।
    # 1. Set the variables in your terminal first
    PROJECT_ID=$(gcloud config get-value project)
    PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
    SA_NAME=lab2-cr-service
    
    # 2. Create the .env file using those variables
    cat <<EOF > .env
    PROJECT_ID=$PROJECT_ID
    PROJECT_NUMBER=$PROJECT_NUMBER
    SA_NAME=$SA_NAME
    SERVICE_ACCOUNT=${SA_NAME}@${PROJECT_ID}.iam.gserviceaccount.com
    MODEL="gemini-2.5-flash"
    EOF
    

৮. এজেন্ট ওয়ার্কফ্লো তৈরি করুন

__init__.py ফাইল তৈরি করুন

  1. টার্মিনালে নিম্নলিখিত কমান্ডটি চালিয়ে init.py ফাইলটি তৈরি করুন:
    cloudshell edit __init__.py
    
    এই ফাইলটি পাইথনকে জানায় যে zoo_guide_agent ডিরেক্টরিটি একটি প্যাকেজ।
  2. নতুন __init__.py ফাইলে নিম্নলিখিত কোডটি যোগ করুন:
    from . import agent
    

agent.py ফাইলটি তৈরি করুন

  1. টার্মিনালে নিম্নলিখিত কমান্ডটি পেস্ট করে মূল agent.py ফাইলটি তৈরি করুন।
    cloudshell edit agent.py
    
  2. ইম্পোর্ট এবং প্রাথমিক সেটআপ : আপনার বর্তমানে খালি agent.py ফাইলে নিম্নলিখিত কোডটি যোগ করুন:
    import os
    import logging
    import google.cloud.logging
    from dotenv import load_dotenv
    
    from google.adk import Agent
    from google.adk.agents import SequentialAgent
    from google.adk.tools.tool_context import ToolContext
    from google.adk.tools.langchain_tool import LangchainTool
    
    from langchain_community.tools import WikipediaQueryRun
    from langchain_community.utilities import WikipediaAPIWrapper
    
    import google.auth
    import google.auth.transport.requests
    import google.oauth2.id_token
    
    # --- Setup Logging and Environment ---
    
    cloud_logging_client = google.cloud.logging.Client()
    cloud_logging_client.setup_logging()
    
    load_dotenv()
    
    model_name = os.getenv("MODEL")
    
    agent.py ফাইলের এই প্রথম ব্লকটি ADK এবং Google Cloud থেকে সমস্ত প্রয়োজনীয় লাইব্রেরি নিয়ে আসে। এটি লগিংও সেট আপ করে এবং আপনার .env ফাইল থেকে এনভায়রনমেন্ট ভেরিয়েবল লোড করে, যা আপনার মডেল এবং সার্ভার URL অ্যাক্সেস করার জন্য অত্যন্ত গুরুত্বপূর্ণ।
  3. টুলগুলো নির্ধারণ করুন : একটি এজেন্ট ততটাই কার্যকর, যতটা কার্যকর টুল সে ব্যবহার করতে পারে। টুলগুলো নির্ধারণ করতে agent.py ফাইলের শেষে নিম্নলিখিত কোডটি যোগ করুন:
    # Greet user and save their prompt
    
    def add_prompt_to_state(
        tool_context: ToolContext, prompt: str
    ) -> dict[str, str]:
        """Saves the user's initial prompt to the state."""
        tool_context.state["PROMPT"] = prompt
        logging.info(f"[State updated] Added to PROMPT: {prompt}")
        return {"status": "success"}
    
    # Configuring the Wikipedia Tool
    wikipedia_tool = LangchainTool(
        tool=WikipediaQueryRun(api_wrapper=WikipediaAPIWrapper())
    )
    
    সরঞ্জামগুলির ব্যাখ্যা
    • add_prompt_to_state 📝: এই টুলটি মনে রাখে একজন চিড়িয়াখানার পরিদর্শক কী জিজ্ঞাসা করে। যখন কোনো পরিদর্শক জিজ্ঞাসা করেন, "সিংহগুলো কোথায়?", তখন এই টুলটি সেই নির্দিষ্ট প্রশ্নটি এজেন্টের স্মৃতিতে সংরক্ষণ করে রাখে, যাতে ওয়ার্কফ্লোতে থাকা অন্য এজেন্টরা জানতে পারে কী অনুসন্ধান করতে হবে।
      পদ্ধতি: এটি একটি পাইথন ফাংশন যা ভিজিটরের প্রম্পটকে শেয়ার্ড tool_context.state ডিকশনারিতে লিখে রাখে। এই টুল কনটেক্সট একটিমাত্র কথোপকথনের জন্য এজেন্টের স্বল্পমেয়াদী স্মৃতিকে প্রতিনিধিত্ব করে। একজন এজেন্ট দ্বারা স্টেটে সংরক্ষিত ডেটা ওয়ার্কফ্লোতে থাকা পরবর্তী এজেন্ট পড়তে পারে।
    • LangchainTool 🌍: এটি ট্যুর গাইড এজেন্টকে বিশ্বের সাধারণ জ্ঞান প্রদান করে। যখন কোনো দর্শনার্থী এমন কোনো প্রশ্ন করেন যা চিড়িয়াখানার ডেটাবেসে নেই, যেমন "বন্য পরিবেশে সিংহরা কী খায়?", তখন এই টুলটি এজেন্টকে উইকিপিডিয়া থেকে তার উত্তর খুঁজে বের করতে সাহায্য করে।
      কীভাবে: এটি একটি অ্যাডাপ্টার হিসেবে কাজ করে, যা আমাদের এজেন্টকে LangChain লাইব্রেরি থেকে আগে থেকে তৈরি WikipediaQueryRun টুলটি ব্যবহার করার সুযোগ দেয়।
      বন্ধুত্বপূর্ণ চেহারার রোবটটি পশুদের ছবি আঁকা একটি নোটপ্যাড ধরে আছে, যার মধ্যে একটি সিংহের চিন্তার বুদবুদ রয়েছে। সে পিঠে ব্যাগসহ একজন পুরুষ ও একটি ছোট ছেলের সাথে কথা বলছে। পটভূমিতে জিরাফ ও চিড়িয়াখানার অন্যান্য উপাদান রয়েছে এবং তালগাছগুলো প্রবেশপথটিকে ঘিরে রেখেছে।
  4. বিশেষজ্ঞ এজেন্ট নির্ধারণ করুন : comprehensive_researcher এবং response_formatter এজেন্ট নির্ধারণ করতে agent.py শেষে নিম্নলিখিত কোডটি যোগ করুন:
    # 1. Researcher Agent
    comprehensive_researcher = Agent(
        name="comprehensive_researcher",
        model=model_name,
        description="The primary researcher that can access both internal zoo data and external knowledge from Wikipedia.",
        instruction="""
        You are a helpful research assistant. Your goal is to fully answer the user's PROMPT.
        You have access to two tools:
        1. A tool for getting specific data about animals AT OUR ZOO (names, ages, locations).
        2. A tool for searching Wikipedia for general knowledge (facts, lifespan, diet, habitat).
    
        First, analyze the user's PROMPT.
        - If the prompt can be answered by only one tool, use that tool.
        - If the prompt is complex and requires information from both the zoo's database AND Wikipedia,
          you MUST use both tools to gather all necessary information.
        - Synthesize the results from the tool(s) you use into preliminary data outputs.
    
        PROMPT:
        { PROMPT }
        """,
        tools=[
            wikipedia_tool
        ],
        output_key="research_data" # A key to store the combined findings
    )
    
    # 2. Response Formatter Agent
    response_formatter = Agent(
        name="response_formatter",
        model=model_name,
        description="Synthesizes all information into a friendly, readable response.",
        instruction="""
        You are the friendly voice of the Zoo Tour Guide. Your task is to take the
        RESEARCH_DATA and present it to the user in a complete and helpful answer.
    
        - First, present the specific information from the zoo (like names, ages, and where to find them).
        - Then, add the interesting general facts from the research.
        - If some information is missing, just present the information you have.
        - Be conversational and engaging.
    
        RESEARCH_DATA:
        { research_data }
        """
    )
    
    • comprehensive_researcher এজেন্টটি আমাদের কার্যক্রমের 'মস্তিষ্ক'। এটি শেয়ার্ড State থেকে ব্যবহারকারীর নির্দেশ গ্রহণ করে, তার উইকিপিডিয়া টুলটি পরীক্ষা করে এবং উত্তর খোঁজার জন্য কোনগুলো ব্যবহার করতে হবে তা স্থির করে।
    • response_formatter এজেন্টের ভূমিকা হলো উপস্থাপন করা। এটি Researcher এজেন্ট দ্বারা সংগৃহীত (State-এর মাধ্যমে প্রেরিত) কাঁচা ডেটা গ্রহণ করে এবং LLM-এর ভাষাগত দক্ষতা ব্যবহার করে সেটিকে একটি সহজবোধ্য ও কথোপকথনমূলক উত্তরে রূপান্তরিত করে।
      উজ্জ্বল নীল চোখওয়ালা রোবটটি একটি বড় বাঁকানো মনিটরের সামনে বসে আছে, যার বাম দিকে ‘MCP ZOO SERVER’ এবং ডান দিকে একটি ZOO উইকিপিডিয়া পৃষ্ঠা দেখা যাচ্ছে। সার্ভার ইন্টারফেসে বিভিন্ন প্রাণীর আইকন দৃশ্যমান। ডেস্কটিতে একাধিক উজ্জ্বল নীল টাচপ্যাড রয়েছে। পটভূমিতে বড় জানালা দিয়ে শহরের আকাশরেখা দেখা যাচ্ছে।
  5. ওয়ার্কফ্লো এজেন্ট নির্ধারণ করুন : সিকোয়েনশিয়াল এজেন্ট tour_guide_workflow নির্ধারণ করতে agent.py শেষে এই কোড ব্লকটি যোগ করুন:
    tour_guide_workflow = SequentialAgent(
        name="tour_guide_workflow",
        description="The main workflow for handling a user's request about an animal.",
        sub_agents=[
            comprehensive_researcher, # Step 1: Gather all data
            response_formatter,       # Step 2: Format the final response
        ]
    )
    
    ওয়ার্কফ্লো এজেন্টটি চিড়িয়াখানা ভ্রমণের জন্য 'ব্যাক-অফিস' ম্যানেজার হিসেবে কাজ করে। এটি গবেষণার অনুরোধ গ্রহণ করে এবং নিশ্চিত করে যে আমরা উপরে সংজ্ঞায়িত দুটি এজেন্ট তাদের কাজ সঠিক ক্রমে সম্পাদন করছে: প্রথমে গবেষণা, তারপর বিন্যাস। এটি একজন পরিদর্শকের প্রশ্নের উত্তর দেওয়ার জন্য একটি অনুমানযোগ্য এবং নির্ভরযোগ্য প্রক্রিয়া তৈরি করে।
    কীভাবে: এটি একটি SequentialAgent , এক বিশেষ ধরনের এজেন্ট যা নিজে থেকে চিন্তা করে না। এর একমাত্র কাজ হলো একটি নির্দিষ্ট ক্রমে sub_agents (গবেষক এবং ফরম্যাটার) একটি তালিকা চালানো এবং স্বয়ংক্রিয়ভাবে এক এজেন্ট থেকে অন্য এজেন্টে শেয়ার্ড মেমোরি স্থানান্তর করা।
  6. মূল ওয়ার্কফ্লোটি তৈরি করুন : root_agent নির্ধারণ করতে agent.py শেষে এই চূড়ান্ত কোড ব্লকটি যোগ করুন:
    root_agent = Agent(
        name="greeter",
        model=model_name,
        description="The main entry point for the Zoo Tour Guide.",
        instruction="""
        - Let the user know you will help them learn about the animals we have in the zoo.
        - When the user responds, use the 'add_prompt_to_state' tool to save their response.
        After using the tool, transfer control to the 'tour_guide_workflow' agent.
        """,
        tools=[add_prompt_to_state],
        sub_agents=[tour_guide_workflow]
    )
    
    ADK ফ্রেমওয়ার্ক সমস্ত নতুন কথোপকথনের সূচনা বিন্দু হিসেবে root_agent ব্যবহার করে। এর প্রধান ভূমিকা হলো সম্পূর্ণ প্রক্রিয়াটিকে সমন্বয় করা। এটি প্রাথমিক নিয়ন্ত্রক হিসেবে কাজ করে এবং কথোপকথনের প্রথম পর্যায়টি পরিচালনা করে।
    তিনটি রোবটকে চিত্রিত করা হয়েছে: বামদিকে একটি গ্রিটার-বট একটি নোটপ্যাডে লিখছে, যার চিন্তার বুদবুদে একটি সিংহের ছবি রয়েছে; মাঝখানে একটি রিসার্চার-বট একটি ডেস্কে বসে আছে, যার কম্পিউটারে ডেটা প্রদর্শিত হচ্ছে এবং একটি কোয়েরি অ্যারো সেদিকে নির্দেশ করছে; এবং ডানদিকে একটি প্রেজেন্টার-বট হাসছে এবং 'অ্যানালাইজড ডেটা' লেবেলযুক্ত একটি চার্ট ধরে আছে, যেটির দিকে রিসার্চার-বটটির একটি অ্যারো নির্দেশ করছে। পটভূমিতে জিরাফ ও হাতি দেখা যাচ্ছে এবং তালগাছ দৃশ্যটিকে ঘিরে রেখেছে।

সম্পূর্ণ agent.py ফাইল

আপনার agent.py ফাইলটি এখন সম্পূর্ণ! এভাবে তৈরি করার মাধ্যমে আপনি দেখতে পাবেন যে, কীভাবে প্রতিটি উপাদান—টুলস, ওয়ার্কার এজেন্ট এবং ম্যানেজার এজেন্ট—চূড়ান্ত বুদ্ধিমান সিস্টেমটি তৈরিতে একটি নির্দিষ্ট ভূমিকা পালন করে।

সম্পূর্ণ ফাইলটি দেখতে এইরকম হবে:

import os
import logging
import google.cloud.logging
from dotenv import load_dotenv

from google.adk import Agent
from google.adk.agents import SequentialAgent
from google.adk.tools.tool_context import ToolContext
from google.adk.tools.langchain_tool import LangchainTool

from langchain_community.tools import WikipediaQueryRun
from langchain_community.utilities import WikipediaAPIWrapper

import google.auth
import google.auth.transport.requests
import google.oauth2.id_token

# --- Setup Logging and Environment ---

cloud_logging_client = google.cloud.logging.Client()
cloud_logging_client.setup_logging()

load_dotenv()

model_name = os.getenv("MODEL")

# Greet user and save their prompt

def add_prompt_to_state(
    tool_context: ToolContext, prompt: str
) -> dict[str, str]:
    """Saves the user's initial prompt to the state."""
    tool_context.state["PROMPT"] = prompt
    logging.info(f"[State updated] Added to PROMPT: {prompt}")
    return {"status": "success"}

# Configuring the Wikipedia Tool
wikipedia_tool = LangchainTool(
    tool=WikipediaQueryRun(api_wrapper=WikipediaAPIWrapper())
)

# 1. Researcher Agent
comprehensive_researcher = Agent(
    name="comprehensive_researcher",
    model=model_name,
    description="The primary researcher that can access both internal zoo data and external knowledge from Wikipedia.",
    instruction="""
    You are a helpful research assistant. Your goal is to fully answer the user's PROMPT.
    You have access to two tools:
    1. A tool for getting specific data about animals AT OUR ZOO (names, ages, locations).
    2. A tool for searching Wikipedia for general knowledge (facts, lifespan, diet, habitat).

    First, analyze the user's PROMPT.
    - If the prompt can be answered by only one tool, use that tool.
    - If the prompt is complex and requires information from both the zoo's database AND Wikipedia,
        you MUST use both tools to gather all necessary information.
    - Synthesize the results from the tool(s) you use into preliminary data outputs.

    PROMPT:
    { PROMPT }
    """,
    tools=[
        wikipedia_tool
    ],
    output_key="research_data" # A key to store the combined findings
)

# 2. Response Formatter Agent
response_formatter = Agent(
    name="response_formatter",
    model=model_name,
    description="Synthesizes all information into a friendly, readable response.",
    instruction="""
    You are the friendly voice of the Zoo Tour Guide. Your task is to take the
    RESEARCH_DATA and present it to the user in a complete and helpful answer.

    - First, present the specific information from the zoo (like names, ages, and where to find them).
    - Then, add the interesting general facts from the research.
    - If some information is missing, just present the information you have.
    - Be conversational and engaging.

    RESEARCH_DATA:
    { research_data }
    """
)

tour_guide_workflow = SequentialAgent(
    name="tour_guide_workflow",
    description="The main workflow for handling a user's request about an animal.",
    sub_agents=[
        comprehensive_researcher, # Step 1: Gather all data
        response_formatter,       # Step 2: Format the final response
    ]
)

root_agent = Agent(
    name="greeter",
    model=model_name,
    description="The main entry point for the Zoo Tour Guide.",
    instruction="""
    - Let the user know you will help them learn about the animals we have in the zoo.
    - When the user responds, use the 'add_prompt_to_state' tool to save their response.
    After using the tool, transfer control to the 'tour_guide_workflow' agent.
    """,
    tools=[add_prompt_to_state],
    sub_agents=[tour_guide_workflow]
)

এরপরে আসছে মোতায়েন!

৯. অ্যাপ্লিকেশনটি স্থাপনের জন্য প্রস্তুত করুন।

চূড়ান্ত কাঠামোটি পরীক্ষা করুন

ডেপ্লয় করার আগে যাচাই করে নিন যে আপনার প্রজেক্ট ডিরেক্টরিতে সঠিক ফাইলগুলো রয়েছে।

  • আপনার zoo_guide_agent ফোল্ডারটি যেন দেখতে এইরকম হয় তা নিশ্চিত করুন:
    zoo_guide_agent/
    ├── .env
    ├── __init__.py
    ├── agent.py
    └── requirements.txt
    

IAM অনুমতি সেট আপ করুন

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

  1. টার্মিনালে , ভেরিয়েবলগুলো আপনার শেল সেশনে লোড করুন।
    source .env
    
  2. আপনার ক্লাউড রান পরিষেবার জন্য একটি নির্দিষ্ট পরিষেবা অ্যাকাউন্ট তৈরি করুন, যাতে এটির নিজস্ব বিশেষ অনুমতি থাকে। নিম্নলিখিতটি টার্মিনালে পেস্ট করুন:
    gcloud iam service-accounts create ${SA_NAME} \
        --display-name="Service Account for lab 2 "
    
    এই নির্দিষ্ট অ্যাপ্লিকেশনটির জন্য একটি স্বতন্ত্র পরিচয় তৈরি করার মাধ্যমে, আপনি নিশ্চিত করেন যে এজেন্টটির কাছে কেবল তার প্রয়োজনীয় অনুমতিগুলোই থাকবে, এবং এর ফলে অতিরিক্ত ব্যাপক অ্যাক্সেসযুক্ত কোনো ডিফল্ট অ্যাকাউন্ট ব্যবহার করা হয় না।
  3. সার্ভিস অ্যাকাউন্টটিকে Vertex AI User রোলটি প্রদান করুন, যা এটিকে গুগলের মডেলগুলোকে কল করার অনুমতি দেয়।
    # Grant the "Vertex AI User" role to your service account
    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member="serviceAccount:$SERVICE_ACCOUNT" \
      --role="roles/aiplatform.user"
    

১০. ADK CLI ব্যবহার করে এজেন্টটি স্থাপন করুন।

আপনার লোকাল কোড এবং গুগল ক্লাউড প্রজেক্ট প্রস্তুত হয়ে গেলে, এখন এজেন্টটি ডিপ্লয় করার পালা। এর জন্য আপনি adk deploy cloud_run কমান্ডটি ব্যবহার করবেন, যা একটি সুবিধাজনক টুল এবং সম্পূর্ণ ডিপ্লয়মেন্ট ওয়ার্কফ্লোকে স্বয়ংক্রিয় করে তোলে। এই একটিমাত্র কমান্ড আপনার কোডকে প্যাকেজ করে, একটি কন্টেইনার ইমেজ তৈরি করে, সেটিকে আর্টিফ্যাক্ট রেজিস্ট্রি- তে পুশ করে এবং ক্লাউড রান -এ সার্ভিসটি চালু করে, যার ফলে এটি ওয়েবে অ্যাক্সেসযোগ্য হয়ে ওঠে।

  1. আপনার এজেন্ট স্থাপন করতে টার্মিনালে নিম্নলিখিত কমান্ডটি চালান।
    # Run the deployment command
    uvx --from google-adk==1.14.0 \
    adk deploy cloud_run \
      --project=$PROJECT_ID \
      --region=europe-west1 \
      --service_name=zoo-tour-guide \
      --with_ui \
      . \
      -- \
      --labels=dev-tutorial=codelab-adk \
      --service-account=$SERVICE_ACCOUNT
    
    uvx কমান্ডের সাহায্যে আপনি পাইথন প্যাকেজ হিসেবে প্রকাশিত কমান্ড লাইন টুলগুলো, সেগুলোর গ্লোবাল ইনস্টলেশনের প্রয়োজন ছাড়াই, চালাতে পারবেন।
  2. যদি আপনাকে নিম্নলিখিত বিষয়গুলো দেখানো হয়:
    Deploying from source requires an Artifact Registry Docker repository to store built containers. A repository named [cloud-run-source-deploy] in region 
    [europe-west1] will be created.
    
    Do you want to continue (Y/n)?
    
    যদি তাই হয়, তাহলে Y টাইপ করে ENTER চাপুন।
  3. যদি আপনাকে নিম্নলিখিত বিষয়গুলো দেখানো হয়:
    Allow unauthenticated invocations to [your-service-name] (y/N)?.
    
    y টাইপ করে ENTER চাপুন। এর মাধ্যমে সহজে পরীক্ষা করার জন্য এই ল্যাবটি প্রমাণীকরণ ছাড়াই চালু করা যাবে। সফলভাবে কার্যকর হলে, কমান্ডটি ডেপ্লয় করা ক্লাউড রান সার্ভিসের URL প্রদান করবে। (এটি দেখতে অনেকটা https://zoo-tour-guide-123456789.europe-west1.run.app এর মতো হবে)।
  4. পরবর্তী কাজের জন্য ডেপ্লয় করা ক্লাউড রান সার্ভিসের URL-টি কপি করুন।

১১. স্থাপন করা এজেন্টটি পরীক্ষা করুন

আপনার এজেন্ট এখন ক্লাউড রান- এ লাইভ হয়ে গেলে, ডেপ্লয়মেন্ট সফল হয়েছে এবং এজেন্টটি প্রত্যাশা অনুযায়ী কাজ করছে কিনা তা নিশ্চিত করতে আপনি একটি পরীক্ষা চালাবেন। ADK-এর ওয়েব ইন্টারফেস অ্যাক্সেস করতে এবং এজেন্টের সাথে ইন্টারঅ্যাক্ট করতে আপনি পাবলিক সার্ভিস ইউআরএল (যেমন https://zoo-tour-guide-123456789.europe-west1.run.app/ ) ব্যবহার করবেন।

  1. আপনার ওয়েব ব্রাউজারে পাবলিক ক্লাউড রান সার্ভিস ইউআরএলটি খুলুন। যেহেতু আপনি --with_ui flag ব্যবহার করেছেন, তাই আপনি ADK ডেভেলপার UI দেখতে পাবেন।
  2. উপরের ডানদিকে Token Streaming চালু করুন।
    আপনি এখন চিড়িয়াখানার এজেন্টের সাথে যোগাযোগ করতে পারবেন।
  3. নতুন কথোপকথন শুরু করতে hello টাইপ করে এন্টার চাপুন।
  4. ফলাফলটি পর্যবেক্ষণ করুন। এজেন্টটির দ্রুত অভিবাদন জানানো উচিত, যা দেখতে অনেকটা এইরকম হবে:
    "Hello! I'm your Zoo Tour Guide. I can help you learn about the amazing animals we have here. What would you like to know or explore today?"
    
  5. এজেন্টকে এই ধরনের প্রশ্ন জিজ্ঞাসা করুন:
    Where can I find the polar bears in the zoo and what is their diet?
    
    ADK এজেন্টের ধারাবাহিকভাবে কয়েকটি কাজ করার স্ক্রিনশট: add_prompt_to_state, transfer_to_agent, wikipedia, এবং get_animals_by_species।প্রথম উত্তরে বলা হয়েছে, ‘এই নির্দিষ্ট চিড়িয়াখানার মধ্যে মেরু ভাল্লুকগুলো কোথায় পাওয়া যাবে তা আমি আপনাকে বলতে পারব না, তবে আমি তাদের খাদ্যতালিকা সম্পর্কে বলতে পারি।’ দ্বিতীয় উত্তরে বলা হয়েছে, ‘মেরু ভাল্লুকগুলো পোলার পাথের আর্কটিক এক্সিবিটে অবস্থিত। উপলব্ধ সরঞ্জাম দিয়ে আমি তাদের খাদ্যতালিকা সম্পর্কে তথ্য সংগ্রহ করতে পারছি না।’ তৃতীয়, সবচেয়ে বিস্তারিত উত্তরে বলা হয়েছে, ‘আমি আনন্দের সাথে আপনাকে আমাদের মেরু ভাল্লুকগুলো সম্পর্কে জানাব! আপনি আমাদের মেরু ভাল্লুকগুলোকে পোলার পাথের আর্কটিক এক্সিবিটে খুঁজে পাবেন। এখানে আমাদের তিনটি মেরু ভাল্লুক আছে: স্নোফ্লেক, যার বয়স ৭ বছর। ব্লিজার্ড, যার বয়স ৫ বছর। আইসবার্গ, যার বয়স ৯ বছর। তাদের খাদ্যতালিকার কথা বলতে গেলে, মেরু ভাল্লুকরা প্রধানত মাংসাশী। তারা সীল, বিশেষ করে রিংড সীল শিকারে পারদর্শী। তারা ওয়ালরাস, বেলুগা তিমি এবং কিছু স্থলজ প্রাণীও খায়।’

এজেন্ট প্রবাহের ব্যাখ্যা

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

১. চিড়িয়াখানার অভ্যর্থনাকারী (স্বাগত ডেস্ক)

সম্পূর্ণ প্রক্রিয়াটি অভ্যর্থনাকারী এজেন্টের মাধ্যমে শুরু হয়।

  • এর কাজ: কথোপকথন শুরু করা। এর নির্দেশ হলো ব্যবহারকারীকে অভিবাদন জানানো এবং জিজ্ঞাসা করা যে তিনি কোন প্রাণী সম্পর্কে জানতে চান।
  • এর টুল: যখন ব্যবহারকারী উত্তর দেয়, তখন গ্রিটার তার add_prompt_to_state টুল ব্যবহার করে ব্যবহারকারীর হুবহু কথাগুলো (যেমন, "আমাকে সিংহদের সম্পর্কে বলুন") গ্রহণ করে এবং সিস্টেমের মেমরিতে সংরক্ষণ করে।
  • হস্তান্তর: প্রম্পটটি সংরক্ষণ করার পর, এটি অবিলম্বে তার সাব-এজেন্ট, tour_guide_workflow-এর কাছে নিয়ন্ত্রণ হস্তান্তর করে।

২. সর্বাঙ্গীণ গবেষক (মহাগবেষক)

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

  • এর কাজ হলো: ব্যবহারকারীর প্রশ্ন বিশ্লেষণ করে একটি বুদ্ধিদীপ্ত পরিকল্পনা তৈরি করা। এটি ল্যাঙ্গুয়েজ মডেলের টুল ব্যবহারের সক্ষমতা কাজে লাগিয়ে সিদ্ধান্ত নেয় যে এর প্রয়োজন আছে কি না:
    • ওয়েব থেকে প্রাপ্ত সাধারণ জ্ঞান (উইকিপিডিয়া এপিআই-এর মাধ্যমে)।
    • অথবা, জটিল প্রশ্নের ক্ষেত্রে, উভয়ই।

৩. প্রতিক্রিয়া বিন্যাসকারী (উপস্থাপক)

একবার বিশদ গবেষক সমস্ত তথ্য সংগ্রহ করে ফেললে, এটিই চালানোর জন্য সর্বশেষ এজেন্ট।

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

এজেন্ট তৈরি করার বিষয়ে আরও জানতে আগ্রহী হলে , নিম্নলিখিত রিসোর্সগুলো দেখুন:

  1. ADK ডক্স
  2. ADK এজেন্টদের জন্য কাস্টম টুল তৈরি করা

১২. পরিবেশ পরিষ্কার করা

এই টিউটোরিয়ালে ব্যবহৃত রিসোর্সগুলোর জন্য আপনার গুগল ক্লাউড অ্যাকাউন্টে চার্জ হওয়া এড়াতে, হয় রিসোর্সগুলো যে প্রজেক্টে রয়েছে সেটি ডিলিট করে দিন, অথবা প্রজেক্টটি রেখে দিয়ে আলাদা আলাদা রিসোর্সগুলো ডিলিট করে দিন।

ক্লাউড রান পরিষেবা এবং ইমেজগুলি মুছে ফেলুন

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

  • টার্মিনালে নিম্নলিখিত কমান্ডগুলো চালান:
    gcloud run services delete zoo-tour-guide --region=europe-west1 --quiet
    gcloud artifacts repositories delete cloud-run-source-deploy --location=europe-west1 --quiet
    

প্রকল্পটি মুছে ফেলুন (ঐচ্ছিক)

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

  • টার্মিনালে নিম্নলিখিত কমান্ডটি চালান ([YOUR_PROJECT_ID] এর জায়গায় আপনার আসল প্রজেক্ট আইডি বসান)।
    gcloud projects delete $PROJECT_ID
    

১৩. অভিনন্দন

আপনি সফলভাবে একটি মাল্টি-এজেন্ট এআই অ্যাপ্লিকেশন তৈরি করে গুগল ক্লাউডে স্থাপন করেছেন!

পুনরালোচনা

এই ল্যাবে, আপনি একটি খালি ডিরেক্টরি থেকে একটি লাইভ, সর্বজনীনভাবে প্রবেশযোগ্য এআই পরিষেবা তৈরি করেছেন।

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

আমরা যা আলোচনা করেছি

  • ADK- এর মাধ্যমে ডেপ্লয়মেন্টের জন্য একটি পাইথন প্রজেক্ট কীভাবে গঠন করতে হয়।
  • [SequentialAgent](https://google.github.io/adk-docs/agents/workflow-agents/sequential-agents/) ব্যবহার করে কীভাবে একটি মাল্টি-এজেন্ট ওয়ার্কফ্লো বাস্তবায়ন করবেন।
  • উইকিপিডিয়া এপিআই-এর মতো বাহ্যিক টুলগুলিকে কীভাবে একীভূত করা যায়।
  • adk deploy কমান্ড ব্যবহার করে ক্লাউড রানে কীভাবে একটি এজেন্ট ডেপ্লয় করবেন।

১৪. জরিপ

আউটপুট:

আপনি এই টিউটোরিয়ালটি কীভাবে ব্যবহার করবেন?

শুধু একবার পড়ে দেখুন এটি পড়ুন এবং অনুশীলনগুলো সম্পূর্ণ করুন।