সিম্বাল ট্রানজিট: LangChain4J এবং MCP টুলবক্স জাভা SDK ব্যবহার করে একটি মাল্টি এজেন্ট সিস্টেম

1. সংক্ষিপ্ত বিবরণ

আধুনিক ভ্রমণকারীরা কথোপকথনের অভিজ্ঞতা আশা করেন। জটিল UI ফিল্টার নেভিগেট করার পরিবর্তে, তারা জিজ্ঞাসা করতে চান, "আমি কি সকাল ৯ টার বাসে আমার কুকুরটিকে বোস্টনে নিয়ে যেতে পারি?" এর জন্য এমন একজন এজেন্টের প্রয়োজন যিনি অসংগঠিত ডেটা (পিডিএফ নীতি) এবং কাঠামোগত ডেটা (এসকিউএল সময়সূচী) জুড়ে যুক্তি দিতে পারেন।

এই ল্যাবে, আমরা সিম্বাল ট্রানজিট এজেন্ট তৈরি করি:

  • LangChain4j: AI অর্কেস্ট্রেশনের জন্য প্রিমিয়ার জাভা ফ্রেমওয়ার্ক।
  • AlloyDB: একটি উচ্চ-কার্যক্ষমতাসম্পন্ন, PostgreSQL-সামঞ্জস্যপূর্ণ ডাটাবেস।
  • MCP টুলবক্স জাভা SDK: জাভা এজেন্টদের বহিরাগত সরঞ্জাম এবং ডেটা উৎসের সাথে সংযুক্ত করার একটি প্রমিত উপায়।

তুমি কী তৈরি করবে

e68388d533c9997e.png

সিম্বাল বাস এজেন্ট, একটি জাভা স্প্রিং বুট অ্যাপ্লিকেশন যার মধ্যে রয়েছে:

  1. এজেন্টদের সাথে টুল অর্কেস্ট্রেশনের জন্য AlloyDB ডাটাবেস এবং MCP টুলবক্স জাভা SDK।
  2. টুলবক্স ডিপ্লয়মেন্ট এবং অ্যাপ্লিকেশনের জন্য ক্লাউড রান (এজেন্ট ডিপ্লয়মেন্ট)।
  3. জাভা ১৭ সহ একটি স্প্রিং বুট অ্যাপ্লিকেশনে এজেন্ট এবং এলএলএম ফ্রেমওয়ার্কের জন্য LangChain4J লাইব্রেরি।

তুমি কি শিখবে

  • LangChain4J ব্যবহার করে ডেটাবেসের জন্য MCP টুলবক্স ব্যবহার করে বিশেষায়িত এজেন্ট এবং সাব-এজেন্ট তৈরি করার পদ্ধতি জাভা SDK
  • ডেটা এবং এআই-এর জন্য AlloyDB কীভাবে সেট আপ এবং ব্যবহার করবেন।
  • AlloyDB ডেটা টুলের সাথে এজেন্টদের সংযোগ করতে MCP টুলবক্স কীভাবে ব্যবহার করবেন।
  • ক্লাউড রান ব্যবহার করে সমাধানটি কীভাবে স্থাপন করবেন অথবা স্থানীয়ভাবে চালাবেন।

স্থাপত্য

  1. PostgreSQL এর জন্য AlloyDB: আমাদের রুট, নীতি এবং বুকিং রেকর্ড ধারণকারী উচ্চ-কার্যক্ষমতা সম্পন্ন অপারেশনাল ডাটাবেস হিসেবে কাজ করে। এটি ভেক্টর অনুসন্ধান এবং পুনরুদ্ধারকে ক্ষমতা দেয়।
  2. ডাটাবেসের জন্য MCP টুলবক্স জাভা SDK: "অর্কেস্ট্রেশন মায়েস্ট্রো" হিসেবে কাজ করে, যা অ্যালয়ডিবি ডেটাকে এক্সিকিউটেবল টুল হিসেবে প্রকাশ করে যা এজেন্টরা কল করতে পারে।

এমসিপি টুলবক্স জাভা এসডিকে এন্টারপ্রাইজ গ্রেড অ্যাপ্লিকেশনের জন্য আপনার ডাটাবেস টুল দিয়ে এজেন্টদের অনায়াসে সাজানো সম্ভব করে তোলে।

  1. LangChain4J: একটি ওপেন-সোর্স জাভা লাইব্রেরি যা জাভা অ্যাপ্লিকেশনগুলিতে লার্জ ল্যাঙ্গুয়েজ মডেল (LLM) এর ইন্টিগ্রেশনকে সহজ করে তোলে। এটি চ্যাটবট, এজেন্ট এবং রিট্রিভাল-অগমেন্টেড জেনারেশন (RAG) সিস্টেম সহ AI-চালিত অ্যাপ্লিকেশন তৈরির জন্য সরঞ্জাম এবং বিমূর্ততা প্রদান করে।
  2. ক্লাউড রান: একটি সম্পূর্ণরূপে পরিচালিত সার্ভারলেস প্ল্যাটফর্ম যা আপনাকে যেকোনো ভাষা, যেকোনো লাইব্রেরি, যেকোনো বাইনারিতে দ্রুত অ্যাপ বা ওয়েবসাইট তৈরি এবং স্থাপন করতে দেয়। আপনি আপনার পছন্দের ভাষা, ফ্রেমওয়ার্ক এবং লাইব্রেরি ব্যবহার করে কোড লিখতে পারেন, এটিকে একটি কন্টেইনার হিসেবে প্যাকেজ করতে পারেন, "gcloud run deploy" চালাতে পারেন এবং আপনার অ্যাপটি লাইভ হবে—প্রোডাকশনে চালানোর জন্য প্রয়োজনীয় সবকিছু সহ। একটি কন্টেইনার তৈরি করা সম্পূর্ণ ঐচ্ছিক। আপনি যদি Go, Node.js, Python, Java, .NET Core, অথবা Ruby ব্যবহার করেন, তাহলে আপনি যে ভাষা ব্যবহার করছেন তার জন্য সেরা অনুশীলনগুলি ব্যবহার করে আপনার জন্য কন্টেইনার তৈরি করে এমন সোর্স-ভিত্তিক স্থাপনার বিকল্পটি ব্যবহার করতে পারেন।

আবশ্যকতা

  • একটি ব্রাউজার, যেমন ক্রোম বা ফায়ারফক্স
  • বিলিং সক্ষম করা একটি Google ক্লাউড প্রকল্প।
  • SQL এবং Java এর সাথে প্রাথমিক পরিচিতি।

2. শুরু করার আগে

একটি প্রকল্প তৈরি করুন

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

ক্লাউড শেল বোতামের ছবি সক্রিয় করুন

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

