জেমিনি ৩ ফ্ল্যাশ এবং অ্যালয়ডিবি এআই দিয়ে একটি স্বায়ত্তশাসিত সরবরাহ শৃঙ্খল তৈরি করুন

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

‘পড়তে পারা চ্যাটবট’-এর যুগ শেষ হয়ে আসছে। আমরা ‘এজেন্টিক ভিশন’-এর যুগে প্রবেশ করছি।

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

আমরা জেমিনি ৩ ফ্ল্যাশ -এর ​​নতুন থিঙ্ক, অ্যাক্ট, অবজার্ভ লুপ ব্যবহার করে একটি স্বয়ংক্রিয় সাপ্লাই চেইন এজেন্ট তৈরি করব। এটি শুধু দেখে না; এটি তদন্ত করে।

নিয়তিবাদী স্থাপত্য

আমরা একটি "অন্ধ" এবং "স্মৃতিভ্রষ্ট" সিস্টেম দিয়ে শুরু করব। আপনি নিজে হাতে এক এক করে এর ইন্দ্রিয়গুলোকে "জাগিয়ে তুলবেন":

17191a91a9c54146.png

  1. চোখ (ভিশন এজেন্ট) : আমরা কোড এক্সিকিউশন সহ জেমিনি ৩ ফ্ল্যাশ সক্রিয় করি। কোনো সংখ্যা অনুমান করার জন্য টোকেন প্রেডিকশন করার পরিবর্তে, মডেলটি সুনির্দিষ্টভাবে পিক্সেল গণনা করার জন্য পাইথন কোড (ওপেনসিভি) লেখে।
  2. মেমোরি (সাপ্লায়ার এজেন্ট) : আমরা ScaNN (স্কেলেবল নিয়ারেস্ট নেইবারস) সহ AlloyDB AI সক্রিয় করি। এটি এজেন্টকে লক্ষ লক্ষ বিকল্পের মধ্য থেকে মিলিসেকেন্ডের মধ্যে একটি পার্টের সঠিক সাপ্লায়ারকে মনে করতে সাহায্য করে।
  3. হ্যান্ডশেক (এটুএ প্রোটোকল) : আমরা একটি প্রমিত agent_card.json ব্যবহার করে এজেন্ট-টু-এজেন্ট যোগাযোগ সক্ষম করি, যা ভিশন এজেন্টকে সাপ্লায়ার এজেন্টের কাছ থেকে স্বয়ংক্রিয়ভাবে স্টক অর্ডার করার সুযোগ দেয়।

আপনি যা তৈরি করবেন

  • একটি ভিশন এজেন্ট যা ক্যামেরা ফিডের উপর 'ভিজ্যুয়াল ম্যাথ' সম্পাদন করে।
  • উচ্চ-গতির ভেক্টর অনুসন্ধানের জন্য AlloyDB ScaNN দ্বারা সমর্থিত একটি সাপ্লায়ার এজেন্ট
  • স্বায়ত্তশাসিত লুপটি দৃশ্যমান করার জন্য রিয়েল-টাইম ওয়েবসকেট আপডেটসহ একটি কন্ট্রোল টাওয়ার ফ্রন্টএন্ড।

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

  • ভেক্টর এমবেডিং এবং স্ক্যান ইনডেক্স ব্যবহার করে কীভাবে অ্যালয়ডিবি সেট আপ করবেন।
  • জেমিনি এপিআই ব্যবহার করে জেমিনি-৩-ফ্ল্যাশ-প্রিভিউ-এর সাথে এজেন্টিক ভিশন কীভাবে সক্রিয় করবেন।
  • AlloyDB-তে <=> (কোসাইন ডিসটেন্স) অপারেটর ব্যবহার করে কীভাবে ভেক্টর সার্চ বাস্তবায়ন করা যায়।
  • AlloyDB পাইথন কানেক্টর ব্যবহার করে কীভাবে এজেন্টদের AlloyDB-এর সাথে সংযুক্ত করবেন।
  • ডাইনামিক এজেন্ট ডিসকভারির জন্য A2A প্রোটোকল কীভাবে ব্যবহার করবেন

প্রয়োজনীয়তা

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

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

  1. গুগল ক্লাউড কনসোলের প্রজেক্ট সিলেক্টর পেজে, একটি গুগল ক্লাউড প্রজেক্ট নির্বাচন করুন বা তৈরি করুন।
  2. আপনার ক্লাউড প্রোজেক্টের জন্য বিলিং চালু আছে কিনা তা নিশ্চিত করুন। কোনো প্রোজেক্টে বিলিং চালু আছে কিনা তা কীভাবে পরীক্ষা করবেন, তা জেনে নিন
  1. আপনি ক্লাউড শেল ব্যবহার করবেন, যা গুগল ক্লাউডে চালিত একটি কমান্ড-লাইন পরিবেশ। গুগল ক্লাউড কনসোলের শীর্ষে থাকা ‘Activate Cloud Shell’-এ ক্লিক করুন।

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

  1. ক্লাউড শেলে সংযুক্ত হওয়ার পর, আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করে যাচাই করে নিন যে আপনি ইতিমধ্যেই প্রমাণীকৃত এবং প্রজেক্টটি আপনার প্রজেক্ট আইডিতে সেট করা আছে:
gcloud auth list

ডাটাবেস সেটআপ করুন [AlloyDB]

অন্য কিছু করার আগে, চলুন ডেটাবেসটি প্রস্তুত করে নিই — এতে প্রায় ১৫ মিনিট সময় লাগে, তাই আমরা প্রথমে এটি শুরু করে দেব।

  1. ক্লাউড শেলে AlloyDB সেটআপ টুলটি খুলতে নিচের বোতামটিতে ক্লিক করুন:

  1. সেটআপটি চালান:
Sh run.sh
  1. সেটআপ UI খোলার জন্য ওয়েব প্রিভিউ (চোখের আইকন 👁️ → পোর্ট ৮০৮০-তে প্রিভিউ) ব্যবহার করুন।
  2. আপনার প্রজেক্ট আইডি লিখুন, একটি অঞ্চল নির্বাচন করুন (যেমন, us-central1), এবং একটি ডাটাবেস পাসওয়ার্ড তৈরি করুন।

⚠️ এই পাসওয়ার্ডটি সংরক্ষণ করুন — সেটআপ স্ক্রিপ্টটি যখন এটি চাইবে তখন আপনার এটি প্রয়োজন হবে।

  1. স্টার্ট ডিপ্লয়মেন্ট-এ ক্লিক করুন এবং ক্লাস্টারটি প্রোভিশন হওয়ার জন্য প্রায় ১৫ মিনিট অপেক্ষা করুন।

কোডটি নিন

AlloyDB প্রোভিশন করার সময় (অথবা একবার হয়ে গেলে), ক্লাউড শেলে কোডল্যাব রিপোটি খুলুন:

