১. ভূমিকা
এই কোডল্যাবে, আপনি একটি অনলাইন গাড়ির মার্কেটপ্লেস "সিম্বাল অটোস"-এর জন্য ব্যাকএন্ড তৈরি করবেন এবং ফ্রন্টএন্ড ডেপ্লয় করবেন। আপনি জেমিনি এন্টারপ্রাইজ এজেন্ট প্ল্যাটফর্মে বিগকোয়েরি এবং জেমিনি মডেল ব্যবহার করে গাড়ির ছবি পরীক্ষা করবেন, বিগকোয়েরি এমএল ব্যবহার করে দামের পূর্বাভাস দেবেন, ভেক্টর এমবেডিং ব্যবহার করে প্রতারণামূলক লিস্টিং শনাক্ত করবেন এবং কম্পোজিট ডিল স্কোর গণনা করবেন। সবশেষে, আপনি ক্লাউড রান -এ ডেপ্লয় করা একটি নেক্সট.জেএস ফ্রন্টএন্ডে এই প্রাপ্ত তথ্যগুলো প্রদর্শন করবেন।

আপনি যা করবেন
- ObjectRef ব্যবহার করে BigQuery-কে আনস্ট্রাকচার্ড ক্লাউড স্টোরেজ ইমেজের সাথে সংযুক্ত করুন।
- বিগকোয়েরি ও জেমিনি মডেল ব্যবহার করে ছবি থেকে গাড়ির বৈশিষ্ট্য বের করুন
- BigQuery ML ব্যবহার করে একটি XGBoost রিগ্রেশন মডেল প্রশিক্ষণের মাধ্যমে ন্যায্য বাজার মূল্যের পূর্বাভাস দিন।
- গাড়ির বিবরণ যুক্ত করে এবং
VECTOR_SEARCHসম্পাদনের মাধ্যমে সম্ভাব্য প্রতারণামূলক ও বিশ্বাসযোগ্য তালিকা শনাক্ত করুন। -
AI.SCOREব্যবহার করে বিক্রেতার বিবরণ থেকে অবস্থার সংকেতগুলো অন্তর্ভুক্ত করার পাশাপাশি প্রতিটি লিস্টিংয়ের জন্য একটি পূর্ণাঙ্গ ডিল স্কোর গণনা করুন। - ডেটা এক্সপোর্ট করুন এবং Next.js মার্কেটপ্লেস অ্যাপ্লিকেশনটি Google Cloud Run-এ ডেপ্লয় করুন।
আপনার যা যা লাগবে
- ক্রোমের মতো একটি ওয়েব ব্রাউজার
- বিলিং সক্ষম একটি গুগল ক্লাউড প্রজেক্ট
- SQL, Python, এবং Google Cloud সম্পর্কে প্রাথমিক ধারণা
- এপিআই সক্রিয় করতে, রিসোর্স তৈরি করতে এবং অনুমতি (যেমন, প্রজেক্ট ওনার) প্রদান করার জন্য পর্যাপ্ত আইএএম অনুমতি।
এই কোডল্যাবটি মধ্যবর্তী স্তরের ডেভেলপারদের জন্য।
এই কোডল্যাবে তৈরি রিসোর্সগুলোর খরচ ৫ ডলারের কম হওয়া উচিত।
২. শুরু করার আগে
একটি গুগল ক্লাউড প্রজেক্ট তৈরি করুন
- গুগল ক্লাউড কনসোলের প্রজেক্ট সিলেক্টর পেজে, একটি গুগল ক্লাউড প্রজেক্ট নির্বাচন করুন বা তৈরি করুন ।
- আপনার ক্লাউড প্রোজেক্টের জন্য বিলিং চালু আছে কিনা তা নিশ্চিত করুন। কোনো প্রোজেক্টে বিলিং চালু আছে কিনা তা কীভাবে পরীক্ষা করবেন, তা জেনে নিন।
ক্লাউড শেল শুরু করুন
আপনি গুগল ক্লাউড শেল ব্যবহার করে কোড ডাউনলোড করবেন, সেটআপ স্ক্রিপ্ট চালাবেন এবং অ্যাপ্লিকেশনটি ডেপ্লয় করবেন।
- Google Cloud Console- এর শীর্ষে থাকা Activate Cloud Shell-এ ক্লিক করুন।

