এক মিলিয়ন ভেক্টর, শূন্য লুপ: অ্যালয়ডিবি দিয়ে স্কেলে এমবেডিং তৈরি করা

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

এই কোডল্যাবে, আপনি একটি স্কেলেবল নলেজ বেস অনুসন্ধান অ্যাপ্লিকেশন তৈরি করবেন। ভেক্টর এম্বেডিং তৈরি করার জন্য পাইথন স্ক্রিপ্ট এবং লুপ সহ একটি জটিল ETL পাইপলাইন পরিচালনা করার পরিবর্তে, আপনি একটি একক SQL কমান্ড ব্যবহার করে ডাটাবেসের মধ্যে স্থানীয়ভাবে এম্বেডিং জেনারেশন পরিচালনা করতে AlloyDB AI ব্যবহার করবেন।

d4324260c68d4a70.png সম্পর্কে

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

একটি উচ্চ-কার্যক্ষমতাসম্পন্ন "অনুসন্ধানযোগ্য" জ্ঞানভিত্তিক ডাটাবেস অ্যাপ্লিকেশন।

তুমি কি শিখবে

তুমি শিখবে কিভাবে:

  • একটি AlloyDB ক্লাস্টার তৈরি করুন এবং AI এক্সটেনশন সক্ষম করুন।
  • SQL ব্যবহার করে সিন্থেটিক ডেটা (৫০,০০০+ সারি) তৈরি করুন।
  • ব্যাচ প্রসেসিং ব্যবহার করে সম্পূর্ণ ডেটাসেটের জন্য ব্যাকফিল ভেক্টর এম্বেডিং।
  • নতুন ডেটা স্বয়ংক্রিয়ভাবে এম্বেড করার জন্য রিয়েল-টাইম ইনক্রিমেন্টাল ট্রিগার সেট আপ করুন।
  • "ফ্লেক্সিং কনটেক্সট" এর জন্য হাইব্রিড অনুসন্ধান (ভেক্টর + SQL ফিল্টার) করুন।

আবশ্যকতা

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

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 services enable \
  alloydb.googleapis.com \
  compute.googleapis.com \
  cloudresourcemanager.googleapis.com \
  servicenetworking.googleapis.com \
  aiplatform.googleapis.com

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

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

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

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

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

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

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

কোটা কোয়াগস

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

এই ধাপে, আমরা নিম্নলিখিত বিষয়গুলি কভার করব:

879263c907f3cac6.png সম্পর্কে

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

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

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

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

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

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

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

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

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

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

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

স্কেল প্রদর্শনের জন্য আমাদের একটি ডেটাসেট প্রয়োজন। CSV আমদানি করার পরিবর্তে, আমরা SQL ব্যবহার করে তাৎক্ষণিকভাবে 50,000 সারি সিন্থেটিক "সহায়তা নিবন্ধ" তৈরি করব।

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

-- 1. Create the table
CREATE TABLE help_articles (
    id SERIAL PRIMARY KEY,
    title TEXT,
    category TEXT,
    product_version TEXT,
    content_body TEXT,
    embedding vector(768) -- Dimension for text-embedding-005
);

-- 2. Generate 50,000 rows of synthetic data
INSERT INTO help_articles (title, category, product_version, content_body)
SELECT
    'Help Article ' || i,
    CASE 
        WHEN i % 3 = 0 THEN 'Billing' 
        WHEN i % 3 = 1 THEN 'Technical' 
        ELSE 'General' 
    END,
    CASE 
        WHEN i % 2 = 0 THEN '2.0' 
        ELSE '1.0' 
    END,
    'This article covers common issues regarding ' || 
    CASE 
        WHEN i % 3 = 0 THEN 'payment failures, invoice disputes, and credit card updates.'
        WHEN i % 3 = 1 THEN 'connection timeouts, latency issues, and API errors.'
        ELSE 'account profile settings, password resets, and user roles.' 
    END
FROM generate_series(1, 50000) AS i;

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

তথ্য যাচাই করুন:

SELECT count(*) FROM help_articles;
-- Output: 50000

ডাটাবেস পতাকা সক্রিয় করুন