⚠️ গুরুত্বপূর্ণ: বাটনটিতে ক্লিক করলে একটি সিকিউরিটি ডায়ালগ বক্স দেখতে পাবেন। "Trust repo" বক্সটিতে টিক চিহ্ন দিয়ে "Confirm" বাটনে ক্লিক করুন।

বিকল্পভাবে, ম্যানুয়ালি ক্লোন করুন:

git clone https://github.com/MohitBhimrajka/visual-commerce-gemini-3-alloydb.git

cd visual-commerce-gemini-3-alloydb

আপনার প্রকল্প সেট করুন

এই ক্লাউড শেল টার্মিনালে, আপনার প্রজেক্টটি সেট করা আছে কিনা তা নিশ্চিত করুন:

gcloud config set project <YOUR_PROJECT_ID>

AlloyDB-তে পাবলিক আইপি সক্রিয় করুন

AlloyDB প্রোভিশনিং সম্পন্ন হয়ে গেলে, পাবলিক আইপি সক্রিয় করুন যাতে পাইথন কানেক্টর ক্লাউড শেল থেকে সংযোগ করতে পারে:

  1. AlloyDB কনসোলে যান
  2. আপনার ক্লাস্টারে ক্লিক করুন → আপনার প্রাথমিক ইনস্ট্যান্সে ক্লিক করুন
  3. সম্পাদনা ক্লিক করুন
  4. Public IP Connectivity-তে স্ক্রোল করুন এবং Enable Public IP চেক করুন।
  5. ইনস্ট্যান্স আপডেট করতে ক্লিক করুন

💡 দ্রষ্টব্য: AlloyDB পাইথন কানেক্টর প্রমাণীকরণ এবং এনক্রিপশন পরিচালনা করে — আপনার কোনো অনুমোদিত বাহ্যিক নেটওয়ার্ক যোগ করার প্রয়োজন নেই।

ভার্টেক্স এআই-কে অনুমতি দিন

এমবেডিং তৈরি করার জন্য AlloyDB সার্ভিস অ্যাকাউন্টের Vertex AI অ্যাক্সেস প্রয়োজন। একই ক্লাউড শেল উইন্ডোতে এটি চালান:

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 ইনস্ট্যান্সটি শনাক্ত করবে:

sh setup.sh

স্ক্রিপ্টটি যা করে:

  • gcloud CLI, প্রমাণীকরণ, প্রজেক্ট এবং Python 3 যাচাই করে।
  • প্রয়োজনীয় এপিআই (অ্যালয়ডিবি, ভার্টেক্স এআই, কম্পিউট, সার্ভিস নেটওয়ার্কিং) যাচাই করে এবং সক্রিয় করে।
  • আপনার জেমিনি এপিআই কী-এর জন্য অনুরোধ
  • স্বয়ংক্রিয়ভাবে আপনার AlloyDB ইনস্ট্যান্স শনাক্ত করে এবং অঞ্চল, ক্লাস্টার ও ইনস্ট্যান্সের নাম বের করে নেয়।
  • আপনার ডাটাবেস পাসওয়ার্ড জানতে চায়।
  • .env কনফিগারেশন ফাইল তৈরি করে
  • পাইথন নির্ভরতা ইনস্টল করে

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

আমাদের অ্যাপ্লিকেশনের কেন্দ্রবিন্দুতে রয়েছে AlloyDB for PostgreSQL । আমরা এর শক্তিশালী ভেক্টর সক্ষমতা এবং ScaNN ইনডেক্স ব্যবহার করে প্রায় রিয়েল-টাইম সিমান্টিক সার্চ চালু করব, যা আমাদের এজেন্টদেরকে মিলিসেকেন্ডের মধ্যে হাজার হাজার রেকর্ডের মধ্যে ইনভেন্টরির মিল খুঁজে পেতে সাহায্য করবে।

এই অংশে, আপনি AlloyDB Studio থেকেই স্কিমা প্রোভিশন, সিড ডেটা এবং এমবেডিং জেনারেট করবেন।

AlloyDB Studio-এর সাথে সংযোগ করুন

  1. AlloyDB কনসোলে আপনার AlloyDB ইনস্ট্যান্সে যান।
  2. বাম দিকের নেভিগেশনে AlloyDB Studio-তে ক্লিক করুন।
  3. এর মাধ্যমে প্রমাণীকরণ করুন:
  4. ব্যবহারকারীর নাম : পোস্টগ্রেস
  5. ডাটাবেস : পোস্টগ্রেস
  6. পাসওয়ার্ড : ক্লাস্টার তৈরির সময় আপনি যে পাসওয়ার্ডটি সেট করেছিলেন।

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

AlloyDB ভেক্টর এবং AI-এর জন্য বিল্ট-ইন এক্সটেনশন প্রদান করে। AlloyDB Studio-তে নিম্নলিখিত SQL-টি চালান:

CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE;
CREATE EXTENSION IF NOT EXISTS vector;
CREATE EXTENSION IF NOT EXISTS alloydb_scann CASCADE;
  • google_ml_integration : SQL থেকে সরাসরি Vertex AI কল করার জন্য ai.embedding() ফাংশনটি সক্ষম করে।
  • ভেক্টর: ৭৬৮-মাত্রিক ভেক্টর এমবেডিং সংরক্ষণ ও কোয়েরি করে।
  • alloydb_scann : অত্যন্ত দ্রুত ভেক্টর অনুসন্ধানের জন্য গুগলের ScaNN ইনডেক্স সক্রিয় করে।

ইনভেন্টরি টেবিল তৈরি করুন

DROP TABLE IF EXISTS inventory;

CREATE TABLE inventory (
    id SERIAL PRIMARY KEY,
    part_name TEXT NOT NULL,
    supplier_name TEXT NOT NULL,
    description TEXT,
    stock_level INT DEFAULT 0,
    part_embedding vector(768)
);

`part_embedding` কলামটি `text-embedding-005` থেকে প্রাপ্ত ৭৬৮-মাত্রিক ভেক্টরসমূহ সংরক্ষণ করে। এটিই সিমান্টিক সার্চের চালিকাশক্তি।

নমুনা ডেটা সন্নিবেশ করুন

গুদামের ২০টি ইনভেন্টরি আইটেম প্রবেশ করান:

INSERT INTO inventory (part_name, supplier_name, description, stock_level) VALUES
('Cardboard Shipping Box Large', 'Packaging Solutions Inc', 'Heavy-duty corrugated cardboard shipping container, 24x18x12 inches', 250),
('Warehouse Storage Container', 'Industrial Supply Co', 'Stackable plastic storage bin with snap-lock lid, blue', 180),
('Product Shipping Boxes', 'Acme Packaging', 'Medium corrugated boxes for warehouse storage, 18x14x10 inches', 320),
('Industrial Widget X-9', 'Acme Corp', 'Heavy-duty industrial coupling for pneumatic systems', 50),
('Precision Bolt M4', 'Global Fasteners Inc', 'Stainless steel M4 allen bolt, 20mm length, grade A2-70', 200),
('Hexagonal Nut M6', 'Metro Supply Co', 'Galvanized steel hex nut M6, DIN 934 standard', 150),
('Phillips Head Screw 3x20', 'Acme Corp', 'Zinc-plated Phillips head wood screw, 3mm x 20mm', 500),
('Wooden Dowel 10mm', 'Craft Materials Ltd', 'Hardwood birch dowel rod, 10mm diameter x 300mm length', 80),
('Rubber Gasket Small', 'SealTech Industries', 'Buna-N rubber gasket, 25mm OD x 15mm ID, oil resistant', 120),
('Spring Tension 5kg', 'Mechanical Parts Co', 'Stainless steel compression spring, 5kg load capacity', 60),
('Bearing 6204', 'Bearings Direct', 'Deep groove ball bearing 6204-2RS, 20x47x14mm sealed', 45),
('Warehouse Shelf Boxes', 'Storage Systems Ltd', 'Standardized warehouse inventory boxes, corrugated, bulk pack', 400),
('Inventory Container Units', 'Supply Chain Pros', 'Modular stackable storage units for warehouse racking', 95),
('Aluminum Extrusion Bar', 'MetalWorks International', 'T-slot aluminum extrusion 20x20mm profile, 1 meter length', 110),
('Cable Tie Pack 200mm', 'ElectroParts Depot', 'Nylon cable ties, 200mm x 4.8mm, UV resistant black, pack of 100', 600),
('Hydraulic Hose 1/2 inch', 'FluidPower Systems', 'High-pressure hydraulic hose, 1/2 inch ID, 3000 PSI rated', 35),
('Safety Goggles Clear', 'WorkSafe Equipment Co', 'ANSI Z87.1 rated clear safety goggles, anti-fog coating', 275),
('Packing Tape Industrial', 'Packaging Solutions Inc', 'Heavy-duty polypropylene packing tape, 48mm x 100m, clear', 450),
('Stainless Steel Sheet 1mm', 'MetalWorks International', '304 stainless steel sheet, 1mm thickness, 300x300mm', 70),
('Silicone Sealant Tube', 'SealTech Industries', 'Industrial-grade RTV silicone sealant, 300ml cartridge, grey', 190);

অনুদান অন্তর্ভুক্তি অনুমতি

GRANT EXECUTE ON FUNCTION embedding TO postgres;

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

এটি AlloyDB-এর বিল্ট-ইন ai.embedding() ফাংশন ব্যবহার করে সরাসরি SQL থেকে Vertex AI-এর text-embedding-005 মডেলকে কল করে — কোনো পাইথন কোডের প্রয়োজন নেই:

UPDATE inventory
SET part_embedding = ai.embedding(
    'text-embedding-005',
    part_name || '. ' || description
)::vector
WHERE part_embedding IS NULL;

এটি ৭৬৮-মাত্রিক ভেক্টর তৈরি করে যা প্রতিটি অংশের নাম এবং বিবরণের অর্থগত তাৎপর্য ধারণ করে। ScaNN ইনডেক্স অত্যন্ত দ্রুত সাদৃশ্য অনুসন্ধানের জন্য এগুলো ব্যবহার করবে। [এটি সম্পন্ন হতে আনুমানিক ৩-৫ মিনিট সময় লাগবে]

ScanN সূচক তৈরি করুন

SET scann.allow_blocked_operations = true;

CREATE INDEX IF NOT EXISTS idx_inventory_scann
ON inventory USING scann (part_embedding cosine)
WITH (num_leaves=5, quantizer='sq8');

সবকিছু ঠিকঠাক কাজ করেছে কিনা যাচাই করুন

SELECT part_name, supplier_name, stock_level,
       (part_embedding IS NOT NULL) as has_embedding
FROM inventory
ORDER BY id;

আপনি ২০টি সারি দেখতে পাবেন, যেগুলোর সবকটির `has_embedding` = `true` থাকবে।

৪. স্থাপত্য বোঝা

কোডে পরিবর্তন আনার আগে, সিস্টেমটি কীভাবে তৈরি করা হয়েছে তা বুঝে নেওয়া যাক। এর আর্কিটেকচারটি একটি প্রগতিশীল "জাগরণ" প্যাটার্ন অনুসরণ করে:

এজেন্ট স্ট্যাক

ভিশন এজেন্ট (এজেন্টস/ভিশন-এজেন্ট/)

  • agent.py — কোর জেমিনি ৩ ফ্ল্যাশ লজিক। এটি কোড এক্সিকিউশন সক্রিয় করে মডেলে ছবি পাঠায়, যাতে মডেলটি সুনির্দিষ্টভাবে আইটেম গণনা করার জন্য পাইথন (ওপেনসিভি) কোড লেখে।
  • agent_executor.py — A2A প্রোটোকল অনুরোধগুলোকে এজেন্ট লজিকের সাথে সংযুক্ত করে।
  • main.py — Uvicorn A2A সার্ভার যা /.well-known/agent-card.json ফাইলটি পরিবেশন করে এবং অনুরোধগুলি পরিচালনা করে।

সরবরাহকারী এজেন্ট (এজেন্ট/সরবরাহকারী-এজেন্ট/)

  • inventory.py — AlloyDB পাইথন কানেক্টরের মাধ্যমে AlloyDB-এর সাথে সংযোগ স্থাপন করে (কোনো অথোরাইজেশন প্রক্সির প্রয়োজন নেই)। এতে find_supplier() ফাংশনটি রয়েছে যা ScaNN ভেক্টর সার্চ সম্পাদন করে।
  • agent_executor.py — A2A প্রোটোকলকে ইনভেন্টরি সার্চ লজিকের সাথে সংযুক্ত করে।
  • main.py — এজেন্ট কার্ড এবং হেলথ এন্ডপয়েন্ট সহ Uvicorn A2A সার্ভার।

কন্ট্রোল টাওয়ার (ফ্রন্টএন্ড/)

  • app.py — একটি FastAPI ও WebSocket সার্ভার যা A2A-এর মাধ্যমে এজেন্ট খুঁজে বের করে, ভিশন → সার্চ → অর্ডার প্রক্রিয়াটি পরিচালনা করে এবং ব্রাউজারে রিয়েল-টাইম আপডেট স্ট্রিম করে।

A2A প্রবাহ

  • কন্ট্রোল টাওয়ার প্রতিটি এজেন্ট থেকে /.well-known/agent-card.json ফাইলটি পড়ে।
  • সক্ষমতা (দক্ষতা, এন্ডপয়েন্ট) খুঁজে বের করে — কোনো হার্ডকোডেড ইউআরএল নেই
  • ভিশন এজেন্টের কাছে ছবি পাঠায় → আইটেমের সংখ্যা ও বিবরণ পায়
  • সাপ্লায়ার এজেন্টের কাছে এমবেডিং কোয়েরি হিসেবে বিবরণ পাঠায় → পার্ট ম্যাচ খুঁজে পায়
  • স্বয়ংক্রিয়ভাবে অর্ডার দেয়