অন্যথায়, আপনি এর জন্য gcloud কমান্ড ব্যবহার করতে পারেন। gcloud কমান্ড এবং ব্যবহারের জন্য ডকুমেন্টেশন দেখুন।

সমস্যা সমাধান এবং সমস্যা সমাধান

"ঘোস্ট প্রজেক্ট" সিন্ড্রোম

আপনি gcloud config set project চালাচ্ছিলেন, কিন্তু আপনি আসলে Console UI তে একটি ভিন্ন প্রকল্প দেখছেন। উপরের বাম ড্রপডাউনে প্রকল্প আইডিটি পরীক্ষা করুন!

বিলিং ব্যারিকেড

তুমি প্রজেক্টটি চালু করেছো, কিন্তু বিলিং অ্যাকাউন্ট ভুলে গেছো। AlloyDB একটি উচ্চ-কার্যক্ষমতাসম্পন্ন ইঞ্জিন; "গ্যাস ট্যাঙ্ক" (বিলিং) খালি থাকলে এটি চালু হবে না।

এপিআই প্রচার ল্যাগ

তুমি "এনিমেল এপিআই" ক্লিক করেছো, কিন্তু কমান্ড লাইনে এখনও Service Not Enabled লেখা আছে। ৬০ সেকেন্ড সময় দাও। ক্লাউডের নিউরনগুলিকে জাগিয়ে তোলার জন্য একটু সময় প্রয়োজন।

কোটা কোয়াগস

যদি আপনি একটি নতুন ট্রায়াল অ্যাকাউন্ট ব্যবহার করেন, তাহলে AlloyDB ইনস্ট্যান্সের জন্য আপনার আঞ্চলিক কোটা পূরণ হতে পারে। যদি us-central1 ব্যর্থ হয়, তাহলে us-east1 চেষ্টা করুন।

"লুকানো" পরিষেবা এজেন্ট

কখনও কখনও AlloyDB সার্ভিস এজেন্টকে স্বয়ংক্রিয়ভাবে aiplatform.user ভূমিকা দেওয়া হয় না । যদি আপনার SQL কোয়েরিগুলি পরে জেমিনির সাথে কথা বলতে না পারে, তাহলে এটি সাধারণত দোষী।

৩. ডাটাবেস সেটআপ

আমাদের অ্যাপ্লিকেশনের মূলে রয়েছে PostgreSQL-এর জন্য AlloyDB । আমরা এর শক্তিশালী ভেক্টর ক্ষমতা এবং ইন্টিগ্রেটেড কলামার ইঞ্জিন ব্যবহার করে 50,000+ SCM রেকর্ডের জন্য এম্বেডিং তৈরি করেছি। এটি প্রায় রিয়েল-টাইম ভেক্টর বিশ্লেষণ সক্ষম করে, যা আমাদের এজেন্টদের মিলিসেকেন্ডে বিশাল ডেটাসেট জুড়ে ইনভেন্টরি অসঙ্গতি বা লজিস্টিক ঝুঁকি সনাক্ত করতে দেয়।

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

চলুন একটি AlloyDB ক্লাস্টার, ইনস্ট্যান্স এবং টেবিল তৈরি করি যেখানে পরীক্ষার ডেটাসেট লোড করা হবে।

  1. বোতামে ক্লিক করুন অথবা নীচের লিঙ্কটি আপনার ব্রাউজারে কপি করুন যেখানে আপনার Google Cloud Console ব্যবহারকারী লগ ইন করেছেন।

বিকল্পভাবে , আপনি আপনার প্রকল্প থেকে ক্লাউড শেল টার্মিনালে যেতে পারেন যেখানে আপনি বিলিং অ্যাকাউন্টটি খালাস করেছেন, এবং গিটহাব রেপো ক্লোন করতে পারেন এবং নীচের কমান্ডগুলি ব্যবহার করে প্রকল্পে নেভিগেট করতে পারেন:

git clone https://github.com/AbiramiSukumaran/easy-alloydb-setup

cd easy-alloydb-setup
  1. এই ধাপটি সম্পন্ন হলে রেপোটি আপনার স্থানীয় ক্লাউড শেল এডিটরে ক্লোন করা হবে এবং আপনি প্রজেক্ট ফোল্ডার থেকে নীচের কমান্ডটি চালাতে সক্ষম হবেন (আপনি প্রজেক্ট ডিরেক্টরিতে আছেন তা নিশ্চিত করা গুরুত্বপূর্ণ):
sh run.sh
  1. এখন UI ব্যবহার করুন (টার্মিনালে লিঙ্কে ক্লিক করে অথবা টার্মিনালে "প্রিভিউ অন ওয়েব" লিঙ্কে ক্লিক করে)।
  2. শুরু করার জন্য প্রকল্প আইডি, ক্লাস্টার এবং উদাহরণের নামের জন্য আপনার বিবরণ লিখুন।
  3. লগগুলি স্ক্রোল করার সময় কফি খেয়ে নাও এবং পর্দার আড়ালে এটি কীভাবে এটি করছে তা আপনি এখানে পড়তে পারেন।

সমস্যা সমাধান এবং সমস্যা সমাধান

"ধৈর্য" সমস্যা

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

অঞ্চলের মিল নেই

যদি আপনি us-central1 এ আপনার API গুলি সক্রিয় করে থাকেন কিন্তু asia-south1 এ ক্লাস্টারটি সরবরাহ করার চেষ্টা করেন, তাহলে আপনার কোটা সংক্রান্ত সমস্যা বা পরিষেবা অ্যাকাউন্টের অনুমতি বিলম্বিত হতে পারে। পুরো ল্যাবের জন্য একটি অঞ্চলে আটকে থাকুন!

জম্বি ক্লাস্টার

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

ক্লাউড শেল টাইমআউট

যদি আপনার কফি ব্রেক ৩০ মিনিটের হয়, তাহলে ক্লাউড শেল স্লিপ মোডে যেতে পারে এবং sh run.sh প্রক্রিয়াটি সংযোগ বিচ্ছিন্ন করতে পারে। ট্যাবটি সক্রিয় রাখুন!

৪. স্কিমা প্রভিশনিং

আপনার AlloyDB ক্লাস্টার এবং ইনস্ট্যান্স চালু হয়ে গেলে, AI এক্সটেনশনগুলি সক্ষম করতে এবং স্কিমাটি সরবরাহ করতে AlloyDB স্টুডিও SQL এডিটরে যান।

1e3ac974b18a8113.png সম্পর্কে