ইনস্ট্যান্স কনফিগারেশন কনসোলে যান, "প্রাথমিক সম্পাদনা করুন" এ ক্লিক করুন, উন্নত কনফিগারেশনে যান এবং "ডাটাবেস পতাকা যোগ করুন" এ ক্লিক করুন।

  1. যাচাই করুন যে google_ml_integration.enable_model_support ফ্ল্যাগটি on এ সেট করা আছে :

যদি না হয়, তাহলে ফ্ল্যাগস ড্রপ ডাউনে এটি লিখুন এবং "ON" এ সেট করুন এবং ইনস্ট্যান্স আপডেট করুন।

  1. যাচাই করুন যে google_ml_integration.enable_faster_embedding_generation ফ্ল্যাগটি চালু আছে:

যদি না হয়, তাহলে ফ্ল্যাগস ড্রপ ডাউনে এটি লিখুন এবং "ON" এ সেট করুন এবং ইনস্ট্যান্স আপডেট করুন।

ডাটাবেস ফ্ল্যাগ কনফিগার করার ধাপ:

  1. গুগল ক্লাউড কনসোলে, ক্লাস্টার পৃষ্ঠায় যান।

ক্লাস্টারগুলিতে যান

  1. রিসোর্স নেম কলামে একটি ক্লাস্টারে ক্লিক করুন।
  2. ওভারভিউ পৃষ্ঠায়, আপনার ক্লাস্টারের ইনস্ট্যান্সে যান, একটি ইনস্ট্যান্স নির্বাচন করুন এবং তারপর সম্পাদনা করুন এ ক্লিক করুন।
  3. আপনার ইনস্ট্যান্স থেকে একটি ডাটাবেস ফ্ল্যাগ যোগ করুন, পরিবর্তন করুন বা মুছে ফেলুন:

একটি পতাকা যোগ করুন

  1. আপনার ইনস্ট্যান্সে একটি ডাটাবেস ফ্ল্যাগ যোগ করতে, "অ্যাড ফ্ল্যাগ" এ ক্লিক করুন।
  2. নতুন ডাটাবেস পতাকা তালিকা থেকে একটি পতাকা নির্বাচন করুন।
  3. পতাকার জন্য একটি মান প্রদান করুন।
  4. সম্পন্ন ক্লিক করুন।
  5. আপডেট ইনস্ট্যান্স ক্লিক করুন।
  6. যাচাই করুন যে google_ml_integration এক্সটেনশনটি 1.5.2 বা তার বেশি সংস্করণের:

নিম্নলিখিত কমান্ড দিয়ে আপনার এক্সটেনশন সংস্করণটি পরীক্ষা করতে:

SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';

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

এক্সটেনশন পরিবর্তন করুন google_ml_integration আপডেট;

অনুমতি দিন

  1. ব্যবহারকারীকে অটো এম্বেডিং জেনারেশন পরিচালনা করতে, google_ml.embed_gen_progress এবং google_ml.embed_gen_settings টেবিলগুলিতে INSERT, UPDATE এবং DELETE অনুমতি দিন:
GRANT INSERT, UPDATE, DELETE ON google_ml.embed_gen_progress TO postgres;

'postgres' হল সেই USER_NAME যার জন্য অনুমতিগুলি মঞ্জুর করা হয়েছে।

  1. "এমবেডিং" ফাংশনে এক্সিকিউট করার জন্য নিচের স্টেটমেন্টটি রান করুন:
GRANT EXECUTE ON FUNCTION embedding TO postgres;

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

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

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

PROJECT_ID=$(gcloud config get-value project)


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

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

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

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

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

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

৫. "ওয়ান-শট" ভেক্টর জেনারেশন

এটিই ল্যাবের মূল বিষয়। এই ৫০,০০০ সারি প্রক্রিয়া করার জন্য পাইথন লুপ লেখার পরিবর্তে, আমরা ai.initialize_embeddings ফাংশনটি ব্যবহার করব।

এই একক কমান্ড দুটি কাজ করে:

  1. সমস্ত বিদ্যমান সারি ব্যাকফিল করে
  2. ভবিষ্যতের সারিগুলি স্বয়ংক্রিয়ভাবে এম্বেড করার জন্য একটি ট্রিগার তৈরি করে

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