AlloyDB সংযোগ

সাপ্লায়ার এজেন্ট প্রচলিত অথ প্রক্সির পরিবর্তে অ্যালয়ডিবি পাইথন কানেক্টর ব্যবহার করে:

from google.cloud.alloydbconnector import Connector

connector = Connector()
conn = connector.connect(
    inst_uri,       # Full instance URI
    "pg8000",       # Driver
    user="postgres",
    password=DB_PASS,
    ip_type="PUBLIC",  # Cloud Shell uses Public IP
)

এটি স্বয়ংক্রিয়ভাবে IAM অথেন্টিকেশন, SSL/TLS এবং কানেকশন রাউটিং পরিচালনা করে। পরবর্তীতে ক্লাউড রান-এ ডেপ্লয় করার সময়, VPC অ্যাক্সেসের জন্য কেবল ip_type পরিবর্তন করে "PRIVATE" করে দিন।

৫. ধাপ ১: মেমোরি (সরবরাহকারী প্রতিনিধি)

সাপ্লায়ার এজেন্ট AlloyDB ScaNN ব্যবহার করে লক্ষ লক্ষ পার্টস মনে রাখে। বর্তমানে, এটি একটি প্লেসহোল্ডার কোয়েরি সহ আসে — এটি এমন একটি ব্যবস্থা যা আপনি কী অনুসন্ধান করছেন তা নির্বিশেষে, খুঁজে পাওয়া প্রথম সারিটিই ফেরত দেয়।

নিরীক্ষা: স্মৃতিভ্রষ্ট ব্যক্তি

আপনি এখন সাপ্লায়ার এজেন্টকে কোয়েরি করলে, এটি একটি এলোমেলো ফলাফল দেয়। এর মধ্যে সাদৃশ্যের কোনো ধারণা নেই। চলুন, এটা ঠিক করা যাক।

সরবরাহকারী এজেন্ট শুরু করুন

A2A সার্ভার (main.py) agent_executor.py-কে দায়িত্ব অর্পণ করে, যা inventory.py- তে থাকা বিজনেস লজিকের সাথে প্রোটোকলের সংযোগ স্থাপন করে।

pkill -f uvicorn #Kill all uvicorn processes

ধাপ ১: এজেন্ট ডিরেক্টরিতে যান

cd agents/supplier-agent

ধাপ ২: নির্ভরতাগুলো ইনস্টল করুন

pip install -r requirements.txt

ধাপ ৩: এজেন্ট সার্ভার চালু করুন

uvicorn main:app --host 0.0.0.0 --port 8082 > /dev/null 2>&1 &

> /dev/null 2>&1 & সার্ভারটিকে ব্যাকগ্রাউন্ডে চালায় এবং আউটপুট দমন করে, যাতে এটি আপনার টার্মিনালে বাধা সৃষ্টি না করে।

ধাপ ৪: এজেন্টটি চালু আছে কিনা যাচাই করুন (চালু করার পর ২-৩ সেকেন্ড অপেক্ষা করুন)।

curl http://localhost:8082/.well-known/agent-card.json

প্রত্যাশিত আউটপুট: এজেন্ট কনফিগারেশন সহ JSON (কোনো ত্রুটি ছাড়াই ফেরত আসা উচিত)

সমাধান: <=> অপারেটর প্রয়োগ করা

agents/supplier-agent/inventory.py ফাইলটি খুলুন এবং প্রায় ৬০-৭০ লাইনের মধ্যে find_supplier() ফাংশনটি খুঁজুন। আপনি এই প্লেসহোল্ডারটি দেখতে পাবেন:

# TODO: Replace this placeholder query with ScaNN vector search

sql = "SELECT part_name, supplier_name FROM inventory LIMIT 1;"
cursor.execute(sql)

ঐ দুটি লাইনকে নিম্নোক্তভাবে প্রতিস্থাপন করুন:

sql = """
SELECT part_name, supplier_name,
       part_embedding <=> %s::vector as distance
FROM inventory
ORDER BY part_embedding <=> %s::vector
LIMIT 1;
"""
cursor.execute(sql, (embedding_str, embedding_str))

এর কাজ হলো:

  • <=> হলো PostgreSQL-এর কোসাইন ডিসটেন্স অপারেটর
  • ORDER BY part_embedding <=> %s::vector নিকটতম মিল খুঁজে বের করে (সর্বনিম্ন দূরত্ব = নিকটতম শব্দার্থগত অর্থ)
  • %s::vector আপনার এমবেডিং অ্যারে-কে PostgreSQL-এর ভেক্টর টাইপে রূপান্তর করে।
  • ScanN ইনডেক্স স্বয়ংক্রিয়ভাবে এই কোয়েরিটিকে দ্রুততর করে!

ধাপ ৪: ফাইলটি সংরক্ষণ করুন (Ctrl+S অথবা Cmd+S)

এজেন্টটি এখন এলোমেলো ফলাফল দেখানোর পরিবর্তে শব্দার্থিক অনুসন্ধান ব্যবহার করবে!

যাচাইকরণ

A2A আবিষ্কার এবং ইনভেন্টরি পরীক্ষা করুন:

curl http://localhost:8082/.well-known/agent-card.json

44500cdeeca3cee8.png

python3 -c "
from inventory import find_supplier
import json
vec = [0.1]*768
r = find_supplier(vec)
if r:
    result = {'part': r[0], 'supplier': r[1]}
    if len(r) > 2:
        result['distance'] = float(r[2]) if r[2] else None
    print(json.dumps(result))
else:
    print('No result found')
"

প্রত্যাশিত: agent-card.json এজেন্ট কার্ডটি ফেরত দেবে। পাইথন কোডটি সিডেড ডেটা থেকে একটি পার্ট এবং সাপ্লায়ার ফেরত দেয়।

৬. ধাপ ২: চোখ (দৃষ্টি সহায়ক)

ডাটাবেসটি অ্যাক্সেসযোগ্য থাকা অবস্থায়, চলুন জেমিনি ৩ ফ্ল্যাশ ব্যবহার করে দৃষ্টিশক্তিকে জাগিয়ে তুলি। ভিশন এজেন্ট কোড এক্সিকিউশনের মাধ্যমে 'ভিজ্যুয়াল ম্যাথ' সম্পাদন করে।

নিরীক্ষা: বিভ্রম

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

  • মডেল বলছেন: "আমি প্রায় ১২টি বাক্স দেখতে পাচ্ছি।"
  • বাস্তবতা: ১৫টি বাক্স আছে।
  • ফলাফল: সরবরাহ শৃঙ্খলের ব্যর্থতা।

সমাধান: চিন্তা-কর্ম-পর্যবেক্ষণ চক্রকে জাগিয়ে তোলা

