1. ভূমিকা
এআই এজেন্টরা কেবল ততটাই কার্যকর যতটা তারা অ্যাক্সেস করতে পারে। বেশিরভাগ বাস্তব-বিশ্বের ডেটা ডাটাবেসে থাকে — এবং এজেন্টদের ডাটাবেসের সাথে সংযুক্ত করার অর্থ সাধারণত সংযোগ ব্যবস্থাপনা, কোয়েরি লজিক লেখা এবং আপনার এজেন্ট কোডের ভিতরে পাইপলাইন এম্বেড করা। যে এজেন্টের ডাটাবেস অ্যাক্সেসের প্রয়োজন হয় তারা এই কাজটি পুনরাবৃত্তি করে এবং প্রতিটি কোয়েরি পরিবর্তনের জন্য এজেন্টকে পুনরায় মোতায়েন করতে হয়।
এই কোডল্যাবটি একটি ভিন্ন পদ্ধতি দেখায়। আপনি আপনার ডাটাবেস টুলগুলিকে একটি YAML ফাইলে ঘোষণা করেন — স্ট্যান্ডার্ড SQL কোয়েরি, ভেক্টর সাদৃশ্য অনুসন্ধান, এমনকি স্বয়ংক্রিয় এম্বেডিং জেনারেশন — এবং MCP টুলবক্স ফর ডাটাবেস একটি MCP সার্ভার হিসাবে সমস্ত ডাটাবেস অপারেশন পরিচালনা করে। আপনার এজেন্ট কোডটি ন্যূনতম থাকে: টুলগুলি লোড করুন, কোনটি কল করবেন তা জেমিনিকে সিদ্ধান্ত নিতে দিন।
তুমি কী তৈরি করবে
"TechJobs"-এর জন্য একজন স্মার্ট জব বোর্ড অ্যাসিস্ট্যান্ট — জেমিনি দ্বারা চালিত একটি ADK এজেন্ট যা ডেভেলপারদের স্ট্যান্ডার্ড ফিল্টার (ভূমিকা, টেক স্ট্যাক) ব্যবহার করে টেক জব তালিকা ব্রাউজ করতে এবং "আমি AI চ্যাটবটগুলিতে কাজ করে একটি দূরবর্তী কাজ চাই" এর মতো প্রাকৃতিক ভাষার বর্ণনার মাধ্যমে কাজ আবিষ্কার করতে সহায়তা করে। এজেন্ট MCP টুলবক্স ফর ডাটাবেসের মাধ্যমে সম্পূর্ণরূপে ক্লাউড SQL PostgreSQL ডাটাবেস থেকে পড়ে এবং লেখে, যা সমস্ত ডাটাবেস অ্যাক্সেস পরিচালনা করে — ভেক্টর অনুসন্ধানের জন্য স্বয়ংক্রিয় এম্বেডিং জেনারেশন সহ। শেষ পর্যন্ত, টুলবক্স এবং এজেন্ট উভয়ই ক্লাউড রানে চলে।
তুমি কি শিখবে
- এমসিপি (মডেল কনটেক্সট প্রোটোকল) কীভাবে এআই এজেন্টদের জন্য টুল অ্যাক্সেসকে মানসম্মত করে এবং ডেটাবেসের জন্য এমসিপি টুলবক্স কীভাবে এটি ডাটাবেস অপারেশনে প্রয়োগ করে
- ADK এজেন্ট এবং ক্লাউড SQL এর মধ্যে মিডলওয়্যার হিসেবে ডেটাবেসের জন্য MCP টুলবক্স সেট আপ করুন PostgreSQL
-
tools.yamlএ ডাটাবেস টুলগুলিকে ঘোষণামূলকভাবে সংজ্ঞায়িত করুন — আপনার এজেন্টে কোনও ডাটাবেস কোড নেই -
ToolboxToolsetব্যবহার করে চলমান Toolbox সার্ভার থেকে টুল লোড করে এমন একটি ADK এজেন্ট তৈরি করুন। - ক্লাউড SQL এর বিল্ট-ইন
embedding()ফাংশন ব্যবহার করে ভেক্টর এম্বেডিং তৈরি করুন এবংpgvectorদিয়ে সিমান্টিক অনুসন্ধান সক্ষম করুন। - লেখার ক্রিয়াকলাপে স্বয়ংক্রিয় ভেক্টর ইনজেশনের জন্য
valueFromParamবৈশিষ্ট্যটি ব্যবহার করুন - ক্লাউড রানে টুলবক্স সার্ভার এবং ADK এজেন্ট উভয়ই স্থাপন করুন।
পূর্বশর্ত
- একটি Google ক্লাউড অ্যাকাউন্ট যার একটি ট্রায়াল বিলিং অ্যাকাউন্ট রয়েছে
- পাইথন এবং এসকিউএল এর সাথে প্রাথমিক পরিচিতি
- ADK, MCP টুলবক্স, অথবা
pgvectorসাথে পূর্ব অভিজ্ঞতার প্রয়োজন নেই।
2. আপনার পরিবেশ সেট আপ করুন
এই ধাপটি আপনার ক্লাউড শেল পরিবেশ প্রস্তুত করে, আপনার গুগল ক্লাউড প্রকল্প কনফিগার করে এবং রেফারেন্স রিপোজিটরি ক্লোন করে।
ওপেন ক্লাউড শেল
আপনার ব্রাউজারে Cloud Shell খুলুন। Cloud Shell এই কোডল্যাবের জন্য প্রয়োজনীয় সমস্ত সরঞ্জাম সহ একটি পূর্ব-কনফিগার করা পরিবেশ প্রদান করে। অনুরোধ করা হলে Authorize এ ক্লিক করুন।
তারপর টার্মিনাল খুলতে " View " -> " Terminal " এ ক্লিক করুন। আপনার ইন্টারফেসটি দেখতে এইরকম হওয়া উচিত।

এটি আমাদের প্রধান ইন্টারফেস হবে, উপরে IDE, নীচে টার্মিনাল
আপনার ওয়ার্কিং ডিরেক্টরি সেট আপ করুন
আপনার ওয়ার্কিং ডিরেক্টরি তৈরি করুন। এই কোডল্যাবে আপনার লেখা সমস্ত কোড এখানে থাকবে:
mkdir -p ~/build-agent-adk-toolbox-cloudsql
cloudshell workspace ~/build-agent-adk-toolbox-cloudsql && cd ~/build-agent-adk-toolbox-cloudsql
আপনার গুগল ক্লাউড প্রোজেক্ট সেট আপ করুন
লোকেশন ভেরিয়েবল দিয়ে .env ফাইলটি তৈরি করুন:
# For Vertex AI / Gemini API calls
echo "GOOGLE_CLOUD_LOCATION=global" > .env
# For Cloud SQL, Cloud Run, Artifact Registry
echo "REGION=us-central1" >> .env
আপনার কার্যকরী ডিরেক্টরিতে প্রকল্প সেটআপ স্ক্রিপ্টটি ডাউনলোড করুন:
curl -sL https://raw.githubusercontent.com/alphinside/cloud-trial-project-setup/main/setup_verify_trial_project.sh -o setup_verify_trial_project.sh
স্ক্রিপ্টটি চালান। এটি আপনার ট্রায়াল বিলিং অ্যাকাউন্ট যাচাই করে, একটি নতুন প্রকল্প তৈরি করে (অথবা বিদ্যমান একটি যাচাই করে), আপনার প্রকল্প আইডি বর্তমান ডিরেক্টরিতে একটি .env ফাইলে সংরক্ষণ করে এবং সক্রিয় প্রকল্পটি gcloud এ সেট করে।
bash setup_verify_trial_project.sh && source .env
স্ক্রিপ্টটি হবে:
- আপনার একটি সক্রিয় ট্রায়াল বিলিং অ্যাকাউন্ট আছে কিনা তা যাচাই করুন।
-
.envতে বিদ্যমান কোনও প্রকল্পের জন্য পরীক্ষা করুন (যদি থাকে) - একটি নতুন প্রকল্প তৈরি করুন অথবা বিদ্যমান প্রকল্পটি পুনরায় ব্যবহার করুন
- আপনার প্রকল্পের সাথে ট্রায়াল বিলিং অ্যাকাউন্টটি লিঙ্ক করুন
- প্রজেক্ট আইডিটি
.envতে সংরক্ষণ করুন। - প্রকল্পটিকে সক্রিয়
gcloudপ্রকল্প হিসেবে সেট করুন।
ক্লাউড শেল টার্মিনাল প্রম্পটে আপনার ওয়ার্কিং ডিরেক্টরির পাশে হলুদ টেক্সটটি পরীক্ষা করে প্রকল্পটি সঠিকভাবে সেট করা আছে কিনা তা যাচাই করুন। এটিতে আপনার প্রকল্প আইডি প্রদর্শিত হওয়া উচিত।

