জেমিনি 3 ফ্ল্যাশ এবং ক্লাউড SQL দিয়ে একটি রিয়েল-টাইম উদ্বৃত্ত ইঞ্জিন তৈরি করা

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

এই কোডল্যাবে, আপনি নেইবার লুপ (Neighbor Loop) তৈরি করবেন, যা একটি টেকসই উদ্বৃত্ত-ভাগাভাগি অ্যাপ এবং এটি ডেটা লেয়ারে ইন্টেলিজেন্সকে একটি প্রথম শ্রেণীর উপাদান হিসেবে বিবেচনা করে।

জেমিনি ৩.০ ফ্ল্যাশ এবং ক্লাউড এসকিউএল-এর এমএল ইন্টিগ্রেশন ব্যবহার করে, আপনি সাধারণ স্টোরেজ পর্যায় পেরিয়ে ইন-ডাটাবেস ইন্টেলিজেন্সের জগতে প্রবেশ করবেন। আপনি শিখবেন কীভাবে সরাসরি এসকিউএল-এর মধ্যেই মাল্টিমোডাল আইটেম অ্যানালাইসিস এবং সিমান্টিক ডিসকভারি করতে হয়।

645daa545b0e46a6.png

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

সামাজিকভাবে উদ্বৃত্ত সম্পদ ভাগাভাগি করার জন্য একটি উচ্চ কর্মক্ষমতা সম্পন্ন "সোয়াইপ-টু-ম্যাচ" ওয়েব অ্যাপ্লিকেশন।

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

  • ওয়ান-ক্লিক প্রভিশনিং: এআই ওয়ার্কলোডের জন্য ডিজাইন করা ক্লাউড এসকিউএল এবং ইনস্ট্যান্স কীভাবে সেট আপ করবেন।
  • ইন-ডাটাবেস এমবেডিং: INSERT স্টেটমেন্টের মধ্যেই সরাসরি text-embedding-005 ভেক্টর তৈরি করা।
  • বহুমুখী যুক্তিপদ্ধতি: জেমিনি ৩.০ ফ্ল্যাশ ব্যবহার করে বিভিন্ন আইটেম 'দেখা' এবং স্বয়ংক্রিয়ভাবে মজাদার, ডেটিং-ধাঁচের বায়ো তৈরি করা।
  • শব্দার্থগত আবিষ্কার: শুধুমাত্র গাণিতিক হিসাবের ওপর ভিত্তি করে নয়, বরং প্রসঙ্গের ওপর ভিত্তি করে ফলাফল ফিল্টার করার জন্য ai.if() ফাংশন ব্যবহার করে SQL কোয়েরির ভেতরে যুক্তিভিত্তিক 'ভাব যাচাই' করা।

স্থাপত্য

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

  1. ক্লাউড এসকিউএল + এমএল ইন্টিগ্রেশন: রিয়েল-টাইমে ভেক্টর তৈরি এবং সংরক্ষণ করার জন্য।
  2. গুগল ক্লাউড স্টোরেজ: ছবি সংরক্ষণ করতে
  3. জেমিনি ৩.০ ফ্ল্যাশ: সরাসরি SQL-এর মাধ্যমে ছবি এবং টেক্সট ডেটার ওপর এক সেকেন্ডেরও কম সময়ে বিশ্লেষণ সম্পাদন করার জন্য।
  4. ক্লাউড রান: একটি হালকা ও একক-ফাইল ফ্লাস্ক ব্যাকএন্ড হোস্ট করার জন্য।

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

  • একটি ব্রাউজার, যেমন ক্রোম বা ফায়ারফক্স
  • বিলিং সক্ষম একটি গুগল ক্লাউড প্রজেক্ট।
  • SQL এবং Python সম্পর্কে প্রাথমিক ধারণা।

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

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

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

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

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

বিকল্পভাবে আপনি এর জন্য gcloud কমান্ড ব্যবহার করতে পারেন। gcloud কমান্ড এবং এর ব্যবহার সম্পর্কে জানতে ডকুমেন্টেশন দেখুন।

অপ্রত্যাশিত সমস্যা ও সমাধান

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

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

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

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

এপিআই প্রচার বিলম্ব

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

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

এই ল্যাবে আমরা পরীক্ষার ডেটার ডেটাবেস হিসেবে Cloud SQL for PostgreSQL ব্যবহার করব।

