شروع با جستجوی برداری آچار

1. معرفی

Spanner یک سرویس پایگاه داده کاملاً مدیریت شده با مقیاس افقی، توزیع شده در سطح جهانی است که برای بارهای کاری عملیاتی رابطه ای و غیر رابطه ای عالی است.

با انتشار عملکرد دقیق K-nearest همسایه ، Spanner اکنون همچنین یک پایگاه داده برداری بسیار مقیاس‌پذیر است که به شما امکان می‌دهد شباهت یا جستجوی معنایی را انجام دهید و تولید افزوده بازیابی (RAG) را در برنامه‌های GenAI در مقیاس پیاده‌سازی کنید. پرس‌وجوهای جستجوی برداری Spanner به محض انجام تراکنش‌ها، داده‌های بی‌درنگ تازه را برمی‌گردانند، درست مانند هر پرس و جوی دیگری در داده‌های عملیاتی شما.

در این آزمایشگاه، راه‌اندازی ویژگی‌های اساسی مورد نیاز برای استفاده از Spanner برای انجام جستجوی برداری، و دسترسی به مدل‌های جاسازی و LLM از باغ مدل VertexAI با استفاده از SQL را بررسی خواهید کرد.

معماری به این صورت خواهد بود:

d179a760add7adc0.png

چیزی که خواهی ساخت

به عنوان بخشی از این آزمایشگاه، شما:

  • یک نمونه Spanner ایجاد کنید
  • طرحواره پایگاه داده Spanner را برای ادغام با مدل های embedding و LLM در VertexAI تنظیم کنید
  • یک مجموعه داده خرده فروشی را بارگیری کنید
  • پرس و جوهای جستجوی شباهت را در برابر مجموعه داده صادر کنید
  • زمینه را برای مدل LLM برای ایجاد توصیه های خاص محصول فراهم کنید.

چیزی که یاد خواهید گرفت

  • نحوه راه اندازی یک نمونه Spanner
  • نحوه ادغام با VertexAI
  • نحوه استفاده از Spanner برای انجام جستجوی برداری برای یافتن موارد مشابه در مجموعه داده خرده فروشی

آنچه شما نیاز دارید

  • یک پروژه Google Cloud که به یک حساب صورت‌حساب متصل است.
  • یک مرورگر وب، مانند کروم یا فایرفاکس .

2. راه اندازی و الزامات

یک پروژه ایجاد کنید

اگر قبلاً یک حساب Google (Gmail یا Google Apps) ندارید، باید یک حساب ایجاد کنید . به کنسول Google Cloud Platform ( consol.cloud.google.com ) وارد شوید و یک پروژه جدید ایجاد کنید.

اگر قبلاً پروژه ای دارید، روی منوی کشویی انتخاب پروژه در سمت چپ بالای کنسول کلیک کنید:

6c9406d9b014760.png

و روی دکمه "پروژه جدید" در گفتگوی حاصل کلیک کنید تا یک پروژه جدید ایجاد کنید:

949d83c8a4ee17d9.png

اگر قبلاً پروژه ای ندارید، باید یک دیالوگ مانند این را ببینید تا اولین پروژه خود را ایجاد کنید:

870a3cbd6541ee86.png

گفتگوی بعدی ایجاد پروژه به شما امکان می دهد جزئیات پروژه جدید خود را وارد کنید:

6a92c57d3250a4b3.png

شناسه پروژه را به خاطر بسپارید، که یک نام منحصر به فرد در تمام پروژه های Google Cloud است (نام بالا قبلاً گرفته شده است و برای شما کار نخواهد کرد، متأسفیم!). بعداً در این آزمایشگاه کد به عنوان PROJECT_ID نامیده خواهد شد.

در مرحله بعد، اگر قبلاً این کار را انجام نداده‌اید، برای استفاده از منابع Google Cloud و فعال کردن Spanner API، باید صورت‌حساب را در Developers Console فعال کنید .

15d0ef27a8fbab27.png

گذراندن این کد نباید بیش از چند دلار هزینه داشته باشد، اما اگر تصمیم به استفاده از منابع بیشتری داشته باشید یا آنها را در حال اجرا رها کنید، ممکن است بیشتر باشد (به بخش "پاکسازی" در انتهای این سند مراجعه کنید). قیمت Google Cloud Spanner در اینجا مستند شده است.

کاربران جدید Google Cloud Platform واجد شرایط استفاده آزمایشی رایگان 300 دلاری هستند که باید این نرم افزار کد را کاملاً رایگان کند.

