1. ভূমিকা
ওভারভিউ
এই কোডল্যাবে, আপনি ব্যাকএন্ড পরিষেবা হিসাবে ক্লাউড রানে একটি ADK এজেন্ট স্থাপন করবেন এবং তারপরে দ্বিতীয় ক্লাউড রান পরিষেবা হিসাবে ADK এজেন্টের জন্য একটি গ্র্যাডিও ফ্রন্টএন্ড স্থাপন করবেন৷ এই কোডল্যাবটি দেখায় যে কীভাবে আপনার ADK এজেন্ট পরিষেবাতে প্রমাণীকরণের প্রয়োজন হবে এবং গ্র্যাডিও ফ্রন্টএন্ড পরিষেবা থেকে এটিতে প্রমাণীকৃত কল করতে হবে।
আপনি কি শিখবেন
- ক্লাউড রানে কীভাবে একটি ADK এজেন্ট স্থাপন করবেন
- ক্লাউড রানে একটি গ্র্যাডিও অ্যাপ কীভাবে স্থাপন করবেন
- ক্লাউড রানে কীভাবে প্রমাণীকৃত পরিষেবা থেকে পরিষেবা কল করা যায়
2. APIs সক্ষম করুন৷
প্রথমে, আপনার Google ক্লাউড প্রকল্প সেট করুন।
gcloud config set project <YOUR_PROJECT_ID>
আপনি নিম্নলিখিত কমান্ডটি চালিয়ে আপনার Google ক্লাউড প্রকল্প নিশ্চিত করতে পারেন:
gcloud config get-value project
এই কোডল্যাবের জন্য নিম্নলিখিত APIগুলি সক্রিয় করা প্রয়োজন:
gcloud services enable run.googleapis.com \
compute.googleapis.com \
run.googleapis.com \
cloudbuild.googleapis.com \
artifactregistry.googleapis.com \
aiplatform.googleapis.com
3. সেটআপ এবং প্রয়োজনীয়তা
এই বিভাগে, আপনি কয়েকটি পরিষেবা অ্যাকাউন্ট তৈরি করবেন এবং তাদের উপযুক্ত IAM ভূমিকা প্রদান করবেন। প্রতিটি ক্লাউড রান সার্ভিসের নিজস্ব সার্ভিস অ্যাকাউন্ট থাকবে।
প্রথমে, এই কোডল্যাবের জন্য পরিবেশ ভেরিয়েবল সেট করুন যা এই কোডল্যাব জুড়ে ব্যবহার করা হবে।
export PROJECT_ID=<YOUR_PROJECT_ID>
export REGION=<YOUR_REGION>
export SERVICE_ACCOUNT_ADK="adk-agent-cr"
export SERVICE_ACCOUNT_ADDRESS_ADK=$SERVICE_ACCOUNT_ADK@$PROJECT_ID.iam.gserviceaccount.com
export SERVICE_ACCOUNT_GRADIO="adk-agent-gradio"
export SERVICE_ACCOUNT_ADDRESS_GRADIO=$SERVICE_ACCOUNT_GRADIO@$PROJECT_ID.iam.gserviceaccount.com
export AGENT_APP_NAME="multi_tool_agent"
এর পরে, ADK এজেন্টের জন্য পরিষেবা অ্যাকাউন্ট তৈরি করুন।
gcloud iam service-accounts create $SERVICE_ACCOUNT_ADK \
--display-name="Service account for adk agent on cloud run"
এবং ADK পরিষেবা অ্যাকাউন্টটিকে "Vertex AI ব্যবহারকারী" ভূমিকা প্রদান করুন৷
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$SERVICE_ACCOUNT_ADDRESS_ADK" \
--role="roles/aiplatform.user"
এখন, Gradio ফ্রন্টএন্ডের জন্য পরিষেবা অ্যাকাউন্ট তৈরি করুন
gcloud iam service-accounts create $SERVICE_ACCOUNT_GRADIO \
--display-name="Service account for gradio frontend cloud run"
এবং গ্র্যাডিও ফ্রন্টএন্ডকে ক্লাউড রান ইনভোকার ভূমিকা প্রদান করুন, যা এটিকে ক্লাউড রানে হোস্ট করা ADK এজেন্টকে কল করার অনুমতি দেবে।
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$SERVICE_ACCOUNT_ADDRESS_GRADIO" \
--role="roles/run.invoker"
4. একটি ADK অ্যাপ তৈরি করুন
পরবর্তী ধাপে, আপনি ADK কুইকস্টার্ট অ্যাপ্লিকেশনের জন্য কোড তৈরি করবেন।
দ্রষ্টব্য: ল্যাবের শেষে, আপনার ফাইলের কাঠামোটি নিম্নলিখিতগুলির মতো হওয়া উচিত:
- codelab-gradio-adk <-- you'll deploy the ADK agent from here
- gradio-frontend <-- you'll deploy the gradio app from here
- app.py
- requirements.txt
- multi_tool_agent
- __init__.py
- agent.py
- requirements.txt
প্রথমে, সামগ্রিক কোডল্যাবের জন্য একটি ডিরেক্টরি তৈরি করুন
mkdir codelab-gradio-adk
cd codelab-gradio-adk
এখন, ADK এজেন্ট পরিষেবার জন্য একটি ডিরেক্টরি তৈরি করুন।
mkdir multi_tool_agent && cd multi_tool_agent
নিম্নলিখিত বিষয়বস্তু সহ একটি __init__.py ফাইল তৈরি করুন:
from . import agent
একটি requirements.txt ফাইল তৈরি করুন:
google-adk
agent.py নামে একটি ফাইল তৈরি করুন
import datetime
from zoneinfo import ZoneInfo
from google.adk.agents import Agent
def get_weather(city: str) -> dict:
"""Retrieves the current weather report for a specified city.
Args:
city (str): The name of the city for which to retrieve the weather report.
Returns:
dict: status and result or error msg.
"""
if city.lower() == "new york":
return {
"status": "success",
"report": (
"The weather in New York is sunny with a temperature of 25 degrees"
" Celsius (77 degrees Fahrenheit)."
),
}
else:
return {
"status": "error",
"error_message": f"Weather information for '{city}' is not available.",
}
def get_current_time(city: str) -> dict:
"""Returns the current time in a specified city.
Args:
city (str): The name of the city for which to retrieve the current time.
Returns:
dict: status and result or error msg.
"""
if city.lower() == "new york":
tz_identifier = "America/New_York"
else:
return {
"status": "error",
"error_message": (
f"Sorry, I don't have timezone information for {city}."
),
}
tz = ZoneInfo(tz_identifier)
now = datetime.datetime.now(tz)
report = (
f'The current time in {city} is {now.strftime("%Y-%m-%d %H:%M:%S %Z%z")}'
)
return {"status": "success", "report": report}
root_agent = Agent(
name="weather_time_agent",
model="gemini-2.5-flash",
description=(
"Agent to answer questions about the time and weather in a city."
),
instruction=(
"You are a helpful agent who can answer user questions about the time and weather in a city."
),
tools=[get_weather, get_current_time],
)
5. ADK এজেন্ট মোতায়েন করুন
এই বিভাগে, আপনি ADK এজেন্টকে ক্লাউড রানে স্থাপন করবেন। তারপরে আপনি ADK দ্বারা সরবরাহ করা dev ওয়েব UI ব্যবহার করে স্থাপনা কাজ করেছে তা যাচাই করবেন। শেষ অবধি, এই পরিষেবাটিতে আপনার প্রমাণীকৃত কলের প্রয়োজন হবে৷
মূল ফোল্ডারে নেভিগেট করুন।
দ্রষ্টব্য: ADK এজেন্ট কোডে multi_tool_agent ফোল্ডারটিকে এর রুট ফোল্ডার হিসেবে অন্তর্ভুক্ত করতে হবে।
cd ..
প্রথমে, ক্লাউড রান পরিষেবা তৈরি করুন:
দ্রষ্টব্য: --with_ui একটি আসন্ন ধাপে দেখানো হিসাবে, Dev UI এর সাথে পরীক্ষা করার জন্য ঐচ্ছিক:
দ্রষ্টব্য: -- কমান্ড আপনাকে কমান্ড লাইন ফ্ল্যাগের মধ্য দিয়ে অন্তর্নিহিত gcloud run deploy কমান্ডে যাওয়ার অনুমতি দেয়।
দ্রষ্টব্য: uvx --from google-adk প্যাকেজ থেকে একটি কমান্ড কার্যকর করে। uvx একটি অস্থায়ী ভার্চুয়াল পরিবেশ তৈরি করবে, এটিতে google-adk ইনস্টল করবে, নির্দিষ্ট কমান্ড চালাবে এবং তারপর পরিবেশকে বিচ্ছিন্ন করবে।
uvx --from google-adk \
adk deploy cloud_run \
--project=$PROJECT_ID \
--region=$REGION \
--service_name=adk-agent-cr \
--with_ui \
./multi_tool_agent \
-- \
--service-account=$SERVICE_ACCOUNT_ADDRESS_ADK \
--allow-unauthenticated
এরপরে, URLটিকে একটি env var হিসাবে সংরক্ষণ করুন যা আপনি এই কোডল্যাবের দ্বিতীয় অংশে ব্যবহার করবেন
AGENT_SERVICE_URL=$(gcloud run services describe adk-agent-cr --region $REGION --format 'value(status.url)')
এখন, এজেন্ট চেষ্টা করুন
আপনার ওয়েব ব্রাউজারে পরিষেবা URLটি খুলুন এবং জিজ্ঞাসা করুন, tell me about the weather in new york । আপনি "নিউ ইয়র্কের আবহাওয়া 25 ডিগ্রি সেলসিয়াস (77 ডিগ্রি ফারেনহাইট) তাপমাত্রার সাথে রৌদ্রোজ্জ্বল" এর মতো একটি প্রতিক্রিয়া দেখতে হবে৷
সবশেষে, এজেন্টকে সুরক্ষিত করুন
আসুন এখন এজেন্টের কাছে নিরাপদে প্রবেশ করি। পরবর্তী বিভাগে, আপনি একটি ক্লাউড রান পরিষেবা স্থাপন করবেন যা এই ব্যাকএন্ড পরিষেবাতে একটি প্রমাণীকৃত কল করে।
gcloud run services remove-iam-policy-binding adk-agent-cr \
--member="allUsers" \
--role="roles/run.invoker" \
--region=$REGION
6. একটি গ্র্যাডিও ফ্রন্ট-এন্ড স্থাপন করুন
এই ধাপে, আপনি আপনার ADK এজেন্টের জন্য একটি গ্র্যাডিও ফ্রন্টএন্ড তৈরি করবেন
দ্রষ্টব্য: আপনার কাছে ADK এজেন্টের মতো একই পরিষেবাতে গ্র্যাডিও অ্যাপ থাকতে পারে। এই কোডল্যাবটি ক্লাউড রানে পরিষেবা কলগুলিতে প্রমাণীকৃত পরিষেবা কীভাবে করা যায় তা দেখানোর জন্য 2টি পৃথক পরিষেবা সরবরাহ করে।
প্রথমে, multi_tool_agent ফোল্ডারের পাশাপাশি একটি অ্যাপ তৈরি করুন
mkdir gradio-frontend && cd gradio-frontend
এরপরে, একটি requirements.txt ফাইল তৈরি করুন যাতে নিম্নলিখিতগুলি রয়েছে৷
gradio
requests
google-auth
এখন, একটি app.py ফাইল তৈরি করুন
import gradio as gr
import requests
import json
import uuid
import os
import google.auth.transport.requests
import google.oauth2.id_token
# https://weather-time-service2-392295011265.us-west4.run.app
BASE_URL = os.environ.get("AGENT_SERVICE_URL")
# multi_tool_agent
APP_NAME = os.environ.get("AGENT_APP_NAME")
# Generate a unique user ID for each session of the Gradio app
USER_ID = f"gradio-user-{uuid.uuid4()}"
# API Endpoints
CREATE_SESSION_URL = f"{BASE_URL}/apps/{APP_NAME}/users/{USER_ID}/sessions"
RUN_SSE_URL = f"{BASE_URL}/run_sse"
def get_id_token():
"""Get an ID token to authenticate with the other Cloud Run service."""
audience = BASE_URL
request = google.auth.transport.requests.Request()
id_token = google.oauth2.id_token.fetch_id_token(request, audience)
return id_token
def create_session() -> str | None:
"""Creates a new session and returns the session ID."""
try:
id_token = get_id_token()
headers = {"Authorization": f"Bearer {id_token}"}
response = requests.post(CREATE_SESSION_URL, headers=headers)
response.raise_for_status()
return response.json().get("id")
except Exception as e:
print(f"Error creating session: {e}")
return None
def query_agent(prompt: str):
"""Sends a prompt to the agent and returns the streamed response."""
session_id = create_session()
if not session_id:
return "Error: Could not create a session."
id_token = get_id_token()
headers = {
"Content-Type": "application/json",
"Accept": "text/event-stream",
"Authorization": f"Bearer {id_token}",
}
payload = {
"app_name": APP_NAME,
"user_id": USER_ID,
"session_id": session_id,
"new_message": {"role": "user", "parts": [{"text": prompt}]},
"streaming": True
}
full_response = ""
try:
with requests.post(RUN_SSE_URL, headers=headers, json=payload, stream=True) as response:
response.raise_for_status()
for chunk in response.iter_lines():
if chunk and chunk.decode('utf-8').startswith('data:'):
json_data = chunk.decode('utf-8')[len('data:'):].strip()
try:
data = json.loads(json_data)
text = data.get("content", {}).get("parts", [{}])[0].get("text", "")
if text:
full_response = text
except json.JSONDecodeError:
pass # Ignore chunks that are not valid JSON
return full_response
except requests.exceptions.RequestException as e:
return f"An error occurred: {e}"
iface = gr.Interface(
fn=query_agent,
inputs=gr.Textbox(lines=2, placeholder="e.g., What's the weather in new york?"),
outputs="text",
title="Weather and Time Agent",
description="Ask a question about the weather or time in a specific location.",
)
if __name__ == "__main__":
iface.launch()
7. আপনার গ্র্যাডিও অ্যাপ স্থাপন এবং পরীক্ষা করুন
এই ধাপে, আপনি ক্লাউড রানে ফ্রন্ট এন্ড গ্র্যাডিও অ্যাপ স্থাপন করবেন।
আপনি gradio অ্যাপ ডিরেক্টরিতে আছেন তা নিশ্চিত করুন।
pwd
আপনি codelab-gradio-adk/gradio-frontend দেখতে হবে
এখন আপনার গ্র্যাডিও অ্যাপ স্থাপন করুন।
দ্রষ্টব্য: যদিও এই গ্র্যাডিও ফ্রন্টএন্ড পরিষেবাটি একটি সর্বজনীনভাবে উপলব্ধ ওয়েবসাইট, ব্যাকএন্ড পরিষেবাটির প্রমাণীকরণ প্রয়োজন৷ আপনি কেন এটি করতে চান তা ব্যাখ্যা করার জন্য, আপনি এই ফ্রন্টএন্ড পরিষেবাতে ব্যবহারকারীর প্রমাণীকরণ (যেমন ফায়ারবেস প্রমাণীকরণ) যোগ করতে পারেন এবং তারপর শুধুমাত্র ব্যাকএন্ড পরিষেবাতে কল করার জন্য সাইন ইন করা ব্যবহারকারীদের অনুমতি দিতে পারেন।
gcloud run deploy my-adk-gradio-frontend \
--source . \
--region $REGION \
--allow-unauthenticated \
--set-env-vars AGENT_SERVICE_URL=$AGENT_SERVICE_URL,AGENT_APP_NAME=$AGENT_APP_NAME \
--service-account=$SERVICE_ACCOUNT_ADDRESS_GRADIO
একবার নিয়োজিত, জিজ্ঞাসা করুন what's the weather in new york? এবং আপনার প্রতিক্রিয়া পাওয়া উচিত The weather in New York is sunny with a temperature of 25 degrees Celsius (77 degrees Fahrenheit).
8. অভিনন্দন!
কোডল্যাব সম্পূর্ণ করার জন্য অভিনন্দন!
আমরা AI অ্যাপ এবং এজেন্ট ডকুমেন্টেশন হোস্ট করার ডকুমেন্টেশন পর্যালোচনা করার পরামর্শ দিই।
আমরা কভার করেছি কি
- ক্লাউড রানে কীভাবে একটি ADK এজেন্ট স্থাপন করবেন
- ক্লাউড রানে একটি গ্র্যাডিও অ্যাপ কীভাবে স্থাপন করবেন
- ক্লাউড রানে কীভাবে প্রমাণীকৃত পরিষেবা থেকে পরিষেবা কল করা যায়
9. পরিষ্কার করুন
অসাবধানতাবশত চার্জ এড়ানোর জন্য, উদাহরণস্বরূপ, যদি ক্লাউড রান পরিষেবাগুলি আপনার মাসিক ক্লাউড রান ইনভোকমেন্ট বরাদ্দের চেয়ে বিনামূল্যের স্তরে অজান্তেই বেশি বার আহ্বান করা হয়, তাহলে আপনি ধাপ 6 এ তৈরি করা ক্লাউড রান পরিষেবাটি মুছে ফেলতে পারেন৷
ক্লাউড রান পরিষেবাগুলি মুছতে, https://console.cloud.google.com/run-এ ক্লাউড রান ক্লাউড কনসোলে যান এবং my-adk-gradio-frontend এবং adk-agent-cr পরিষেবাগুলি মুছুন৷
সম্পূর্ণ প্রজেক্ট মুছে ফেলতে, ম্যানেজ রিসোর্সেস এ যান, ধাপ 2 এ আপনার তৈরি করা প্রজেক্টটি নির্বাচন করুন এবং মুছুন নির্বাচন করুন। আপনি যদি প্রকল্পটি মুছে ফেলেন, তাহলে আপনাকে আপনার ক্লাউড SDK-এ প্রকল্পগুলি পরিবর্তন করতে হবে৷ আপনি gcloud projects list চালিয়ে সমস্ত উপলব্ধ প্রকল্পের তালিকা দেখতে পারেন।