চলুন একটি ক্লাউড এসকিউএল ইনস্ট্যান্স তৈরি করি যেখানে টেস্ট ডেটাসেটটি লোড করা হবে।

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

  1. এই ধাপটি সম্পন্ন হলে রিপোটি আপনার লোকাল ক্লাউড শেল এডিটরে ক্লোন করা হবে এবং আপনি প্রজেক্ট ফোল্ডার থেকে নিচের কমান্ডটি চালাতে পারবেন (আপনাকে অবশ্যই প্রজেক্ট ডিরেক্টরিতে থাকতে হবে):
sh run.sh
  1. এখন UI ব্যবহার করুন (টার্মিনালে থাকা লিঙ্কে ক্লিক করে অথবা টার্মিনালে থাকা 'preview on web' লিঙ্কে ক্লিক করে)।
  2. শুরু করার জন্য আপনার প্রজেক্ট আইডি এবং ইনস্ট্যান্স নামের বিবরণ লিখুন।
  3. লগগুলো স্ক্রল হতে হতে আপনি এক কাপ কফি নিয়ে আসুন এবং পর্দার আড়ালে এটি কীভাবে কাজ করছে তা এখানে পড়ে নিন।

অপ্রত্যাশিত সমস্যা ও সমাধান

অঞ্চলের অমিল

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

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

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

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

আপনার ক্লাউড এসকিউএল ইনস্ট্যান্সটি চালু হয়ে গেলে, এআই এক্সটেনশনগুলো সক্রিয় করতে এবং স্কিমাটি প্রোভিশন করতে ক্লাউড এসকিউএল স্টুডিও-এর এসকিউএল এডিটরে যান।

5a835906362f7609.png

আপনার ইনস্ট্যান্সটি তৈরি হওয়া শেষ না হওয়া পর্যন্ত আপনাকে অপেক্ষা করতে হতে পারে। এটি তৈরি হয়ে গেলে, ইনস্ট্যান্সটি তৈরির সময় আপনি যে ক্রেডেনশিয়ালগুলো দিয়েছিলেন, তা ব্যবহার করে ক্লাউড এসকিউএল ইনস্ট্যান্সে সাইন ইন করুন। PostgreSQL-এ অথেন্টিকেট করার জন্য নিম্নলিখিত ডেটা ব্যবহার করুন:

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

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

9408d708b7dac90c.png

আপনি এডিটর উইন্ডোতে ক্লাউড এসকিউএল-এর জন্য কমান্ড লিখবেন এবং প্রয়োজন অনুযায়ী রান, ফরম্যাট ও ক্লিয়ার অপশনগুলো ব্যবহার করবেন।

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

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

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

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

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

-- Items Table (The "Profile" you swipe on)
CREATE TABLE items (
   item_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
   owner_id UUID,
   provider_name TEXT,
   provider_phone TEXT,
   title TEXT,
   bio TEXT,
   category TEXT,
   image_url TEXT,
   item_vector VECTOR(768),
   status TEXT DEFAULT 'available',
   created_at TIMESTAMP DEFAULT NOW()
);

-- Swipes Table (The Interaction)
CREATE TABLE swipes (
   swipe_id SERIAL PRIMARY KEY,
   swiper_id UUID,
   item_id UUID REFERENCES items(item_id),
   direction TEXT CHECK (direction IN ('left', 'right')),
   is_match BOOLEAN DEFAULT FALSE,
   created_at TIMESTAMP DEFAULT NOW()
);

item_vector কলামটি টেক্সটের ভেক্টর মানগুলো সংরক্ষণের সুযোগ দেবে।

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

'embedding' ফাংশনটিতে execute অনুমোদন দিতে নিচের স্টেটমেন্টটি চালান:

GRANT EXECUTE ON FUNCTION embedding TO postgres;

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

আপনার ডাটাবেসের মধ্যেই সরাসরি মেশিন লার্নিং ফিচারগুলো ব্যবহার করতে, আপনাকে এমএল ইন্টিগ্রেশন ফ্ল্যাগটি সক্রিয় করতে হবে।

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

INSTANCE_NAME="<<The name of your Cloud SQL Instance>>"

gcloud sql instances patch $INSTANCE_NAME --tier=db-custom-1-3840

gcloud sql instances patch $INSTANCE_NAME \
    --database-flags=cloudsql.enable_google_ml_integration=on

gcloud sql instances patch $INSTANCE_NAME --enable-google-ml-integration

ক্লাউড SQL পরিষেবা অ্যাকাউন্টে Vertex AI ব্যবহারকারীর ROLE প্রদান করুন।