- ক্লাউড শেলে সংযুক্ত হওয়ার পর, আপনার অ্যাপ্লিকেশনটি যাতে গুগল ক্লাউড এপিআই অ্যাক্সেস করতে পারে তা নিশ্চিত করতে আপনার সেশনটি প্রমাণীকরণ করুন। ক্লাউড শেলকে অনুমোদন দেওয়ার জন্য নির্দেশাবলী অনুসরণ করুন:
gcloud auth application-default login
- আপনার গুগল ক্লাউড প্রজেক্ট আইডি এবং আপনার গুগল ক্লাউড স্টোরেজ বাকেটের (যেখানে আপনি মূল ডেটা সংরক্ষণ করবেন) জন্য একটি অনন্য নাম সেট করুন:
export PROJECT_ID=$(gcloud config get-value project)
export USER_BUCKET="cymbal-autos-${PROJECT_ID}"
gcloud config set project $PROJECT_ID
আপনি নিচেরটির মতো একটি বার্তা দেখতে পাবেন:
Your active configuration is: [cloudshell-####] Updated property [core/project]
এপিআই সক্ষম করুন
এই কোডল্যাবের জন্য প্রয়োজনীয় সমস্ত API সক্রিয় করতে ক্লাউড শেলে এই কমান্ডটি চালান:
gcloud services enable \
aiplatform.googleapis.com \
artifactregistry.googleapis.com \
bigquery.googleapis.com \
bigqueryconnection.googleapis.com \
cloudbuild.googleapis.com \
run.googleapis.com
সফলভাবে কার্যকর হলে, আপনি নীচে দেখানো বার্তার মতো একটি বার্তা দেখতে পাবেন:
Operation "operations/..." finished successfully.
৩. কোড এবং সেটআপ ডেটা সংগ্রহ করুন।
প্রথমে, ডেমো অ্যাসেটগুলো ডাউনলোড করুন এবং আপনার এনভায়রনমেন্ট ভেরিয়েবলগুলো কনফিগার করুন।
- ক্লাউড শেল থেকে,
devrel-demosরিপোজিটরিটি ক্লোন করুন এবং প্রজেক্ট ডিরেক্টরিতে যান:
git clone https://github.com/GoogleCloudPlatform/devrel-demos.git
cd devrel-demos/data-analytics/cymbal-autos-multimodal
- আপনার পরিবেশে ডেটা কপি করতে স্ক্রিপ্টটি চালান। এই স্ক্রিপ্টটি লোকাল রিপোজিটরি ডেটাসেটগুলিকে আপনার ব্যক্তিগত ক্লাউড স্টোরেজ বাকেটে সিঙ্ক করে এবং একটি পাবলিক বাকেট থেকে গাড়ির ছবিগুলি সংগ্রহ করে:
chmod +x scripts/setup/*.sh
./scripts/setup/00_copy_data.sh
এরপরে, আপনি নিচের মতো একটি বার্তা দেখতে পাবেন:
Average throughput: 87.8MiB/s Data copy complete!
- এরপর, BigQuery ক্লাউড রিসোর্স কানেকশনটি সেট আপ করুন। ক্লাউড স্টোরেজে থাকা আনস্ট্রাকচার্ড ইমেজ বিশ্লেষণ করতে এবং আপনার SQL কোয়েরি থেকে সরাসরি এজেন্ট প্ল্যাটফর্ম মডেল কল করতে, BigQuery-কে অবশ্যই একটি অন্তর্নিহিত সার্ভিস অ্যাকাউন্টে IAM পারমিশন অর্পণ করতে হয়। এই স্ক্রিপ্টটি সেই সুরক্ষিত কানেকশনটি তৈরি করে এবং এটিকে প্রয়োজনীয় Vertex AI User ও Service Usage Consumer রোলগুলো প্রদান করে (যা কার্যকর হতে প্রায় এক মিনিট সময় লাগে):
./scripts/setup/01_setup_api_connection.sh
আপনি নিম্নলিখিতের মতো একটি বার্তা দেখতে পাবেন:
Environment setup complete! Your BigQuery connection is ready.
- অবশেষে, প্রাথমিক BigQuery ডেটাসেট তৈরি করুন এবং কাঁচা টেবুলার ডেটা লোড করুন। এটি আপনার
model_devডেটাসেট তৈরি করে এবং শুরুর টেবিলগুলিতে ডেটা যোগ করে, যা যেকোনো মেশিন লার্নিং কোয়েরি লেখার আগে ভিত্তি স্থাপন করে।
./scripts/setup/02_load_to_bq.sh
আপনি নিম্নলিখিতের মতো একটি বার্তা দেখতে পাবেন:
================================================================= BigQuery load complete! =================================================================
৪. মাল্টিমোডাল ভিশন এক্সট্র্যাকশন
গাড়ির তালিকাগুলোর স্কোরিং করার আগে, আপনি শত শত র ফটো থেকে স্ট্রাকচার্ড ডেটা (যেমন রঙ, বডি স্টাইল বা দৃশ্যমান ক্ষতি) এক্সট্র্যাক্ট করবেন। এজেন্ট প্ল্যাটফর্মে হোস্ট করা ObjectRef ফাংশন এবং Gemini মডেল ব্যবহার করে, আপনি কোনো ফাইল না সরিয়ে বা জটিল ডেটা পাইপলাইন না লিখেই এই ফিচারগুলো তৈরি করতে পারেন। এই এক্সট্র্যাকশন সরাসরি ফ্রন্টএন্ড অ্যাপ্লিকেশনের ✨ ভিজ্যুয়াল কন্ডিশন ব্যাজটিকে শক্তি জোগায়।
- একটি নতুন ব্রাউজার ট্যাবে BigQuery Studio খুলুন।
- + Compose new query বাটনটিতে ক্লিক করুন। এই কোডল্যাব জুড়ে আপনি SQL কোডের সাথে কাজ করার জন্য SQL Editor ব্যবহার করবেন।
- মেশিন লার্নিং এক্সট্র্যাক্টরগুলো তৈরি করার আগে, আপনি মূল ছবিগুলো একবার দেখে নিতে পারেন। প্রতিটি তালিকার জন্য গুগল ক্লাউড স্টোরেজে সংরক্ষিত ছবির URI-গুলোর অ্যারে দেখতে নিম্নলিখিত কোয়েরিটি চালান:
SELECT auction_id, item_name, description, images
FROM `model_dev.vehicle_metadata` LIMIT 5;
- এখন, আপনার BigQuery Studio SQL Editor-এ,
image_refকলামসহ একটি নতুন টেবিল তৈরি করতে নিম্নলিখিত SQL-টি পেস্ট করুন। Run-এ ক্লিক করুন।
CREATE OR REPLACE TABLE `model_dev.vehicle_multimodal` AS
SELECT
*,
ARRAY(
SELECT OBJ.FETCH_METADATA(OBJ.MAKE_REF(uri, 'us.conn'))
FROM UNNEST(images) AS uri
) AS image_ref
FROM `model_dev.vehicle_metadata`;
- আপনি এইমাত্র তৈরি করা নতুন
image_refObjectRef কলামটি দেখুন। নতুন টেবিলটিতে এখন এমন একটি ObjectRef কলাম আছে, যার সরাসরি ইমেজগুলোর উপর এক্সিকিউট করার অনুমতি রয়েছে। এটি দেখার জন্য নিম্নলিখিত কোয়েরিটি চালান:
SELECT auction_id, item_name, description, image_ref
FROM `model_dev.vehicle_multimodal` LIMIT 5;
- এখন আপনি ছবিগুলো বিশ্লেষণ করতে
AI.GENERATEএবংAI.CLASSIFYব্যবহার করবেন।AI.GENERATEGemini-কে নির্দেশ দিয়ে গাড়ির অবস্থার স্কোর এবং এক বাক্যে ক্ষতির সারসংক্ষেপ বের করে, অন্যদিকেAI.CLASSIFYগাড়িটির বডি স্টাইল এবং রঙকে কঠোরভাবে শ্রেণিবদ্ধ করে।
এই ইনসাইটগুলো একটি ডেডিকেটেড ফিচার টেবিলে এক্সট্র্যাক্ট করতে নিম্নলিখিত কোয়েরিটি এক্সিকিউট করুন। এটি শেষ হতে প্রায় ৩ মিনিট সময় লাগবে বলে আশা করা যায়।
CREATE OR REPLACE TABLE `model_dev.vehicle_vision_features` AS
WITH generated_data AS (
SELECT
auction_id,
AI.GENERATE(
prompt => ('Rate the condition of this car on a scale from 0-100. Output a 1 sentence description of any glaring red flags', image_ref),
output_schema => 'condition INT64, description_summary STRING'
).* EXCEPT(full_response,status)
FROM
`model_dev.vehicle_multimodal`
),
-- Object-centric Classifications
classified_data AS (
SELECT
auction_id,
AI.CLASSIFY(
('What type of automobile is this?', image_ref[0]),
categories => ['Truck', 'Sedan', 'SUV']) AS body_style,
AI.CLASSIFY(
('Color of the exterior of the automobile', image_ref[0]),
categories => ['Black', 'White', 'Silver', 'Gray', 'Red', 'Blue', 'Brown', 'Green', 'Beige', 'Gold']) AS color,
AI.CLASSIFY(
('Color of the interior of the automobile', image_ref[0]),
categories => ['Black', 'Gray', 'Beige', 'Tan', 'Brown', 'White', 'Red']) AS interior
FROM `model_dev.vehicle_multimodal`
)
-- Join the AI insights back together into the final feature table
SELECT
g.auction_id,
g.condition,
g.description_summary,
c.body_style,
c.color,
c.interior
FROM generated_data g
JOIN classified_data c ON g.auction_id = c.auction_id;
- জেনারেট করা ফিচারগুলো নিজে দেখতে, নিম্নলিখিত কোয়েরিটি চালান, অথবা নিচের স্ক্রিনশটটি দেখুন:
SELECT auction_id, condition, description_summary, body_style, color, interior FROM `model_dev.vehicle_vision_features` LIMIT 5;

অধ্যায়ের পুনরালোচনা: আপনি কোনো ফাইল স্থানান্তর না করেই সরাসরি BigQuery থেকে মূল ছবিগুলো অ্যাক্সেস করেছেন এবং Gemini মডেল ব্যবহার করে কাঠামোগত ভিজ্যুয়াল বৈশিষ্ট্যগুলো বের করেছেন।
৫. XGBoost-এর সাহায্যে পূর্বাভাসমূলক মূল্য নির্ধারণ
কোনো গাড়ি সত্যিই একটি ভালো ডিল কিনা তা গণনা করার জন্য, এর ন্যায্য বাজার মূল্যের একটি নির্ভরযোগ্য ভিত্তি প্রয়োজন। একটি মডেলকে প্রশিক্ষণ দেওয়ার জন্য ডেটা স্থানীয় স্ক্রিপ্ট বা নোটবুকে নিয়ে আসার পরিবর্তে, আপনি স্ট্যান্ডার্ড SQL ব্যবহার করে সরাসরি BigQuery-এর ভিতরে একটি XGBoost মডেলকে প্রশিক্ষণ দিতে পারেন। এই মূল্য পূর্বাভাসটি ফ্রন্টএন্ড অ্যাপ্লিকেশনের 📈 ন্যায্য বাজার মূল্যের লজিককে চালনা করে।
- আপনার BigQuery Studio ট্যাবে ফিরে যান।
- প্রথমে, ট্রেনিং ডেটাসেটটি দেখে নিন। সক্রিয় গাড়ির তালিকার মতো নয়, এই
synthetic_carsটেবিলটিতে ১,০০,০০০টি ঐতিহাসিক বিক্রয়ের তথ্য রয়েছে যা মডেলটিকে প্রশিক্ষণ দিতে ব্যবহৃত হবে। এক ঝলক দেখে নিতে এই দ্রুত কোয়েরিটি চালান:
SELECT
*
FROM
`model_dev.synthetic_cars`
LIMIT 10;
- এখন, একটি XGBoost রিগ্রেশন মডেলকে প্রশিক্ষণ দিতে নিম্নলিখিত SQL-টি চালান। এই মডেলটি ঐ ১,০০,০০০ ঐতিহাসিক রেকর্ড থেকে শেখে যে, মাইলেজ, বছর, প্রস্তুতকারক এবং বাহ্যিক অবস্থার মতো বৈশিষ্ট্যগুলো কীভাবে দামকে প্রভাবিত করে:
CREATE OR REPLACE MODEL `model_dev.car_price_model`
OPTIONS(
MODEL_TYPE = 'BOOSTED_TREE_REGRESSOR',
INPUT_LABEL_COLS = ['selling_price'],
MAX_ITERATIONS = 15,
TREE_METHOD = 'HIST'
) AS
SELECT
* EXCEPT(vin, sale_date, market_value, seller)
FROM
`model_dev.synthetic_cars`;
- লাইভ, চলমান গাড়ির তালিকাগুলির জন্য মূল্য পূর্বাভাস দেওয়ার আগে, আপনাকে অবশ্যই সমস্ত প্রাসঙ্গিক ইনপুট বৈশিষ্ট্য এক জায়গায় সংগ্রহ করতে হবে। আপনার এইমাত্র তৈরি করা ভিশন-এক্সট্র্যাক্টেড বৈশিষ্ট্যগুলির সাথে কাঠামোগত গাড়ির মেটাডেটা একত্রিত করতে এই SQL টি চালান:
CREATE OR REPLACE TABLE `model_dev.vehicle_prediction_features` AS
SELECT
meta.auction_id,
meta.model_year,
meta.make,
meta.model,
meta.mileage,
meta.transmission_type,
meta.state,
COALESCE(vision.body_style, 'Unknown') AS body_style,
COALESCE(vision.condition, 50) AS condition,
COALESCE(meta.color, vision.color, 'Unknown') AS color,
COALESCE(vision.interior, 'Unknown') AS interior
FROM `model_dev.vehicle_metadata` meta
LEFT JOIN `model_dev.vehicle_vision_features` vision
ON meta.auction_id = vision.auction_id;
- অবশেষে, প্রতিটি চলমান গাড়ির তালিকার ন্যায্য বাজার মূল্য অনুমান করুন। আপনার নতুন প্রশিক্ষিত মডেলে একত্রিত বৈশিষ্ট্যগুলি ফিড করতে এবং সংখ্যাসূচক আউটপুটগুলি একটি সুরক্ষিত পূর্বাভাস টেবিলে সংরক্ষণ করতে নিম্নলিখিত কোয়েরিটি চালান:
CREATE OR REPLACE TABLE `model_dev.vehicle_price_predictions` AS
SELECT
auction_id,
ROUND(predicted_selling_price, 2) AS predicted_market_value
FROM ML.PREDICT(
MODEL `model_dev.car_price_model`,
(SELECT * FROM `model_dev.vehicle_prediction_features`)
);
- এখন, মডেলের আউটপুট যাচাই করুন। লাইভ গাড়ির তালিকাগুলোর পূর্বাভাসিত বাজার মূল্য প্রিভিউ করতে এই কুইক কোয়েরিটি চালান:
SELECT * FROM `model_dev.vehicle_price_predictions` LIMIT 5;

অধ্যায়ের পুনরালোচনা: আপনি ১,০০,০০০ নমুনা লেনদেন ব্যবহার করে একটি XGBoost রিগ্রেশন মডেলকে প্রশিক্ষণ দিয়েছেন এবং ডেটাসেটের প্রতিটি সক্রিয় গাড়ির তালিকার ন্যায্য বাজার মূল্য ভবিষ্যদ্বাণী করার জন্য ব্যাচ ইনফারেন্স চালিয়েছেন।
৬. শব্দার্থিক এমবেডিং এবং সত্যতা সনাক্তকরণ
এই অংশে, আপনি যানবাহন বাজারের জন্য স্মার্ট ফিচার সক্রিয় করতে দুটি স্বতন্ত্র এমবেডিং পাইপলাইন সম্পাদন করবেন:
- মাল্টিমোডাল ইমেজ সার্চ: গাড়ির কাঁচা ছবিগুলোকে ভেক্টর স্পেসে রূপান্তর করুন, যাতে ব্যবহারকারীরা স্বাভাবিক ভাষায় অনুসন্ধান করতে পারেন (যেমন "একটি নির্ভরযোগ্য কাজের ট্রাক")।
- টেক্সট এমবেডিংস ও সিমিলারিটি সার্চ:
VECTOR_SEARCHব্যবহার করে গাড়ির লিখিত বিবরণকে ভেক্টর এমবেডিংস-এ রূপান্তর করুন, যাতে সক্রিয় লিস্টিংগুলোকে পরিচিত সম্ভাব্য স্ক্যাম বা উৎসাহী প্রোফাইলের সাথে তুলনা করা যায়। এটি 🔍 অথেন্টিসিটি স্কোর গণনা করে, যা ক্রেতারা অ্যাপে দেখতে পান।
- প্রথমে, আপনাকে গাড়ির তালিকাগুলোর জন্য মাল্টিমোডাল এমবেডিং তৈরি করতে হবে।
gemini-embedding-2-previewমডেলটির সাহায্যে, আপনি একই এমবেডিং-এ ছবি এবং টেক্সট উভয়ই ইনপুট করতে পারেন। যদিও এই মডেলটি একই সাথে একাধিক মোডালিটি প্রসেস করতে সম্পূর্ণরূপে সক্ষম, এই নির্দিষ্ট ক্ষেত্রে আমরা শুধুমাত্র গাড়ির ছবিগুলো এমবেড করছি। এটি ফ্রন্টএন্ড অ্যাপ্লিকেশনের জন্য 'সিমান্টিক সার্চ' বারটিকে চালিত করে, যা ক্রেতাদের স্বাভাবিক ভাষা (যেমন "একটি নির্ভরযোগ্য পিকআপ ট্রাক") ব্যবহার করে দ্রুত মিলে যাওয়া তালিকাগুলো খুঁজে পেতে সাহায্য করে।AI.EMBEDব্যবহার করে মাল্টিমোডাল ভেক্টর তৈরি করতে এই কোয়েরিটি চালান:
CREATE OR REPLACE TABLE `model_dev.vehicle_images_embedded` AS
SELECT
auction_id,
AI.EMBED(
STRUCT(image_ref),
endpoint => 'gemini-embedding-2-preview').result AS multimodal_embedding
FROM `model_dev.vehicle_multimodal`
WHERE ARRAY_LENGTH(image_ref) > 0;
- এরপরে, আপনি আগে লোড করা ঝুঁকি প্রোফাইলের ডেটা পরীক্ষা করবেন। লক্ষ্য করুন যে এতে পরিচিত স্ক্যামের ধরণ এবং বৈধ উৎসাহী নমুনার তালিকা উভয়ই রয়েছে। বেসলাইন প্রোফাইলগুলি দেখতে এই কোয়েরিটি চালান:
SELECT profile_id, profile_type, description
FROM `model_dev.seller_risk_profiles`;
- এখন আপনি সেই মূল ঝুঁকির বিবরণগুলোকে ভেক্টর এমবেডিং-এ অনুবাদ করবেন। আপনি এইমাত্র যে লিখিত ভাষাটির প্রিভিউ দেখেছেন, তা কঠোরভাবে মূল্যায়ন করার জন্য একটি বিশেষায়িত টেক্সট-এমবেডিং মডেল (
text-embedding-005) ব্যবহার করতে পারেন। বেসলাইন প্রোফাইলগুলো এমবেড করতে নিম্নলিখিত SQL-টি পেস্ট করুন এবং রান (Run)-এ ক্লিক করুন:
CREATE OR REPLACE TABLE `model_dev.seller_risk_profiles_embedded` AS
SELECT
profile_id,
description AS content,
profile_type,
AI.EMBED(description, endpoint => 'text-embedding-005').result AS text_embedding
FROM `model_dev.seller_risk_profiles`;
- এরপরে, প্রকৃত লাইভ গাড়ির ইনভেন্টরির জন্য তুলনীয় এমবেডিং তৈরি করুন। প্রতিটি গাড়ির কাঁচা HTML বিবরণকে ভেক্টর স্পেসে অনুবাদ করতে এই কোয়েরিটি চালান, যাতে সেগুলোকে বেসলাইন প্রোফাইলের সাথে তুলনা করা যায়:
CREATE OR REPLACE TABLE `model_dev.vehicle_descriptions_embedded` AS
SELECT
auction_id,
description AS content,
AI.EMBED(description, endpoint => 'text-embedding-005').result AS text_embedding
FROM `model_dev.vehicle_metadata`
WHERE description IS NOT NULL;
- অবশেষে, লাইভ লিস্টিং এবং বেসলাইন প্রোফাইলগুলির মধ্যে শব্দার্থগত দূরত্ব গণনা করতে ভেক্টর সার্চটি চালান। ম্যাপিংটি সম্পাদন করতে নিম্নলিখিত SQL চালান। কম গাণিতিক দূরত্বের অর্থ হলো একটি লিস্টিং কোনো পরিচিত স্ক্যাম ক্লাস্টারের সাথে অত্যন্ত সাদৃশ্যপূর্ণ, অন্যদিকে বেশি দূরত্ব একটি বৈধ বিবরণ নির্দেশ করে।
CREATE OR REPLACE TABLE `model_dev.vehicle_authenticity_scores` AS
SELECT
scam_search.query.auction_id,
CAST(
GREATEST(0.0, LEAST(100.0, ROUND((MIN(scam_search.distance) - 0.33) / 0.12 * 100.0)))
AS INT64
) AS authenticity_score
FROM VECTOR_SEARCH(
TABLE `model_dev.seller_risk_profiles_embedded`,
'text_embedding',
(
SELECT text_embedding, auction_id
FROM `model_dev.vehicle_descriptions_embedded`
),
top_k => 15,
distance_type => 'COSINE'
) AS scam_search
WHERE scam_search.base.profile_type = 'scam'
GROUP BY 1;
এই সারণির বিষয়বস্তুগুলো দেখতে নিম্নলিখিতের মতো হতে পারে:

অধ্যায়ের সারসংক্ষেপ: আপনি ফ্রন্টএন্ড সার্চ বারের জন্য মাল্টিমোডাল এমবেডিং তৈরি করেছেন এবং পরিচিত স্ক্যাম প্রোফাইলগুলোর সাথে কাঁচা HTML টেক্সট তালিকাগুলো যাচাই করার জন্য সরাসরি BigQuery-এর ভেতরে ভেক্টর সার্চ ব্যবহার করেছেন।
৭. জেনারেটিভ ডিল স্কোরিং
এখন আপনার কাছে একাধিক স্বতন্ত্র মেশিন লার্নিং কৌশলের মাধ্যমে তৈরি কাঠামোগত ডেটাসেট রয়েছে, যার সবগুলোই বিগকোয়েরির (BigQuery) মধ্যেই সম্পূর্ণরূপে সমন্বিত: ভিশন এক্সট্র্যাকশন, ন্যায্য বাজার মূল্য ভবিষ্যদ্বাণী করার জন্য এক্সজিবিউস্ট (XGBoost) মডেল এবং ভেক্টর সার্চ এমবেডিংস।
চূড়ান্ত ধাপ হলো এই এআই সংকেতগুলোকে একত্রিত করে ফ্রন্টএন্ড অ্যাপ্লিকেশনের জন্য চূড়ান্ত ডিল স্কোর হিসেবে একটি সমন্বিত চিত্র তৈরি করা।
- প্রথমে, কাঁচা মেটাডেটার সাথে AI দ্বারা নিষ্কাশিত ভিশন ফিচার, ভবিষ্যদ্বাণীমূলক মূল্য নির্ধারণের আউটপুট এবং শব্দার্থিক সত্যতা স্কোর যুক্ত করুন। নিম্নলিখিত SQL কার্যকর করুন:
CREATE OR REPLACE TABLE `model_dev.vehicle_features_enhanced` AS
SELECT
meta.auction_id,
meta.item_name,
meta.model_year,
meta.make,
meta.model,
meta.mileage,
meta.current_bid,
meta.listing_url,
meta.transmission_type,
meta.description,
meta.state,
COALESCE(vision.body_style, 'Unknown') AS body_style,
COALESCE(vision.condition, 50) AS condition,
COALESCE(meta.color, vision.color, 'Unknown') AS color,
COALESCE(vision.interior, 'Unknown') AS interior,
COALESCE(scam.authenticity_score, 100) AS authenticity_score,
vision.description_summary,
prices.predicted_market_value
FROM `model_dev.vehicle_metadata` meta
LEFT JOIN `model_dev.vehicle_vision_features` vision
ON meta.auction_id = vision.auction_id
LEFT JOIN `model_dev.vehicle_price_predictions` prices
ON meta.auction_id = prices.auction_id
LEFT JOIN `model_dev.vehicle_authenticity_scores` scam
ON meta.auction_id = scam.auction_id;
- এরপর, চারটি স্বতন্ত্র এআই সংকেত একত্রিত করে একটি ০-১০০ ডিল স্কোর গণনা করুন। এই ফর্মুলাটি সেরা তালিকাগুলো তুলে ধরার জন্য মূল্য, গুণমান এবং ঝুঁকির মধ্যে ভারসাম্য রক্ষা করে:
- মূল্য স্কোর (৪০%): ন্যায্য বাজার মূল্যের তুলনায় সঞ্চয়ের পরিমাণ পরিমাপ করে।
- দৃষ্টিশক্তির স্কোর (৩০%): পূর্ববর্তী ছবি বিশ্লেষণ থেকে প্রাপ্ত তথ্য।
- সত্যতা স্কোর (১৫%): প্রতারণার ঝুঁকি মূল্যায়ন।
- পণ্যের অবস্থা স্কোর (১৫%): বিক্রেতার বিবরণ থেকে
AI.SCOREমাধ্যমে তাৎক্ষণিকভাবে অনুমান করা হয়েছে।
CREATE OR REPLACE TABLE `model_dev.marketplace_listings` AS
WITH score_elements AS (
SELECT
*,
-- 1. SELLER DESCRIPTION SCORE (use AI.SCORE on seller description)
AI.SCORE(
FORMAT("Rate the vehicle condition (0-100) based ONLY on this text: '%s'", description)
) AS description_score,
-- 2. PRICE SCORE
-- Higher impact for underpricing, lower impact for overpricing.
CAST(LEAST(100.0, GREATEST(0.0,
75.0 + (
IF((predicted_market_value - current_bid) > 0,
((predicted_market_value - current_bid) / NULLIF(predicted_market_value, 0)) * 250.0,
((predicted_market_value - current_bid) / NULLIF(predicted_market_value, 0)) * 40.0
)
)
)) AS INT64) AS price_score
FROM `model_dev.vehicle_features_enhanced`
),
final_calcs AS (
SELECT
*,
-- 3. Combine scores: Price (40%), Condition (30%), Description (15%), Authenticity (15%)
ROUND(
(
(price_score * 0.40) +
(CAST(condition AS INT64) * 0.30) +
(COALESCE(description_score, 50) * 0.15) +
(CAST(authenticity_score AS INT64) * 0.15)
)
-- Authenticity penalty for scores below 50.
* (IF(CAST(authenticity_score AS INT64) < 50, 0.20, 1.05))
) AS raw_score
FROM score_elements
)
SELECT
* EXCEPT(raw_score),
-- 4. Set floor values: low authenticity scores drop to 10; others floor at 35.
CAST(GREATEST(
(IF(CAST(authenticity_score AS INT64) < 50, 10, 35)),
LEAST(100, raw_score)
) AS INT64) AS deal_score
FROM final_calcs;
উচ্চ-মানের সুপারিশ নিশ্চিত করতে, কোয়েরিটি দুটি নির্দিষ্ট লজিক লেয়ার প্রয়োগ করে:
- প্রামাণিকতা যাচাই : যদি কোনো লিস্টিংকে "উচ্চ ঝুঁকি" (স্কোর < ৫০) হিসেবে চিহ্নিত করা হয়, তাহলে সন্দেহজনক লিস্টিংগুলোর প্রচার রোধ করার জন্য মোট ডিল স্কোর স্বয়ংক্রিয়ভাবে ৮০% কমিয়ে দেওয়া হয়।
- "হিডেন জেম" অপটিমাইজেশন : এই ফর্মুলাটি পিসওয়াইজ লজিক ব্যবহার করে সাশ্রয়ের ক্ষেত্রে জোরালোভাবে পুরস্কৃত করে, এবং অতিরিক্ত মূল্যের ক্ষেত্রে তুলনামূলকভাবে নমনীয় থাকে, যা নিশ্চিত করে যে নিখুঁত অবস্থায় থাকা একটি অতিরিক্ত দামের গাড়িও "ফেয়ার" র্যাঙ্কিং অর্জন করতে পারে।
ফলস্বরূপ প্রাপ্ত টেবিল, model_dev.marketplace_listings deal_score মতো ফিল্ডের পাশাপাশি price_score এবং authenticity_score থাকে।
- ডিল স্কোরগুলো নিজে দেখতে, নিম্নলিখিত কোয়েরিটি চালান, অথবা নিচের স্ক্রিনশটটি দেখুন:
SELECT item_name, model_year, authenticity_score, predicted_market_value, price_score, deal_score FROM `model_dev.marketplace_listings`

বিভাগের সারসংক্ষেপ: আপনি প্রতিটি লিস্টিংয়ের জন্য একটি একক ডিল স্কোর গণনা করতে বিক্রেতার বিবরণের পাশাপাশি ভবিষ্যদ্বাণীমূলক মূল্য নির্ধারণ, ভিজ্যুয়াল বৈশিষ্ট্য এবং সত্যতা স্কোর একত্রিত করেছেন।
৮. ফ্রন্টএন্ড অ্যাপ্লিকেশনটি ডিপ্লয় করুন
এখন ফ্রন্টএন্ড অ্যাপ্লিকেশনটি চালু করার সময়। এর মাধ্যমে আপনি অবশেষে গাড়ির তালিকার ইনভেন্টরি অনুসন্ধান করতে পারবেন এবং আপনার তৈরি করা এআই-জেনারেটেড ইনসাইটস, যেমন ডিল স্কোর, ব্যবহার করতে পারবেন।
ফ্রন্টএন্ডে এআই স্কোর রপ্তানি করুন
দ্রুত প্রাথমিক পেজ লোডের জন্য React ফ্রন্টএন্ড একটি লোকাল JSON পেলোডের উপর নির্ভর করে। মার্কেটপ্লেসটি চালু করার জন্য, BigQuery থেকে চূড়ান্ত জেনারেটিভ ডিল স্কোরগুলো এক্সট্র্যাক্ট করে Next.js প্রজেক্টে পুনরায় ইনজেক্ট করুন।
- আপনার পরিবেশ প্রস্তুত আছে কিনা তা নিশ্চিত করুন। যদি আপনার ক্লাউড শেল সেশনের সময়সীমা শেষ হয়ে যায় বা আপনি অন্য কোনো ফোল্ডারে চলে যান, তাহলে প্রজেক্ট রুটে ফিরে আসতে এবং আপনার এনভায়রনমেন্ট ভেরিয়েবলগুলো পুনরুদ্ধার করতে নিম্নলিখিত কমান্ডটি চালান:
cd ~/devrel-demos/data-analytics/cymbal-autos-multimodal && \
export PROJECT_ID=$(gcloud config get-value project) && \
export USER_BUCKET="cymbal-autos-${PROJECT_ID}"
- চূড়ান্ত BigQuery ভিউটি কোয়েরি করতে এবং নতুন ডিল স্কোরগুলিকে অ্যাপ্লিকেশনটির অন্তর্নিহিত ডেটা স্টোরে মার্জ করতে প্রদত্ত পাইথন স্ক্রিপ্টটি চালান:
python3 scripts/setup/08_export_frontend_data.py
আপনি এরকম একটি নিশ্চিতকরণ বার্তা পাবেন:
💾 Updated local file: app/src/data/cars.json
অ্যাপ্লিকেশনটি ক্লাউড রানে স্থাপন করুন
ডেটা সফলভাবে সমৃদ্ধ করার পর, আপনি ক্লাউড রান ব্যবহার করে নেক্সট.জেএস ফ্রন্টএন্ড অ্যাপ্লিকেশনটি পাবলিক ইন্টারনেটে ডেপ্লয় করতে পারেন। এতে রয়েছে একটি আধুনিক ইন্টারফেস, যার মধ্যে আছে ডিল রেটিং, ইন্টারেক্টিভ ইমেজ ক্যারোসেল এবং একটি ডাইনামিক হাইব্রিড সিমান্টিক সার্চ বার যা রিয়েল-টাইমে বিগকোয়েরি (BigQuery)-কে কোয়েরি করে।
- ক্লাউড শেলে, আপনার ক্লোন করা রিপোজিটরির
app/ডিরেক্টরিতে যান। এটি অত্যন্ত গুরুত্বপূর্ণ—রুট ডিরেক্টরিতে থাকলে বিল্ডটি ব্যর্থ হবে।
cd app
- ক্লাউড রান ব্যবহার করে অ্যাপ্লিকেশনটিকে একটি সার্ভারলেস কন্টেইনার হিসেবে ডেপ্লয় করুন। কমান্ডটি
PROJECT_IDকে একটি এনভায়রনমেন্ট ভেরিয়েবল হিসেবে পাস করে, যাতে Next.js API জানতে পারে কোন BigQuery প্রজেক্টে কোয়েরি করতে হবে:
gcloud run deploy cymbal-autos-frontend \
--source . \
--region us-west1 \
--allow-unauthenticated \
--min-instances 1 \
--set-env-vars PROJECT_ID=$PROJECT_ID \
--project $PROJECT_ID
- ডেপ্লয়মেন্ট সম্পন্ন হলে, টার্মিনাল একটি সুরক্ষিত সার্ভিস ইউআরএল আউটপুট করবে। এটি দেখতে অনেকটা এইরকম হবে:
Service URL: https://cymbal-autos-frontend-[YOUR-PROJECT-NUMBER].us-west1.run.app/
৯. সিম্বাল অটোস অ্যাপ্লিকেশনটি অন্বেষণ করুন
আপনার ফ্রন্টএন্ড কন্টেইনারটি ক্লাউড রানে পুশ করা হয়ে গেলে, এখন অ্যাপটি পরীক্ষা করার সময়।
- সাইটটি ভিজিট করুন: ক্লাউড রান থেকে প্রাপ্ত সুরক্ষিত সার্ভিস ইউআরএলটি খুলুন।

- একটি সিমান্টিক সার্চ করুন: "একটি নির্ভরযোগ্য কাজের ট্রাক যা মালামাল বহন করতে পারে এবং অফরোডেও চলতে পারে"-এর মতো একটি বিমূর্ত ধারণা অনুসন্ধান করার চেষ্টা করুন। Next.js অ্যাপটি আপনার মূল টেক্সটকে একটি মাল্টিমোডাল ভেক্টর এমবেডিং-এ রূপান্তরিত করে এবং BigQuery-এর বিপরীতে একটি রিয়েল-টাইম
VECTOR_SEARCHচালু করে, যা আপনার ধারণাটিকে যানবাহন ইকোসিস্টেমের সাথে ম্যাপ করে।

দ্রষ্টব্য: তালিকাগুলো শব্দার্থগত সাদৃশ্য অনুসারে সাজানো হয়েছে।
- ফলাফল পর্যালোচনা করুন: BigQuery আপনার বিমূর্ত ধারণা এবং যানবাহনটির বৈশিষ্ট্যগুলির মধ্যে সঠিক গাণিতিক দূরত্ব গণনা করে সবচেয়ে নিকটতম শব্দার্থিক মিলগুলি ফেরত দিয়েছে।

- বিস্তারিত দেখুন: যেকোনো গাড়ির সম্পূর্ণ তালিকা প্রোফাইল খুলতে সেটির উপর ক্লিক করুন।
- এআই সিগন্যালটি দেখুন: ল্যাবে আগে আপনার তৈরি করা র' মেশিন লার্নিং স্কোরগুলো দেখতে ডিটেইলসগুলো স্ক্রল করুন:
- 📈 ন্যায্য বাজার মূল্য: আপনার XGBoost মডেল দ্বারা পূর্বাভাসিত ভিত্তি মূল্য।
- ✨ বাহ্যিক অবস্থা: জেমিনি মডেলগুলো থেকে প্রাপ্ত শারীরিক ক্ষতির মাত্রা।
- 🔍 সত্যতা স্কোর: এই সত্যতা ভেক্টর মেট্রিকটি বৈধ বিক্রেতাদের সম্ভাব্য প্রতারকদের থেকে আলাদা করে।

১০. পরিষ্কার করুন
এই কোডল্যাবে ব্যবহৃত রিসোর্সগুলোর জন্য আপনার গুগল ক্লাউড অ্যাকাউন্টে চলমান চার্জ এড়ানোর জন্য, আপনি এই কোডল্যাবের জন্য তৈরি করা সম্পূর্ণ গুগল ক্লাউড প্রজেক্টটি মুছে ফেলতে পারেন, অথবা নিম্নলিখিত স্বয়ংক্রিয় টিয়ারডাউন স্ক্রিপ্টটি চালাতে পারেন।
- আপনার ক্লাউড শেল টার্মিনাল থেকে, রুট ধারণকারী ডিরেক্টরিতে ফিরে যান:
cd ..
- নিচের ক্লিনআপ স্ক্রিপ্টটি চালান। এটি আপনার গুগল ক্লাউড স্টোরেজ বাকেট খালি করে দেবে,
model_devBigQuery ডেটাসেটটি ড্রপ করবে, BigQuery কানেকশনটি ডিলিট করে দেবে এবং ক্লাউড রান সার্ভিসটি ডিলিট করে দেবে।
chmod +x scripts/cleanup/teardown.sh
./scripts/cleanup/teardown.sh
১১. অভিনন্দন
অভিনন্দন! আপনি সফলভাবে একটি ইন্টেলিজেন্ট যানবাহন মার্কেটপ্লেস তৈরি করেছেন। আপনি BigQuery ব্যবহার করে আনস্ট্রাকচার্ড ডেটা অ্যানালাইসিস, প্রেডিক্টিভ মডেলিং এবং এআই ইন্টিগ্রেশনকে একটি একক ওয়ার্কস্পেসে একত্রিত করেছেন।
আপনি যা শিখেছেন
- ObjectRef ব্যবহার করে BigQuery-কে আনস্ট্রাকচার্ড ক্লাউড স্টোরেজ ইমেজের সাথে কীভাবে সংযুক্ত করবেন
-
AI.GENERATEএবংAI.CLASSIFYফাংশনের মতো Gemini মডেল ব্যবহার করে BigQuery দিয়ে ছবি থেকে গাড়ির বৈশিষ্ট্য কীভাবে বের করা যায় - BigQuery ML ব্যবহার করে কীভাবে গাড়ির দামের পূর্বাভাস দেওয়া যায়
- গাড়ির বিবরণ যুক্ত করে এবং
VECTOR_SEARCHকরার মাধ্যমে সম্ভাব্য প্রতারণামূলক তালিকা কীভাবে শনাক্ত করা যায় - কীভাবে
AI.SCOREব্যবহার করে তাৎক্ষণিকভাবে অসংগঠিত ডেটা মূল্যায়ন করা যায় এবং ফলাফলগুলিকে একটি ব্যাপক ডিল স্কোরে অন্তর্ভুক্ত করা যায়। - কীভাবে ডেটা এক্সপোর্ট করবেন এবং Next.js মার্কেটপ্লেস অ্যাপ্লিকেশনটি ক্লাউড রানে ডেপ্লয় করবেন
পরবর্তী পদক্ষেপ
- BigQuery-তে উপলব্ধ জেনারেটিভ এআই ফাংশনগুলির সম্পূর্ণ পরিসর আবিষ্কার করুন।
- GoogleSQL ব্যবহার করে প্রেডিক্টিভ মডেল তৈরি করার বিষয়ে আরও জানুন।