যদি আপনার ক্লাউড শেল সেশন এই কোডল্যাব চলাকালীন যেকোনো সময় রিসেট হয়ে যায়, তাহলে আপনার ওয়ার্কিং ডিরেক্টরিতে ফিরে যান এবং আপনার প্রোজেক্ট কনফিগারেশন পুনরুদ্ধার করতে bash setup_verify_trial_project.sh && source .env পুনরায় চালান। টার্মিনাল প্রম্পটে হলুদ প্রোজেক্ট আইডি টেক্সটটি পুনরায় প্রদর্শিত হবে তা নিশ্চিত করুন।
gcloud services enable \
aiplatform.googleapis.com \
sqladmin.googleapis.com \
compute.googleapis.com \
run.googleapis.com \
cloudbuild.googleapis.com \
artifactregistry.googleapis.com
- Vertex AI API (
aiplatform.googleapis.com) — আপনার এজেন্ট Gemini মডেল ব্যবহার করে, এবং Toolbox ভেক্টর অনুসন্ধানের জন্য এম্বেডিং API ব্যবহার করে। - ক্লাউড এসকিউএল অ্যাডমিন এপিআই (
sqladmin.googleapis.com) — আপনি একটি পোস্টগ্রেএসকিউএল ইনস্ট্যান্স সরবরাহ এবং পরিচালনা করেন। - কম্পিউট ইঞ্জিন API (
compute.googleapis.com) — ক্লাউড SQL ইনস্ট্যান্স তৈরির জন্য প্রয়োজনীয়। - ক্লাউড রান, ক্লাউড বিল্ড, আর্টিফ্যাক্ট রেজিস্ট্রি — এই কোডল্যাবের পরবর্তী সময়ে স্থাপনার ধাপে ব্যবহৃত হয়েছে
৩. ডাটাবেস ইনস্ট্যান্স তৈরি করুন
এই ধাপটি ব্যাকগ্রাউন্ডে ক্লাউড SQL ইনস্ট্যান্স তৈরি সেট আপ করে — এটি টিউটোরিয়ালটি চালিয়ে যাওয়ার সময় ব্যবস্থা করে।
ইনস্ট্যান্স তৈরি শুরু করুন
আপনার .env ফাইলে ডাটাবেস পাসওয়ার্ড যোগ করুন এবং এটি পুনরায় লোড করুন:
echo "DB_PASSWORD=techjobs-pwd-2025" >> .env
source .env
ক্লাউড SQL ইনস্ট্যান্স তৈরি শুরু করুন। এটি ব্যাকগ্রাউন্ডে চলে যাতে আপনি কাজ চালিয়ে যেতে পারেন:
gcloud sql instances create jobs-instance \
--database-version=POSTGRES_17 \
--tier=db-custom-1-3840 \
--edition=ENTERPRISE \
--region=$REGION \
--root-password=$DB_PASSWORD \
--enable-google-ml-integration \
--database-flags cloudsql.enable_google_ml_integration=on \
--quiet &
-
db-custom-1-3840হলENTERPRISEসংস্করণের সবচেয়ে ছোট ডেডিকেটেড-কোর ক্লাউড SQL স্তর (1 vCPU, 3.75 GB RAM)। আপনি এখানে আরও বিস্তারিত পড়তে পারেন। Vertex AI ML ইন্টিগ্রেশনের জন্য একটি ডেডিকেটেড কোর প্রয়োজন — শেয়ার্ড-কোর স্তর (db-f1-micro,db-g1-small) এটি সমর্থন করে না। -
--root-passwordডিফল্টpostgresব্যবহারকারীর জন্য পাসওয়ার্ড সেট করে। -
--enable-google-ml-integrationক্লাউড SQL-এর অন্তর্নির্মিত ইন্টিগ্রেশনকে Vertex AI-এর সাথে সক্ষম করে, যা আপনাকেembedding()ফাংশন ব্যবহার করে SQL থেকে সরাসরি এম্বেডিং মডেল কল করতে দেয়। -
&কমান্ডটি ব্যাকগ্রাউন্ডে চালায়।
এটি ব্যাকগ্রাউন্ডে চলবে, এরপর MCP টুলবক্স বাইনারি ডাউনলোড করা যাক। আপনি একই টার্মিনালে এটি করতে পারেন।
টুলবক্স বাইনারি ডাউনলোড করুন
এই টিউটোরিয়ালে আমরা MCP টুলবক্স ব্যবহার করব, সৌভাগ্যবশত এটি একটি পূর্ব-নির্মিত বাইনারি সহ আসে যা লিনাক্স পরিবেশে ব্যবহারের জন্য প্রস্তুত। আসুন এটি ব্যাকগ্রাউন্ডে ডাউনলোড করি কারণ এটি বেশ সময় নেয়।
cd ~/build-agent-adk-toolbox-cloudsql
curl -O https://storage.googleapis.com/genai-toolbox/v0.27.0/linux/amd64/toolbox &
এই প্রক্রিয়াটি বর্তমান ট্যাবে চলতে দিন (আমরা ইতিমধ্যেই এটি ব্যাকগ্রাউন্ডে চালাচ্ছি, তবে আউটপুট এখনও প্রদর্শিত হবে)। আসুন ক্লাউড শেলে একটি নতুন টার্মিনাল ট্যাব খুলি (+ আইকনে ক্লিক করুন) যাতে আমরা আরও মনোযোগী হতে পারি।