Google Cloud IAM কনসোল থেকে, ক্লাউড SQL সার্ভিস অ্যাকাউন্টকে (যা দেখতে এইরকম: service-<<PROJECT_NUMBER>>@cp-sa-cloud-sql.iam.gserviceaccount.com) "Vertex AI User" রোলের জন্য অ্যাক্সেস দিন। PROJECT_NUMBER-এ আপনার প্রজেক্ট নম্বরটি থাকবে।

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

INSTANCE_NAME="<<The name of your Cloud SQL Instance>>"
PROJECT_ID=$(gcloud config get-value project)

SA_EMAIL=$(gcloud sql instances describe $INSTANCE_NAME --format='value(serviceAccountEmailAddress)')
gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member="serviceAccount:$SA_EMAIL" \
    --role="roles/aiplatform.user"

ক্লাউড SQL-এ জেমিনি ৩ ফ্ল্যাশ মডেল নিবন্ধন করুন

ক্লাউড এসকিউএল কোয়েরি এডিটর থেকে নিচের SQL স্টেটমেন্টটি চালান।

CALL google_ml.create_model(
    model_id => 'gemini-3-flash-preview',
    model_request_url => 'https://aiplatform.googleapis.com/v1/projects/<<YOUR_PROJECT_ID>>/locations/global/publishers/google/models/gemini-3-flash-preview:generateContent',
    model_qualified_name => 'gemini-3-flash-preview',
    model_provider => 'google',
    model_type => 'generic',
    model_auth_type => 'cloudsql_service_agent_iam'
);
--replace <<YOUR_PROJECT_ID>> with your project id.

অপ্রত্যাশিত সমস্যা ও সমাধান

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

আপনি যদি "ওয়ান ক্লিক" সেটআপ ব্যবহার করে থাকেন এবং আপনার পাসওয়ার্ড মনে না থাকে, তাহলে কনসোলের ইনস্ট্যান্স বেসিক ইনফরমেশন পেজে গিয়ে postgres পাসওয়ার্ড রিসেট করতে "এডিট"-এ ক্লিক করুন।

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

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

আইএএম প্রসারণ ব্যবধান

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

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

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

প্রজেক্ট আইডি টাইপো

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

ভার্টেক্স এআই ইন্টিগ্রেশন নিষ্ক্রিয় করা হয়েছে

–enable-google-ml-integration চালান (ডাটাবেস ফ্ল্যাগ থেকে আলাদা)

৫. ছবি সংরক্ষণ (গুগল ক্লাউড স্টোরেজ)

আমাদের উদ্বৃত্ত জিনিসপত্রের ছবি সংরক্ষণ করার জন্য আমরা একটি GCS বাকেট ব্যবহার করি। এই ডেমো অ্যাপটির জন্য আমরা চাই ছবিগুলো যেন সবার জন্য সহজলভ্য হয়, যাতে সেগুলো আমাদের সোয়াইপ কার্ডে সঙ্গে সঙ্গে প্রদর্শিত হয়।

  1. একটি বাকেট তৈরি করুন: আপনার GCP প্রোজেক্টে (যেমন, neighborloop-images) একটি নতুন বাকেট তৈরি করুন , বিশেষত আপনার ডাটাবেস এবং অ্যাপ্লিকেশনের মতো একই অঞ্চলে।
  2. সর্বজনীন অ্যাক্সেস কনফিগার করুন: * বাকেটটির পারমিশন ট্যাবে যান।
  3. allUsers প্রিন্সিপালটি যোগ করুন।
  4. স্টোরেজ অবজেক্ট ভিউয়ার রোল (যাতে সবাই ছবিগুলো দেখতে পারে) এবং স্টোরেজ অবজেক্ট ক্রিয়েটর রোল (ডেমো আপলোডের উদ্দেশ্যে) নির্ধারণ করুন।

বিকল্প (সার্ভিস অ্যাকাউন্ট): আপনি যদি পাবলিক অ্যাক্সেস ব্যবহার করতে না চান, তবে নিশ্চিত করুন যে আপনার অ্যাপ্লিকেশনের সার্ভিস অ্যাকাউন্টকে ক্লাউড এসকিউএল (Cloud SQL)-এ সম্পূর্ণ অ্যাক্সেস এবং অবজেক্টগুলি নিরাপদে পরিচালনা করার জন্য প্রয়োজনীয় স্টোরেজ রোলগুলি (Storage roles) দেওয়া হয়েছে।

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

