স্প্যানার ভেক্টর অনুসন্ধানের সাথে শুরু করা

1. ভূমিকা

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

স্প্যানারে অন্তর্নির্মিত ভেক্টর অনুসন্ধান সমর্থন রয়েছে, যা আপনাকে সাদৃশ্য বা শব্দার্থিক অনুসন্ধান সম্পাদন করতে এবং GenAI অ্যাপ্লিকেশনগুলিতে পুনরুদ্ধার অগমেন্টেড জেনারেশন (RAG) প্রয়োগ করতে সক্ষম করে, হয় সঠিক K- নিকটতম প্রতিবেশী (KNN) বা আনুমানিক নিকটতম প্রতিবেশী (ANN) বৈশিষ্ট্যগুলি ব্যবহার করে।

স্প্যানারের ভেক্টর অনুসন্ধানের প্রশ্নগুলি লেনদেন করার সাথে সাথেই নতুন রিয়েল-টাইম ডেটা ফেরত দেয়, ঠিক আপনার অপারেশনাল ডেটাতে অন্য যেকোনো প্রশ্নের মতো।

এই ল্যাবে, আপনি ভেক্টর অনুসন্ধান সঞ্চালনের জন্য স্প্যানারকে লিভারেজ করার জন্য প্রয়োজনীয় মৌলিক বৈশিষ্ট্যগুলি সেট আপ করতে এবং SQL ব্যবহার করে VertexAI-এর মডেল গার্ডেন থেকে এমবেডিং এবং LLM মডেলগুলি অ্যাক্সেস করতে পারবেন৷

স্থাপত্য এই মত দেখতে হবে:

d179a760add7adc0.png

সেই ফাউন্ডেশনের সাহায্যে, আপনি শিখবেন কিভাবে ScaNN অ্যালগরিদম দ্বারা সমর্থিত একটি ভেক্টর সূচক তৈরি করতে হয়, এবং যখন আপনার শব্দার্থিক কাজের চাপ স্কেল করার প্রয়োজন হয় তখন APPROX দূরত্ব ফাংশনগুলি ব্যবহার করুন৷

আপনি কি নির্মাণ করবেন

এই ল্যাবের অংশ হিসাবে, আপনি করবেন:

  • একটি স্প্যানার উদাহরণ তৈরি করুন
  • VertexAI-তে এমবেডিং এবং LLM মডেলগুলির সাথে একীভূত করতে স্প্যানারের ডাটাবেস স্কিমা সেট আপ করুন
  • একটি খুচরা ডেটা সেট লোড করুন
  • ডেটাসেটের বিরুদ্ধে সাদৃশ্য অনুসন্ধান প্রশ্নগুলি ইস্যু করুন৷
  • পণ্য-নির্দিষ্ট সুপারিশ তৈরি করতে LLM মডেলের প্রসঙ্গ প্রদান করুন।
  • স্কিমা পরিবর্তন করুন এবং একটি ভেক্টর সূচক তৈরি করুন।
  • নতুন তৈরি ভেক্টর সূচকের সুবিধা নিতে প্রশ্নগুলি পরিবর্তন করুন।

আপনি কি শিখবেন

  • কিভাবে একটি স্প্যানার উদাহরণ সেটআপ করবেন
  • VertexAI এর সাথে কিভাবে একীভূত করা যায়
  • খুচরা ডেটাসেটে অনুরূপ আইটেমগুলি খুঁজে পেতে ভেক্টর অনুসন্ধান সম্পাদন করতে কীভাবে স্প্যানার ব্যবহার করবেন
  • ANN সার্চ ব্যবহার করে ভেক্টর সার্চ ওয়ার্কলোড স্কেল করার জন্য কিভাবে আপনার ডাটাবেস প্রস্তুত করবেন।

আপনি কি প্রয়োজন হবে

  • একটি Google ক্লাউড প্রকল্প যা একটি বিলিং অ্যাকাউন্টের সাথে সংযুক্ত৷
  • একটি ওয়েব ব্রাউজার, যেমন ক্রোম বা ফায়ারফক্স