আপনার ইনস্ট্যান্স তৈরি শেষ না হওয়া পর্যন্ত আপনাকে অপেক্ষা করতে হতে পারে। একবার এটি হয়ে গেলে, ক্লাস্টার তৈরি করার সময় তৈরি করা শংসাপত্রগুলি ব্যবহার করে AlloyDB-তে সাইন ইন করুন। PostgreSQL-এ প্রমাণীকরণের জন্য নিম্নলিখিত ডেটা ব্যবহার করুন:

  • ব্যবহারকারীর নাম: " postgres "
  • ডাটাবেস: " postgres "
  • পাসওয়ার্ড: " alloydb " (অথবা তৈরির সময় আপনি যা সেট করেছেন)

AlloyDB স্টুডিওতে সফলভাবে প্রমাণীকরণ করার পরে, SQL কমান্ডগুলি এডিটরে প্রবেশ করানো হবে। আপনি শেষ উইন্ডোর ডানদিকে প্লাস ব্যবহার করে একাধিক এডিটর উইন্ডো যুক্ত করতে পারেন।

28cb9a8b6aa0789f.png সম্পর্কে

আপনি এডিটর উইন্ডোতে AlloyDB-এর জন্য কমান্ড লিখবেন, প্রয়োজনে Run, Format এবং Clear অপশন ব্যবহার করে।

এক্সটেনশনগুলি সক্ষম করুন

এই অ্যাপটি তৈরির জন্য, আমরা pgvector এবং google_ml_integration এক্সটেনশনগুলি ব্যবহার করব। pgvector এক্সটেনশন আপনাকে ভেক্টর এম্বেডিংগুলি সংরক্ষণ এবং অনুসন্ধান করতে দেয়। google_ml_integration এক্সটেনশনটি SQL-এ ভবিষ্যদ্বাণী পেতে Vertex AI ভবিষ্যদ্বাণী এন্ডপয়েন্টগুলি অ্যাক্সেস করার জন্য আপনি যে ফাংশনগুলি ব্যবহার করেন তা প্রদান করে। নিম্নলিখিত DDLগুলি চালিয়ে এই এক্সটেনশনগুলি সক্ষম করুন :

CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE;
CREATE EXTENSION IF NOT EXISTS vector;

অনুমতি দিন

"এমবেডিং" ফাংশনে এক্সিকিউট করার জন্য নিচের স্টেটমেন্টটি রান করুন:

GRANT EXECUTE ON FUNCTION embedding TO postgres;

AlloyDB পরিষেবা অ্যাকাউন্টে Vertex AI ব্যবহারকারীর ভূমিকা প্রদান করুন

গুগল ক্লাউড IAM কনসোল থেকে, AlloyDB পরিষেবা অ্যাকাউন্টকে (যা দেখতে এরকম: service-<<PROJECT_NUMBER>>@gcp-sa-alloydb.iam.gserviceaccount.com) "Vertex AI User" ভূমিকায় অ্যাক্সেস দিন। PROJECT_NUMBER-এ আপনার প্রকল্প নম্বর থাকবে।

বিকল্পভাবে আপনি ক্লাউড শেল টার্মিনাল থেকে নীচের কমান্ডটি চালাতে পারেন:

PROJECT_ID=$(gcloud config get-value project)


gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:service-$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")@gcp-sa-alloydb.iam.gserviceaccount.com" \
--role="roles/aiplatform.user"

একটি টেবিল তৈরি করুন

AlloyDB স্টুডিওতে নিচের DDL স্টেটমেন্টটি ব্যবহার করে আপনি একটি টেবিল তৈরি করতে পারেন:

DROP TABLE IF EXISTS transit_policies;
DROP TABLE IF EXISTS bus_schedules;
DROP TABLE IF EXISTS bookings;

-- Table 1: Transit Policies (Unstructured Data for RAG)
CREATE TABLE transit_policies (
    policy_id SERIAL PRIMARY KEY,
    category VARCHAR(50),
    policy_text TEXT,
    policy_embedding vector(768) 
);

-- Table 2: Intercity Bus Schedules (Structured Data)
CREATE TABLE bus_schedules (
    trip_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    origin_city VARCHAR(100),
    destination_city VARCHAR(100),
    departure_time TIMESTAMP,
    arrival_time TIMESTAMP,
    available_seats INT DEFAULT 50,
    ticket_price DECIMAL(6,2)
);