CALL ai.initialize_embeddings(
  model_id => 'text-embedding-005',
  table_name => 'help_articles',
  content_column => 'content_body',
  embedding_column => 'embedding',
  incremental_refresh_mode => 'transactional'
);

এম্বেডিং যাচাই করুন

embedding কলামটি এখন পূর্ণ হয়েছে কিনা তা পরীক্ষা করুন:

SELECT id, left(content_body, 30), substring(embedding::text, 1, 30) as vector_partial 
FROM help_articles;

আপনি নীচের মত একটি ফলাফল দেখতে পাবেন:

a872b8926a164275.png সম্পর্কে

কি হয়েছে?

  1. স্কেলে ব্যাকফিল: এটি স্বয়ংক্রিয়ভাবে আপনার বিদ্যমান ৫০,০০০ সারির মধ্য দিয়ে স্যুইপ করে এবং ভার্টেক্স এআই এর মাধ্যমে এম্বেডিং তৈরি করে।
  2. অটোমেশন: incremental_refresh_mode => 'transactional' সেট করে, AlloyDB স্বয়ংক্রিয়ভাবে অভ্যন্তরীণ ট্রিগার সেট আপ করে। help_articles-এ যেকোনো নতুন সারি ঢোকানো হলে তাৎক্ষণিকভাবে এর এম্বেডিং তৈরি হবে।
  3. আপনি ঐচ্ছিকভাবে incremental_refresh_mode => 'None' সেট করতে পারেন যাতে আপনি শুধুমাত্র বাল্ক আপডেট করার জন্য স্টেটমেন্টটি পেতে পারেন এবং সমস্ত সারি এম্বেডিং আপডেট করার জন্য ম্যানুয়ালি ai.refresh_embeddings() কল করতে পারেন।

আপনি মাত্র একটি কাফকা কিউ, একটি পাইথন ওয়ার্কার এবং একটি মাইগ্রেশন স্ক্রিপ্ট 6 লাইনের SQL দিয়ে প্রতিস্থাপন করেছেন। এখানে সমস্ত বৈশিষ্ট্যের জন্য বিস্তারিত অফিসিয়াল ডকুমেন্টেশন রয়েছে।

রিয়েল-টাইম ট্রিগার পরীক্ষা

"জিরো লুপ" অটোমেশন নতুন ডেটার জন্য কাজ করে কিনা তা যাচাই করা যাক।

  1. একটি নতুন সারি সন্নিবেশ করান:
INSERT INTO help_articles (title, category, product_version, content_body)
VALUES ('New Scaling Guide', 'Technical', '2.0', 'How to scale AlloyDB to millions of transactions.');
  1. অবিলম্বে পরীক্ষা করুন:
SELECT embedding FROM help_articles WHERE title = 'New Scaling Guide';

ফলাফল:

কোনও বহিরাগত স্ক্রিপ্ট না চালিয়েই আপনি তাৎক্ষণিকভাবে ভেক্টর তৈরি দেখতে পাবেন।

ব্যাচের আকার টিউন করা হচ্ছে

বর্তমানে AlloyDB ডিফল্টভাবে ব্যাচের আকার ৫০-এ নির্ধারণ করে। যদিও ডিফল্টভাবে এটি দুর্দান্ত কাজ করে, তবুও AlloyDB ব্যবহারকারীদের আপনার অনন্য মডেল এবং ডেটাসেটের জন্য নিখুঁত কনফিগারেশন টিউন করার নিয়ন্ত্রণ দেয়।

CALL ai.initialize_embeddings(
  model_id => 'text-embedding-005',
  table_name => 'help_articles',
  content_column => 'content_body',
  embedding_column => 'embedding',
  incremental_refresh_mode => 'transactional',
  batch_size => 20
);

তবে ব্যবহারকারীদের কোটা সীমা সম্পর্কে সচেতন থাকতে হবে যা কর্মক্ষমতা সীমিত করতে পারে। প্রস্তাবিত AlloyDB কোটা পর্যালোচনা করতে, ডকুমেন্টেশনের "শুরু করার আগে" বিভাগটি দেখুন।

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

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

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

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

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