2. সেটআপ এবং প্রয়োজনীয়তা

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

আপনার যদি ইতিমধ্যে একটি Google অ্যাকাউন্ট না থাকে (Gmail বা Google Apps), তাহলে আপনাকে অবশ্যই একটি তৈরি করতে হবে। Google ক্লাউড প্ল্যাটফর্ম কনসোলে সাইন-ইন করুন ( console.cloud.google.com ) এবং একটি নতুন প্রকল্প তৈরি করুন৷

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

6c9406d9b014760.png

এবং একটি নতুন প্রকল্প তৈরি করতে ফলাফল ডায়ালগে 'নতুন প্রকল্প' বোতামে ক্লিক করুন:

949d83c8a4ee17d9.png

আপনার যদি ইতিমধ্যে একটি প্রকল্প না থাকে, তাহলে আপনার প্রথমটি তৈরি করতে আপনাকে এই মত একটি ডায়ালগ দেখতে হবে:

870a3cbd6541ee86.png

পরবর্তী প্রকল্প তৈরির ডায়ালগ আপনাকে আপনার নতুন প্রকল্পের বিশদ বিবরণ প্রবেশ করতে দেয়:

6a92c57d3250a4b3.png

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

পরবর্তী, যদি আপনি ইতিমধ্যে এটি না করে থাকেন, তাহলে Google ক্লাউড সংস্থানগুলি ব্যবহার করতে এবং স্প্যানার API সক্ষম করার জন্য আপনাকে বিকাশকারী কনসোলে বিলিং সক্ষম করতে হবে৷

15d0ef27a8fbab27.png

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

Google ক্লাউড প্ল্যাটফর্মের নতুন ব্যবহারকারীরা $300 বিনামূল্যের ট্রায়ালের জন্য যোগ্য, যা এই কোডল্যাবটিকে সম্পূর্ণ বিনামূল্যে করতে হবে৷

গুগল ক্লাউড শেল সেটআপ

যদিও Google ক্লাউড এবং স্প্যানার আপনার ল্যাপটপ থেকে দূরবর্তীভাবে পরিচালিত হতে পারে, এই কোডল্যাবে আমরা Google ক্লাউড শেল ব্যবহার করব, ক্লাউডে চলমান একটি কমান্ড লাইন পরিবেশ।

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

  1. ক্লাউড কনসোল থেকে ক্লাউড শেল সক্রিয় করতে, কেবল ক্লাউড শেল সক্রিয় করুন ক্লিক করুন gcLMt5IuEcJJNnMId-Bcz3sxCd0rZn7IzT_r95C8UZeqML68Y1efBG_B0VRp7hc7qiZTLAF-TXD7SsOadxn8uadgHhaLeASnVS3ZHKLJXOgOg39g ddS2A (পরিবেশের সাথে সংযোগ স্থাপন এবং সংযোগের জন্য এটি শুধুমাত্র কয়েক মুহূর্ত নিতে হবে)।

JjEuRXGg0AYYIY6QZ8d-66gx_Mtc-_jDE9ijmbXLJSAXFvJt-qUpNtsBsYjNpv2W6BQSrDc1D-ARINNQ-1EkwUhz-iUK-FUCZhJ-NtjvDu64GoM8 Rw

স্ক্রীন শট 2017-06-14 10.13.43 PM.png এ

একবার ক্লাউড শেলের সাথে সংযুক্ত হয়ে গেলে, আপনি দেখতে পাবেন যে আপনি ইতিমধ্যেই প্রমাণীকৃত এবং প্রকল্পটি ইতিমধ্যেই আপনার PROJECT_ID-তে সেট করা আছে৷

gcloud auth list

কমান্ড আউটপুট

Credentialed accounts:
 - <myaccount>@<mydomain>.com (active)
gcloud config list project

কমান্ড আউটপুট

[core]
project = <PROJECT_ID>

যদি, কোন কারণে, প্রকল্পটি সেট করা না হয়, কেবল নিম্নলিখিত কমান্ডটি জারি করুন:

gcloud config set project <PROJECT_ID>