Google Cloud Shell Setup

در حالی که Google Cloud و Spanner را می‌توان از راه دور از لپ‌تاپ شما کار کرد، در این نرم‌افزار از Google Cloud Shell استفاده می‌کنیم، یک محیط خط فرمان که در Cloud اجرا می‌شود.

این ماشین مجازی مبتنی بر دبیان با تمام ابزارهای توسعه که شما نیاز دارید بارگذاری شده است. این دایرکتوری اصلی 5 گیگابایتی دائمی را ارائه می دهد و در Google Cloud اجرا می شود و عملکرد شبکه و احراز هویت را بسیار افزایش می دهد. این بدان معنی است که تمام چیزی که برای این کد لبه نیاز دارید یک مرورگر است (بله، روی کروم بوک کار می کند).

  1. برای فعال کردن Cloud Shell از Cloud Console، کافی است روی Activate Cloud Shell کلیک کنید. gcLMt5IuEcJJNnMId-Bcz3sxCd0rZn7IzT_r95C8UZeqML68Y1efBG_B0VRp7hc7qiZTLAF-TXD7SsOadxn8uadgHhaLeASnVS3ZHK_OgjogdOgdOg3ZHK39gdOg 2A (تهیه و اتصال به محیط فقط چند لحظه طول می کشد).

JjEuRXGg0AYYIY6QZ8d-66gx_Mtc-_jDE9ijmbXLJSAXFvJt-qUpNtsBsYjNpv2W6BQSrDc1D-ARINNQ-1EkwUhz-iUK-FUCZhJ-NtjkWkWE2C w

Screen Shot 2017-06-14 at 10.13.43 PM.png

پس از اتصال به Cloud Shell، باید ببینید که قبلاً احراز هویت شده اید و پروژه قبلاً روی 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 خود هستید؟ بررسی کنید از چه شناسه ای در مراحل راه اندازی استفاده کرده اید یا آن را در داشبورد Cloud Console جستجو کنید:

158fNPfwSxsFqz9YbtJVZes8viTS3d1bV4CVhij3XPxuzVFOtTObnwsphlm6lYGmgdMFwBJtc-FaLrZU7XHAg_ZYoCrgombMRR3h-eolLPcvOZwZw51

Cloud Shell همچنین برخی از متغیرهای محیطی را به صورت پیش‌فرض تنظیم می‌کند که ممکن است هنگام اجرای دستورات آینده مفید باشند.

echo $GOOGLE_CLOUD_PROJECT

خروجی فرمان

<PROJECT_ID>

Spanner API را فعال کنید

gcloud services enable spanner.googleapis.com

خلاصه

در این مرحله اگر قبلاً یکی نداشتید، پروژه خود را تنظیم کرده اید، پوسته ابری را فعال کرده اید و API های مورد نیاز را فعال کرده اید.

بعدی

در مرحله بعد، نمونه و پایگاه داده Spanner را تنظیم خواهید کرد.

3. یک نمونه و پایگاه داده Spanner ایجاد کنید

نمونه Spanner را ایجاد کنید

در این مرحله ما نمونه Spanner خود را برای Codelab راه اندازی کردیم. برای انجام این کار، Cloud Shell را باز کنید و این دستور را اجرا کنید:

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.  

پایگاه داده را ایجاد کنید

هنگامی که نمونه شما اجرا می شود، می توانید پایگاه داده را ایجاد کنید. Spanner اجازه می دهد تا چندین پایگاه داده در یک نمونه واحد وجود داشته باشد.

پایگاه داده جایی است که شما طرحواره خود را تعریف می کنید. شما همچنین می توانید کنترل کنید که چه کسی به پایگاه داده دسترسی دارد، رمزگذاری سفارشی را تنظیم کنید، بهینه ساز را پیکربندی کنید و دوره نگهداری را تنظیم کنید.

برای ایجاد پایگاه داده، دوباره از ابزار خط فرمان 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.

خلاصه

در این مرحله شما نمونه و پایگاه داده Spanner را ایجاد کرده اید.

بعدی

در مرحله بعد، طرح و داده های Spanner را تنظیم خواهید کرد.

4. طرحواره و داده های سنج را بارگذاری کنید

طرح سنج را ایجاد کنید

برای تنظیم طرحواره، به Spanner Studio بروید:

3e1a0fed928b33cf.png