আমরা কোড এক্সিকিউশন এবং থিংকিংকনফিগ সক্রিয় করি, ফলে মডেলটি নির্ণায়কভাবে গণনা করার জন্য পাইথন (ওপেনসিভি) কোড লেখে।

  1. agents/vision-agent/agent.py ফাইলটি খুলুন।
  2. GenerateContentConfig সেকশনটি খুঁজুন (প্রায় ৬৮-৭৮ লাইনের মধ্যে)।
  3. thinking_config=types.ThinkingConfig(...) ব্লক এবং tools=[types.Tool(code_execution=...)] উভয়টির কমেন্ট তুলে দিন।
  4. ক্লায়েন্টটি এনভায়রনমেন্ট থেকে আপনার GEMINI_API_KEY ব্যবহার করার জন্য ইতিমধ্যেই কনফিগার করা আছে।

ফাইল: agents/vision-agent/agent.py

config = types.GenerateContentConfig(
    temperature=0,
    # CODELAB STEP 1: Uncomment to enable reasoning
    thinking_config=types.ThinkingConfig(
        thinking_level="MINIMAL",  # Valid: "MINIMAL", "LOW", "MEDIUM", "HIGH"
        include_thoughts=False    # Set to True for debugging
    ),
    # CODELAB STEP 2: Uncomment to enable code execution
    tools=[types.Tool(code_execution=types.ToolCodeExecution)]
)

কেন thinking_level="MINIMAL"?

এই কাজের জন্য (কোড এক্সিকিউশনের মাধ্যমে আইটেম গণনা করা), স্ক্রিপ্ট পরিকল্পনা করতে এবং গণনা যাচাই করতে "MINIMAL" যথেষ্ট রিজনিং প্রদান করে। ডিটারমিনিস্টিক কাজের ক্ষেত্রে "HIGH" ব্যবহার করলে নির্ভুলতা না বাড়িয়েই ল্যাটেন্সি ২-৩ গুণ বেড়ে যাবে। ব্যয়-কর্মক্ষমতা অপ্টিমাইজেশন — কাজের জটিলতার সাথে রিজনিং-এর গভীরতার সামঞ্জস্য বিধান করুন।

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

ভিশন এজেন্ট শুরু করুন

🔄 পাথ চেক: আপনি যদি এখনও agents/supplier-agent/ ফোল্ডারে থাকেন, তাহলে প্রথমে cd ../.. কমান্ড ব্যবহার করে রিপো রুটে ফিরে যান।

ধাপ ১: ভিশন এজেন্ট ডিরেক্টরিতে যান

cd agents/vision-agent

ধাপ ২: নির্ভরতাগুলো ইনস্টল করুন

pip install -r requirements.txt

ধাপ ৩: ভিশন এজেন্ট সার্ভারটি চালু করুন

uvicorn main:app --host 0.0.0.0 --port 8081 > /dev/null 2>&1 &

> /dev/null 2>&1 & সার্ভারটিকে ব্যাকগ্রাউন্ডে চালায় এবং আউটপুট দমন করে, যাতে এটি আপনার টার্মিনালে বাধা সৃষ্টি না করে।

যাচাইকরণ

A2A আবিষ্কার পরীক্ষা:

curl http://localhost:8081/.well-known/agent-card.json

প্রত্যাশিত: এজেন্টের নাম এবং দক্ষতা সহ JSON। আপনি ধাপ ৮-এ কন্ট্রোল টাওয়ার UI ব্যবহার করে প্রকৃত ভিশন গণনা পরীক্ষা করবেন।

dc9bc53007336472.png

৭. ধাপ ৩: করমর্দন (এ২এ এজেন্ট কার্ড)

আমাদের এজেন্ট সমস্যাটি দেখতে পায় (ভিশন) এবং সরবরাহকারীকে চেনে (মেমরি)। A2A প্রোটোকল ডাইনামিক ডিসকভারি সক্ষম করে —ফ্রন্টএন্ড প্রতিটি এজেন্টের কার্ড পড়ে তার সাথে কীভাবে কথা বলতে হয় তা শিখে নেয়।

A2A বনাম প্রচলিত REST API

দিক

ঐতিহ্যবাহী বিশ্রাম

A2A প্রোটোকল

এন্ডপয়েন্ট ডিসকভারি

কনফিগে হার্ডকোড করা ইউআরএল

/.well-known/agent-card.json এর মাধ্যমে গতিশীল

সক্ষমতার বিবরণ

এপিআই ডকুমেন্টেশন (মানুষের জন্য)

দক্ষতা (মেশিন-পাঠযোগ্য)

একীকরণ

প্রতি পরিষেবার জন্য ম্যানুয়াল কোড

শব্দার্থগত মিলকরণ: "আমার ইনভেন্টরি সার্চ প্রয়োজন" → দক্ষতা আবিষ্কার করে

নতুন এজেন্ট যুক্ত করা হয়েছে

সকল ক্লায়েন্টের কনফিগারেশন আপডেট করুন

শূন্য কনফিগারেশন—স্বয়ংক্রিয়ভাবে আবিষ্কৃত

বাস্তব সুবিধা: একটি প্রচলিত মাইক্রোসার্ভিসে, যদি আপনি তৃতীয় কোনো "লজিস্টিকস এজেন্ট" যোগ করেন, তাহলে আপনাকে এর URL এবং API কন্ট্রাক্ট দিয়ে কন্ট্রোল টাওয়ারের কোড আপডেট করতে হবে। A2A-এর মাধ্যমে, কন্ট্রোল টাওয়ার এটিকে স্বয়ংক্রিয়ভাবে খুঁজে বের করে এবং স্বাভাবিক ভাষার দক্ষতার বিবরণের মাধ্যমে এর সক্ষমতাগুলো বুঝতে পারে।

এই কারণেই A2A প্লাগ-এন্ড-প্লে এজেন্ট কম্পোজিশন সক্ষম করে—যা স্বায়ত্তশাসিত সিস্টেমের জন্য একটি স্থাপত্যগত প্যাটার্ন।

এজেন্ট কার্ড তৈরি করুন

🔄 পাথ চেক: আপনি যদি এখনও agents/vision-agent/ ফোল্ডারে থাকেন, তাহলে প্রথমে cd ../.. কমান্ড ব্যবহার করে রিপো রুটে ফিরে যান।

এজেন্ট কার্ডটি ইতিমধ্যেই agents/supplier-agent/agent_card.json-এ অন্তর্ভুক্ত করা আছে। এটি খুলুন এবং পর্যালোচনা করুন:

{
  "name": "Acme Supplier Agent",
  "description": "Autonomous fulfillment for industrial parts via AlloyDB ScaNN.",
  "version": "1.0.0",
  "skills": [{
    "id": "search_inventory",
    "name": "Search Inventory",
    "description": "Searches the warehouse database for semantic matches using AlloyDB ScaNN vector search.",
    "tags": ["inventory", "search", "alloydb"],
    "examples": ["Find stock for Industrial Widget X-9", "Who supplies ball bearings?"]
  }]
}