-- Table 3: Booking Ledger (Transactional Action Data)
CREATE TABLE bookings (
    booking_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    trip_id UUID REFERENCES bus_schedules(trip_id),
    passenger_id VARCHAR(100),
    status VARCHAR(20) DEFAULT 'CONFIRMED',
    booking_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

policy_embedding কলামটি কিছু টেক্সট ফিল্ডের ভেক্টর মান সংরক্ষণের অনুমতি দেবে।

ডেটা ইনজেশন

সংশ্লিষ্ট টেবিলে রেকর্ড বাল্ক ইনসার্ট করতে নিচের SQL স্টেটমেন্টের সেটটি চালান:

  1. AlloyDB-তে আনস্ট্রাকচার্ড পলিসি সন্নিবেশ করান এবং নেটিভভাবে রিয়েল এমবেডিং তৈরি করুন
-- 1. Insert Unstructured Policies and GENERATE REAL EMBEDDINGS natively in AlloyDB

INSERT INTO transit_policies (category, policy_text, policy_embedding) 
VALUES 
('Pets', 'Service animals are always welcome. Small pets (under 25 lbs) are allowed in secure carriers for a $25 fee. Large dogs are not permitted on standard coaches.', embedding('text-embedding-005', 'Service animals are always welcome. Small pets (under 25 lbs) are allowed in secure carriers for a $25 fee. Large dogs are not permitted on standard coaches.')),
('Luggage', 'Each passenger is allowed one carry-on (up to 15 lbs) and two stowed bags (up to 50 lbs each) free of charge. Additional bags cost $15 each.', embedding('text-embedding-005', 'Each passenger is allowed one carry-on (up to 15 lbs) and two stowed bags (up to 50 lbs each) free of charge. Additional bags cost $15 each.')),
('Refunds', 'Tickets are fully refundable up to 24 hours before departure. Within 24 hours, tickets can be exchanged for travel credit only.', embedding('text-embedding-005', 'Tickets are fully refundable up to 24 hours before departure. Within 24 hours, tickets can be exchanged for travel credit only.'));
  1. generate_series ব্যবহার করে ৭ দিনের জন্য ২০০+ বাস্তবসম্মত সময়সূচী তৈরি করুন
-- 2. Generate 200+ Realistic Schedules for the Next 7 Days using generate_series

INSERT INTO bus_schedules (origin_city, destination_city, departure_time, arrival_time, ticket_price, available_seats)
SELECT 
    origin,
    destination,
    -- Generate departures every 4 hours starting from tomorrow
    (CURRENT_DATE + 1) + (interval '4 hours' * seq) AS dep_time,
    (CURRENT_DATE + 1) + (interval '4 hours' * seq) + interval '4.5 hours' AS arr_time,
    ROUND((RANDOM() * 30 + 25)::numeric, 2) AS price, -- Random price between $25 and $55
    FLOOR(RANDOM() * 50 + 1) AS seats -- Random seats between 1 and 50
FROM 
    (VALUES 
        ('New York', 'Boston'), ('Boston', 'New York'),
        ('Philadelphia', 'Washington DC'), ('Washington DC', 'Philadelphia'),
        ('Seattle', 'Portland'), ('Portland', 'Seattle')
    ) AS routes(origin, destination)
CROSS JOIN generate_series(1, 40) AS seq; -- 6 routes * 40 time slots = 240 distinct trips ingested!

এম্বেডিং তৈরি করুন

" embedding('text-embedding-005', '<<policytext>>') " ফাংশন ব্যবহার করে transit_policies টেবিলের insert স্টেটমেন্টে এম্বেডিংগুলি স্বয়ংক্রিয়ভাবে কভার করা হয়।

সমস্যা সমাধান এবং সমস্যা সমাধান

"পাসওয়ার্ড অ্যামনেসিয়া" লুপ

যদি আপনি "One Click" সেটআপ ব্যবহার করে থাকেন এবং আপনার পাসওয়ার্ড মনে না রাখেন, তাহলে কনসোলের Instance বেসিক তথ্য পৃষ্ঠায় যান এবং postgres পাসওয়ার্ড রিসেট করতে "Edit" এ ক্লিক করুন।

"এক্সটেনশন পাওয়া যায়নি" ত্রুটি

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

আইএএম প্রচারের সমস্যাগুলি

আপনি gcloud IAM কমান্ডটি চালিয়েছেন, কিন্তু SQL CALL এখনও একটি অনুমতি ত্রুটির কারণে ব্যর্থ হয়েছে। IAM পরিবর্তনগুলি Google ব্যাকবোন জুড়ে ছড়িয়ে পড়তে একটু সময় নিতে পারে । একটি নিঃশ্বাস নিন।*** গুরুত্বপূর্ণ:

  1. কখনও কখনও, আপনার AlloyDB পরিষেবা অ্যাকাউন্টটি অনুমতি ধাপে ব্যবহৃত বিদ্যমান ফর্ম্যাট থেকে আলাদা দেখাতে পারে। তাই ১০০% নিশ্চিত হতে যে AlloyDB পরিষেবা অ্যাকাউন্টে Vertex AI ব্যবহারকারী ভূমিকা রয়েছে : Google Cloud Console-এর AlloyDB ক্লাস্টার পৃষ্ঠায় যান। আপনার ক্লাস্টারে ক্লিক করুন এবং ওভারভিউ ট্যাবে, Service Account লেবেলযুক্ত একটি ক্ষেত্র খুঁজুন।
    মানটি কপি করুন এবং তারপর IAM-এ যান এবং Vertex AI ব্যবহারকারীর ভূমিকা যোগ করুন।
  2. এছাড়াও, যদি আপনি "শুরু করার আগে" বিভাগে "API সক্ষম করুন" ধাপটি এড়িয়ে যান, তাহলে AlloyDB থেকে এম্বেডিং অ্যাক্সেস করতে আপনার সমস্যার সম্মুখীন হতে হবে।

ভেক্টরের মাত্রা অমিল

transit_policies টেবিলের কলাম policy_embedding VECTOR(768) এ সেট করা আছে। যদি আপনি পরে অন্য কোনও মডেল (যেমন 1536-dim মডেল) ব্যবহার করার চেষ্টা করেন, তাহলে আপনার ইনসার্টগুলি বিস্ফোরিত হবে। text-embedding-005 তে লেগে থাকুন।

প্রকল্প আইডি টাইপো

create_model কলে, যদি আপনি বন্ধনী « » ছেড়ে যান অথবা আপনার প্রকল্প আইডি ভুল টাইপ করেন, তাহলে মডেল নিবন্ধন সফল দেখাবে কিন্তু প্রথম প্রকৃত কোয়েরির সময় ব্যর্থ হবে। আপনার স্ট্রিংটি দুবার পরীক্ষা করুন!

৫. টুলস এবং টুলবক্স সেটআপ

MCP টুলবক্স ফর ডাটাবেস হল ডাটাবেসের জন্য একটি ওপেন সোর্স MCP সার্ভার। এটি আপনাকে সংযোগ পুলিং, প্রমাণীকরণ এবং আরও অনেক জটিলতা মোকাবেলা করে সহজে, দ্রুত এবং আরও নিরাপদে সরঞ্জামগুলি বিকাশ করতে সক্ষম করে। টুলবক্স আপনাকে Gen AI সরঞ্জাম তৈরি করতে সাহায্য করে যা আপনার এজেন্টদের আপনার ডাটাবেসের ডেটা অ্যাক্সেস করতে দেয়।

আমরা "কন্ডাক্টর" হিসেবে ডেটাবেসের জন্য মডেল কনটেক্সট প্রোটোকল (MCP) টুলবক্স ব্যবহার করি। এটি আমাদের এজেন্ট এবং AlloyDB-এর মধ্যে একটি স্ট্যান্ডার্ডাইজড মিডলওয়্যার হিসেবে কাজ করে। একটি tools.yaml কনফিগারেশন সংজ্ঞায়িত করে, টুলবক্স স্বয়ংক্রিয়ভাবে জটিল ডাটাবেস ক্রিয়াকলাপগুলিকে find-bus-schedules and routes বা query-schedules for specific routes মতো পরিষ্কার, এক্সিকিউটেবল টুল হিসাবে প্রকাশ করে এবং book-ticket মতো স্বায়ত্তশাসিত ক্রিয়া সম্পাদন করে। এটি এজেন্ট লজিকের মধ্যে ম্যানুয়াল সংযোগ পুলিং বা বয়লারপ্লেট SQL-এর প্রয়োজনীয়তা দূর করে।

টুলবক্স সার্ভার ইনস্টল করা হচ্ছে

আপনার ক্লাউড শেল টার্মিনাল থেকে, আপনার নতুন টুলস yaml ফাইল এবং টুলবক্স বাইনারি সংরক্ষণের জন্য একটি ফোল্ডার তৈরি করুন:

mkdir cymbal-bus-toolbox

cd cymbal-bus-toolbox

সেই নতুন ফোল্ডারের মধ্যে থেকে, নিম্নলিখিত কমান্ডগুলির সেটটি চালান:

# see releases page for other versions
export VERSION=0.27.0
curl -L -o toolbox https://storage.googleapis.com/genai-toolbox/v$VERSION/linux/amd64/toolbox
chmod +x toolbox

এরপর ক্লাউড শেল এডিটরে নেভিগেট করে নতুন ফোল্ডারের ভিতরে tools.yaml ফাইলটি তৈরি করুন এবং এই রেপো ফাইলের বিষয়বস্তু tools.yaml ফাইলে অনুলিপি করুন।

... (Refer to entire file in the repo)

tools:

   find-bus-schedules:
    kind: postgres-sql
    source: alloydb
    description: Find all available bus schedules.
    statement: |
      SELECT CAST(trip_id AS TEXT) trip_id, departure_time, arrival_time, ticket_price, available_seats , origin_city, destination_city 
      FROM bus_schedules;

   query-schedules:
    kind: postgres-sql
    source: alloydb
    description: Find available bus schedules between an origin and destination city.
    parameters:
      - name: origin
        type: string
        description: The departure city name.
      - name: destination
        type: string
        description: The arrival city name.
    statement: |
      SELECT CAST(trip_id AS TEXT) trip_id, departure_time, arrival_time, ticket_price, available_seats 
      FROM bus_schedules 
      WHERE lower(origin_city) = lower($1) 
        AND lower(destination_city) = lower($2) 
        AND available_seats > 0 
      ORDER BY departure_time ASC 
      LIMIT 5;

   book-ticket:
    kind: postgres-sql
    source: alloydb
    description: Books a ticket for a specific trip, decrementing available seats and generating a confirmed booking record.
    parameters:
      - name: trip_id
        type: string
        description: The UUID of the trip schedule to book.
      - name: passenger_name
        type: string
        description: Name or ID of the passenger (Bound securely via backend or AuthToken).
        authServices:
          - name: google_auth
            field: sub
    statement: |
      WITH updated_schedule AS (
          UPDATE bus_schedules 
          SET available_seats = available_seats - 1 
          WHERE trip_id = CAST($1 AS UUID) AND available_seats > 0
          RETURNING trip_id
      )
      INSERT INTO bookings (trip_id, passenger_id)
      SELECT trip_id, $2 
      FROM updated_schedule
      RETURNING CAST(booking_id as TEXT) as booking_id, trip_id, passenger_id, status, booking_time;

   search-policies:
    kind: postgres-sql
    source: alloydb
    description: Semantic search for transit policies regarding luggage, pets, refunds, and general rules.
    parameters:
      - name: search_query
        type: string
        description: The user's question about transit policies to be embedded and searched.
    statement: |
      SELECT category, policy_text 
      FROM transit_policies 
      ORDER BY policy_embedding <=> CAST(embedding('text-embedding-005', $1) AS vector(768))
      LIMIT 2;

বিঃদ্রঃ:

  1. tools.yaml সেট আপে, alloydb সোর্স কনফিগারেশনে ipType: "private" অন্তর্ভুক্ত করতে ভুলবেন না।
  2. authServices কনফিগারেশনের জন্য clientId প্যারামিটারে MCP টুলবক্স পরিষেবা URL অন্তর্ভুক্ত করতে ভুলবেন না। প্রাথমিক স্থাপনার পরেই আপনি লিঙ্কটি পেতে পারেন - তাই হ্যাঁ, প্রমাণীকৃত সরঞ্জামগুলি কেস ব্যবহার করে কাজ করে তা নিশ্চিত করার জন্য আপনাকে দুবার স্থাপনের পদক্ষেপগুলি চালাতে হবে।
  3. আপনার AlloyDB সংযোগটি যদি ব্যক্তিগত সেট করা থাকে, তাহলে স্থানীয়ভাবে টুলবক্স পরীক্ষা করার জন্য নীচের বিকল্পগুলি কাজ করবে না। স্থানীয়ভাবে পরীক্ষা করার জন্য আপনাকে এটি সর্বজনীন করতে হবে অথবা সংযোগের জন্য একটি প্রক্সি ব্যবহার করতে হবে। তবে এটি নিয়ে চিন্তা করবেন না । আমাদের ক্ষেত্রে, আমরা এটি সরাসরি ক্লাউড রানে স্থাপন করব এবং তারপর পরীক্ষা করব।

স্থানীয় সার্ভারে tools.yaml ফাইলটি পরীক্ষা করতে:

./toolbox --tools-file "tools.yaml"

আপনি বিকল্পভাবে এটি UI তে পরীক্ষা করতে পারেন:

./toolbox --ui

চলুন, ক্লাউড রানে এটিকে নিম্নরূপে স্থাপন করা যাক।

ক্লাউড রান ডিপ্লয়মেন্ট

  1. PROJECT_ID পরিবেশ পরিবর্তনশীল সেট করুন:
export PROJECT_ID="my-project-id"
  1. gcloud CLI আরম্ভ করুন:
gcloud init
gcloud config set project $PROJECT_ID
  1. আপনার অবশ্যই নিম্নলিখিত API গুলি সক্রিয় থাকতে হবে:
gcloud services enable run.googleapis.com \
                       cloudbuild.googleapis.com \
                       artifactregistry.googleapis.com \
                       iam.googleapis.com \
                       secretmanager.googleapis.com
  1. যদি আপনার ইতিমধ্যেই একটি ব্যাকএন্ড পরিষেবা অ্যাকাউন্ট না থাকে তবে একটি তৈরি করুন:
gcloud iam service-accounts create toolbox-identity
  1. গোপন ব্যবস্থাপক ব্যবহারের অনুমতি দিন:
gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member serviceAccount:toolbox-identity@$PROJECT_ID.iam.gserviceaccount.com \
    --role roles/secretmanager.secretAccessor
  1. আমাদের AlloyDB উৎসের (roles/alloydb.client এবং roles/serviceusage.serviceUsageConsumer) সাথে সম্পর্কিত পরিষেবা অ্যাকাউন্টে অতিরিক্ত অনুমতি দিন।
gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member serviceAccount:toolbox-identity@$PROJECT_ID.iam.gserviceaccount.com \
    --role roles/alloydb.client


gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member serviceAccount:toolbox-identity@$PROJECT_ID.iam.gserviceaccount.com \
    --role roles/serviceusage.serviceUsageConsumer
  1. গোপনে tools.yaml আপলোড করুন:
gcloud secrets create tools-cymbal-transit --data-file=tools.yaml
  1. যদি আপনার ইতিমধ্যেই কোনও গোপন তথ্য থাকে এবং আপনি গোপন সংস্করণটি আপডেট করতে চান, তাহলে নিম্নলিখিতগুলি সম্পাদন করুন:
gcloud secrets versions add tools-cymbal-transit --data-file=tools.yaml
  1. ক্লাউড রানের জন্য আপনি যে কন্টেইনার ইমেজটি ব্যবহার করতে চান তাতে একটি এনভায়রনমেন্ট ভেরিয়েবল সেট করুন:
export IMAGE=us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:latest
  1. নিম্নলিখিত কমান্ড ব্যবহার করে ক্লাউড রানে টুলবক্স স্থাপন করুন:

যদি আপনার AlloyDB ইনস্ট্যান্সে পাবলিক অ্যাক্সেস সক্ষম করে থাকেন, তাহলে ক্লাউড রানে স্থাপনের জন্য নীচের কমান্ডটি অনুসরণ করুন:

gcloud run deploy toolbox-cymbal-transit \
    --image $IMAGE \
    --service-account toolbox-identity \
    --region us-central1 \
    --set-secrets "/app/tools.yaml=tools-cymbal-transit:latest" \
    --args="--tools-file=/app/tools.yaml","--address=0.0.0.0","--port=8080" \
    --allow-unauthenticated

যদি আপনি একটি VPC নেটওয়ার্ক ব্যবহার করেন, তাহলে নিচের কমান্ডটি ব্যবহার করুন:

gcloud run deploy toolbox-cymbal-transit \
    --image $IMAGE \
    --service-account toolbox-identity \
    --region us-central1 \
    --set-secrets "/app/tools.yaml=tools-cymbal-transit:latest" \
    --args="--tools-file=/app/tools.yaml","--address=0.0.0.0","--port=8080" \
    --network <<YOUR_NETWORK_NAME>> \
    --subnet <<YOUR_SUBNET_NAME>> \
    --allow-unauthenticated

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

৬. এজেন্ট অ্যাপ্লিকেশন সেটআপ

আপনার প্রকল্পে এই রেপোটি ক্লোন করুন এবং আসুন এটি দেখে নেওয়া যাক।

গিথুব রেপো

এটি ক্লোন করতে, আপনার ক্লাউড শেল টার্মিনাল থেকে (রুট ডিরেক্টরিতে অথবা আপনি যেখান থেকে এই প্রকল্পটি তৈরি করতে চান) নিম্নলিখিত কমান্ডটি চালান:

git clone https://github.com/googleapis/mcp-toolbox-sdk-java

উপরের এই কমান্ডটি আসলে সম্পূর্ণ mcp-toolbox-sdk-java ক্লোন করে। আমাদের কেবল এটি থেকে নমুনা প্রকল্পটি প্রয়োজন। তাই রেপোর ভিতরে প্রকল্পের রুট ডিরেক্টরিতে নেভিগেট করুন:

cd mcp-toolbox-sdk-java/demo-applications/cymbal-transit
  1. এটি প্রকল্পটি তৈরি করবে এবং আপনি ক্লাউড শেল এডিটরে এটি যাচাই করতে পারবেন।

a494664032904c77.png সম্পর্কে

  1. CymbalTransitController.java খুলুন এবং পরিবেশ ভেরিয়েবল সেট করুন:
  2. জিসিপি_প্রজেক্ট_আইডি
  3. জিসিপি_রিজিওন
  4. জেমিনি_মডেল_নাম
  5. MCP_TOOLBOX_URL সম্পর্কে

বিকল্পভাবে (শুধুমাত্র উন্নয়নের উদ্দেশ্যে) আপনি সংশ্লিষ্ট ফলব্যাক মান স্থানধারকগুলিও প্রতিস্থাপন করতে পারেন।

৭. কোড ওয়াকথ্রু

CymbalTransitController আমাদের ক্লাউড রান পরিষেবার প্রবেশপথ হিসেবে কাজ করে। এটি কথোপকথনের প্রবাহ পরিচালনা করে এবং নিশ্চিত করে যে এজেন্ট ব্যবহারকারীর বর্তমান অনুরোধে অ্যাক্সেস পাচ্ছে।

এই বাস্তবায়নটি একটি স্তরযুক্ত স্থাপত্য অনুসরণ করে যা AI অর্কেস্ট্রেশন, টুল ব্রিজিং এবং নিম্ন-স্তরের MCP যোগাযোগকে পৃথক করে।

1. এআই এজেন্ট কনফিগারেশন ( AgentConfiguration )

এই ক্লাসটি AI উপাদানগুলিকে বুটস্ট্র্যাপ করার জন্য Spring এর @Configuration ব্যবহার করে। এটি VertexAiGeminiChatModel কে ইনিশিয়ালাইজ করে এবং আমাদের Agent ইন্টারফেসের সাথে আবদ্ধ করে।

@Bean
ChatLanguageModel geminiChatModel() {
    return VertexAiGeminiChatModel.builder()
        .project(projectId)
        .location(region)
        .modelName(modelName)
        .build();
}

@Bean
TransitAgent transitAgent(ChatLanguageModel chatLanguageModel, TransitAgentTools tools) {
    return AiServices.builder(TransitAgent.class)
        .chatLanguageModel(chatLanguageModel)
        .chatMemoryProvider(memoryId -> MessageWindowChatMemory.withMaxMessages(20))
        .tools(tools) 
        .build();
}

তাৎপর্য: AiServices ইন্টারফেসটিকে LLM-এর সাথে আবদ্ধ করে। MessageWindowChatMemory নিশ্চিত করে যে এজেন্ট ব্যবহারকারীর পছন্দগুলি (যেমন আগে উল্লেখ করা পোষা প্রাণীর বাহকের মতো) এক সেশনের মধ্যে ২০টি পর্যন্ত বার্তা মনে রাখে।

২. এআই এজেন্ট ইন্টারফেস ( TransitAgent )

@SystemMessage টীকাটি "Persona" এবং কর্মক্ষম সীমাবদ্ধতাগুলিকে সংজ্ঞায়িত করে, বিশেষ করে একটি রাউটিং কৌশল

@SystemMessage({
    "You are the Cymbal Transit Concierge.",
    "CRITICAL INSTRUCTION: On your very first interaction, you MUST use the 'findAllSchedules' tool to fetch and memorize the broad bus routes.",
    "ONLY if the user asks a specifically narrowed-down question... should you route to the specific tools like 'querySchedules', 'bookTicket', 'searchPolicies'.",
    "Don't show any asterisks while listing results. Keep it formatted and numbered or bulleted."
})
String chat(@MemoryId String sessionId, @UserMessage String userMessage);

তাৎপর্য: এই কৌশলটি লেটেন্সি কমিয়ে আনে। প্রথমে বিস্তৃত ডেটা সংগ্রহ করে, এজেন্ট অপ্রয়োজনীয় ব্যাকএন্ড কল না করেই তার অভ্যন্তরীণ প্রেক্ষাপট ব্যবহার করে সাধারণ রাউটিং প্রশ্নের উত্তর দিতে পারে।

৩. টুলবক্স ব্রিজ ( TransitAgentTools )

এই পরিষেবাটি এজেন্টের "হাত" হিসেবে কাজ করে, LangChain4j টুল কলগুলিকে এক্সিকিউশন লজিকে রূপান্তর করে।

@Tool("Fetches the initial, broad dataset of all available bus schedules and routes.")
public String findAllSchedules() {
    return mcpService.findAllSchedules().join();
}


@Tool("Book a ticket for a passenger using a specific trip ID.")
public String bookTicket(String tripId, String passengerName) {
    return mcpService.bookTicket(tripId, passengerName).join();
}

সিঙ্ক্রোনাস এক্সিকিউশন: যদিও MCP কলগুলি অ্যাসিঙ্ক্রোনাস ( CompletableFuture ফেরত দেয়), LLM তার "চিন্তা" প্রক্রিয়া চালিয়ে যাওয়ার আগে একটি ফলাফলের প্রয়োজন করে। আমরা এজেন্টকে সিঙ্ক্রোনাস ফলাফল ফেরত দেওয়ার জন্য .join() ব্যবহার করি।

৪. এমসিপি টুলবক্স সার্ভিস ( McpToolboxService সার্ভিস )

এটি হল যোগাযোগ স্তর যা MCP টুলবক্স জাভা SDK ব্যবহার করে AlloyDB ব্যাকএন্ডের সাথে ইন্টারঅ্যাক্ট করে।

// Identity Management: Fetching OIDC ID Token for Auth
GoogleCredentials credentials = GoogleCredentials.getApplicationDefault();
this.idToken = ((IdTokenProvider) credentials)
    .idTokenWithAudience(targetUrl, Collections.emptyList())
    .getTokenValue();

// Dynamic Invocation: Executing a tool by name
public CompletableFuture<String> findAllSchedules() {
    return mcpClient.invokeTool("find-bus-schedules", Collections.emptyMap()).thenApply(result -> {
        return result.content().stream()
            .map(content -> content.text())
            .collect(Collectors.joining(", ", "[", "]"));
    });
}

তাৎপর্য: McpToolboxClient JSON-RPC যোগাযোগের ভারী উত্তোলন পরিচালনা করে। bookTicket পদ্ধতিটি বিশেষভাবে জটিল পরামিতিগুলিকে গতিশীলভাবে আবদ্ধ করার SDK-এর ক্ষমতা প্রদর্শন করে।

৫. REST কন্ট্রোলার ( TransitAgentController )

LangChain4j অবস্থা এবং যুক্তি পরিচালনা করে বলে চূড়ান্ত শেষবিন্দুটি মূলত সরলীকৃত।

@PostMapping("/chat")
public ResponseEntity<String> handleUserChat(@RequestBody String userMessage, HttpSession session) {
    String sessionId = session.getId();
    String agentResponse = transitAgent.chat(sessionId, userMessage);
    return ResponseEntity.ok(agentResponse);
}

তাৎপর্য: HttpSession ID কে @MemoryId তে ম্যাপ করার মাধ্যমে, আমরা নিশ্চিত করি যে বিভিন্ন ব্যবহারকারীর ভ্রমণ পরিকল্পনা মিশ্রিত না হয়, একই সাথে কন্ট্রোলার কোডটি পরিষ্কার এবং পাঠযোগ্য রাখা হয়।

৮. এমসিপি টুলবক্স: তাৎপর্য এবং জাভা এসডিকে

এমসিপি কী?

মডেল কনটেক্সট প্রোটোকল (MCP) কে AI এর জন্য একটি সার্বজনীন অনুবাদক হিসেবে ভাবুন। AI মডেলগুলি কীভাবে বহিরাগত সরঞ্জাম এবং ডেটাসেটের সাথে সংযোগ স্থাপন করে তা মানসম্মত করার জন্য তৈরি করা হয়েছে, MCP কাস্টম, খণ্ডিত ইন্টিগ্রেশন স্ক্রিপ্টগুলিকে একটি নিরাপদ, সার্বজনীন প্রোটোকল দিয়ে প্রতিস্থাপন করে। আপনার এজেন্টকে একটি লেনদেনমূলক SQL কোয়েরি কার্যকর করতে হবে, হাজার হাজার নীতি নথি অনুসন্ধান করতে হবে, অথবা একটি REST API ট্রিগার করতে হবে, MCP একটি একক, একীভূত ইন্টারফেস প্রদান করে।

ডাটাবেসের জন্য MCP টুলবক্স

ইঞ্জিনিয়ারিং দলগুলি সাধারণ চ্যাটবটগুলির বাইরে গিয়ে এমন এজেন্টিক সিস্টেম তৈরি করছে যা মিশন ক্রিটিক্যাল ডাটাবেসের সাথে সরাসরি যোগাযোগ করে। যাইহোক, এই এন্টারপ্রাইজ এজেন্ট তৈরির অর্থ প্রায়শই কাস্টম গ্লু কোড, ভঙ্গুর API এবং জটিল ডাটাবেস লজিকের একীকরণ প্রাচীরে আঘাত করা।

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

জাভা এসডিকে কেন?

MCP টুলবক্স জাভা SDK জাভা ডেভেলপারদের এগুলি করার অনুমতি দেয়:

  1. সরঞ্জাম ব্যবহার করুন: একটি MCP সার্ভারের সাথে সংযোগ করুন (যেমন AlloyDB-এর জন্য MCP টুলবক্স) এবং স্বয়ংক্রিয়ভাবে এর ক্ষমতাগুলিকে জাভা পদ্ধতিতে রূপান্তর করুন যা LangChain4j বোঝে।
  2. টাইপ সেফটি: টুল প্যারামিটারের জন্য জাভার শক্তিশালী টাইপিং ব্যবহার করুন, টুল কলে রানটাইম "হ্যালুসিনেশন" ত্রুটি হ্রাস করুন।
  3. এন্টারপ্রাইজ প্রস্তুতি: স্প্রিং বুট, কোয়ার্কাস, মাইক্রোনট ইত্যাদির সাথে সহজেই সংহত করুন।
  4. অনায়াসে সংযোগ করুন: বয়লারপ্লেট JSON-RPC কোড লেখা এড়িয়ে চলুন।
  5. স্ট্যান্ডার্ডাইজ অথেন্টিকেশন: গুগল ক্লাউড ওআইডিসি টোকেনের জন্য নেটিভ সাপোর্ট নিরাপদ টুল এক্সিকিউশন নিশ্চিত করে।

এবং আরও অনেক কিছু

নির্ভরতা: pom.xml কনফিগারেশন

সর্বশেষ MCP টুলবক্স জাভা SDK অন্তর্ভুক্ত করার জন্য আপনার Maven প্রকল্পে নিম্নলিখিত নির্ভরতা যোগ করুন:

   <dependency>
        <groupId>com.google.cloud.mcp</groupId>
        <artifactId>mcp-toolbox-sdk-java</artifactId>
        <version>0.2.0</version>
    </dependency>

LangChain4j আর্টিফ্যাক্ট অন্তর্ভুক্ত করার জন্য আপনার Maven প্রকল্পে নিম্নলিখিত নির্ভরতা যোগ করুন:

     <!-- LangChain4j Core & Gemini -->
    <dependency>
        <groupId>dev.langchain4j</groupId>
        <artifactId>langchain4j</artifactId>
        <version>0.35.0</version>
    </dependency>

এটাই!!! আমরা সফলভাবে প্রকল্পটি ক্লোন করেছি এবং এজেন্ট, MCP টুলবক্স জাভা SDK এবং প্রেক্ষাপটের বিশদ বিশ্লেষণ করেছি।

৯. স্থানীয়ভাবে দৌড়ানো

আপনার মেশিনে এজেন্ট পরীক্ষা করার জন্য, আপনাকে এটি আপনার স্থাপন করা MCP টুলবক্স সার্ভারের দিকে নির্দেশ করতে হবে।

  1. পরিবেশের ভেরিয়েবল সেট করুন:
export GCP_PROJECT_ID="<<YOUR_PROJECT_ID>>"
export GCP_REGION="us-central1"
export GEMINI_MODEL_NAME="gemini-2.5-flash"
export MCP_TOOLBOX_URL="<<YOUR_TOOLBOX_ENDPOINT_URL>>/mcp"
  1. ম্যাভেনের সাথে দৌড়ান:
mvn compile

mvn spring-boot:run

এটি আপনার এজেন্টকে স্থানীয়ভাবে শুরু করবে এবং আপনি এটি পরীক্ষা করতে সক্ষম হবেন।

১০. আসুন এটি ক্লাউড রানে স্থাপন করি

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

যদি আপনি আমাদের বর্তমান প্রকল্পের রুট ফোল্ডারে না থাকেন, তাহলে আপনার ক্লাউড শেল টার্মিনালে এটি চালান:

cd cymbal-transit

যদি আপনি ইতিমধ্যেই cymbal-transit রুটে থাকেন, তাহলে ক্লাউড রানে সরাসরি অ্যাপটি স্থাপন করতে নিচের কমান্ডটি চালান:

gcloud run deploy cymbal-transit --source . --set-env-vars GCP_PROJECT_ID=<<YOUR_PROJECT_ID>>,GCP_REGION=us-central1,GEMINI_MODEL_NAME=gemini-2.5-flash,MCP_TOOLBOX_URL=<<YOUR_MCP_TOOLBOX_URL>> --allow-unauthenticated

<<YOUR_PROJECT>> and <<YOUR_MCP_TOOLBOX_URL>> এর জন্য মানগুলি প্রতিস্থাপন করুন

কমান্ডটি শেষ হয়ে গেলে, এটি একটি পরিষেবা URL বের করবে। এটি অনুলিপি করুন।

ক্লাউড রান সার্ভিস অ্যাকাউন্টে AlloyDB ক্লায়েন্ট ভূমিকা প্রদান করুন। এটি আপনার সার্ভারলেস অ্যাপ্লিকেশনটিকে নিরাপদে ডাটাবেসে টানেল করতে দেয়।

আপনার ক্লাউড শেল টার্মিনালে এটি চালান:

# 1. Get your Project ID and Project Number
PROJECT_ID=$(gcloud config get-value project)
PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")

# 2. Grant the AlloyDB Client role
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
--role="roles/alloydb.client"

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

এখন পরিষেবা URL (আপনার আগে কপি করা ক্লাউড রান এন্ডপয়েন্ট) ব্যবহার করুন এবং অ্যাপটি পরীক্ষা করুন।

দ্রষ্টব্য: যদি আপনার কোনও পরিষেবার সমস্যার সম্মুখীন হন এবং এটি মেমোরির কারণ হিসাবে উল্লেখ করে, তাহলে এটি পরীক্ষা করার জন্য বরাদ্দকৃত মেমোরি সীমা 1 GiB পর্যন্ত বাড়ানোর চেষ্টা করুন।

১১. ডেমো

এজেন্টকে জিজ্ঞাসা করুন: "আমাকে আগামীকাল সকালে নিউ ইয়র্ক থেকে বোস্টনে যেতে হবে। আমি কি আমার গোল্ডেন রিট্রিভার আনতে পারি?" এজেন্ট কীভাবে তা লক্ষ্য করুন:

  1. বড় কুকুরের জন্য নীতি অনুসন্ধান করে।
  2. নির্দিষ্ট সময়সূচী খুঁজে বের করে।
  3. একটি ট্রিপ আইডি দিয়ে দ্রুততম ট্রিপের সারসংক্ষেপ তৈরি করে।
  4. আপনি যদি সেই অ্যাকশন রিকোয়েস্টটি অনুসরণ করেন তবে একটি টিকিটও বুক করুন।

aa0408a81074d0fc.png সম্পর্কে

১২. পরিষ্কার করা

এই ল্যাবটি সম্পন্ন হয়ে গেলে, alloyDB ক্লাস্টার এবং ইনস্ট্যান্স মুছে ফেলতে ভুলবেন না।

এটির ক্লাস্টারটি তার ইনস্ট্যান্স(গুলি) সহ পরিষ্কার করা উচিত।

১৩. অভিনন্দন

আপনি সফলভাবে একটি অত্যাধুনিক জাভা-ভিত্তিক ট্রানজিট এজেন্ট তৈরি করেছেন। অর্কেস্ট্রেশনের জন্য LangChain4j এবং ডেটা সংযোগের জন্য MCP টুলবক্স জাভা SDK ব্যবহার করে, আপনি এমন একটি সিস্টেম তৈরি করেছেন যা এজেন্ট, টুল এবং ডেটা উৎসের মধ্যে যুক্তি তৈরি করতে পারে। আপনি যদি একাধিক ডাটাবেস, এমনকি প্ল্যাটফর্ম জুড়ে MCP টুলবক্স ফর ডেটাবেস দিয়ে আপনার এজেন্টিক অ্যাপ্লিকেশনগুলিকে অর্কেস্ট্রেট করা শুরু করতে চান, তাহলে আজই জাভা SDK দিয়ে শুরু করুন! এখানে লঞ্চ ঘোষণা ব্লগ রয়েছে যা লাইব্রেরি সম্পর্কে আরও বিস্তারিত তথ্য দেয় । আপনি যদি এই ধরনের আরও অ্যাপ্লিকেশন হাতে-কলমে, বিনামূল্যে, আপনার নিজস্ব গতিতে এবং প্রশিক্ষকের নেতৃত্বে তৈরি করতে চান, তাহলে https://codevipassana.dev এ কোড বিপাসনার জন্য সাইন আপ করুন !!!