একটি ADK এজেন্টের সাথে ক্লাউড রানে একটি MCP সার্ভার ব্যবহার করুন৷

1. ভূমিকা

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

ল্যাব 1-এ, আপনি একটি এমসিপি সার্ভার তৈরি করেছেন যা একটি কাল্পনিক চিড়িয়াখানার প্রাণীদের সম্পর্কে LLM-তে ডেটা সরবরাহ করে, উদাহরণস্বরূপ জেমিনি CLI ব্যবহার করার সময়৷ এই ল্যাবে, আমরা কাল্পনিক চিড়িয়াখানার জন্য একটি ট্যুর গাইড এজেন্ট তৈরি করছি। এজেন্ট ল্যাব 1 থেকে একই MCP সার্ভার ব্যবহার করবে চিড়িয়াখানার প্রাণী সম্পর্কে বিশদ অ্যাক্সেস করতে, এবং সেরা ট্যুর গাইড অভিজ্ঞতা তৈরি করতে উইকিপিডিয়াও ব্যবহার করবে।

f8d4423edbfe993d.png

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

পূর্বশর্ত

  • ক্লাউড রানে একটি চলমান MCP সার্ভার বা এর সংশ্লিষ্ট পরিষেবা URL।
  • বিলিং সক্ষম সহ একটি Google ক্লাউড প্রকল্প৷

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

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

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

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

2. কেন ক্লাউড রানে স্থাপন করবেন?

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

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

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

যে কোন জায়গায় পাত্র চালান:

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

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

  • যদি 0 জন ব্যক্তি আপনার অ্যাপ ব্যবহার করে → 0 দৃষ্টান্ত চালানো হয় (অলস অবস্থায় আপনি $0 প্রদান করেন)।
  • যদি 1000টি অনুরোধ এটিকে আঘাত করে → এটি যতগুলি প্রয়োজন ততগুলি অনুলিপি তৈরি করে।

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

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

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

  • যতক্ষণ পর্যন্ত এটি একটি লিনাক্স কন্টেইনারে চলে, ক্লাউড রান এটি Python, Go, Node.js, Java, বা .Net কিনা তা চিন্তা করে না।

আপনি যা ব্যবহার করেন তার জন্য অর্থ প্রদান করুন:

  • অনুরোধ প্রতি বিল + গণনা সময় (100 ms পর্যন্ত)।
  • আপনি একটি ঐতিহ্যগত VM এর মত নিষ্ক্রিয় সম্পদের জন্য অর্থ প্রদান করছেন না।

3. সেটআপ এবং প্রয়োজনীয়তা