আপনার প্রয়োজন অনুযায়ী নাম, বিবরণ বা উদাহরণগুলো পরিবর্তন করতে পারেন।

কার্ডটি লোড করতে সাপ্লায়ার এজেন্টটি পুনরায় চালু করুন:

ধাপ ১: চলমান এজেন্টটি বন্ধ করুন

pkill -f "uvicorn main:app.*8082"

ধাপ ২: এজেন্ট ডিরেক্টরিতে যান

cd agents/supplier-agent

ধাপ ৩: এজেন্টটি পুনরায় চালু করুন।

uvicorn main:app --host 0.0.0.0 --port 8082 > /dev/null 2>&1 &

> /dev/null 2>&1 & সার্ভারটিকে ব্যাকগ্রাউন্ডে চালায় এবং আউটপুট দমন করে, যাতে এটি আপনার টার্মিনালে বাধা সৃষ্টি না করে।

ধাপ ৪: নতুন এজেন্ট কার্ডটি যাচাই করুন (শুরু করার পর ২-৩ সেকেন্ড অপেক্ষা করুন)

curl http://localhost:8082/.well-known/agent-card.json

প্রত্যাশিত আউটপুট: আপনার পূরণ করা নাম, বিবরণ এবং দক্ষতা সহ JSON ডেটা।

dd352ca2e7e6109a.png

৮. ধাপ ৪: কন্ট্রোল টাওয়ার

FastAPI ও WebSockets ব্যবহার করে কন্ট্রোল টাওয়ার ফ্রন্টএন্ডটি চালান। এটি A2A-এর মাধ্যমে এজেন্টদের খুঁজে বের করে এবং রিয়েল-টাইম আপডেটের মাধ্যমে সম্পূর্ণ প্রক্রিয়াটি পরিচালনা করে।

সমস্ত পরিষেবা শুরু করুন

সমস্ত পরিষেবা শুরু করার সবচেয়ে সহজ উপায়:

আপনি রিপো রুটে আছেন কিনা তা যাচাই করুন।

pwd  # Should end with: visual-commerce-gemini-3-alloydb

তারপর,

sh run.sh

এই একটিমাত্র কমান্ডই শুরু করে:

  • পোর্ট ৮০৮১-এ ভিশন এজেন্ট
  • পোর্ট ৮০৮২-তে সরবরাহকারী এজেন্ট
  • পোর্ট ৮০৮০-তে কন্ট্রোল টাওয়ার

সমস্ত পরিষেবা চালু হওয়ার জন্য প্রায় ১০ সেকেন্ড অপেক্ষা করুন।

সিস্টেমটি পরীক্ষা করুন

কন্ট্রোল টাওয়ারে প্রবেশ করুন:

  1. ক্লাউড শেল টুলবারে থাকা ওয়েব প্রিভিউ বোতামে (চোখের আইকন 👁️) ক্লিক করুন।
  2. " পোর্ট ৮০৮০-তে প্রিভিউ " নির্বাচন করুন।
  3. কন্ট্রোল টাওয়ার ড্যাশবোর্ডটি একটি নতুন ট্যাবে খুলবে।

ডেমোটি চালান:

  1. উপরের ডানদিকে: সংযোগের অবস্থা (সবুজ "লাইভ" বিন্দু), ডেমো/অটো মোড টগল এবং অডিও নিয়ন্ত্রণসমূহ
  2. কেন্দ্র : ছবি আপলোড এবং বিশ্লেষণের ভিজ্যুয়ালাইজেশন সহ প্রধান ওয়ার্কফ্লো ক্যানভাস
  3. পার্শ্ব প্যানেল (বিশ্লেষণের সময় প্রদর্শিত হয়): ওয়ার্কফ্লো টাইমলাইন (বামে), অগ্রগতি ট্র্যাকিং এবং কোড ভিউয়ার (ডানে)

বিকল্প ১: দ্রুত শুরু (প্রস্তাবিত)

  1. হোমপেজে আপনি নমুনা ছবি সহ একটি " কুইক স্টার্ট " বিভাগ দেখতে পাবেন।
  2. বিশ্লেষণ স্বয়ংক্রিয়ভাবে শুরু করতে যেকোনো নমুনা ছবিতে ক্লিক করুন
  3. স্বয়ংক্রিয় কার্যপ্রবাহটি দেখুন (~৩০-৪৫ সেকেন্ড)

বিকল্প ২: আপনার নিজেরটি আপলোড করুন

  1. একটি গুদাম/শেলফের ছবি (PNG, JPG, সর্বোচ্চ ১০ মেগাবাইট) ড্র্যাগ অ্যান্ড ড্রপ করুন অথবা ব্রাউজ করতে ক্লিক করুন।
  2. " স্বায়ত্তশাসিত ওয়ার্কফ্লো শুরু করুন " এ ক্লিক করুন
  3. ৪-পর্যায়ের পাইপলাইনটি পর্যবেক্ষণ করুন।

যা ঘটে:

  1. এজেন্ট ডিসকভারি: A2A প্রোটোকল মডেলগুলি ভিশন এজেন্ট এবং সাপ্লায়ার এজেন্ট কার্ডগুলিকে তাদের দক্ষতা এবং এন্ডপয়েন্ট সহ প্রদর্শন করে।
  2. দৃষ্টি বিশ্লেষণ: জেমিনি ৩ ফ্ল্যাশ আইটেম গণনা করার জন্য পাইথন কোড (ওপেনসিভি) তৈরি ও কার্যকর করে। অগ্রগতি বারটি উপ-ধাপগুলো দেখায়। শনাক্তকৃত আইটেমগুলোর উপর বাউন্ডিং বক্সগুলো ওভারলে করা থাকে। ফলাফলের ব্যাজে "✓ কোড-যাচাইকৃত" বা "~ আনুমানিক" দেখানো হয়।
  3. সাপ্লায়ার ম্যাচ: AlloyDB ScaNN ভেক্টর সার্চ অ্যানিমেশন। সার্চ কোয়েরি প্রদর্শিত হয় (যেমন, "industrial metal boxes")। রেজাল্ট কার্ডে মিলে যাওয়া পার্ট, সাপ্লায়ার এবং কনফিডেন্স স্কোর দেখানো হয়।
  4. অর্ডার দেওয়া হয়েছে: অর্ডার আইডি, পরিমাণ এবং বিবরণ সহ রসিদ কার্ড।

পরামর্শ: উপস্থাপনার জন্য প্রতিটি ধাপে বিরতি দিতে ডেমো মোড (উপরের ডানদিকে) চালু রাখুন। অটো মোডে, ওয়ার্কফ্লো অবিচ্ছিন্নভাবে চলতে থাকে।

1a031c4fd407a183.png

এইমাত্র কী ঘটল