৬. ফ্লেক্সিং কনটেক্সট সার্চ

এখন আমরা একটি হাইব্রিড অনুসন্ধান করি। আমরা শব্দার্থিক বোঝাপড়া (ভেক্টর) এবং ব্যবসায়িক যুক্তি (SQL ফিল্টার) একত্রিত করি।

বিশেষ করে পণ্য সংস্করণ 2.0 এর জন্য বিলিং সমস্যাগুলি খুঁজে পেতে এই কোয়েরিটি চালান:

SELECT
  title,
  left(content_body, 100) as content_snippet,
  1 - (embedding <=> embedding('text-embedding-005', 'Invoice did not go through')::vector) as relevance
FROM help_articles
WHERE category = 'Billing'  -- Hard SQL Filter
  AND product_version = '2.0' -- Hard SQL Filter
ORDER BY relevance DESC
LIMIT 5;

এটি হল ফ্লেক্সিং কনটেক্সট। অনুসন্ধানটি ব্যবহারকারীর উদ্দেশ্য ("বিলিং সমস্যা") বোঝার জন্য "ফ্লেক্স" করে এবং কঠোর ব্যবসায়িক সীমাবদ্ধতা (সংস্করণ 2.0) মেনে চলে।

f0fdb50d6195c462.png সম্পর্কে

স্টার্টআপস এবং মাইগ্রেশনের জন্য এটি কেন জয়ী?

  1. শূন্য অবকাঠামো ঋণ: আপনি আলাদা ভেক্টর ডিবি (পিনেকোন/মিলভাস) তৈরি করেননি। আপনি আলাদা ETL কাজ লেখেননি। সবকিছুই পোস্টগ্রেসে।
  2. রিয়েল-টাইম আপডেট: 'লেনদেনমূলক' মোড ব্যবহার করে, আপনার অনুসন্ধান সূচক কখনই পুরানো হয় না। ডেটা প্রতিশ্রুতিবদ্ধ হওয়ার মুহুর্তে, এটি ভেক্টর-প্রস্তুত।
  3. স্কেল: অ্যালয়ডিবি গুগলের অবকাঠামোর উপর নির্মিত। এটি আপনার পাইথন স্ক্রিপ্টের চেয়েও দ্রুত লক্ষ লক্ষ ভেক্টরের বাল্ক জেনারেশন পরিচালনা করতে পারে।

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

উৎপাদন কর্মক্ষমতা গোটচা

সমস্যা: ৫০,০০০ সারির জন্য দ্রুত। যদি ক্যাটাগরি ফিল্টার যথেষ্ট নির্বাচনী না হয় তবে ১০ লক্ষ সারির জন্য খুবই ধীর। সমাধান: একটি ভেক্টর সূচক যোগ করুন: উৎপাদন স্কেলের জন্য, আপনাকে একটি সূচক তৈরি করতে হবে: help_articles ব্যবহার করে INDEX তৈরি করুন (vector_cosine_ops এম্বেড করা); সূচকের ব্যবহার যাচাই করুন: ডাটাবেস সূচক ব্যবহার করছে এবং ক্রমিক স্ক্যান করছে না তা নিশ্চিত করতে EXPLAIN ANALYZE SELECT ... চালান।

"মডেল অমিল" বিপর্যয়