আপনার ওয়ার্কিং ডিরেক্টরিতে আবার যান এবং পূর্ববর্তী সেটআপ স্ক্রিপ্ট ব্যবহার করে প্রকল্পটি সক্রিয় করুন।
cd ~/build-agent-adk-toolbox-cloudsql
bash setup_verify_trial_project.sh && source .env
এই ধাপটি পাইথন প্রকল্প সেট আপ করে, নির্ভরতা ইনস্টল করে এবং ADK এজেন্ট ডিরেক্টরি স্ক্যাফোল্ড করে।
৪. এজেন্ট প্রকল্পটি শুরু করুন
পাইথন প্রকল্প সেট আপ করুন
uv হল একটি দ্রুত পাইথন প্যাকেজ এবং প্রজেক্ট ম্যানেজার যা Rust ( uv documentations ) তে লেখা। এই কোডল্যাবটি গতি এবং সরলতার জন্য এটি ব্যবহার করে।
একটি পাইথন প্রকল্প শুরু করুন এবং প্রয়োজনীয় নির্ভরতা যোগ করুন:
uv init
uv add google-adk==1.25.0 toolbox-adk==0.6.0
google-adk— গুগলের এজেন্ট ডেভেলপমেন্ট কিট, যার মধ্যে রয়েছে জেমিনি SDK-
toolbox-adk— ডাটাবেসের জন্য এমসিপি টুলবক্সের জন্য এডিকে ইন্টিগ্রেশন।
এজেন্ট ডিরেক্টরি কাঠামো তৈরি করুন
ADK একটি নির্দিষ্ট ফোল্ডার লেআউট আশা করে: আপনার এজেন্টের নামে একটি ডিরেক্টরি যার নাম __init__.py , agent.py , এবং .env । এটিতে সহায়তা করার জন্য, কাঠামোটি দ্রুত স্থাপন করার জন্য এটিতে বিল্ট-ইন কমান্ড রয়েছে:
uv run adk create jobs_agent \
--model gemini-2.5-flash \
--project ${GOOGLE_CLOUD_PROJECT} \
--region ${GOOGLE_CLOUD_LOCATION}
আপনার ডিরেক্টরিটি এখন এইরকম দেখাবে:
build-agent-adk-toolbox-cloudsql/ ├── jobs_agent/ │ ├── __init__.py │ ├── agent.py │ └── .env ├── pyproject.toml ├── .env (project setup — already exists) └── .venv/
৫. চাকরির তালিকার ডাটাবেস তৈরি করুন
এই ধাপে সিড ডেটা লেখা হয়, ক্লাউড SQL ইনস্ট্যান্সের প্রভিশনিং শেষ হওয়ার জন্য অপেক্ষা করা হয় এবং ১৫টি চাকরির তালিকা এবং তাদের বিবরণ এম্বেডিং সহ jobs টেবিল লোড করা হয়।
বীজ SQL লিখুন
আমরা ক্লাউড শেল এডিটরে seed.sql নামে একটি ফাইল তৈরি করব যেখানে চাকরির তালিকার বিষয়বস্তু থাকবে। এটি pgvector সাপোর্ট সহ jobs টেবিল তৈরি করবে এবং টেক কোম্পানিতে ১৫টি চাকরির তালিকা সন্নিবেশ করবে।
প্রথমে, নিম্নলিখিত কমান্ড ব্যবহার করে seed.sql ফাইলটি তৈরি করুন:
cloudshell edit seed.sql
তারপর, এই স্ক্রিপ্টগুলি ফাইলে কপি করুন
-- seed.sql
-- DISCLAIMER: These job listings are entirely fictional and created for tutorial
-- purposes only. Company names are used for illustrative context — the positions,
-- salaries, and descriptions do not reflect real openings.
CREATE EXTENSION IF NOT EXISTS google_ml_integration;
CREATE EXTENSION IF NOT EXISTS vector;
CREATE TABLE IF NOT EXISTS jobs (
id SERIAL PRIMARY KEY,
title VARCHAR NOT NULL,
company VARCHAR NOT NULL,
role VARCHAR NOT NULL,
tech_stack VARCHAR NOT NULL,
salary_range VARCHAR NOT NULL,
location VARCHAR NOT NULL,
openings INTEGER NOT NULL,
description TEXT NOT NULL,
description_embedding vector(3072)
);
INSERT INTO jobs (title, company, role, tech_stack, salary_range, location, openings, description) VALUES
('Senior Backend Engineer', 'Stripe', 'Backend', 'Go, PostgreSQL, gRPC, Kubernetes', '$180-250K/year', 'San Francisco, Hybrid', 3,
'Design and build high-throughput microservices powering payment infrastructure for millions of businesses. Optimize Go services for sub-100ms latency at scale, work with PostgreSQL and Redis for data persistence, and deploy on Kubernetes clusters handling billions of API calls.'),
('Machine Learning Engineer', 'Spotify', 'Data/AI', 'Python, TensorFlow, BigQuery, Vertex AI', '$170-230K/year', 'Stockholm, Remote', 2,
'Build and deploy ML models for music recommendation and personalization systems serving hundreds of millions of listeners. Design feature pipelines in BigQuery, train models using distributed computing, and serve predictions through real-time APIs processing thousands of requests per second.'),
('Frontend Engineer', 'Vercel', 'Frontend', 'React, TypeScript, Next.js', '$140-190K/year', 'Remote', 4,
'Build developer-facing dashboard interfaces and deployment tools used by millions of developers worldwide. Create responsive, accessible React components for project management, analytics, and real-time deployment monitoring with a focus on developer experience.'),
('DevOps Engineer', 'Datadog', 'DevOps', 'Terraform, GCP, Docker, Kubernetes, ArgoCD', '$160-220K/year', 'New York, Hybrid', 2,
'Manage cloud infrastructure powering an observability platform used by thousands of engineering teams. Automate deployment pipelines with ArgoCD, manage multi-cloud Kubernetes clusters, and implement infrastructure-as-code with Terraform across production environments.'),
('Mobile Engineer (Android)', 'Grab', 'Mobile', 'Kotlin, Jetpack Compose, GraphQL', '$120-170K/year', 'Singapore, Hybrid', 3,
'Develop features for a super-app serving millions of users across Southeast Asia. Build modern Android UIs with Jetpack Compose, integrate GraphQL APIs, and optimize app performance for diverse device capabilities and network conditions.'),
('Data Engineer', 'Airbnb', 'Data', 'Python, Apache Spark, Airflow, BigQuery', '$160-210K/year', 'San Francisco, Hybrid', 2,
'Build data pipelines that process booking, search, and pricing data for a global travel marketplace. Design ETL workflows with Apache Spark and Airflow, maintain data warehouses in BigQuery, and ensure data quality for analytics and machine learning teams.'),
('Full Stack Engineer', 'Revolut', 'Full Stack', 'TypeScript, Node.js, React, PostgreSQL', '$130-180K/year', 'London, Remote', 5,
'Build the next generation of financial products making banking accessible to millions of users across 35 countries. Develop real-time trading interfaces with React and WebSockets, build Node.js APIs handling market data streams, and design PostgreSQL schemas for financial transactions.'),
('Site Reliability Engineer', 'Cloudflare', 'SRE', 'Go, Prometheus, Grafana, GCP, Terraform', '$170-230K/year', 'Austin, Hybrid', 2,
'Ensure 99.99% uptime for a global network handling millions of requests per second. Define SLOs, build monitoring dashboards with Prometheus and Grafana, manage incident response, and automate infrastructure scaling across 300+ data centers worldwide.'),
('Cloud Architect', 'Google Cloud', 'Cloud', 'GCP, Terraform, Kubernetes, Python', '$200-280K/year', 'Seattle, Hybrid', 1,
'Help enterprises modernize their infrastructure on Google Cloud. Design multi-region architectures, lead migration projects from on-premises to GKE, and build reference implementations using Terraform and Cloud Foundation Toolkit.'),
('Backend Engineer (Payments)', 'Square', 'Backend', 'Java, Spring Boot, PostgreSQL, Kafka', '$160-220K/year', 'San Francisco, Hybrid', 3,
'Build payment processing systems handling millions of transactions for businesses of all sizes. Design event-driven architectures using Kafka, implement idempotent payment flows with Spring Boot, and ensure PCI-DSS compliance across all services.'),
('AI Engineer', 'Hugging Face', 'Data/AI', 'Python, LangChain, Vertex AI, FastAPI, PostgreSQL', '$150-210K/year', 'Paris, Remote', 2,
'Build AI-powered tools for the largest open-source ML community. Develop RAG pipelines that index and search model documentation, create conversational agents using LangChain, and deploy AI services with FastAPI on cloud infrastructure.'),
('Platform Engineer', 'Coinbase', 'Platform', 'Rust, Kubernetes, AWS, Terraform', '$180-250K/year', 'Remote', 0,
'Build the infrastructure platform for a leading cryptocurrency exchange. Develop high-performance matching engines in Rust, manage Kubernetes clusters for microservices, and design CI/CD pipelines that enable rapid feature deployment with zero downtime.'),
('QA Automation Engineer', 'Shopify', 'QA', 'Python, Selenium, Cypress, Jenkins', '$110-160K/year', 'Toronto, Hybrid', 3,
'Design and maintain automated test suites for a commerce platform powering millions of merchants. Build end-to-end test frameworks with Cypress and Selenium, integrate tests into Jenkins CI pipelines, and establish quality gates that prevent regressions in checkout and payment flows.'),
('Security Engineer', 'CrowdStrike', 'Security', 'Python, SIEM, Kubernetes, Penetration Testing', '$170-240K/year', 'Austin, On-site', 1,
'Protect enterprise customers from cyber threats on a leading endpoint security platform. Conduct penetration testing, design security monitoring with SIEM tools, implement zero-trust networking in Kubernetes environments, and lead incident response for security events.'),
('Product Engineer', 'GitLab', 'Full Stack', 'Go, React, PostgreSQL, Redis, GCP', '$140-200K/year', 'Remote', 4,
'Own features end-to-end for an all-in-one DevSecOps platform used by millions of developers. Build Go microservices for CI/CD pipelines, create React frontends for code review and project management, and collaborate with product managers to iterate on user-facing features using data-driven development.');
সীড স্ক্রিপ্ট দুটি PostgreSQL এক্সটেনশন ইনস্টল করে:
-
google_ml_integration—embedding()SQL ফাংশন প্রদান করে, যা SQL থেকে সরাসরি Vertex AI এম্বেডিং মডেলগুলিকে কল করে। এটি একটি ডাটাবেস-স্তরের এক্সটেনশন যাjobs_dbভিতরে ML ফাংশনগুলি উপলব্ধ করে। ইনস্ট্যান্স তৈরির সময় আপনি যে ইনস্ট্যান্স-স্তরের ফ্ল্যাগ (--enable-google-ml-integration) সেট করেন তা ক্লাউড SQL VM কে Vertex AI এ পৌঁছাতে দেয় — এক্সটেনশনটি এই নির্দিষ্ট ডাটাবেসের মধ্যে SQL ফাংশনগুলি উপলব্ধ করে। -
vector(pgvector) — এম্বেডিং সংরক্ষণ এবং অনুসন্ধানের জন্যvectorডেটা টাইপ এবং দূরত্ব অপারেটর যোগ করে।
description_embedding কলামটি হল vector(3072) — একটি pgvector কলাম যা 3072-মাত্রিক ভেক্টর সংরক্ষণ করে। আপাতত এটি NULL; আপনি পরবর্তী ধাপে embedding() ফাংশন ব্যবহার করে এম্বেডিং তৈরি এবং পূরণ করতে পারবেন।
ডাটাবেস সেটআপ সম্পূর্ণ করুন
আগের ধাপে আপনি যে ক্লাউড SQL ইনস্ট্যান্স তৈরি শুরু করেছিলেন তা এখনও চলমান থাকতে পারে এবং এখনও শেষ হয়নি। ইনস্ট্যান্সটি প্রস্তুত কিনা তা যাচাই করুন:
gcloud sql instances describe jobs-instance --format="value(state)"
আপনি নিম্নলিখিত আউটপুট দেখতে পাবেন
RUNNABLE

এরপর, ক্লাউড SQL ইনস্ট্যান্সের সার্ভিস অ্যাকাউন্টকে Vertex AI কল করার অনুমতি দিন। পরবর্তী ধাপে আপনি যে বিল্ট-ইন embedding() ফাংশনটি ব্যবহার করবেন তার জন্য এটি প্রয়োজন:
SERVICE_ACCOUNT=$(gcloud sql instances describe jobs-instance --format="value(serviceAccountEmailAddress)")
gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT \
--member="serviceAccount:$SERVICE_ACCOUNT" \
--role="roles/aiplatform.user" \
--quiet
এরপর, চাকরির তালিকার জন্য একটি ডেডিকেটেড ডাটাবেস তৈরি করুন:
gcloud sql databases create jobs_db --instance=jobs-instance
ডাটাবেস তৈরি হয়েছে কিনা তা নিশ্চিত করে আপনি আউটপুট দেখতে পাবেন:
Creating Cloud SQL database...done. Created database [jobs_db]. instance: jobs-instance name: jobs_db project: workshop-xxxxxxx
ডাটাবেস সংযুক্ত করুন এবং তৈরি করুন
ক্লাউড এসকিউএল অথ প্রক্সি শুরু করুন ( cloud-sql-proxy ক্লাউড শেলে আগে থেকে ইনস্টল করা আছে)। এটি ক্লাউড শেল থেকে আপনার ক্লাউড এসকিউএল ইনস্ট্যান্সের সাথে একটি নিরাপদ, প্রমাণিত সংযোগ প্রদান করে:

cloud-sql-proxy ${GOOGLE_CLOUD_PROJECT}:${REGION}:jobs-instance --port 5432 &
যদি প্রক্সি শুরু হয়, তাহলে টার্মিনালে আপনি এই আউটপুটগুলি দেখতে পাবেন:
... Authorizing with Application Default Credentials ... [workshop-xxxxxx:your-location:jobs-instance] Listening on 127.0.0.1:5432 ... The proxy has started successfully and is ready for new connections!
এখন বর্তমান টার্মিনালটি ক্লাউড এসকিউএল প্রক্সির লগ ক্রমাগত আউটপুট করে। আসুন ক্লাউড শেলে একটি নতুন টার্মিনাল ট্যাব খুলি (+ আইকনে ক্লিক করুন) যাতে আমরা আরও মনোযোগী হতে পারি।

আপনার ওয়ার্কিং ডিরেক্টরিতে আবার যান এবং পূর্ববর্তী সেটআপ স্ক্রিপ্ট ব্যবহার করে প্রকল্পটি সক্রিয় করুন।
cd ~/build-agent-adk-toolbox-cloudsql
bash setup_verify_trial_project.sh && source .env
তারপর, সীড স্ক্রিপ্টটি চালান।
psql "host=127.0.0.1 port=5432 dbname=jobs_db user=postgres password=$DB_PASSWORD" -f seed.sql
তুমি টার্মিনাল আউটপুট এভাবে দেখতে পাবে।
CREATE EXTENSION CREATE EXTENSION CREATE TABLE INSERT 0 15
তথ্য যাচাই করা যাক
psql "host=127.0.0.1 port=5432 dbname=jobs_db user=postgres password=$DB_PASSWORD" \
-c "SELECT title, company, role, openings FROM jobs ORDER BY role, title;"
আপনি একাধিক পদে ১৫টি চাকরির তালিকা দেখতে পাবেন:
title | company | role | openings ---------------------------------+----------------+-----------+---------- Senior Backend Engineer | Stripe | Backend | 3 Backend Engineer (Payments) | Square | Backend | 3 Cloud Architect | Google Cloud | Cloud | 1 ... (15 rows)
কাজের বিবরণের জন্য এম্বেডিং তৈরি করুন
jobs টেবিলের description_embedding কলামটি বর্তমানে NULL। ক্লাউড SQL এর অন্তর্নির্মিত google_ml_integration এক্সটেনশনটি একটি embedding() ফাংশন প্রদান করে যা SQL থেকে সরাসরি Vertex AI কল করে — কোন Python স্ক্রিপ্ট বা বহিরাগত SDK এর প্রয়োজন নেই।
ব্যাকগ্রাউন্ডে এম্বেডিং জেনারেশন শুরু করুন। এটি Vertex AI কে ১৫টি কাজের বিবরণের প্রতিটির জন্য gemini-embedding-001 মডেল ব্যবহার করে একটি 3072-মাত্রিক ভেক্টর তৈরি করতে বলে:
psql "host=127.0.0.1 port=5432 dbname=jobs_db user=postgres password=$DB_PASSWORD" \
-c "UPDATE jobs SET description_embedding = embedding('gemini-embedding-001', description)::vector;" &
স্ক্রিপ্টটি এই কাজটি করে:
-
embedding('gemini-embedding-001', description)— SQL থেকে সরাসরি Vertex AI এর Gemini embedding মডেলকে কল করে, প্রতিটি কাজেরdescriptionটেক্সট পাস করে। এটি হলgoogle_ml_integrationএক্সটেনশন যা আপনি seed script এ ইনস্টল করেছেন। -
::vector— ফিরে আসা ফ্লোট অ্যারেটিকে pgvector এরvectorটাইপে কাস্ট করে যাতে এটি সংরক্ষণ করা যায় এবং দূরত্ব অপারেটরদের সাথে জিজ্ঞাসা করা যায়। -
UPDATE১৫টি সারিতে চলে, প্রতিটি কাজের বিবরণে একটি ৩০৭২-মাত্রিক এম্বেডিং তৈরি করে। -
&কমান্ডটি ব্যাকগ্রাউন্ডে চালায় যাতে আপনি Vertex AI এম্বেডিং প্রক্রিয়া করার সময় কাজ চালিয়ে যেতে পারেন।
পূর্ববর্তী ব্যাকগ্রাউন্ড প্রক্রিয়া সম্পাদনের মতো, বর্তমান টার্মিনালটি প্রক্রিয়াটির লগ আউটপুট করবে। আসুন ক্লাউড শেলে একটি নতুন টার্মিনাল ট্যাব খুলি (+ আইকনে ক্লিক করুন) যাতে আমরা আরও মনোযোগী হতে পারি।

আপনার ওয়ার্কিং ডিরেক্টরিতে আবার যান এবং পূর্ববর্তী সেটআপ স্ক্রিপ্ট ব্যবহার করে প্রকল্পটি সক্রিয় করুন।
cd ~/build-agent-adk-toolbox-cloudsql
bash setup_verify_trial_project.sh && source .env
তারপর, আমরা পরবর্তী প্রক্রিয়ায় এগিয়ে যেতে পারি
৬. ডাটাবেসের জন্য MCP টুলবক্স কনফিগার করুন
এই ধাপে ডেটাবেসের জন্য MCP টুলবক্স প্রবর্তন করা হয়েছে, এটিকে আপনার ক্লাউড SQL ইনস্ট্যান্সের সাথে সংযোগ করার জন্য কনফিগার করা হয়েছে এবং দুটি স্ট্যান্ডার্ড SQL কোয়েরি টুল সংজ্ঞায়িত করা হয়েছে।
MCP কী এবং কেন টুলবক্স ব্যবহার করবেন?

MCP (মডেল কনটেক্সট প্রোটোকল) হল একটি উন্মুক্ত প্রোটোকল যা AI এজেন্টরা কীভাবে বহিরাগত সরঞ্জামগুলি আবিষ্কার করে এবং তাদের সাথে ইন্টারঅ্যাক্ট করে তা মানসম্মত করে। এটি একটি ক্লায়েন্ট-সার্ভার মডেল সংজ্ঞায়িত করে: এজেন্ট একটি MCP ক্লায়েন্ট হোস্ট করে এবং সরঞ্জামগুলি MCP সার্ভার দ্বারা প্রকাশিত হয়। যেকোনো MCP-সামঞ্জস্যপূর্ণ ক্লায়েন্ট যেকোনো MCP-সামঞ্জস্যপূর্ণ সার্ভার ব্যবহার করতে পারে — এজেন্টের প্রতিটি সরঞ্জামের জন্য কাস্টম ইন্টিগ্রেশন কোডের প্রয়োজন হয় না।

