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

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

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

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

645daa545b0e46a6.png সম্পর্কে

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

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

তুমি কি শিখবে

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

স্থাপত্য

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

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

আবশ্যকতা

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

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 তে একটি ভিন্ন প্রকল্প দেখছেন। উপরের বাম ড্রপডাউনে প্রকল্প আইডিটি পরীক্ষা করুন!

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

5a835906362f7609.png সম্পর্কে

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

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

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

9408d708b7dac90c.png সম্পর্কে

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

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

এই অ্যাপটি তৈরির জন্য, আমরা 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;

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

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

-- 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 কলামটি টেক্সটের ভেক্টর মান সংরক্ষণের অনুমতি দেবে।

অনুমতি দিন

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

GRANT EXECUTE ON FUNCTION embedding TO postgres;

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

আপনার ডাটাবেসের মধ্যে সরাসরি মেশিন লার্নিং বৈশিষ্ট্যগুলি ব্যবহার করতে, আপনাকে ML ইন্টিগ্রেশন ফ্ল্যাগ সক্ষম করতে হবে।

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

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 ব্যবহারকারীর ভূমিকা প্রদান করুন

গুগল ক্লাউড আইএএম কনসোল থেকে, ক্লাউড এসকিউএল সার্ভিস অ্যাকাউন্টকে (যা দেখতে এরকম: 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-এ জেমিনি 3 ফ্ল্যাশ মডেল নিবন্ধন করুন

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

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.

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

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

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

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

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

আইএএম প্রচারের ব্যবধান

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

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

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

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

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

ভার্টেক্স এআই ইন্টিগ্রেশন অক্ষম করা আছে

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

৫. ইমেজ স্টোরেজ (গুগল ক্লাউড স্টোরেজ)

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

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

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

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

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 রাখার চেষ্টা করেন, তাহলে সম্ভবত অন্য কারো কাছে এটি ইতিমধ্যেই আছে। যদি আপনার তৈরি ব্যর্থ হয়, তাহলে একটি এলোমেলো প্রত্যয় যোগ করুন।

"স্রষ্টা" বনাম "দর্শক" মিশ্রণ

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

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

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

  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. API কী তৈরি করুন:
  5. বাম দিকের সাইডবারে, "API কী পান" এ ক্লিক করুন।
  6. "নতুন প্রকল্পে API কী তৈরি করুন" বোতামে ক্লিক করুন।
  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>>.

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

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

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

"ফ্রি টিয়ার" কোটার আঘাত

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

উন্মুক্ত কী সুরক্ষা

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

৭. কোডটি পরীক্ষা করা যাক

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

c2c543562cc9b353.png সম্পর্কে

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

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

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 সম্পর্কে

ক্লাউড এসকিউএল-এর সবচেয়ে আকর্ষণীয় বৈশিষ্ট্যগুলির মধ্যে একটি হল এসকিউএল কনটেক্সট ছাড়াই এম্বেডিং তৈরি করার ক্ষমতা। পাইথনে একটি এম্বেডিং মডেল কল করে ভেক্টরটিকে ডিবিতে ফেরত পাঠানোর পরিবর্তে, আমি এম্বেডিং() ফাংশন ব্যবহার করে একটি 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
)

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

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

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

স্ট্যান্ডার্ড কীওয়ার্ড অনুসন্ধান সীমিত। যদি আপনি "something to fix my chair" অনুসন্ধান করেন, তাহলে একটি ঐতিহ্যবাহী ডাটাবেস শিরোনামে "chear" শব্দটি না থাকলে কিছুই ফেরত নাও দিতে পারে। Neighbor Loop ক্লাউড SQL AI এর উন্নত ভেক্টর অনুসন্ধানের মাধ্যমে এই সমস্যার সমাধান করে।

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

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

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

শব্দার্থিক অনুসন্ধান বৈশিষ্ট্যের স্ক্রিনশট

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

ইউআই হলো কার্ডের একটি ক্লাসিক ডেক।

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

ডানদিকে সোয়াইপ করুন: এটি একটি ম্যাচ!

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

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

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

  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>> এর জন্য মানগুলি প্রতিস্থাপন করুন

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

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

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

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

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

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

206a26fcd93ea48.png সম্পর্কে

১০. ডেমো

পরীক্ষার জন্য তোমার শেষ বিন্দু ব্যবহার করতে সক্ষম হওয়া উচিত।

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

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

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

১২. অভিনন্দন

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

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