কন্ট্রোল টাওয়ারটি A2A প্রোটোকল ব্যবহার করে /.well-known/agent-card.json-এর মাধ্যমে উভয় এজেন্টকে খুঁজে বের করেছে, ভিশন অ্যানালাইসিস (কোড এক্সিকিউশন সহ জেমিনি ৩ ফ্ল্যাশ) পরিচালনা করেছে, ভেক্টর সার্চ (অ্যালয়ডিবি স্ক্যান) করেছে এবং একটি স্বয়ংক্রিয় অর্ডার দিয়েছে—এই সবকিছুই রিয়েল-টাইম ওয়েবসকেট আপডেটের মাধ্যমে সম্পন্ন হয়েছে। প্রতিটি এজেন্ট A2A স্ট্যান্ডার্ডের মাধ্যমে তার সক্ষমতা প্রকাশ করে, যা কাস্টম SDK ছাড়াই প্লাগ-এন্ড-প্লে কম্পোজিশন সম্ভব করে তোলে। আরও জানুন: A2A প্রোটোকল

সমস্যা সমাধান

পাথ-সম্পর্কিত ত্রুটিসমূহ:

  • কমান্ড চালানোর সময় " এরকম কোনো ফাইল বা ডিরেক্টরি নেই " ত্রুটি দেখাচ্ছে: আপনি রিপো রুটে নেই।
# Check where you are
pwd

# If you're lost, navigate to home and back to repo
cd
cd visual-commerce-gemini-3-alloydb

পরিষেবা ত্রুটি:

  • " ঠিকানা ইতিমধ্যে ব্যবহৃত হচ্ছে ": পূর্ববর্তী রানের প্রসেসগুলো এখনও সক্রিয় রয়েছে।
# Kill all services and restart
pkill -f uvicorn
sh run.sh  # Or manually restart individual agents
  • পরিষেবা চালু হচ্ছে না : পোর্টগুলো ব্যবহৃত হচ্ছে কিনা তা পরীক্ষা করুন:
# Check which processes are using the ports
lsof -i :8080  # Control Tower
lsof -i :8081  # Vision Agent
lsof -i :8082  # Supplier Agent
  • AlloyDB-তে "সংযোগ প্রত্যাখ্যান করা হয়েছে": আপনার AlloyDB ইনস্ট্যান্সে পাবলিক আইপি সক্রিয় আছে কিনা যাচাই করুন।

৯. 🎁 বোনাস: ক্লাউড রান-এ ডেপ্লয় করুন

ঐচ্ছিক — সবকিছু স্থানীয়ভাবে কাজ করে! কিন্তু আপনি যদি একটি পাবলিক ইউআরএল-এর মাধ্যমে আপনার সৃষ্টিটি শেয়ার করতে চান:

# From repo root
sh deploy/deploy.sh

যা ঘটে:

  1. আপনার .env কনফিগারেশন পড়ে।
  2. আপনার নাম জানতে চাওয়া হয় (যা ডেপ্লয় করা অ্যাপে দেখানো হয়)।
  3. তিনটি সার্ভিসকেই একটিমাত্র ক্লাউড রান কন্টেইনার হিসেবে ডেপ্লয় করে।
  4. AlloyDB অ্যাক্সেসের জন্য IAM রোল মঞ্জুর করা হয়েছে।
  5. শেয়ারযোগ্য একটি ইউআরএল আউটপুট করে

যেসব ভিজিটর আপনার ইউআরএলটি খুলবেন, তারা একটি পপআপ দেখতে পাবেন:

১০. পরিচ্ছন্নতা

চার্জ এড়ানোর জন্য, স্বয়ংক্রিয় ক্লিনআপ স্ক্রিপ্ট দিয়ে সমস্ত রিসোর্স ধ্বংস করুন:

# From repo root
sh deploy/cleanup.sh

এটি নিরাপদে অপসারণ করে:

  • অ্যালয়ডিবি ক্লাস্টার (ব্যয়ের প্রধান কারণ)
  • ক্লাউড রান পরিষেবা (যদি স্থাপন করা হয়)
  • সংশ্লিষ্ট পরিষেবা অ্যাকাউন্ট

কোনো কিছু মুছে ফেলার আগে স্ক্রিপ্টটি নিশ্চিতকরণের জন্য অনুরোধ করবে।

১১. তথ্যসূত্র ও আরও পঠন

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

সরকারি নথিপত্র

জেমিনি ৩ ফ্ল্যাশ:

অ্যালয়ডিবি এআই এবং স্ক্যানএন:

ডেটাবেসের জন্য এমসিপি টুলবক্স (বিকল্প পদ্ধতি):

মূল্য সংক্রান্ত তথ্য:

যাচাইকৃত কর্মক্ষমতা দাবি

বৈশিষ্ট্য

দাবি

উৎস

স্ক্যানএন বনাম এইচএনএসডব্লিউ (ফিল্টার করা)

১০ গুণ দ্রুত

গুগল ক্লাউড ব্লগ (যাচাইকৃত)

স্ক্যান বনাম এইচএনএসডব্লিউ (মানক)

৪ গুণ দ্রুত

গুগল ক্লাউড ব্লগ (যাচাইকৃত)

স্ক্যানএন মেমরি ফুটপ্রিন্ট

৩-৪ গুণ ছোট

গুগল ক্লাউড ব্লগ (যাচাইকৃত)

স্ক্যান সূচক তৈরির সময়

৮ গুণ দ্রুততর

গুগল ক্লাউড ব্লগ (যাচাইকৃত)

কোড নির্বাহের সময়সীমা

সর্বোচ্চ ৩০ সেকেন্ড

গুগল ক্লাউড ডক্স (যাচাইকৃত)

কোড এক্সিকিউশন ফাইল I/O

সমর্থিত নয়

গুগল ক্লাউড ডক্স (যাচাইকৃত)

তাপমাত্রা=০ আচরণ

নির্ধারিত আউটপুট

কমিউনিটি দ্বারা যাচাইকৃত

অতিরিক্ত সম্পদ

এজেন্ট-টু-এজেন্ট (A2A) প্রোটোকল:

  • A2A এজেন্ট আবিষ্কার এবং যোগাযোগকে প্রমিত করে।
  • এজেন্ট কার্ডগুলি /.well-known/agent-card.json এ পরিবেশন করা হয়েছে।
  • স্বায়ত্তশাসিত এজেন্ট সহযোগিতার জন্য উদীয়মান মান

স্ক্যান রিসার্চ:

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

১২. চ্যালেঞ্জ মোড: আপনার এজেন্টিক দক্ষতার স্তর উন্নত করুন

আপনি একটি কার্যকর স্বায়ত্তশাসিত সরবরাহ শৃঙ্খল তৈরি করেছেন। আরও এগিয়ে যেতে প্রস্তুত? এই চ্যালেঞ্জগুলো আপনার শেখা কৌশলগুলোকে নতুন সমস্যার ক্ষেত্রে প্রয়োগ করে।