আপনার PROJECT_ID খুঁজছেন? সেটআপ ধাপে আপনি কোন আইডি ব্যবহার করেছেন তা দেখুন বা ক্লাউড কনসোল ড্যাশবোর্ডে দেখুন:

158fNPfwSxsFqz9YbtJVZes8viTS3d1bV4CVhij3XPxuzVFOtTObnwsphlm6lYGmgdMFwBJtc-FaLrZU7XHAg_ZYoCrgombMRR3h-eolLPcvOBziBc35650

ক্লাউড শেল ডিফল্টরূপে কিছু এনভায়রনমেন্ট ভেরিয়েবলও সেট করে, যা আপনার ভবিষ্যত কমান্ড চালানোর সময় কার্যকর হতে পারে।

echo $GOOGLE_CLOUD_PROJECT

কমান্ড আউটপুট

<PROJECT_ID>

স্প্যানার API সক্ষম করুন

gcloud services enable spanner.googleapis.com

সারাংশ

এই ধাপে আপনি আপনার প্রজেক্ট সেট আপ করেছেন যদি আপনার কাছে ইতিমধ্যে একটি না থাকে, সক্রিয় ক্লাউড শেল, এবং প্রয়োজনীয় API গুলি সক্রিয় করা থাকে।

পরবর্তী আপ

এর পরে, আপনি স্প্যানার ইনস্ট্যান্স এবং ডাটাবেস সেট আপ করবেন।

3. একটি স্প্যানার ইনস্ট্যান্স এবং ডাটাবেস তৈরি করুন

স্প্যানার উদাহরণ তৈরি করুন

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

export SPANNER_INSTANCE_ID=retail-demo
gcloud spanner instances create $SPANNER_INSTANCE_ID \
--config=regional-us-central1 \
--description="spanner AI retail demo" \
--nodes=1

কমান্ড আউটপুট:

$ gcloud spanner instances create $SPANNER_INSTANCE_ID \
--config=regional-us-central1 \
--description="spanner AI retail demo" \
--nodes=1
Creating instance...done.  

ডাটাবেস তৈরি করুন

একবার আপনার দৃষ্টান্ত চালু হলে, আপনি ডাটাবেস তৈরি করতে পারেন। স্প্যানার একটি একক উদাহরণে একাধিক ডাটাবেসের জন্য অনুমতি দেয়।

ডাটাবেস হল যেখানে আপনি আপনার স্কিমা সংজ্ঞায়িত করেন। আপনি ডাটাবেসে কার অ্যাক্সেস আছে তা নিয়ন্ত্রণ করতে পারেন, কাস্টম এনক্রিপশন সেট আপ করতে পারেন, অপ্টিমাইজার কনফিগার করতে পারেন এবং ধরে রাখার সময়কাল সেট করতে পারেন।

ডাটাবেস তৈরি করতে, আবার gcloud কমান্ড লাইন টুল ব্যবহার করুন:

export SPANNER_DATABASE=cymbal-bikes
gcloud spanner databases create $SPANNER_DATABASE \
 --instance=$SPANNER_INSTANCE_ID

কমান্ড আউটপুট:

$ gcloud spanner databases create $SPANNER_DATABASE \
 --instance=$SPANNER_INSTANCE_ID
Creating database...done.

সারাংশ

এই ধাপে আপনি স্প্যানার ইনস্ট্যান্স এবং ডাটাবেস তৈরি করেছেন।

পরবর্তী আপ

এর পরে, আপনি স্প্যানার স্কিমা এবং ডেটা সেট আপ করবেন।

4. সিম্বল স্কিমা এবং ডেটা লোড করুন

সিম্বল স্কিমা তৈরি করুন

স্কিমা সেট আপ করতে, স্প্যানার স্টুডিওতে নেভিগেট করুন:

3e1a0fed928b33cf.png

স্কিমার দুটি অংশ আছে। প্রথমত, আপনি products টেবিল যোগ করতে চান. খালি ট্যাবে এই বিবৃতিটি অনুলিপি করুন এবং আটকান।

স্কিমার জন্য, এই ডিডিএলটি বক্সে কপি করে পেস্ট করুন:

CREATE TABLE products (
categoryId INT64 NOT NULL,
productId INT64 NOT NULL,
productName STRING(MAX) NOT NULL,
productDescription STRING(MAX) NOT NULL,
productDescriptionEmbedding ARRAY<FLOAT32>,
createTime TIMESTAMP NOT NULL OPTIONS (
allow_commit_timestamp = true
),
inventoryCount INT64 NOT NULL,
priceInCents INT64,
) PRIMARY KEY(categoryId, productId);

তারপর, run বোতামে ক্লিক করুন এবং আপনার স্কিমা তৈরি হওয়ার জন্য কয়েক সেকেন্ড অপেক্ষা করুন।

এরপরে, আপনি দুটি মডেল তৈরি করবেন এবং সেগুলোকে VertexAI মডেলের শেষ পয়েন্টে কনফিগার করবেন।

প্রথম মডেলটি একটি এমবেডিং মডেল যা পাঠ্য থেকে এম্বেডিং তৈরি করতে ব্যবহৃত হয় এবং দ্বিতীয়টি একটি এলএলএম মডেল যা স্প্যানারের ডেটার উপর ভিত্তি করে প্রতিক্রিয়া তৈরি করতে ব্যবহৃত হয়।

স্প্যানার স্টুডিওতে একটি নতুন ট্যাবে নিম্নলিখিত স্কিমা পেস্ট করুন:

CREATE MODEL EmbeddingsModel INPUT(
content STRING(MAX),
) OUTPUT(
embeddings STRUCT<statistics STRUCT<truncated BOOL, token_count FLOAT32>, values ARRAY<FLOAT32>>,
) REMOTE OPTIONS (
endpoint = '//aiplatform.googleapis.com/projects/<PROJECT_ID>/locations/us-central1/publishers/google/models/text-embedding-004'
);


CREATE MODEL LLMModel INPUT(
prompt STRING(MAX),
) OUTPUT(
content STRING(MAX),
) REMOTE OPTIONS (
endpoint = '//aiplatform.googleapis.com/projects/<PROJECT_ID>/locations/us-central1/publishers/google/models/gemini-pro',
default_batch_size = 1
);

তারপর, run বোতামে ক্লিক করুন এবং আপনার মডেল তৈরি হওয়ার জন্য কয়েক সেকেন্ড অপেক্ষা করুন।

স্প্যানার স্টুডিওর বাম ফলকে আপনাকে নিম্নলিখিত টেবিল এবং মডেলগুলি দেখতে হবে:

62455aa4b0e839d9.png

ডেটা লোড করুন

এখন, আপনি আপনার ডাটাবেসে কিছু পণ্য সন্নিবেশ করতে চাইবেন। স্প্যানার স্টুডিওতে একটি নতুন ট্যাব খুলুন, তারপরে নিম্নলিখিত সন্নিবেশ বিবৃতিগুলি অনুলিপি করুন এবং আটকান:

INSERT INTO products (categoryId, productId, productName, productDescription, createTime, inventoryCount, priceInCents)
VALUES (1, 1, "Cymbal Helios Helmet", "Safety meets style with the Cymbal children's bike helmet. Its lightweight design, superior ventilation, and adjustable fit ensure comfort and protection on every ride. Stay bright and keep your child safe under the sun with Cymbal Helios!", PENDING_COMMIT_TIMESTAMP(), 100, 10999),
(1, 2, "Cymbal Sprout", "Let their cycling journey begin with the Cymbal Sprout, the ideal balance bike for beginning riders ages 2-4 years. Its lightweight frame, low seat height, and puncture-proof tires promote stability and confidence as little ones learn to balance and steer. Watch them sprout into cycling enthusiasts with Cymbal Sprout!", PENDING_COMMIT_TIMESTAMP(), 10, 13999),
(1, 3, "Cymbal Spark Jr.", "Light, vibrant, and ready for adventure, the Spark Jr. is the perfect first bike for young riders (ages 5-8). Its sturdy frame, easy-to-use brakes, and puncture-resistant tires inspire confidence and endless playtime. Let the spark of cycling ignite with Cymbal!", PENDING_COMMIT_TIMESTAMP(), 34, 13900),
(1, 4, "Cymbal Summit", "Conquering trails is a breeze with the Summit mountain bike. Its lightweight aluminum frame, responsive suspension, and powerful disc brakes provide exceptional control and comfort for experienced bikers navigating rocky climbs or shredding downhill. Reach new heights with Cymbal Summit!", PENDING_COMMIT_TIMESTAMP(), 0, 79999),
(1, 5, "Cymbal Breeze", "Cruise in style and embrace effortless pedaling with the Breeze electric bike. Its whisper-quiet motor and long-lasting battery let you conquer hills and distances with ease. Enjoy scenic rides, commutes, or errands with a boost of confidence from Cymbal Breeze!", PENDING_COMMIT_TIMESTAMP(), 72, 129999),
(1, 6, "Cymbal Trailblazer Backpack", "Carry all your essentials in style with the Trailblazer backpack. Its water-resistant material, multiple compartments, and comfortable straps keep your gear organized and accessible, allowing you to focus on the adventure. Blaze new trails with Cymbal Trailblazer!", PENDING_COMMIT_TIMESTAMP(), 24, 7999),
(1, 7, "Cymbal Phoenix Lights", "See and be seen with the Phoenix bike lights. Powerful LEDs and multiple light modes ensure superior visibility, enhancing your safety and enjoyment during day or night rides. Light up your journey with Cymbal Phoenix!", PENDING_COMMIT_TIMESTAMP(), 87, 3999),
(1, 8, "Cymbal Windstar Pump", "Flat tires are no match for the Windstar pump. Its compact design, lightweight construction, and high-pressure capacity make inflating tires quick and effortless. Get back on the road in no time with Cymbal Windstar!", PENDING_COMMIT_TIMESTAMP(), 36, 24999),
(1, 9,"Cymbal Odyssey Multi-Tool","Be prepared for anything with the Odyssey multi-tool. This handy gadget features essential tools like screwdrivers, hex wrenches, and tire levers, keeping you ready for minor repairs and adjustments on the go. Conquer your journey with Cymbal Odyssey!", PENDING_COMMIT_TIMESTAMP(), 52, 999),
(1, 10,"Cymbal Nomad Water Bottle","Stay hydrated on every ride with the Nomad water bottle. Its sleek design, BPA-free construction, and secure lock lid make it the perfect companion for staying refreshed and motivated throughout your adventures. Hydrate and explore with Cymbal Nomad!", PENDING_COMMIT_TIMESTAMP(), 42, 1299);

ডেটা সন্নিবেশ করতে run বোতামে ক্লিক করুন।

সারাংশ

এই ধাপে আপনি স্কিমা তৈরি করেছেন এবং cymbal-bikes ডাটাবেসে কিছু মৌলিক ডেটা লোড করেছেন।

পরবর্তী আপ

এর পরে, আপনি পণ্যের বিবরণের জন্য এমবেডিং তৈরি করতে এমবেডিং মডেলের সাথে একীভূত হবেন, সেইসাথে প্রাসঙ্গিক পণ্যগুলির জন্য অনুসন্ধান করার জন্য একটি পাঠ্য অনুসন্ধান অনুরোধকে একটি এমবেডিংয়ে রূপান্তর করবেন৷

5. এম্বেডিংয়ের সাথে কাজ করুন

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

পণ্যগুলিতে কাজ করার জন্য মিল অনুসন্ধানের জন্য, আপনাকে পণ্যের বিবরণের জন্য এম্বেডিং তৈরি করতে হবে।

স্কিমাতে তৈরি EmbeddingsModel সাথে, এটি একটি সাধারণ UPDATE ডিএমএল বিবৃতি।

UPDATE products p1
SET productDescriptionEmbedding =
(SELECT embeddings.values from ML.PREDICT(MODEL EmbeddingsModel,
(SELECT productDescription as content FROM products p2 where p2.productId=p1.productId)))
WHERE categoryId=1;

পণ্যের বিবরণ আপডেট করতে run বোতামে ক্লিক করুন।