স্ব-গতিসম্পন্ন পরিবেশ সেটআপ

  1. Google ক্লাউড কনসোলে সাইন-ইন করুন এবং একটি নতুন প্রকল্প তৈরি করুন বা বিদ্যমান একটি পুনরায় ব্যবহার করুন৷ আপনার যদি ইতিমধ্যেই একটি Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তাহলে আপনাকে অবশ্যই একটি তৈরি করতে হবে।

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • প্রকল্পের নাম এই প্রকল্পের অংশগ্রহণকারীদের জন্য প্রদর্শনের নাম। এটি একটি অক্ষর স্ট্রিং যা Google API দ্বারা ব্যবহৃত হয় না। আপনি সবসময় এটি আপডেট করতে পারেন.
  • প্রোজেক্ট আইডি সমস্ত Google ক্লাউড প্রোজেক্ট জুড়ে অনন্য এবং অপরিবর্তনীয় (সেট করার পরে পরিবর্তন করা যাবে না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত আপনি এটা কি যত্ন না. বেশিরভাগ কোডল্যাবে, আপনাকে আপনার প্রকল্প আইডি উল্লেখ করতে হবে (সাধারণত PROJECT_ID হিসাবে চিহ্নিত)। আপনি যদি জেনারেট করা আইডি পছন্দ না করেন, তাহলে আপনি অন্য একটি এলোমেলো আইডি তৈরি করতে পারেন। বিকল্পভাবে, আপনি নিজের চেষ্টা করতে পারেন, এবং এটি উপলব্ধ কিনা দেখতে পারেন। এই ধাপের পরে এটি পরিবর্তন করা যাবে না এবং প্রকল্পের সময়কালের জন্য থাকে।
  • আপনার তথ্যের জন্য, একটি তৃতীয় মান আছে, একটি প্রকল্প নম্বর , যা কিছু API ব্যবহার করে। ডকুমেন্টেশনে এই তিনটি মান সম্পর্কে আরও জানুন।
  1. এরপরে, ক্লাউড রিসোর্স/এপিআই ব্যবহার করতে আপনাকে ক্লাউড কনসোলে বিলিং সক্ষম করতে হবে। এই কোডল্যাবের মাধ্যমে চালানোর জন্য খুব বেশি খরচ হবে না, যদি কিছু হয়। এই টিউটোরিয়ালের বাইরে বিলিং এড়াতে সংস্থানগুলি বন্ধ করতে, আপনি আপনার তৈরি করা সংস্থানগুলি মুছতে বা প্রকল্প মুছতে পারেন। নতুন Google ক্লাউড ব্যবহারকারীরা $300 USD বিনামূল্যের ট্রায়াল প্রোগ্রামের জন্য যোগ্য৷

ক্লাউড শেল শুরু করুন

যদি টার্মিনালটি স্ক্রিনের নীচে প্রদর্শিত না হয় তবে এটি খুলুন:

  • টার্মিনাল ক্লিক করুন
  • নতুন টার্মিনালে ক্লিক করুন

d32c46fffa0a30a5.png

টার্মিনালে, এই কমান্ড দিয়ে আপনার প্রকল্প সেট করুন। আপনি যদি ল্যাব 1 সম্পন্ন করে থাকেন তবে নিশ্চিত করুন যে আপনি একই প্রকল্প আইডি ব্যবহার করছেন:

gcloud config set project [YOUR-PROJECT-ID]

আপনি যদি আপনার প্রোজেক্ট আইডি মনে না রাখতে পারেন, তাহলে আপনি আপনার সমস্ত প্রোজেক্ট আইডি এর সাথে তালিকাভুক্ত করতে পারেন:

gcloud projects list | awk '/PROJECT_ID/{print $2}'

4. অনুমোদন করতে বলা হলে, চালিয়ে যেতে অনুমোদন ক্লিক করুন।

6356559df3eccdda.png

5. আপনার এই বার্তাটি দেখতে হবে:

Updated property [core/project].
If you see a `WARNING` and are asked `Do you want to continue (Y/n)?`,

then you have likely entered the project ID incorrectly. Press `n`,

press `Enter`, and try to run the `gcloud config set project` command again.

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

এপিআই সক্ষম করুন এবং পরিবেশ ভেরিয়েবল সেট করুন

সমস্ত প্রয়োজনীয় পরিষেবাগুলি সক্ষম করুন:

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.

Vertex AI এম্বেডিং মডেল ব্যবহার করতে আপনার ডিফল্ট অঞ্চল কনফিগার করুন। Vertex AI এর জন্য উপলব্ধ অবস্থান সম্পর্কে আরও পড়ুন। উদাহরণে আমরা europe-west1 অঞ্চল ব্যবহার করছি।

gcloud config set compute/region europe-west1

5. ADK ডাউনলোড এবং ইনস্টল করুন এবং প্রোজেক্ট ফোল্ডার তৈরি করুন

প্রকল্প ডিরেক্টরি তৈরি করুন।

এই কমান্ডটি এজেন্টের সোর্স কোডের জন্য ল্যাবের জন্য একটি প্রধান ফোল্ডার তৈরি করে।

cd && mkdir zoo_guide_agent && cd zoo_guide_agent

একটি ভার্চুয়াল পরিবেশ তৈরি করুন।

python3 -m venv .venv

ভার্চুয়াল পরিবেশ সক্রিয় করুন

source .venv/bin/activate

requirements.txt ফাইল তৈরি করুন। এই ফাইলটি আপনার এজেন্টের প্রয়োজনীয় পাইথন লাইব্রেরির তালিকা করে। নিম্নলিখিত কমান্ড ফাইল তৈরি করে এবং এটি পপুলেট করে।

cloudshell edit requirements.txt
google-adk==1.12.0
langchain-community
wikipedia

আপনার প্রধান প্রকল্প ডিরেক্টরি, zoo_guide_agent থেকে কমান্ডটি চালানো উচিত।

pip install -r requirements.txt

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

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_REGION=$(gcloud config get-value compute/region)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
export SERVICE_ACCOUNT="${PROJECT_NUMBER}-compute@developer.gserviceaccount.com"

zoo_guide_agent ডিরেক্টরিতে এজেন্টকে প্রমাণীকরণ করতে একটি .env ফাইল তৈরি করুন এবং খুলুন।

cloudshell edit .env

ক্লাউডশেল সম্পাদনা কমান্ড টার্মিনালের উপরের সম্পাদকে .env ফাইলটি খুলবে। .env ফাইলে নিম্নলিখিতটি লিখুন এবং টার্মিনালে ফিরে যান।

MODEL="gemini-2.5-flash"
SERVICE_ACCOUNT="${PROJECT_NUMBER}-compute@developer.gserviceaccount.com"

MCP সার্ভার URL যোগ করা হচ্ছে। আপনি যদি ল্যাব 1 সম্পন্ন করে থাকেন, তাহলে ল্যাব 1 এ আপনার তৈরি করা MCP সার্ভার ব্যবহার করতে এই পদক্ষেপগুলি অনুসরণ করুন:

  1. দূরবর্তী MCP সার্ভারে কল করার জন্য ক্লাউড রান পরিষেবা পরিচয়ের অনুমতি দিন
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:$SERVICE_ACCOUNT" \
  --role="roles/run.invoker"
  1. ল্যাব 1 থেকে MCP সার্ভার URL একটি পরিবেশ পরিবর্তনশীলে সংরক্ষণ করুন।
echo -e "\nMCP_SERVER_URL=https://zoo-mcp-server-${PROJECT_NUMBER}.europe-west1.run.app/mcp/" >> .env

আপনি যদি একটি সর্বজনীন MCP সার্ভার লিঙ্ক ব্যবহার করেন, তাহলে নিম্নলিখিতটি চালান, এবং PROJECT_NUMBER যা প্রদান করা হয়েছে তা দিয়ে প্রতিস্থাপন করুন।

echo -e "\nMCP_SERVER_URL=https://zoo-mcp-server-${PROJECT_NUMBER}.europe-west1.run.app/mcp/" >> .env

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

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

init .py ফাইলটি তৈরি করুন। এই ফাইলটি পাইথনকে বলে যে zoo_guide_agent ডিরেক্টরিটি একটি প্যাকেজ।

cloudshell edit __init__.py

উপরের কমান্ডটি কোড এডিটর খোলে। __init__.py এ নিম্নলিখিত কোড যোগ করুন:

from . import agent

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

প্রধান agent.py ফাইল তৈরি করুন। এই কমান্ডটি পাইথন ফাইল তৈরি করে এবং আপনার মাল্টি-এজেন্ট সিস্টেমের জন্য সম্পূর্ণ কোডে পেস্ট করে।

cloudshell edit agent.py

ধাপ 1: আমদানি এবং প্রাথমিক সেটআপ

এই প্রথম ব্লকটি ADK এবং Google ক্লাউড থেকে সমস্ত প্রয়োজনীয় লাইব্রেরি নিয়ে আসে। এটি লগিং সেট আপ করে এবং আপনার .env ফাইল থেকে এনভায়রনমেন্ট ভেরিয়েবল লোড করে, যা আপনার মডেল এবং সার্ভার ইউআরএল অ্যাক্সেস করার জন্য অত্যন্ত গুরুত্বপূর্ণ।

আপনার 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.mcp_tool.mcp_toolset import MCPToolset, StreamableHTTPConnectionParams
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")

ধাপ 2: সরঞ্জামগুলি সংজ্ঞায়িত করা (এজেন্টের ক্ষমতা)

3eb9c6772576b906.jpeg

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

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 MCP Tool to connect to the Zoo MCP server

mcp_server_url = os.getenv("MCP_SERVER_URL")
if not mcp_server_url:
    raise ValueError("The environment variable MCP_SERVER_URL is not set.")

def get_id_token():
    """Get an ID token to authenticate with the MCP server."""
    target_url = os.getenv("MCP_SERVER_URL")
    audience = target_url.split('/mcp/')[0]
    request = google.auth.transport.requests.Request()
    id_token = google.oauth2.id_token.fetch_id_token(request, audience)
    return id_token

"""
# Use this code if you are using the public MCP Server and comment out the code below defining mcp_tools
mcp_tools = MCPToolset(
    connection_params=StreamableHTTPConnectionParams(
        url=mcp_server_url
    )
)
"""

mcp_tools = MCPToolset(
            connection_params=StreamableHTTPConnectionParams(
                url=mcp_server_url,
                headers={
                    "Authorization": f"Bearer {get_id_token()}",
                },
            ),
        )

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

তিনটি টুল ব্যাখ্যা করা হয়েছে

  1. add_prompt_to_state 📝

চিড়িয়াখানার দর্শক যা জিজ্ঞাসা করেন এই টুলটি মনে রাখে। যখন একজন দর্শক জিজ্ঞেস করে, "সিংহগুলো কোথায়?", এই টুলটি সেই নির্দিষ্ট প্রশ্নটিকে এজেন্টের স্মৃতিতে সংরক্ষণ করে যাতে কর্মপ্রবাহের অন্যান্য এজেন্টরা জানতে পারে কী গবেষণা করতে হবে।

কিভাবে: এটি একটি পাইথন ফাংশন যা শেয়ার্ড tool_context.state অভিধানে ভিজিটরের প্রম্পট লেখে। এই টুল প্রসঙ্গ একটি একক কথোপকথনের জন্য এজেন্টের স্বল্পমেয়াদী মেমরি প্রতিনিধিত্ব করে। একটি এজেন্ট দ্বারা রাজ্যে সংরক্ষিত ডেটা ওয়ার্কফ্লোতে পরবর্তী এজেন্ট দ্বারা পড়তে পারে।

  1. MCPToolset 🦁

এটি ল্যাব 1-এ তৈরি চিড়িয়াখানা MCP সার্ভারের সাথে ট্যুর গাইড এজেন্টকে সংযুক্ত করতে ব্যবহৃত হয়। এই সার্ভারে আমাদের প্রাণীদের নাম, বয়স এবং ঘেরের মতো নির্দিষ্ট তথ্য খোঁজার জন্য বিশেষ সরঞ্জাম রয়েছে।

কিভাবে: এটি নিরাপদে চিড়িয়াখানার ব্যক্তিগত সার্ভার URL এর সাথে সংযোগ করে। এটি স্বয়ংক্রিয়ভাবে একটি সুরক্ষিত "কীকার্ড" (একটি পরিষেবা অ্যাকাউন্ট আইডি টোকেন) পেতে get_id_token ব্যবহার করে তার পরিচয় প্রমাণ করতে এবং অ্যাক্সেস লাভ করে।

  1. LangchainTool 🌍

এটি ট্যুর গাইড এজেন্টকে সাধারণ বিশ্ব জ্ঞান দেয়। যখন একজন দর্শনার্থী এমন একটি প্রশ্ন জিজ্ঞাসা করে যা চিড়িয়াখানার ডাটাবেসে নেই, যেমন "বন্যে সিংহরা কী খায়?", এই টুলটি এজেন্টকে উইকিপিডিয়ায় উত্তর খুঁজতে দেয়।

কিভাবে: এটি একটি অ্যাডাপ্টার হিসাবে কাজ করে, আমাদের এজেন্টকে ল্যাংচেইন লাইব্রেরি থেকে পূর্ব-নির্মিত WikipediaQueryRun টুল ব্যবহার করার অনুমতি দেয়।

সম্পদ:

ধাপ 3: বিশেষজ্ঞ এজেন্টদের সংজ্ঞায়িত করা

b8a9504b21920969.jpeg

পরবর্তীতে আমরা গবেষক এজেন্ট এবং প্রতিক্রিয়া ফরম্যাটার এজেন্টকে সংজ্ঞায়িত করব। গবেষক এজেন্ট আমাদের অপারেশন "মস্তিষ্ক" হয়. এই এজেন্ট শেয়ার্ড State থেকে ব্যবহারকারীর প্রম্পট নেয়, এর শক্তিশালী টুলগুলি পরীক্ষা করে (চিড়িয়াখানার MCP সার্ভার টুল এবং উইকিপিডিয়া টুল), এবং সিদ্ধান্ত নেয় কোনটি ব্যবহার করতে হবে উত্তর খুঁজতে।

রেসপন্স ফরম্যাটার এজেন্টের ভূমিকা হল উপস্থাপনা। এটি নতুন তথ্য খুঁজে পেতে কোনো সরঞ্জাম ব্যবহার করে না। পরিবর্তে, এটি গবেষক এজেন্ট (রাজ্যের মাধ্যমে পাস) দ্বারা সংগৃহীত কাঁচা ডেটা নেয় এবং এটিকে বন্ধুত্বপূর্ণ, কথোপকথনমূলক প্রতিক্রিয়াতে রূপান্তর করতে এলএলএম-এর ভাষা দক্ষতা ব্যবহার করে।

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=[
        mcp_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 }}
    """
)

ধাপ 4: ওয়ার্কফ্লো এজেন্ট

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

কিভাবে: এটি একটি SequentialAgent , একটি বিশেষ ধরনের এজেন্ট যা নিজের জন্য চিন্তা করে না। এর একমাত্র কাজ হল sub_agents (গবেষক এবং ফর্ম্যাটার) একটি নির্দিষ্ট ক্রমানুসারে একটি তালিকা চালানো, স্বয়ংক্রিয়ভাবে শেয়ার করা মেমরি এক থেকে অন্যটিতে পাস করা।

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
    ]
)

চূড়ান্ত ধাপ: প্রধান কর্মপ্রবাহ একত্রিত করুন 1000b9d20f4e134b.jpeg

এই এজেন্টটিকে root_agent হিসাবে মনোনীত করা হয়েছে, যা ADK ফ্রেমওয়ার্ক সমস্ত নতুন কথোপকথনের সূচনা পয়েন্ট হিসাবে ব্যবহার করে। এর প্রাথমিক ভূমিকা হল সামগ্রিক প্রক্রিয়া সাজানো। এটি প্রাথমিক নিয়ামক হিসাবে কাজ করে, কথোপকথনের প্রথম পালা পরিচালনা করে।

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]
)

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

7. স্থাপনার জন্য আবেদন প্রস্তুত করুন

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

সোর্স কমান্ডটি চালিয়ে আপনার শেল সেশনে ভেরিয়েবলগুলি লোড করুন।

source .env

পরিষেবা অ্যাকাউন্টটিকে Vertex AI ব্যবহারকারীর ভূমিকা মঞ্জুর করুন, যা এটিকে ভবিষ্যদ্বাণী করতে এবং Google এর মডেলগুলিকে কল করার অনুমতি দেয়৷

# 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"

8. ADK CLI ব্যবহার করে এজেন্টকে মোতায়েন করুন

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

একটি .gcloudignore ফাইল তৈরি করুন

আমাদের স্থাপনার সময় কমাতে, আমরা একটি .gcloudignore ফাইল তৈরি করতে চাই। এটি করতে নিম্নলিখিত কমান্ডগুলি চালান। আপনার এজেন্ট স্থাপন করার জন্য নিম্নলিখিত কমান্ডগুলি।

cloudshell edit .gcloudignore

ক্লাউডশেল সম্পাদনা কমান্ড টার্মিনালের উপরের সম্পাদকে .gcloudignore ফাইলটি খুলবে। ফাইলটিতে নিম্নলিখিতটি লিখুন এবং এটি সংরক্ষণ করুন। তারপরে, পরবর্তী বিভাগে ডিপ্লোয় কমান্ড চালানোর জন্য টার্মিনালে ফিরে যান।

.venv/

স্থাপন করুন

আপনার এজেন্ট স্থাপন করতে নিম্নলিখিত কমান্ড চালান.

# Run the deployment command
adk deploy cloud_run \
  --project=$PROJECT_ID \
  --region=europe-west1 \
  --service_name=zoo-tour-guide \
  --with_ui \
  .
gcloud run services update zoo-tour-guide \
  --region=europe-west1 \
  --update-labels=dev-tutorial=codelab-adk

প্রম্পট গ্রহণ করুন

আপনাকে নিম্নলিখিতগুলির সাথে অনুরোধ করা হতে পারে:

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 চাপুন।

আপনাকে নিম্নলিখিতগুলির সাথে অনুরোধ করা হতে পারে:

Allow unauthenticated invocations to [your-service-name] (y/N)?.

এই ল্যাবের জন্য আমরা সহজ পরীক্ষার জন্য অননুমোদিত আহ্বানের অনুমতি দিতে চাই, y টাইপ করুন এবং এন্টার টিপুন।

সফলভাবে কার্যকর করার পরে, কমান্ডটি স্থাপন করা ক্লাউড রান পরিষেবার URL প্রদান করবে। (এটি দেখতে https://zoo-tour-guide-123456789.europe-west1.run.app এর মতো হবে)। পরবর্তী কাজের জন্য এই URL টি কপি করুন।

9. নিয়োজিত এজেন্ট পরীক্ষা করুন

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

আপনার ওয়েব ব্রাউজারে সর্বজনীন ক্লাউড রান সার্ভিস URL খুলুন। কারণ আপনি --with_ui flag ব্যবহার করেছেন, আপনার ADK বিকাশকারী UI দেখতে হবে৷

উপরের ডানদিকে Token Streaming এ টগল করুন।

আপনি এখন চিড়িয়াখানা এজেন্টের সাথে যোগাযোগ করতে পারেন।

hello টাইপ করুন এবং একটি নতুন কথোপকথন শুরু করতে এন্টার টিপুন।

ফলাফল পর্যবেক্ষণ করুন। এজেন্টকে তার শুভেচ্ছার সাথে দ্রুত প্রতিক্রিয়া জানাতে হবে:

"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?"

3244d2f6c3b03088.pnge135694253b1be41.png

এজেন্ট ফ্লো ব্যাখ্যা করা হয়েছে

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

1. চিড়িয়াখানা গ্রিটার (দ্য ওয়েলকাম ডেস্ক )

পুরো প্রক্রিয়া শুরু হয় অভিবাদন এজেন্ট দিয়ে।

এর কাজ: কথোপকথন শুরু করা। এর নির্দেশনা হল ব্যবহারকারীকে অভিবাদন জানানো এবং তারা কোন প্রাণী সম্পর্কে জানতে চায় তা জিজ্ঞাসা করা।

এটির টুল: যখন ব্যবহারকারী উত্তর দেয়, গ্রিটার তাদের সঠিক শব্দগুলি ক্যাপচার করতে (যেমন, "সিংহ সম্পর্কে বলুন") তার add_prompt_to_state টুল ব্যবহার করে এবং সিস্টেমের মেমরিতে সেভ করে।

হ্যান্ডঅফ: প্রম্পট সংরক্ষণ করার পরে, এটি অবিলম্বে তার সাব-এজেন্ট, ট্যুর_গাইড_ওয়ার্কফ্লোকে নিয়ন্ত্রণ করে।

2. ব্যাপক গবেষক (সুপার-গবেষক)

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

এর কাজ: ব্যবহারকারীর প্রশ্ন বিশ্লেষণ করা এবং একটি বুদ্ধিমান পরিকল্পনা তৈরি করা। এটি প্রয়োজন কিনা তা সিদ্ধান্ত নিতে ভাষা মডেলের শক্তিশালী টুল ব্যবহারের ক্ষমতা ব্যবহার করে:

  • চিড়িয়াখানার রেকর্ড থেকে অভ্যন্তরীণ ডেটা (MCP সার্ভারের মাধ্যমে)।
  • ওয়েব থেকে সাধারণ জ্ঞান (উইকিপিডিয়া API এর মাধ্যমে)।
  • অথবা, জটিল প্রশ্নের জন্য, উভয়.

এর ক্রিয়া: এটি সমস্ত প্রয়োজনীয় কাঁচা ডেটা সংগ্রহ করার জন্য প্রয়োজনীয় টুল(গুলি) চালায়। উদাহরণস্বরূপ, যদি জিজ্ঞাসা করা হয় "আমাদের সিংহের বয়স কত এবং তারা বন্য অঞ্চলে কী খায়?", এটি বয়সের জন্য MCP সার্ভার এবং ডায়েট তথ্যের জন্য উইকিপিডিয়া টুলকে কল করবে।

3. রেসপন্স ফরম্যাটার (উপস্থাপক)

একবার বিস্তৃত গবেষক সমস্ত তথ্য সংগ্রহ করলে, এটি চালানোর জন্য চূড়ান্ত এজেন্ট।

এর কাজ: চিড়িয়াখানা ট্যুর গাইডের বন্ধুত্বপূর্ণ ভয়েস হিসাবে কাজ করা। এটি কাঁচা ডেটা নেয় (যা একটি বা উভয় উত্স থেকে হতে পারে) এবং এটিকে পালিশ করে।

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

চূড়ান্ত ফলাফল: এই এজেন্ট দ্বারা উত্পন্ন পাঠ্যটি সম্পূর্ণ, বিস্তারিত উত্তর যা ব্যবহারকারী চ্যাট উইন্ডোতে দেখেন।

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

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

10. পরিবেশ পরিষ্কার করুন

gcloud run services delete zoo-tour-guide --region=europe-west1 --quiet
gcloud artifacts repositories delete cloud-run-source-deploy --location=europe-west1 --quiet

11. অভিনন্দন

কোডল্যাব সম্পূর্ণ করার জন্য অভিনন্দন।

আমরা কভার করেছি কি

  • কিভাবে ADK কমান্ড-লাইন ইন্টারফেসের সাথে স্থাপনার জন্য একটি পাইথন প্রকল্প গঠন করা যায়।
  • SequentialAgent এবং ParallelAgent ব্যবহার করে কিভাবে একটি মাল্টি-এজেন্ট ওয়ার্কফ্লো বাস্তবায়ন করবেন।
  • কিভাবে একটি দূরবর্তী MCP সার্ভারের সাথে সংযোগ করতে হয় MCPToolset ব্যবহার করে তার সরঞ্জামগুলি ব্যবহার করতে।
  • উইকিপিডিয়া API-এর মতো বাহ্যিক সরঞ্জামগুলিকে একীভূত করে অভ্যন্তরীণ ডেটা কীভাবে বৃদ্ধি করা যায়।
  • অ্যাডকে ডিপ্লোয় কমান্ড ব্যবহার করে ক্লাউড রানে সার্ভারবিহীন ধারক হিসাবে একজন এজেন্টকে কীভাবে মোতায়েন করবেন।

12. সমীক্ষা

আউটপুট:

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

শুধুমাত্র এটি মাধ্যমে পড়ুন এটি পড়ুন এবং ব্যায়াম সম্পূর্ণ করুন