BUCKET_NAME="<<your-bucket-name>>"
gcloud storage buckets add-iam-policy-binding gs://$BUCKET_NAME \
    --member="allUsers" \
    --role="roles/storage.objectViewer"

অপ্রত্যাশিত সমস্যা ও সমাধান

অঞ্চল ড্র্যাগ

যদি আপনার ডাটাবেস us-central1 এ এবং আপনার বাকেট europe-west1 এ থাকে, তাহলে আপনি আক্ষরিক অর্থেই আপনার AI-এর গতি কমিয়ে দিচ্ছেন। 'ভাইব চেক' দ্রুত হয়ে গেলেও, UI-এর জন্য ছবিটি ফেচ করতে গেলে তা ধীরগতির মনে হবে। এগুলোকে একই অঞ্চলে রাখুন!

বালতির নামের অনন্যতা

বাকেটের নামগুলো একটি গ্লোবাল নেমস্পেস। আপনি যদি আপনার বাকেটের নাম neighborloop-images রাখার চেষ্টা করেন, তবে সম্ভবত অন্য কেউ ইতিমধ্যেই সেই নামটি ব্যবহার করছে। যদি আপনার বাকেট তৈরি করা ব্যর্থ হয়, তবে এর শেষে একটি র‍্যান্ডম সাফিক্স যোগ করুন।

'স্রষ্টা' বনাম 'দর্শক' এর বিভ্রান্তি

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

৬. চলুন অ্যাপ্লিকেশনটি তৈরি করি।

এই রিপোটি আপনার প্রজেক্টে ক্লোন করুন এবং চলুন বিষয়টি ধাপে ধাপে দেখি।

  1. এটি ক্লোন করতে, আপনার ক্লাউড শেল টার্মিনাল থেকে (রুট ডিরেক্টরিতে অথবা যেখান থেকে আপনি এই প্রজেক্টটি তৈরি করতে চান), নিচের কমান্ডগুলো এক এক করে চালান:
git clone https://github.com/flazer99/neighbor-loop-cloud-sql

cd neighbor-loop-cloud-sql/

এতে প্রজেক্টটি তৈরি হয়ে যাবে এবং আপনি ক্লাউড শেল এডিটর-এ তা যাচাই করতে পারবেন।

53a398aff6ba7d5b.png

  1. আপনার জেমিনি এপিআই কী কীভাবে পাবেন
  2. গুগল এআই স্টুডিও পরিদর্শন করুন: aistudio.google.com -এ যান।
  3. সাইন ইন করুন: আপনার গুগল ক্লাউড প্রোজেক্টের জন্য ব্যবহৃত একই গুগল অ্যাকাউন্টটি ব্যবহার করুন।
  4. এপিআই কী তৈরি করুন:
  5. বাম পাশের সাইডবারে, "Get API key"-তে ক্লিক করুন।
  6. "নতুন প্রজেক্টে এপিআই কী তৈরি করুন" বোতামটিতে ক্লিক করুন।
  7. কী-টি কপি করুন: কী-টি তৈরি হয়ে গেলে, কপি আইকনে ক্লিক করুন।
  8. এখন .env ফাইলে এনভায়রনমেন্ট ভেরিয়েবলগুলো সেট করুন।
GEMINI_API_KEY=<<YOUR_GEMINI_API_KEY>>
DATABASE_URL=postgresql+pg8000://postgres:<<YOUR_PASSWORD>>@<<HOST_IP>>:<<PORT>>/postgres
GCS_BUCKET_NAME=<<YOUR_GCS_BUCKET>>

<<YOUR_GEMINI_API_KEY>>, <<YOUR_PASSWORD>, <<HOST_IP>>, <<PORT>> and <<YOUR_GCS_BUCKET>>.

অপ্রত্যাশিত সমস্যা ও সমাধান

একাধিক অ্যাকাউন্ট বিভ্রান্তি

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

'ফ্রি টিয়ার' কোটার প্রভাব

আপনি যদি ফ্রি টিয়ার ব্যবহার করেন, তাহলে রেট লিমিট (RPM - রিকোয়েস্টস পার মিনিট) রয়েছে। নেইবার লুপ-এ খুব দ্রুত "সোয়াইপ" করলে, আপনি একটি 429 Too Many Requests এরর পেতে পারেন। গতি কমান!

উন্মুক্ত কী নিরাপত্তা