এই উদাহরণে, আপনি একটি SQL কোয়েরির মাধ্যমে একটি প্রাকৃতিক ভাষা অনুসন্ধান অনুরোধ প্রদান করবেন। এই ক্যোয়ারীটি অনুসন্ধানের অনুরোধটিকে একটি এম্বেডিং-এ পরিণত করবে, তারপর পূর্ববর্তী ধাপে তৈরি করা পণ্যের বিবরণের সঞ্চিত এমবেডিংয়ের উপর ভিত্তি করে অনুরূপ ফলাফল অনুসন্ধান করবে।

-- Use Spanner's vector search, and integration with embedding and LLM models to
-- return items that are semantically relevant and available in inventory based on
-- real-time data.


SELECT productName, productDescription, inventoryCount, COSINE_DISTANCE(
productDescriptionEmbedding,
(   SELECT embeddings.values
FROM ML.PREDICT(
MODEL EmbeddingsModel,
(SELECT "I'd like to buy a starter bike for my 3 year old child" as content)
)
)
) as distance
FROM products
WHERE inventoryCount > 0
ORDER BY distance
LIMIT 5;

অনুরূপ পণ্য খুঁজতে run বোতামে ক্লিক করুন. ফলাফল এই মত হওয়া উচিত:

672e111753077fcf.png

লক্ষ্য করুন যে ক্যোয়ারীতে অতিরিক্ত ফিল্টার ব্যবহার করা হয়েছে, যেমন শুধুমাত্র স্টকে থাকা পণ্যগুলিতে আগ্রহী হওয়া ( inventoryCount > 0 )।

সারাংশ

এই ধাপে, আপনি VertexAI-তে মডেলগুলির সাথে Spanner-এর ইন্টিগ্রেশনকে কাজে লাগিয়ে SQL ব্যবহার করে পণ্যের বিবরণ এম্বেডিং এবং একটি অনুসন্ধান অনুরোধ এমবেডিং তৈরি করেছেন। আপনি অনুসন্ধান অনুরোধের সাথে মেলে এমন অনুরূপ পণ্যগুলি খুঁজে পেতে একটি ভেক্টর অনুসন্ধানও করেছেন৷

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

এর পরে, প্রতিটি পণ্যের জন্য একটি কাস্টম প্রতিক্রিয়া তৈরি করতে একটি LLM-এ ফিড করার জন্য অনুসন্ধান ফলাফলগুলি ব্যবহার করা যাক৷

6. একটি LLM সঙ্গে কাজ

স্প্যানার VertexAI থেকে পরিবেশিত LLM মডেলগুলির সাথে একীভূত করা সহজ করে তোলে। এটি ডেভেলপারদের LLM-এর সাথে সরাসরি ইন্টারফেস করার জন্য SQL ব্যবহার করার অনুমতি দেয়, বরং অ্যাপ্লিকেশানটিকে যুক্তি সম্পাদন করার প্রয়োজন হয়।

উদাহরণস্বরূপ, আমাদের কাছে ব্যবহারকারীর পূর্ববর্তী SQL কোয়েরির ফলাফল রয়েছে "I'd like to buy a starter bike for my 3 year old child".

বিকাশকারী নিম্নলিখিত প্রম্পট ব্যবহার করে পণ্যটি ব্যবহারকারীর জন্য উপযুক্ত কিনা তা প্রতিটি ফলাফলের জন্য একটি প্রতিক্রিয়া প্রদান করতে চান:

"Answer with 'Yes' or 'No' and explain why: Is this a good fit for me? I'd like to buy a starter bike for my 3 year old child"

এখানে আপনি ব্যবহার করতে পারেন প্রশ্ন:

-- Use an LLM to analyze this list and provide a recommendation on whether each
-- product is a good fit for the user. We use the vector search and real time
-- inventory data to first filter the products to reduce the size of the prompt to
-- the LLM.
SELECT productName, productDescription, inventoryCount, content AS LLMResponse
FROM ML.PREDICT(
MODEL LLMModel,
(   SELECT
inventoryCount,
productName,
productDescription,
CONCAT(
"Answer with ‘Yes' or ‘No' and explain why: Is this a good fit for me?",
"I'd like to buy a starter bike for my 3 year old child \n",
"Product Name: ", productName, "\n",
"Product Description:", productDescription) AS prompt,
FROM products
WHERE inventoryCount > 0
ORDER by COSINE_DISTANCE(
productDescriptionEmbedding,
(   SELECT embeddings.values
FROM ML.PREDICT(
MODEL EmbeddingsModel,
( SELECT "I'd like to buy a starter bike for my 3 year old child" as content)
)
)
) LIMIT 5
),
STRUCT(256 AS maxOutputTokens)
);

ক্যোয়ারী ইস্যু করতে run বোতামে ক্লিক করুন। ফলাফল এই মত হওয়া উচিত:

35878cd0f88f1470.png

প্রথম পণ্যটি একটি 3-বছর বয়সের জন্য উপযুক্ত কারণ পণ্যের বিবরণে বয়সের পরিসর (2-4 বছর বয়সী)। অন্যান্য পণ্য মহান মাপসই হয় না.

সারাংশ

এই ধাপে, আপনি ব্যবহারকারীর কাছ থেকে প্রম্পটের প্রাথমিক প্রতিক্রিয়া তৈরি করতে একটি LLM-এর সাথে কাজ করেছেন।

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

এর পরে, আসুন শিখি কিভাবে ভেক্টর অনুসন্ধানের জন্য ANN ব্যবহার করতে হয়।

7. স্কেলিং ভেক্টর অনুসন্ধান

পূর্ববর্তী ভেক্টর অনুসন্ধানের উদাহরণগুলি সঠিক-KNN ভেক্টর অনুসন্ধানের সুবিধা পেয়েছে। আপনি যখন আপনার স্প্যানার ডেটার খুব নির্দিষ্ট উপসেটগুলি জিজ্ঞাসা করতে সক্ষম হন তখন এটি দুর্দান্ত৷ এই ধরনের প্রশ্নগুলিকে উচ্চ-বিভাজনযোগ্য বলা হয়।

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

স্প্যানারে এটি করতে, আপনাকে দুটি জিনিস করতে হবে:

  • একটি ভেক্টর সূচক তৈরি করুন
  • APPROX দূরত্ব ফাংশন ব্যবহার করতে আপনার ক্যোয়ারী পরিবর্তন করুন।

ভেক্টর সূচক তৈরি করুন

এই ডেটাসেটে একটি ভেক্টর সূচক তৈরি করতে, প্রতিটি ভেক্টরের দৈর্ঘ্য সংজ্ঞায়িত করার জন্য আমাদের প্রথমে productDescriptionEmbeddings কলামটি পরিবর্তন করতে হবে। একটি কলামে ভেক্টর দৈর্ঘ্য যোগ করতে, আপনাকে অবশ্যই মূল কলামটি ফেলে দিতে হবে এবং এটি পুনরায় তৈরি করতে হবে।

ALTER TABLE `products` DROP COLUMN `productDescriptionEmbedding`;
ALTER TABLE
  `products` ADD COLUMN `productDescriptionEmbedding` ARRAY<FLOAT32>(vector_length=>768);

এরপরে, আপনি পূর্বে চালানো Generate Vector embedding ধাপ থেকে আবার এম্বেডিং তৈরি করুন।

UPDATE products p1
SET productDescriptionEmbedding =
(SELECT embeddings.values from ML.PREDICT(MODEL EmbeddingsModel,
(SELECT productDescription as content FROM products p2 where p2.productId=p1.productId)))
WHERE categoryId=1;

কলাম তৈরি হওয়ার পরে, সূচক তৈরি করুন:

CREATE VECTOR INDEX ProductDescriptionEmbeddingIndex
    ON products(productDescriptionEmbedding)
    WHERE productDescriptionEmbedding IS NOT NULL
OPTIONS (
 distance_type = 'COSINE'
);

নতুন সূচক ব্যবহার করুন

নতুন ভেক্টর সূচক ব্যবহার করতে, আপনাকে পূর্ববর্তী এমবেডিং ক্যোয়ারীটি সামান্য পরিবর্তন করতে হবে।