চ্যালেঞ্জ ১: চিত্র-ভিত্তিক অনুসন্ধান (মাল্টিমোডাল এমবেডিংস)

বর্তমান কার্যপ্রবাহ: ভিশন এজেন্ট আইটেম গণনা করে → টেক্সট কোয়েরি তৈরি করে → সাপ্লায়ার এজেন্ট টেক্সটটি এমবেড করে → অ্যালয়ডিবি-তে অনুসন্ধান করে

চ্যালেঞ্জ: টেক্সট পুরোপুরি এড়িয়ে যান—ক্রপ করা ছবিটি সরাসরি সাপ্লায়ার এজেন্টের কাছে পাঠান।

ইঙ্গিত:

  1. ভিশন এজেন্টের কোড এক্সিকিউশন শেলফ ইমেজ থেকে স্বতন্ত্র আইটেম ক্রপ করতে পারে।
  2. ভার্টেক্স এআই-এর মাল্টিমোডালএম্বেডিং@001 মডেল সরাসরি ছবি এম্বেড করতে পারে।
  3. টেক্সটের পরিবর্তে ইমেজ বাইট গ্রহণ করার জন্য inventory.py ফাইলটি পরিবর্তন করুন।
  4. A2A দক্ষতার বিবরণ আপডেট করে "গ্রহণযোগ্য: ছবি/jpeg বা টেক্সট" উল্লেখ করুন।

কেন এটি গুরুত্বপূর্ণ: জটিল বাহ্যিক রূপের (যেমন রঙের ভিন্নতা, ক্ষতি, প্যাকেজিং-এর পার্থক্য) যন্ত্রাংশের ক্ষেত্রে চাক্ষুষ অনুসন্ধান বেশি নির্ভুল হয়।

চ্যালেঞ্জ ২: পর্যবেক্ষণযোগ্যতা—স্বচ্ছতার মাধ্যমে বিশ্বাস স্থাপন

বর্তমান অবস্থা: সিস্টেমটি কাজ করছে, কিন্তু এর ভেতরের কার্যপ্রণালী দেখা যাচ্ছে না।

চ্যালেঞ্জ: ভেক্টর সার্চটি যে সম্পাদিত হচ্ছে, তা প্রমাণ করতে AlloyDB-এর কোয়েরি লগ পরীক্ষা করুন।

ধাপসমূহ:

  • AlloyDB-তে কোয়েরি ইনসাইটস ডিফল্টরূপে সক্রিয় থাকে। যাচাই করতে, চালান:
gcloud alloydb instances describe INSTANCE_NAME \
  --cluster=CLUSTER_NAME \
  --region=us-central1 \
  --format="value(queryInsightsConfig.queryPlansPerMinute)"
  • UI-এর মাধ্যমে সরবরাহকারী অনুসন্ধান করুন
  • প্রকৃতপক্ষে সম্পাদিত SQL দেখুন:
gcloud logging read \
  'resource.type="alloydb.googleapis.com/Instance" AND textPayload:"ORDER BY part_embedding"' \
  --limit 5 \
  --format=json

প্রত্যাশিত আউটপুট: আপনি ORDER BY part_embedding <=> $1::vector LIMIT 1 কোয়েরিটি তার এক্সিকিউশন টাইম সহ দেখতে পাবেন।

কেন এটি গুরুত্বপূর্ণ: পর্যবেক্ষণযোগ্যতা আস্থা তৈরি করে। যখন স্টেকহোল্ডাররা জিজ্ঞাসা করেন "এই এজেন্টটি কীভাবে সিদ্ধান্ত নেয়?", তখন আপনি তাদের শুধু আউটপুট নয়, কোয়েরি প্ল্যানও দেখাতে পারেন।

চ্যালেঞ্জ ৩: একাধিক এজেন্টের সমন্বয়

চ্যালেঞ্জ: এমন একজন তৃতীয় এজেন্ট (লজিস্টিকস এজেন্ট) যোগ করুন যিনি গুদামের অবস্থান এবং পণ্যের ওজনের উপর ভিত্তি করে শিপিং খরচ গণনা করবেন।

স্থাপত্য:

  • ভিশন এজেন্টের আউটপুট: আইটেমের সংখ্যা
  • সরবরাহকারী এজেন্টের আউটপুট: সরবরাহকারীর অবস্থান
  • লজিস্টিকস এজেন্ট (নতুন) ইনপুট: গন্তব্য, ওজন → আউটপুট: শিপিং খরচ + আনুমানিক পৌঁছানোর সময়

ইঙ্গিত: A2A প্রোটোকল এই কাজটি অত্যন্ত সহজ করে দেয়—calculate_shipping স্কিলসহ একটি নতুন এজেন্ট কার্ড তৈরি করুন। কন্ট্রোল টাওয়ার এটি স্বয়ংক্রিয়ভাবে খুঁজে নেবে।

যে প্যাটার্নটি আপনি শিখছেন: এটিই এজেন্ট-ভিত্তিক স্থাপত্যের মূল ভিত্তি — ছোট, সংযোজনযোগ্য বিশেষজ্ঞ দিয়ে নির্মিত জটিল সিস্টেম।

১৩. উপসংহার

আপনি সফলভাবে জেনারেটিভ এআই থেকে এজেন্টিক এআই- তে স্থানান্তরিত হয়েছেন।

আমরা যা তৈরি করেছি:

  • লক্ষ্য: আমরা অনুমান করার পরিবর্তে কোড এক্সিকিউশন (এপিআই কী-এর মাধ্যমে জেমিনি ৩ ফ্ল্যাশ) চালু করেছি।
  • মেমরি: আমরা 'স্লো সার্চ'-কে AlloyDB ScaNN (GCP-এর মাধ্যমে) দিয়ে প্রতিস্থাপন করেছি।
  • পদক্ষেপ: আমরা 'API ইন্টিগ্রেশন'-কে A2A প্রোটোকল দ্বারা প্রতিস্থাপন করেছি।

হাইব্রিড আর্কিটেকচারের সুবিধাসমূহ:

এই কোডল্যাবটি একটি হাইব্রিড পদ্ধতি প্রদর্শন করেছে:

  • ভিশন এজেন্ট: জেমিনি এপিআই (এপিআই কী) ব্যবহার করে - সহজ, বিনামূল্যে ব্যবহারের সুযোগ রয়েছে, কোনো জিসিপি বিলিংয়ের প্রয়োজন নেই।
  • সরবরাহকারী এজেন্ট: GCP (Vertex AI + AlloyDB) ব্যবহার করে - এন্টারপ্রাইজ-গ্রেড, কমপ্লায়েন্স-প্রস্তুত

এটাই স্বায়ত্তশাসিত অর্থনীতির কাঠামো। কোডটি আপনার কাছেই থাকবে।

পরবর্তী পদক্ষেপ