طرحواره دو بخش دارد. ابتدا می خواهید جدول products را اضافه کنید. این عبارت را در تب خالی کپی و پیست کنید.

برای طرح، این DDL را کپی و در کادر قرار دهید:

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

سپس روی دکمه run کلیک کنید و چند ثانیه صبر کنید تا طرح شما ساخته شود.

در مرحله بعد، شما دو مدل را ایجاد کرده و آنها را در نقاط انتهایی مدل VertexAI پیکربندی خواهید کرد.

مدل اول یک مدل Embedding است که برای تولید جاسازی ها از متن استفاده می شود و مدل دوم یک مدل LLM است که برای تولید پاسخ ها بر اساس داده های Spanner استفاده می شود.

طرح زیر را در یک برگه جدید در Spanner Studio قرار دهید:

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

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/text-bison@001',
default_batch_size = 1
);

سپس روی دکمه run کلیک کنید و چند ثانیه صبر کنید تا مدل های شما ساخته شوند.

در قسمت سمت چپ Spanner Studio باید جداول و مدل های زیر را مشاهده کنید:

62455aa4b0e839d9.png

داده ها را بارگذاری کنید

اکنون، می خواهید برخی از محصولات را در پایگاه داده خود وارد کنید. یک برگه جدید در Spanner Studio باز کنید، سپس عبارت های درج زیر را کپی و جایگذاری کنید:

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 بارگذاری کردید.

بعدی

در مرحله بعد، شما با مدل Embedding ادغام می‌شوید تا تعبیه‌هایی برای توضیحات محصول ایجاد کنید، و همچنین درخواست جستجوی متنی را به یک جاسازی برای جستجوی محصولات مرتبط تبدیل کنید.

5. با جاسازی ها کار کنید

جاسازی های برداری را برای توضیحات محصول ایجاد کنید

برای اینکه جستجوی شباهت روی محصولات کار کند، باید تعبیه‌هایی را برای توضیحات محصول ایجاد کنید.

با EmbeddingsModel ایجاد شده در طرحواره، این یک عبارت ساده UPDATE DML است.

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 ).

خلاصه

در این مرحله، تعبیه‌های توصیف محصول و جاسازی درخواست جستجو با استفاده از SQL ایجاد کردید، و از ادغام Spanner با مدل‌ها در VertexAI استفاده کردید. شما همچنین یک جستجوی برداری انجام دادید تا محصولات مشابهی را پیدا کنید که با درخواست جستجو مطابقت دارند.

مراحل بعدی

در مرحله بعد، بیایید از نتایج جستجو برای تغذیه به یک LLM برای ایجاد یک پاسخ سفارشی برای هر محصول استفاده کنیم.

6. با یک LLM کار کنید

Spanner ادغام با مدل های LLM ارائه شده از VertexAI را آسان می کند. این به توسعه دهندگان اجازه می دهد تا از SQL برای ارتباط مستقیم با LLM ها استفاده کنند، نه اینکه برنامه را ملزم به اجرای منطق کنند.

به عنوان مثال، ما نتایج پرس و جو قبلی 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

محصول اول به دلیل محدوده سنی در توضیحات محصول (2 تا 4 سال) برای کودکان 3 ساله مناسب است. محصولات دیگر مناسب نیستند.

خلاصه

مراحل بعدی

بعد، زمان تمیز کردن است!

7. تمیز کردن (اختیاری)

برای پاکسازی، کافی است به بخش Cloud Spanner در Cloud Console بروید و نمونه « retail-demo » را که در کد لبه ایجاد کردیم حذف کنید.

41cbc1a84b3588d5.png

8. تبریک می گویم!

تبریک می‌گوییم، شما با موفقیت جستجوی مشابهی را با استفاده از جستجوی برداری داخلی Spanner انجام دادید. علاوه بر این، دیدید که کار با مدل‌های embedding و LLM برای ارائه قابلیت‌های هوش مصنوعی مستقیماً با استفاده از SQL چقدر آسان است.

بعدش چی؟

درباره ویژگی دقیق نزدیکترین همسایه Spanner (جستجوی برداری KNN) در اینجا بیشتر بیاموزید: https://cloud.google.com/spanner/docs/find-k-nearest-neighbors

همچنین می‌توانید درباره نحوه انجام پیش‌بینی‌های آنلاین با SQL با استفاده از ادغام VertexAI Spanner در اینجا بیشتر بخوانید: https://cloud.google.com/spanner/docs/ml