ডেটাবেসের জন্য MCP টুলবক্স হল একটি ওপেন-সোর্স MCP সার্ভার যা বিশেষভাবে ডাটাবেস অ্যাক্সেসের জন্য তৈরি। এটি ছাড়া, আপনি Python ফাংশন লিখতেন যা ডাটাবেস সংযোগগুলি খুলত, সংযোগ পুল পরিচালনা করত, SQL ইনজেকশন প্রতিরোধ করার জন্য প্যারামিটারাইজড কোয়েরি তৈরি করত, ত্রুটিগুলি পরিচালনা করত এবং আপনার এজেন্টের ভিতরে সেই সমস্ত কোড এম্বেড করত। প্রতিটি এজেন্ট যার ডাটাবেস অ্যাক্সেসের প্রয়োজন হয় তারা এই কাজটি পুনরাবৃত্তি করে। একটি কোয়েরি পরিবর্তন করার অর্থ এজেন্টকে পুনরায় মোতায়েন করা।
টুলবক্সের সাহায্যে আপনি একটি YAML ফাইল লিখবেন। প্রতিটি টুল একটি প্যারামিটারাইজড SQL স্টেটমেন্টের সাথে ম্যাপ করবে। টুলবক্স সংযোগ পুলিং, প্যারামিটারাইজড কোয়েরি, প্রমাণীকরণ এবং পর্যবেক্ষণযোগ্যতা পরিচালনা করবে। এজেন্ট থেকে টুলগুলিকে আলাদা করা হয় — এজেন্ট কোড স্পর্শ না করেই tools.yaml সম্পাদনা করে এবং টুলবক্স পুনরায় চালু করে একটি কোয়েরি আপডেট করুন। একই টুলগুলি ADK, LangGraph, LlamaIndex, অথবা যেকোনো MCP-সামঞ্জস্যপূর্ণ ফ্রেমওয়ার্ক জুড়ে কাজ করে।
টুল কনফিগারেশন লিখুন
এখন, আমাদের টুলস কনফিগারেশন সেট আপ করার জন্য ক্লাউড শেল এডিটরে tools.yaml নামে একটি ফাইল তৈরি করতে হবে।
cloudshell edit tools.yaml
ফাইলটি মাল্টি-ডকুমেন্ট YAML ব্যবহার করে — প্রতিটি ব্লক --- দ্বারা পৃথক করা একটি স্বতন্ত্র রিসোর্স। প্রতিটি রিসোর্সের একটি kind থাকে যা এটি কী তা ঘোষণা করে (ডাটাবেস সংযোগের জন্য sources , এজেন্ট-কলযোগ্য ক্রিয়াকলাপের জন্য tools ) এবং একটি type যা ব্যাকএন্ড নির্দিষ্ট করে (সোর্সের জন্য cloud-sql-postgres , SQL-ভিত্তিক সরঞ্জামগুলির জন্য postgres-sql )। একটি টুল তার উৎসকে name দিয়ে উল্লেখ করে, যা টুলবক্স জানে কোন সংযোগ পুলের বিরুদ্ধে কার্যকর করতে হবে। পরিবেশ ভেরিয়েবল ${VAR_NAME} সিনট্যাক্স ব্যবহার করে এবং স্টার্টআপে সমাধান করা হয়।
এবার, প্রথমে নিচের স্ক্রিপ্টগুলো tools.yaml ফাইলে কপি করা যাক।
# tools.yaml
# --- Data Source ---
kind: sources
name: jobs-db
type: cloud-sql-postgres
project: ${GOOGLE_CLOUD_PROJECT}
region: ${REGION}
instance: jobs-instance
database: jobs_db
user: postgres
password: ${DB_PASSWORD}
---
এই স্ক্রিপ্টটি এখানে নিম্নলিখিত রিসোর্সগুলিকে সংজ্ঞায়িত করে:
- Source (
jobs-db) — টুলবক্সকে আপনার ক্লাউড SQL PostgreSQL ইনস্ট্যান্সের সাথে কীভাবে সংযোগ করতে হয় তা বলে।cloud-sql-postgresটাইপটি অভ্যন্তরীণভাবে ক্লাউড SQL সংযোগকারী ব্যবহার করে, স্বয়ংক্রিয়ভাবে প্রমাণীকরণ এবং সুরক্ষিত সংযোগগুলি পরিচালনা করে।${GOOGLE_CLOUD_PROJECT},${REGION}এবং${DB_PASSWORD}প্লেসহোল্ডারগুলি স্টার্টআপে পরিবেশ ভেরিয়েবল থেকে সমাধান করা হয়।
এরপর, tools.yaml- এ --- চিহ্নের নিচে নিম্নলিখিত স্ক্রিপ্টটি যুক্ত করুন।
# --- Tool 1: Search jobs by role and/or tech stack ---
kind: tools
name: search-jobs
type: postgres-sql
source: jobs-db
description: >-
Search for job listings by role category and/or tech stack.
Use this tool when the developer wants to browse listings
by role (e.g., Backend, Frontend, Data) or find jobs
using a specific technology. Both parameters accept an
empty string to match all values.
statement: |
SELECT title, company, role, tech_stack, salary_range, location, openings
FROM jobs
WHERE ($1 = '' OR LOWER(role) = LOWER($1))
AND ($2 = '' OR LOWER(tech_stack) LIKE '%' || LOWER($2) || '%')
ORDER BY title
LIMIT 10
parameters:
- name: role
type: string
description: "The role category to filter by (e.g., 'Backend', 'Frontend', 'Data/AI', 'DevOps'). Use empty string for all roles."
- name: tech_stack
type: string
description: "A technology to search for in the tech stack (partial match, e.g., 'Python', 'Kubernetes'). Use empty string for all tech stacks."
---
# --- Tool 2: Get full details for a specific job ---
kind: tools
name: get-job-details
type: postgres-sql
source: jobs-db
description: >-
Get full details for a specific job listing including its description,
salary range, location, and number of openings. Use this tool when the
developer asks about a particular job by title or company.
statement: |
SELECT title, company, role, tech_stack, salary_range, location, openings, description
FROM jobs
WHERE LOWER(title) LIKE '%' || LOWER($1) || '%'
OR LOWER(company) LIKE '%' || LOWER($1) || '%'
parameters:
- name: search_term
type: string
description: "The job title or company name to look up (partial match supported)."
---
এই স্ক্রিপ্টটি এখানে নিম্নলিখিত রিসোর্সগুলিকে সংজ্ঞায়িত করে:
- টুল ১ এবং ২ (
search-jobs,get-job-details) — স্ট্যান্ডার্ড SQL কোয়েরি টুল। প্রতিটি টুলের নাম (এজেন্ট যা দেখে) একটি প্যারামিটারাইজড SQL স্টেটমেন্টের সাথে ম্যাপ করে (ডাটাবেস যা কার্যকর করে)। প্যারামিটারগুলি$1,$2অবস্থানগত স্থানধারক ব্যবহার করে। টুলবক্স এগুলিকে প্রস্তুত বিবৃতি হিসাবে কার্যকর করে, যা SQL ইনজেকশন প্রতিরোধ করে।
চলুন, tools.yaml- এ --- চিহ্নের নিচে নিম্নলিখিত স্ক্রিপ্টটি যুক্ত করি।
# --- Embedding Model ---
kind: embeddingModels
name: gemini-embedding
type: gemini
model: gemini-embedding-001
dimension: 3072
---
এই স্ক্রিপ্টটি এখানে নিম্নলিখিত রিসোর্সগুলিকে সংজ্ঞায়িত করে:
- এম্বেডিং মডেল (
gemini-embedding) — 3072-মাত্রিক টেক্সট এম্বেডিং তৈরি করার জন্য Gemini-এরgemini-embedding-001মডেলকে কল করার জন্য Toolbox কনফিগার করে। Toolbox প্রমাণীকরণের জন্য Application Default Credentials (ADC) ব্যবহার করে — Cloud Shell বা Cloud Run-এ কোনও API কী প্রয়োজন হয় না। মনে রাখবেন যে এখানে কনফিগার করা এইdimensionডাটাবেস সিড করার জন্য আমরা পূর্বে কনফিগার করা ডাইমেনশনের মতোই হতে হবে।
চলুন, tools.yaml- এ --- চিহ্নের নিচে নিম্নলিখিত স্ক্রিপ্টটি যুক্ত করি।
# --- Tool 3: Semantic search by description ---
kind: tools
name: search-jobs-by-description
type: postgres-sql
source: jobs-db
description: >-
Find jobs that match a natural language description of what the developer
is looking for. Use this tool when the developer describes their ideal job
using interests, work style, career goals, or project type rather than a
specific role or tech stack. Examples: "I want to work on AI chatbots,"
"a remote job at a fintech startup," "something involving infrastructure
and reliability."
statement: |
SELECT title, company, role, tech_stack, salary_range, location, description
FROM jobs
WHERE description_embedding IS NOT NULL
ORDER BY description_embedding <=> $1
LIMIT 5
parameters:
- name: search_query
type: string
description: "A natural language description of the kind of job the developer is looking for."
embeddedBy: gemini-embedding
---
এই স্ক্রিপ্টটি এখানে নিম্নলিখিত রিসোর্সগুলিকে সংজ্ঞায়িত করে:
- টুল ৩ (
search-jobs-by-description) — একটি ভেক্টর অনুসন্ধান টুল।search_queryপ্যারামিটারেembeddedBy: gemini-embeddingআছে, যা Toolbox কে raw টেক্সট আটকাতে, এম্বেডিং মডেলে পাঠাতে এবং SQL স্টেটমেন্টে ফলাফল ভেক্টর ব্যবহার করতে বলে।<=>অপারেটর হল pgvector এর কোসাইন দূরত্ব — ছোট মান মানে আরও অনুরূপ বর্ণনা।
অবশেষে, tools.yaml- এ --- চিহ্নের নীচে শেষ টুলটি যুক্ত করুন।
# --- Tool 4: Add a new job listing with automatic embedding ---
kind: tools
name: add-job
type: postgres-sql
source: jobs-db
description: >-
Add a new job listing to the platform. Use this tool when a user asks
to post a job that is not currently listed.
statement: |
INSERT INTO jobs (title, company, role, tech_stack, salary_range, location, openings, description, description_embedding)
VALUES ($1, $2, $3, $4, $5, $6, CAST($7 AS INTEGER), $8, $9)
RETURNING title, company
parameters:
- name: title
type: string
description: "The job title (e.g., 'Senior Backend Engineer')."
- name: company
type: string
description: "The company name (e.g., 'Stripe', 'Spotify')."
- name: role
type: string
description: "The role category (e.g., 'Backend', 'Frontend', 'Data/AI', 'DevOps')."
- name: tech_stack
type: string
description: "Comma-separated list of technologies (e.g., 'Python, FastAPI, GCP')."
- name: salary_range
type: string
description: "The salary range (e.g., '$150-200K/year')."
- name: location
type: string
description: "Work location and arrangement (e.g., 'Remote')."
- name: openings
type: string
description: "The number of open positions."
- name: description
type: string
description: "A short description of the job (2-3 sentences)."
- name: description_vector
type: string
description: "Auto-generated embedding vector for the job description."
valueFromParam: description
embeddedBy: gemini-embedding
এই স্ক্রিপ্টটি এখানে নিম্নলিখিত রিসোর্সগুলিকে সংজ্ঞায়িত করে:
- টুল ৪ (
add-job) — ভেক্টর ইনজেশন প্রদর্শন করে।description_vectorপ্যারামিটারে দুটি বিশেষ ক্ষেত্র রয়েছে: -
valueFromParam: description— টুলবক্সdescriptionপ্যারামিটার থেকে মানটি এতে কপি করে। LLM কখনই এই প্যারামিটারটি দেখতে পায় না। -
embeddedBy: gemini-embedding— টুলবক্স কপি করা টেক্সটকে SQL-এ পাঠানোর আগে একটি ভেক্টরে এম্বেড করে।
ফলাফল: একটি টুল কল কাঁচা বর্ণনার টেক্সট এবং এর ভেক্টর এম্বেডিং উভয়ই সংরক্ষণ করে, এজেন্ট এম্বেডিং সম্পর্কে কিছুই জানে না।
মাল্টি-ডকুমেন্ট YAML ফর্ম্যাট প্রতিটি রিসোর্সকে --- দিয়ে আলাদা করে। প্রতিটি ডকুমেন্টে kind , name , এবং type ক্ষেত্র থাকে যা এটি কী তা সংজ্ঞায়িত করে। সংক্ষেপে আমরা ইতিমধ্যে নিম্নলিখিত সমস্ত জিনিস কনফিগার করেছি:
- উৎস ডাটাবেস সংজ্ঞায়িত করুন
- স্ট্যান্ডার্ড ফিল্টার ব্যবহার করে ডাটাবেস কোয়েরি করার জন্য টুলস ( টুল ১ এবং ২ ) সংজ্ঞায়িত করুন।
- এম্বেডিং মডেল সংজ্ঞায়িত করুন
- ডাটাবেসে ভেক্টর অনুসন্ধান ( টুল 3 ) করার জন্য টুলটি সংজ্ঞায়িত করুন।
- ডাটাবেসে ভেক্টর ডেটা ইনজেশন ( টুল ৪) করার জন্য টুলটি সংজ্ঞায়িত করুন।
এম্বেডিং যাচাই করুন
টুলবক্স শুরু করার আগে, নিশ্চিত করুন যে ব্যাকগ্রাউন্ড এম্বেডিং জেনারেশন সম্পন্ন হয়েছে। পরীক্ষা করুন যে সমস্ত কাজের এখন এম্বেডিং আছে:
psql "host=127.0.0.1 port=5432 dbname=jobs_db user=postgres password=$DB_PASSWORD" \
-c "SELECT title, (description_embedding IS NOT NULL) AS has_embedding FROM jobs ORDER BY title;"
প্রতিটি সারিতে has_embedding কলামে t (true) দেখানো উচিত। যদি না হয়, তাহলে আপনি সমস্ত সারি এম্বেডিং তৈরির প্রক্রিয়া শেষ না হওয়া পর্যন্ত অপেক্ষা করতে পারেন।
title | has_embedding -----------------------------+--------------- AI Engineer | t Backend Engineer (Payments) | t Cloud Architect | t Data Engineer | t DevOps Engineer | t Frontend Engineer | t Full Stack Engineer | t
টুলবক্স সার্ভার শুরু করুন
সেটআপ ধাপে, আমরা ইতিমধ্যেই এক্সিকিউটেবল toolbox ডাউনলোড করেছি। নিশ্চিত করুন যে এই বাইনারি ফাইলটি বিদ্যমান এবং সফলভাবে ডাউনলোড করা হয়েছে, যদি না থাকে, তাহলে এটি ডাউনলোড করুন এবং শেষ হওয়া পর্যন্ত অপেক্ষা করুন।
cd ~/build-agent-adk-toolbox-cloudsql
if [ ! -f toolbox ]; then
curl -O https://storage.googleapis.com/genai-toolbox/v0.27.0/linux/amd64/toolbox
fi
chmod +x toolbox
প্রয়োজনীয় পরিবেশ ভেরিয়েবলগুলি রপ্তানি করুন এবং টুলবক্স শুরু করুন। GOOGLE_CLOUD_LOCATION এবং GOOGLE_GENAI_USE_VERTEXAI ভেরিয়েবলগুলি প্রয়োজনীয় কারণ কনফিগারেশনে একটি এম্বেডিং মডেল রয়েছে — GOOGLE_GENAI_USE_VERTEXAI Gemini SDK কে Vertex AI (গ্রাহক Gemini API এর পরিবর্তে) এর মাধ্যমে রুট করতে বলে, এবং GOOGLE_CLOUD_LOCATION কোন আঞ্চলিক এন্ডপয়েন্ট ব্যবহার করতে হবে তা বলে।
export GOOGLE_CLOUD_PROJECT=$GOOGLE_CLOUD_PROJECT
export GOOGLE_CLOUD_LOCATION=$GOOGLE_CLOUD_LOCATION
export GOOGLE_GENAI_USE_VERTEXAI=true
export DB_PASSWORD=$DB_PASSWORD
export REGION=$REGION
./toolbox --tools-file tools.yaml &
আপনি নীচের চিত্রের মতো সার্ভার প্রস্তুত কিনা তা নিশ্চিত করে আউটপুট দেখতে পাবেন:
... INFO "Initialized 0 authServices: " ... INFO "Initialized 1 embeddingModels: gemini-embedding" ... INFO "Initialized 4 tools: add-job, search-jobs, get-job-details, search-jobs-by-description" ... ... INFO "Server ready to serve!"
আগের ধাপের মতো, এটি আরেকটি প্রক্রিয়া তৈরি করবে এবং আউটপুট তৈরি করবে। আসুন ক্লাউড শেলে একটি নতুন টার্মিনাল ট্যাব খুলি (+ আইকনে ক্লিক করুন) যাতে আমরা আরও মনোযোগী হতে পারি।