সমস্যা: আপনি CALL পদ্ধতিতে text-embedding-005 ব্যবহার করে কলামটি ইনিশিয়ালাইজ করেছেন। যদি আপনি ভুলবশত SELECT query ফাংশন embedding('model-name', ... তে একটি ভিন্ন মডেল (যেমন, text-embedding-004 অথবা একটি OSS মডেল) ব্যবহার করেন, তাহলে মাত্রা (768) মিলতে পারে, কিন্তু ভেক্টর স্পেস সম্পূর্ণ ভিন্ন হবে। কোয়েরিটি ত্রুটি ছাড়াই চলে, কিন্তু ফলাফল সম্পূর্ণ অপ্রাসঙ্গিক (আবর্জনা প্রাসঙ্গিকতা স্কোর)। সমস্যা সমাধান: নিশ্চিত করুন যে ai.initialize_embeddings-এ model_id আপনার SELECT query-এর model_id-এর সাথে ঠিক মেলে।

"নীরব খালি" ফলাফল (অতিরিক্ত ফিল্টারিং)

সমস্যা: হাইব্রিড অনুসন্ধান একটি "AND" অপারেশন। এর জন্য Semantic Match এবং SQL Match প্রয়োজন। যদি কোনও ব্যবহারকারী "Billing help" অনুসন্ধান করে কিন্তু product_version কলামে '2.0' এর পরিবর্তে '2.0.1' থাকে, তাহলে ফলাফল শূন্য সারি হবে, এমনকি যদি ভেক্টর মিল 99% হয়। সমস্যা সমাধান:

  • SQL ফিল্টারগুলি ( WHERE category... ) আসলে ডেটা ফেরত দিচ্ছে কিনা তা দেখার জন্য প্রথমে ভেক্টর sort ছাড়াই কোয়েরিটি চালান।
  • কেস সংবেদনশীলতা পরীক্ষা করুন ( Billing বনাম billing )।

৪. অনুমতি/কোটা ত্রুটি (৫০০ ত্রুটি)

সমস্যা: SELECT ক্লজের embedding() ফাংশনটি Vertex AI-তে একটি রিয়েল-টাইম নেটওয়ার্ক কল করে। যদি ডাটাবেস পরিষেবা অ্যাকাউন্ট Vertex AI ব্যবহারকারীর ভূমিকা হারায়, অথবা আপনি যদি Vertex AI API কোটা (QPM) পূরণ করেন, তাহলে সম্পূর্ণ SQL কোয়েরি ব্যর্থ হবে । সমস্যা সমাধান:

  • AlloyDB এর জন্য ক্লাউড লগিং পরীক্ষা করুন।
  • নিশ্চিত করুন যে IAM ভূমিকা এখনও সক্রিয় আছে।
  • উচ্চ স্থিতিস্থাপকতার প্রয়োজন হলে, ফাংশনটিকে TRY/CATCH ব্লকে সঞ্চিত পদ্ধতিতে মুড়িয়ে দিন।

৫. নাল এম্বেডিং

সমস্যা: যদি আপনি মডেলটি সম্পূর্ণরূপে শুরু হওয়ার আগে ডেটা সন্নিবেশ করান অথবা ব্যাকগ্রাউন্ড ওয়ার্কার ব্যর্থ হয়, তাহলে কিছু সারির embedding কলামে NULL থাকতে পারে। NULL <=> Vector NULL প্রদান করে। এই সারিগুলি সাজানোর ক্রম থেকে অদৃশ্য হয়ে যায়। সমস্যা সমাধান:

  • ১০০% কভারেজ যাচাই করতে SELECT count(*) FROM help_articles WHERE embedding IS NULL; চালান।

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

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

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

৮. অভিনন্দন

আপনি সফলভাবে একটি স্কেলেবল নলেজ বেস সার্চ অ্যাপ্লিকেশন তৈরি করেছেন। ভেক্টর এম্বেডিং তৈরির জন্য পাইথন স্ক্রিপ্ট এবং লুপ সহ একটি জটিল ETL পাইপলাইন পরিচালনা করার পরিবর্তে, আপনি একটি একক SQL কমান্ড ব্যবহার করে ডাটাবেসের মধ্যে স্থানীয়ভাবে এম্বেডিং জেনারেশন পরিচালনা করতে AlloyDB AI ব্যবহার করেছেন।

আমরা কী কভার করেছি

  • আমরা ডেটা প্রক্রিয়াকরণের জন্য "পাইথন ফর-লুপ" বন্ধ করে দিয়েছি।
  • আমরা একটি SQL কমান্ড দিয়ে ৫০,০০০ ভেক্টর তৈরি করেছি।
  • আমরা ট্রিগার ব্যবহার করে ভবিষ্যতের ভেক্টর জেনারেশন স্বয়ংক্রিয় করেছি।
  • আমরা হাইব্রিড সার্চ করেছি।

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