যদি আপনি ভুলবশত আপনার .env ফাইলটির ভেতরে থাকা কী-টি সহ git commit , তাহলে সবসময় আপনার .gitignore.env যোগ করুন।

৭. চলো কোডটি যাচাই করি।

আপনার জিনিসপত্রের জন্য "ডেটিং প্রোফাইল"

c2c543562cc9b353.png

যখন কোনো ব্যবহারকারী কোনো পণ্যের ছবি আপলোড করেন, তখন তাদের দীর্ঘ বিবরণ লিখতে হবে না। আমি জেমিনি ৩ ফ্ল্যাশ ব্যবহার করে পণ্যটি 'দেখি' এবং তাদের জন্য লিস্টিংটি লিখে দিই।

ব্যাকএন্ডে, ব্যবহারকারী শুধু একটি শিরোনাম এবং একটি ছবি প্রদান করেন। বাকিটা জেমিনি সামলে নেয়:

prompt = """
You are a witty community manager for NeighborLoop.
Analyze this surplus item and return JSON:
{
   "bio": "First-person witty dating-style profile bio for the product, not longer than 2 lines",
   "category": "One-word category",
   "tags": ["tag1", "tag2"]
}
"""
response = genai_client.models.generate_content(
   model="gemini-3-flash-preview",
   contents=[types.Part.from_bytes(data=image_bytes, mime_type="image/jpeg"), prompt],
   config=types.GenerateContentConfig(response_mime_type="application/json")
)

21f871a1b549efcf.png

রিয়েল-টাইম ইন-ডাটাবেস এমবেডিংস

aa783a459f1b02da.png

ক্লাউড এসকিউএল-এর অন্যতম সেরা একটি বৈশিষ্ট্য হলো এসকিউএল কনটেক্সট থেকে বের না হয়েই এমবেডিং তৈরি করার ক্ষমতা। পাইথনে একটি এমবেডিং মডেল কল করে ভেক্টরটি ডিবি-তে ফেরত পাঠানোর পরিবর্তে, আমি embedding() ফাংশনটি ব্যবহার করে একটিমাত্র INSERT স্টেটমেন্টের মধ্যেই এই কাজটি করে ফেলি:

INSERT INTO items (owner_id, provider_name, provider_phone, title, bio, category, image_url, status, item_vector)
VALUES (
   :owner, :name, :phone, :title, :bio, :cat, :url, 'available',
   embedding('text-embedding-005', :title || ' ' || :bio)::vector
)

এটি নিশ্চিত করে যে প্রতিটি আইটেম পোস্ট করার সাথে সাথেই তার অর্থ অনুযায়ী "অনুসন্ধানযোগ্য" হয়ে ওঠে। এবং মনে রাখবেন যে, এই অংশটিই নেইবার লুপ অ্যাপের "পণ্য তালিকাভুক্ত করার" বৈশিষ্ট্যটিকে অন্তর্ভুক্ত করে।

পণ্য তালিকা যোগ করার বৈশিষ্ট্যের স্ক্রিনশট

জেমিনি ৩.০ এর সাহায্যে উন্নত ভেক্টর অনুসন্ধান এবং স্মার্ট ফিল্টারিং

সাধারণ কীওয়ার্ড সার্চ সীমিত। আপনি যদি "আমার চেয়ার ঠিক করার মতো কিছু" লিখে সার্চ করেন, তাহলে কোনো শিরোনামে "চেয়ার" শব্দটি না থাকলে একটি প্রচলিত ডেটাবেস কিছুই খুঁজে নাও পেতে পারে। নেইবার লুপ ক্লাউড এসকিউএল এআই-এর উন্নত ভেক্টর সার্চের মাধ্যমে এই সমস্যার সমাধান করে।

pgvector এক্সটেনশন এবং ক্লাউড এসকিউএল-এর অপ্টিমাইজ করা স্টোরেজ ব্যবহার করে আমরা অত্যন্ত দ্রুত সাদৃশ্য অনুসন্ধান করতে পারি। কিন্তু আসল 'জাদু' তখনই ঘটে, যখন আমরা ভেক্টর প্রক্সিমিটিকে এলএলএম-ভিত্তিক যুক্তির সাথে একত্রিত করি।

SELECT item_id, title, bio, category, image_url,
      1 - (item_vector <=> embedding('text-embedding-005', :query)::vector) as score
FROM items 
WHERE status = 'available' 
 AND item_vector IS NOT NULL 
ORDER BY score DESC 
LIMIT 5