আপনার ওয়ার্কিং ডিরেক্টরিতে আবার যান এবং পূর্ববর্তী সেটআপ স্ক্রিপ্ট ব্যবহার করে প্রকল্পটি সক্রিয় করুন।
cd ~/build-agent-adk-toolbox-cloudsql
bash setup_verify_trial_project.sh && source .env
সরঞ্জামগুলি যাচাই করুন
সমস্ত নিবন্ধিত সরঞ্জাম তালিকাভুক্ত করার জন্য টুলবক্স API অনুসন্ধান করুন:
curl -s http://localhost:5000/api/toolset | python3 -m json.tool
তুমি টুলগুলো তাদের বর্ণনা এবং পরামিতি সহ দেখতে পাবে। যেমন নিচে দেখানো হয়েছে।
...
"search-jobs-by-description": {
"description": "Find jobs that match a natural language description of what the developer is looking for. Use this tool when the developer describes their ideal job using interests, work style, career goals, or project type rather than a specific role or tech stack. Examples: \"I want to work on AI chatbots,\" \"a remote job at a fintech startup,\" \"something involving infrastructure and reliability.\"",
"parameters": [
{
"name": "search_query",
"type": "string",
"required": true,
"description": "A natural language description of the kind of job the developer is looking for.",
"authSources": []
}
],
"authRequired": []
}
...
সরাসরি search-jobs সরঞ্জামটি পরীক্ষা করুন:
curl -s -X POST http://localhost:5000/api/tool/search-jobs/invoke \
-H "Content-Type: application/json" \
-d '{"role": "Backend", "tech_stack": ""}' | jq '.result | fromjson'
উত্তরে আপনার বীজ তথ্য থেকে দুটি ব্যাকএন্ড ইঞ্জিনিয়ারিং কাজ থাকা উচিত।
[
{
"title": "Backend Engineer (Payments)",
"company": "Square",
"role": "Backend",
"tech_stack": "Java, Spring Boot, PostgreSQL, Kafka",
"salary_range": "$160-220K/year",
"location": "San Francisco, Hybrid",
"openings": 3
},
{
"title": "Senior Backend Engineer",
"company": "Stripe",
"role": "Backend",
"tech_stack": "Go, PostgreSQL, gRPC, Kubernetes",
"salary_range": "$180-250K/year",
"location": "San Francisco, Hybrid",
"openings": 3
}
]
৭. ADK এজেন্ট তৈরি করুন
এই ধাপটি ADK এজেন্টকে চলমান টুলবক্স সার্ভারের সাথে সংযুক্ত করে এবং চারটি টুল পরীক্ষা করে - স্ট্যান্ডার্ড কোয়েরি, সিমেন্টিক সার্চ এবং ভেক্টর ইনজেশন। এজেন্ট কোডটি ন্যূনতম: সমস্ত ডাটাবেস লজিক tools.yaml এ থাকে।
এজেন্টের পরিবেশ কনফিগার করুন
ADK শেল এনভায়রনমেন্ট থেকে GOOGLE_GENAI_USE_VERTEXAI , GOOGLE_CLOUD_PROJECT , এবং GOOGLE_CLOUD_LOCATION পড়ে, যা আপনি ইতিমধ্যেই পূর্ববর্তী ধাপে সেট করেছেন। এজেন্ট-নির্দিষ্ট ভেরিয়েবল হল TOOLBOX_URL — এটি এজেন্টের .env ফাইলে যুক্ত করুন:
echo -e "\nTOOLBOX_URL=http://127.0.0.1:5000" >> jobs_agent/.env
এজেন্ট মডিউল আপডেট করুন
ক্লাউড শেল এডিটরে jobs_agent/agent.py খুলুন।
cloudshell edit jobs_agent/agent.py
এবং নিম্নলিখিত কোড দিয়ে কন্টেন্টটি ওভাররাইট করুন:
# jobs_agent/agent.py
import os
from google.adk.agents import LlmAgent
from toolbox_adk import ToolboxToolset
TOOLBOX_URL = os.environ.get("TOOLBOX_URL", "http://127.0.0.1:5000")
toolbox = ToolboxToolset(TOOLBOX_URL)
root_agent = LlmAgent(
name="jobs_agent",
model="gemini-2.5-flash",
instruction="""You are a helpful assistant at "TechJobs," a tech job listing platform.
Your job:
- Help developers browse job listings by role or tech stack.
- Provide full details about specific positions, including salary range and number of openings.
- Recommend jobs based on natural language descriptions of what the developer is looking for.
- Add new job listings to the platform when asked.
When a developer asks about a specific job by title or company, use the get-job-details tool.
When a developer asks for a specific role category or tech stack, use the search-jobs tool.
When a developer describes what kind of job they want — by interest area, work style,
career goals, or project type — use the search-jobs-by-description tool for semantic search.
When in doubt between search-jobs and search-jobs-by-description, prefer
search-jobs-by-description — it searches job descriptions and finds more relevant matches.
If a position has no openings (openings is 0), let the developer know
and suggest similar alternatives from the search results.
Be conversational, knowledgeable, and concise.""",
tools=[toolbox],
)
লক্ষ্য করুন যে এখানে কোন ডাটাবেস কোড নেই — ToolboxToolset স্টার্টআপে Toolbox সার্ভারের সাথে সংযোগ স্থাপন করে এবং সমস্ত উপলব্ধ সরঞ্জাম লোড করে। এজেন্ট নাম অনুসারে সরঞ্জামগুলিকে ডাকে; Toolbox সেই কলগুলিকে ক্লাউড SQL এর বিপরীতে SQL কোয়েরিতে অনুবাদ করে।
স্থানীয় ডেভেলপমেন্টের জন্য TOOLBOX_URL এনভায়রনমেন্ট ভেরিয়েবলটি ডিফল্টভাবে http://127.0.0.1:5000 এ থাকে। পরে যখন আপনি ক্লাউড রানে স্থাপন করেন, তখন আপনি এটি টুলবক্স পরিষেবার ক্লাউড রান URL দিয়ে ওভাররাইড করেন — কোনও কোড পরিবর্তনের প্রয়োজন হয় না।
নির্দেশিকাটিতে বর্তমানে শুধুমাত্র দুটি স্ট্যান্ডার্ড টুল ( search-jobs এবং get-job-details ) উল্লেখ করা হয়েছে। পরবর্তী ধাপে আপনি যখন শব্দার্থিক অনুসন্ধান এবং ইনজেশন টুল যোগ করবেন তখন আপনি এটিকে প্রসারিত করবেন।
এজেন্ট পরীক্ষা করুন
ADK ডেভেলপার UI শুরু করুন:
cd ~/build-agent-adk-toolbox-cloudsql
uv run adk web
ক্লাউড শেলের ওয়েব প্রিভিউ বৈশিষ্ট্য ব্যবহার করে টার্মিনালে দেখানো URL (সাধারণত http://localhost:8000 ) খুলুন অথবা টার্মিনালে দেখানো URL এ ctrl + ক্লিক করুন । উপরের বাম কোণে এজেন্ট ড্রপডাউন থেকে jobs_agent নির্বাচন করুন।
স্ট্যান্ডার্ড কোয়েরি পরীক্ষা করুন
স্ট্যান্ডার্ড SQL টুলগুলি যাচাই করার জন্য এই প্রম্পটগুলি ব্যবহার করে দেখুন:
What backend engineering jobs do you have?
Any jobs using Kubernetes?
Tell me about the Cloud Architect position


শব্দার্থিক অনুসন্ধান পরীক্ষা করুন
প্রাকৃতিক ভাষার বর্ণনা ব্যবহার করে দেখুন যা কোনও নির্দিষ্ট ভূমিকা বা প্রযুক্তিগত স্ট্যাকের সাথে ম্যাপ করে না:
I want a remote job where I can work on AI and machine learning
Find me something in fintech with good work-life balance
I'm interested in infrastructure and reliability engineering
এজেন্ট কোয়েরির ধরণের উপর ভিত্তি করে সঠিক টুলটি বেছে নেওয়ার চেষ্টা করবে: স্ট্রাকচার্ড ফিল্টারগুলি search-jobs এর মাধ্যমে যায়, প্রাকৃতিক ভাষার বর্ণনাগুলি search-jobs-by-description এর মাধ্যমে যায়।

ভেক্টর ইনজেশন পরীক্ষা করুন
এজেন্টকে একটি নতুন চাকরি যোগ করতে বলুন:
Add a new job: 'Robotics Software Engineer' at Boston Dynamics, role Robotics, tech stack: Python, C++, ROS, Computer Vision, salary $160-230K/year, location Waltham MA, Hybrid, 2 openings. Description: Design and implement autonomous navigation and manipulation algorithms for next-generation robots. Work on perception pipelines using computer vision and lidar, develop motion planning software in C++ and Python, and test systems on real hardware in warehouse and logistics environments.

এখন এটি অনুসন্ধান করার চেষ্টা করুন:
Find me jobs involving autonomous systems and working with physical hardware
INSERT এর সময় এম্বেডিং স্বয়ংক্রিয়ভাবে তৈরি হয়েছিল — আলাদা কোনও ধাপের প্রয়োজন ছিল না।

এখন, আপনার কাছে ইতিমধ্যেই ADK, MCP টুলবক্স এবং CloudSQL ব্যবহার করে একটি সম্পূর্ণ কার্যকরী Agentic RAG অ্যাপ্লিকেশন রয়েছে। অভিনন্দন! ক্লাউড রানে এই অ্যাপগুলি স্থাপনের জন্য আরও এক ধাপ এগিয়ে যাওয়া যাক!
এখন, এগিয়ে যাওয়ার আগে দুবার Ctrl+C টিপে প্রক্রিয়াটি বন্ধ করে ডেভ UI বন্ধ করা যাক।
৮. ক্লাউড রানে স্থাপন করুন
এজেন্ট এবং টুলবক্স স্থানীয়ভাবে কাজ করে। এই ধাপে উভয়কেই ক্লাউড রান পরিষেবা হিসেবে স্থাপন করা হয় যাতে ইন্টারনেটের মাধ্যমে এগুলি অ্যাক্সেসযোগ্য হয়। টুলবক্স পরিষেবাটি ক্লাউড রানে একটি MCP সার্ভার হিসেবে চলে এবং এজেন্ট পরিষেবাটি এর সাথে সংযুক্ত হয়।
স্থাপনের জন্য টুলবক্স প্রস্তুত করুন
টুলবক্স পরিষেবার জন্য একটি স্থাপনার ডিরেক্টরি তৈরি করুন:
cd ~/build-agent-adk-toolbox-cloudsql
mkdir -p deploy-toolbox
cp toolbox tools.yaml deploy-toolbox/
টুলবক্সের জন্য ডকারফাইল তৈরি করুন। ক্লাউড শেল এডিটরে deploy-toolbox/Dockerfile খুলুন:
cloudshell edit deploy-toolbox/Dockerfile
এবং এতে নিম্নলিখিত স্ক্রিপ্টটি কপি করুন
# deploy-toolbox/Dockerfile
FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y ca-certificates && rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY toolbox tools.yaml ./
RUN chmod +x toolbox
EXPOSE 8080
CMD ["./toolbox", "--tools-file", "tools.yaml", "--address", "0.0.0.0", "--port", "8080"]
টুলবক্স বাইনারি এবং tools.yaml একটি ন্যূনতম ডেবিয়ান ছবিতে প্যাকেজ করা হয়েছে। ক্লাউড রান ট্র্যাফিককে 8080 পোর্টে নিয়ে যায়।
টুলবক্স পরিষেবা স্থাপন করুন
cd ~/build-agent-adk-toolbox-cloudsql
gcloud run deploy toolbox-service \
--source deploy-toolbox/ \
--region $REGION \
--set-env-vars "DB_PASSWORD=$DB_PASSWORD,GOOGLE_CLOUD_PROJECT=$GOOGLE_CLOUD_PROJECT,REGION=$REGION,GOOGLE_CLOUD_LOCATION=$GOOGLE_CLOUD_LOCATION,GOOGLE_GENAI_USE_VERTEXAI=true" \
--allow-unauthenticated \
--quiet
এই কমান্ডটি সোর্সটি ক্লাউড বিল্ডে জমা দেয়, একটি কন্টেইনার ইমেজ তৈরি করে, আর্টিফ্যাক্ট রেজিস্ট্রিতে পুশ করে এবং ক্লাউড রানে স্থাপন করে। এতে কয়েক মিনিট সময় লাগে — আসুন ক্লাউড শেলে একটি নতুন টার্মিনাল ট্যাব খুলি (+ আইকনে ক্লিক করুন) যাতে আমরা আরও মনোযোগী হতে পারি।

আপনার ওয়ার্কিং ডিরেক্টরিতে আবার যান এবং পূর্ববর্তী সেটআপ স্ক্রিপ্ট ব্যবহার করে প্রকল্পটি সক্রিয় করুন।
cd ~/build-agent-adk-toolbox-cloudsql
bash setup_verify_trial_project.sh && source .env
এজেন্টকে স্থাপনের জন্য প্রস্তুত করুন
টুলবক্স তৈরির সময়, এজেন্টের ডিপ্লয়মেন্ট ফাইলগুলি সেট আপ করুন।
প্রোজেক্ট রুটে একটি Dockerfile তৈরি করুন। ক্লাউড শেল এডিটরে Dockerfile খুলুন:
cloudshell edit Dockerfile
তারপর, নিম্নলিখিত বিষয়বস্তুটি অনুলিপি করুন
# Dockerfile
FROM ghcr.io/astral-sh/uv:python3.12-trixie-slim
WORKDIR /app
COPY pyproject.toml ./
COPY uv.lock ./
RUN uv sync --no-dev
COPY jobs_agent/ jobs_agent/
EXPOSE 8080
CMD ["uv", "run", "adk", "web", "--host", "0.0.0.0", "--port", "8080"]
এই ডকারফাইলে বেস ইমেজ হিসেবে ghcr.io/astral-sh/uv ব্যবহার করা হয়েছে, যার মধ্যে Python এবং uv উভয়ই আগে থেকে ইনস্টল করা আছে — pip এর মাধ্যমে আলাদাভাবে uv ইনস্টল করার প্রয়োজন নেই।
কন্টেইনার ইমেজ থেকে অপ্রয়োজনীয় ফাইল বাদ দিতে একটি .dockerignore ফাইল তৈরি করুন:
cloudshell edit .dockerignore
তারপর এতে নিম্নলিখিত স্ক্রিপ্টটি কপি করুন
# .dockerignore
.venv/
__pycache__/
*.pyc
.env
jobs_agent/.env
toolbox
tools.yaml
seed.sql
deploy-toolbox/
এজেন্ট পরিষেবা স্থাপন করুন
টুলবক্স স্থাপন সম্পূর্ণ হওয়ার জন্য অপেক্ষা করুন। নিম্নলিখিত কমান্ড ব্যবহার করে এর ক্লাউড রান URL পুনরুদ্ধার করুন।
TOOLBOX_URL=$(gcloud run services describe toolbox-service \
--region=$REGION \
--format='value(status.url)')
echo "Toolbox URL: $TOOLBOX_URL"
তুমি এইরকম একই রকম আউটপুট দেখতে পাবে।
Toolbox URL: https://toolbox-service-xxxxxx-xx.a.run.app
তারপর, আসুন যাচাই করি যে স্থাপন করা টুলবক্সটি কাজ করছে:
curl -s "$TOOLBOX_URL/api/toolset" | python3 -m json.tool | head -5
যদি এই উদাহরণের মতো আউটপুট দেখানো হয়, তাহলে স্থাপনা ইতিমধ্যেই সফল হয়েছে
{
"serverVersion": "0.27.0+binary.linux.amd64.c5524d3",
"tools": {
"add-job": {
"description": "Add a new job listing to the platform. Use this tool when a user asks to post a job that is not currently listed.",
এরপর, এজেন্টটি স্থাপন করা যাক, টুলবক্স URL কে একটি পরিবেশ ভেরিয়েবল হিসেবে পাস করে:
cd ~/build-agent-adk-toolbox-cloudsql
gcloud run deploy jobs-agent \
--source . \
--region $REGION \
--set-env-vars "TOOLBOX_URL=$TOOLBOX_URL,GOOGLE_CLOUD_PROJECT=$GOOGLE_CLOUD_PROJECT,GOOGLE_CLOUD_LOCATION=$GOOGLE_CLOUD_LOCATION,GOOGLE_GENAI_USE_VERTEXAI=TRUE" \
--allow-unauthenticated \
--quiet
এজেন্ট কোডটি পরিবেশ থেকে TOOLBOX_URL পড়ে (আপনি এটি আগে সেট আপ করেছিলেন)। স্থানীয়ভাবে এটি http://127.0.0.1:5000 নির্দেশ করে; ক্লাউড রানে এটি টুলবক্স পরিষেবা URL নির্দেশ করে। কোনও কোড পরিবর্তনের প্রয়োজন নেই।
মোতায়েন করা এজেন্ট পরীক্ষা করুন
এজেন্টের ক্লাউড রান URLটি পুনরুদ্ধার করুন:
AGENT_URL=$(gcloud run services describe jobs-agent \
--region=$REGION \
--format='value(status.url)')
echo "Agent URL: $AGENT_URL"
আপনার ব্রাউজারে URL টি খুলুন। ADK ডেভেলপার UI লোড হচ্ছে — আপনি স্থানীয়ভাবে যে ইন্টারফেসটি ব্যবহার করছেন, এখন ক্লাউড রানে চলছে।
ড্রপডাউন থেকে jobs_agent নির্বাচন করুন এবং পরীক্ষা করুন:
What backend engineering jobs do you have?
I want a remote job working on AI and machine learning
উভয় কোয়েরিই ডিপ্লয় করা পরিষেবার মাধ্যমে কাজ করে: ক্লাউড রানের এজেন্ট ক্লাউড রানের টুলবক্সে কল করে, যা ক্লাউড এসকিউএল কোয়েরি করে।
৯. অভিনন্দন / পরিষ্কার করা
আপনি একটি স্মার্ট জব বোর্ড সহকারী তৈরি এবং স্থাপন করেছেন যা একটি ADK এজেন্ট এবং ক্লাউড SQL PostgreSQL - উভয় স্ট্যান্ডার্ড SQL কোয়েরি এবং সিমেন্টিক ভেক্টর অনুসন্ধানের সাথে সেতু করার জন্য ডেটাবেসের জন্য MCP টুলবক্স ব্যবহার করে।
তুমি যা শিখেছো
- এমসিপি কীভাবে এআই এজেন্টদের জন্য টুল অ্যাক্সেসকে মানসম্মত করে এবং ডেটাবেসের জন্য এমসিপি টুলবক্স কীভাবে এটি বিশেষভাবে ডাটাবেস অপারেশনগুলিতে প্রয়োগ করে — কাস্টম ডাটাবেস কোডকে ঘোষণামূলক YAML কনফিগারেশন দিয়ে প্রতিস্থাপন করা হচ্ছে
-
cloud-sql-postgresসোর্স টাইপ ব্যবহার করে ক্লাউড এসকিউএল পোস্টগ্রেএসকিউএলকে টুলবক্স ডেটা সোর্স হিসেবে কীভাবে কনফিগার করবেন - SQL ইনজেকশন প্রতিরোধকারী প্যারামিটারাইজড স্টেটমেন্ট সহ স্ট্যান্ডার্ড SQL কোয়েরি টুলগুলি কীভাবে সংজ্ঞায়িত করবেন
- স্বয়ংক্রিয় কোয়েরি এম্বেডিংয়ের জন্য
embeddedByপ্যারামিটার ব্যবহার করে pgvector এবংgemini-embedding-001ব্যবহার করে ভেক্টর অনুসন্ধান কীভাবে সক্ষম করবেন -
valueFromParamকীভাবে স্বয়ংক্রিয় ভেক্টর ইনজেশন সক্ষম করে — LLM একটি টেক্সট বর্ণনা প্রদান করে, এবং টুলবক্স নীরবে টেক্সটের পাশাপাশি ভেক্টরটি কপি, এম্বেড এবং সংরক্ষণ করে - ADK-এর
ToolboxToolsetকীভাবে একটি চলমান Toolbox সার্ভার থেকে টুল লোড করে, এজেন্ট কোডকে ন্যূনতম রাখে এবং ডাটাবেস লজিককে সম্পূর্ণরূপে আলাদা করে রাখে - টুলবক্স এমসিপি সার্ভার এবং এডিকে এজেন্ট উভয়কেই ক্লাউড রানে পৃথক পরিষেবা হিসেবে কীভাবে স্থাপন করবেন
পরিষ্কার করা
এই কোডল্যাবে তৈরি রিসোর্সের জন্য আপনার Google ক্লাউড অ্যাকাউন্টে চার্জ এড়াতে, আপনি হয় পৃথক রিসোর্সগুলি মুছে ফেলতে পারেন অথবা সম্পূর্ণ প্রকল্পটি মুছে ফেলতে পারেন।
বিকল্প ১: প্রকল্পটি মুছে ফেলুন (প্রস্তাবিত)
পরিষ্কার করার সবচেয়ে সহজ উপায় হল প্রকল্পটি মুছে ফেলা। এটি প্রকল্পের সাথে সম্পর্কিত সমস্ত সংস্থান সরিয়ে দেয়।
gcloud projects delete $GOOGLE_CLOUD_PROJECT
বিকল্প ২: পৃথক সম্পদ মুছে ফেলুন
যদি আপনি প্রকল্পটি রাখতে চান কিন্তু শুধুমাত্র এই কোডল্যাবে তৈরি করা রিসোর্সগুলি সরিয়ে ফেলতে চান:
gcloud run services delete jobs-agent --region=$REGION --quiet
gcloud run services delete toolbox-service --region=$REGION --quiet
gcloud sql instances delete jobs-instance --quiet
gcloud artifacts repositories delete cloud-run-source-deploy --location=$REGION --quiet 2>/dev/null