এখানে মূল প্রশ্ন:

SELECT productName, productDescription, inventoryCount, COSINE_DISTANCE(
productDescriptionEmbedding,
(   SELECT embeddings.values
FROM ML.PREDICT(
MODEL EmbeddingsModel,
(SELECT "I'd like to buy a starter bike for my 3 year old child" as content)
)
)
) as distance
FROM products
WHERE inventoryCount > 0
ORDER BY distance
LIMIT 5;

আপনাকে নিম্নলিখিত পরিবর্তনগুলি করতে হবে:

  • নতুন ভেক্টর সূচকের জন্য একটি সূচক ইঙ্গিত ব্যবহার করুন: @{force_index=ProductDescriptionEmbeddingIndex}
  • COSINE_DISTANCE ফাংশন কল APPROX_COSINE_DISTANCE এ পরিবর্তন করুন। মনে রাখবেন নীচের চূড়ান্ত ক্যোয়ারীতে JSON বিকল্পগুলিও প্রয়োজনীয়।
  • ML.PREDICT ফাংশন থেকে আলাদাভাবে এমবেডিং তৈরি করুন।
  • চূড়ান্ত ক্যোয়ারীতে এমবেডিংয়ের ফলাফল কপি করুন।

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

-- Generate the prompt embeddings
SELECT embeddings.values
FROM ML.PREDICT(
  MODEL EmbeddingsModel,
   (SELECT "I'd like to buy a starter bike for my 3 year old child" as content)
  )
)

ক্যোয়ারী থেকে ফলাফল হাইলাইট করুন, এবং তাদের অনুলিপি.

1b43c5ae4ef9ab68.png

তারপর নিচের ক্যোয়ারীতে <VECTOR> প্রতিস্থাপন করুন আপনার কপি করা এমবেডিং পেস্ট করে।

-- Embedding query now using the vector index


SELECT productName, productDescription, inventoryCount, 
  APPROX_COSINE_DISTANCE(productDescriptionEmbedding, array<float32>[@VECTOR], options => JSON '{\"num_leaves_to_search\": 10}')
FROM products @{force_index=ProductDescriptionEmbeddingIndex}
WHERE productDescriptionEmbedding IS NOT NULL AND inventoryCount > 0
ORDER BY distance
LIMIT 5;

এটি এই মত কিছু দেখা উচিত:

12397107ec49c491.png

সারাংশ

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

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

পরবর্তী, এটা পরিষ্কার করার সময়!

8. পরিষ্কার করা (ঐচ্ছিক)

পরিষ্কার করতে, শুধু ক্লাউড কনসোলের ক্লাউড স্প্যানার বিভাগে যান এবং কোডল্যাবে আমরা তৈরি ' retail-demo ' উদাহরণটি মুছুন।

41cbc1a84b3588d5.png

9. অভিনন্দন!

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

অবশেষে, আপনি ভেক্টর সার্চ ওয়ার্কলোড স্কেল করার জন্য ScaNN অ্যালগরিদম দ্বারা সমর্থিত ANN অনুসন্ধান সম্পাদন করার প্রক্রিয়া শিখেছেন।

এরপর কি?

স্প্যানারের সঠিক নিকটতম প্রতিবেশী (KNN ভেক্টর অনুসন্ধান) বৈশিষ্ট্য সম্পর্কে এখানে আরও জানুন: https://cloud.google.com/spanner/docs/find-k-nearest-neighbors

স্প্যানারের আনুমানিক নিকটতম প্রতিবেশী (ANN ভেক্টর অনুসন্ধান) বৈশিষ্ট্য সম্পর্কে এখানে আরও জানুন: https://cloud.google.com/spanner/docs/find-approximate-nearest-neighbors

আপনি এখানে Spanner's VertexAI ইন্টিগ্রেশন ব্যবহার করে SQL এর সাথে অনলাইন ভবিষ্যদ্বাণীগুলি কীভাবে সম্পাদন করবেন সে সম্পর্কে আরও পড়তে পারেন: https://cloud.google.com/spanner/docs/ml