এই কোয়েরিটি একটি বড় ধরনের আর্কিটেকচারাল পরিবর্তন নিয়ে এসেছে: আমরা লজিককে ডেটার কাছে নিয়ে যাচ্ছি। হাজার হাজার ফলাফল ফিল্টার করার জন্য অ্যাপ্লিকেশন কোডে টেনে আনার পরিবর্তে, জেমিনি ৩ ফ্ল্যাশ ডাটাবেস ইঞ্জিনের ভেতরেই একটি 'ভাইব চেক' করে। এটি ল্যাটেন্সি কমায়, ডেটা স্থানান্তরের খরচ হ্রাস করে এবং নিশ্চিত করে যে ফলাফলগুলো শুধু গাণিতিকভাবেই সাদৃশ্যপূর্ণ নয়, বরং প্রাসঙ্গিকভাবেও গুরুত্বপূর্ণ।

সিমান্টিক সার্চ ফিচারের স্ক্রিনশট

"সোয়াইপ টু ম্যাচ" লুপ

UI-টি হলো একটি চিরায়ত তাসের ডেক।

বাম দিকে সোয়াইপ করুন: বাতিল করুন।

ডানদিকে সোয়াইপ করুন: মিলে গেছে!

সোয়াইপ-টু-ম্যাচ ফিচারের স্ক্রিনশট

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

৮. চলুন এটি ক্লাউড রানে ডেপ্লয় করি।

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

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

gcloud run deploy neighbor-loop-cloud-sql \
   --source . \
   --region=us-central1 \
   --allow-unauthenticated \
   --network=easy-cloudsql-vpc \
   --subnet=easy-cloudsql-subnet \
   --vpc-egress=private-ranges-only \
   --set-env-vars GEMINI_API_KEY=<<YOUR_GEMINI_API_KEY>>,DATABASE_URL=postgresql+pg8000://postgres:<<YOUR_PASSWORD>>@<<PRIVATE_IP_HOST>>:5432/postgres,GCS_BUCKET_NAME=<<YOUR_GCS_BUCKET>>

<<YOUR_GEMINI_API_KEY>>, <<YOUR_PASSWORD>, <<PRIVATE_IP_HOST>>, <<PORT>> and <<YOUR_GCS_BUCKET>> প্লেসহোল্ডারগুলির মান প্রতিস্থাপন করুন।

কমান্ডটি শেষ হলে এটি একটি সার্ভিস ইউআরএল (Service URL) দেবে। সেটি কপি করুন।

এখন সার্ভিস ইউআরএল (আগে কপি করা ক্লাউড রান এন্ডপয়েন্ট) ব্যবহার করে অ্যাপটি পরীক্ষা করুন। সেই পুরোনো পাওয়ার টুলটির একটি ছবি আপলোড করুন, আর বাকিটা জেমিনির ওপর ছেড়ে দিন!

অপ্রত্যাশিত সমস্যা ও সমাধান

"সংশোধন ব্যর্থ" লুপ

যদি ডেপ্লয়মেন্ট শেষ হওয়ার পরেও URL-টিতে 500 Internal Server Error আসে, তাহলে লগগুলো পরীক্ষা করুন! এর কারণ সাধারণত কোনো এনভায়রনমেন্ট ভ্যারিয়েবল অনুপস্থিত থাকা (যেমন আপনার DATABASE_URL এ টাইপিংয়ের ভুল) অথবা আপনার GCS বাকেট থেকে ডেটা পড়ার জন্য ক্লাউড রান সার্ভিস অ্যাকাউন্টের প্রয়োজনীয় অনুমতি না থাকা।

৯. উচ্চ স্তরের সমস্যা সমাধান

206a26fcd93ea48.png

১০. ডেমো

আপনি পরীক্ষার জন্য আপনার এন্ডপয়েন্টটি ব্যবহার করতে পারবেন।

কিন্তু ডেমো দেখানোর জন্য কয়েক দিনের জন্য আপনি এটি নিয়ে খেলতে পারেন:

১১. পরিষ্কার করুন

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

১২. অভিনন্দন

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

জেমিনি ৩ ফ্ল্যাশের গতি এবং ক্লাউড এসকিউএল-এর অপ্টিমাইজড ভেক্টর প্রসেসিংয়ের সমন্বয় প্রকৃতপক্ষে কমিউনিটি-চালিত প্ল্যাটফর্মগুলোর জন্য পরবর্তী নতুন দিগন্ত।