1. مقدمة
Spanner هي خدمة قواعد بيانات مُدارة بالكامل وقابلة للتطوّر أفقيًا وموزَّعة على مستوى العالم، وهي مثالية لأعباء العمل التشغيلية الارتباطية وغير العلائقية.
يوفّر Spanner إمكانية البحث عن المتجهات المدمجة، ما يتيح لك تنفيذ بحث دلالي أو التشابه وتنفيذ استرجاع البيانات (RAG) في تطبيقات الذكاء الاصطناعي التوليدي على نطاق واسع، مع الاستفادة إما من ميزات خوارزمية الجار الأقرب الدقيقة (KNN) أو الجار الأقرب (ANN).
تعرض طلبات البحث المتجهة في Spanner بيانات جديدة في الوقت الفعلي فور إتمام المعاملات، تمامًا كأي طلب بحث آخر على بياناتك التشغيلية.
وستتعرف في هذا التمرين المعملي على عملية إعداد الميزات الأساسية اللازمة للاستفادة من Spanner لإجراء بحث المتجه، والوصول إلى التضمين ونماذج النماذج اللغوية الكبيرة من حديقة نماذج VertexAI باستخدام SQL.
ستبدو البنية كما يلي:
باستخدام هذا الأساس، ستتعلّم كيفية إنشاء فهرس متّجه يدعمه خوارزمية ScaNN، كما ستتعرّف على كيفية استخدام دالات المسافة APPROX عندما تحتاج أعباء العمل الدلالية إلى توسيع نطاقها.
ما الذي ستقوم ببنائه
كجزء من هذا التمرين المعملي، سوف:
- إنشاء مثيل Spanner
- إعداد مخطط قاعدة بيانات Spanner للدمج مع نماذج التضمين والنماذج اللغوية الكبيرة في VertexAI
- تحميل مجموعة بيانات للبيع بالتجزئة
- إصدار طلبات بحث عن تشابه مع مجموعة البيانات
- توفير سياق لنموذج النموذج اللغوي الكبير لإنشاء اقتراحات خاصة بالمنتج
- قم بتعديل المخطط وإنشاء فهرس متجه.
- قم بتغيير الاستعلامات للاستفادة من فهرس المتجه الذي تم إنشاؤه حديثًا.
ما ستتعرَّف عليه
- كيفية إعداد مثيل Spanner
- كيفية الدمج مع VertexAI
- كيفية استخدام Spanner لإجراء بحث المتجه للعثور على عناصر مماثلة في مجموعة بيانات البيع بالتجزئة
- كيفية إعداد قاعدة البيانات لقياس أحمال عمل البحث المتجه باستخدام بحث ANN.
المتطلبات
2. الإعداد والمتطلبات
إنشاء مشروع
إذا لم يكن لديك حساب Google (Gmail أو Google Apps)، يجب عليك إنشاء حساب. سجِّل الدخول إلى وحدة تحكُّم Google Cloud Platform ( console.cloud.google.com) وأنشئ مشروعًا جديدًا.
إذا كان لديك مشروع بالفعل، فانقر فوق القائمة المنسدلة لاختيار المشروع في أعلى يسار وحدة التحكم:
وانقر على "مشروع جديد" في مربع الحوار الناتج لإنشاء مشروع جديد:
إذا لم يكن لديك مشروع، من المفترض أن يظهر لك مربع حوار مثل هذا لإنشاء مشروعك الأول:
يتيح لك مربع الحوار اللاحق لإنشاء المشروع إدخال تفاصيل مشروعك الجديد:
يُرجى تذكُّر رقم تعريف المشروع، وهو اسم فريد في جميع مشاريع Google Cloud (سبق أن تم استخدام الاسم أعلاه ولن يكون مناسبًا لك). ستتم الإشارة إليه لاحقًا في هذا الدرس التطبيقي حول الترميز باسم PROJECT_ID.
بعد ذلك، عليك تفعيل الفوترة في Developers Console لاستخدام موارد Google Cloud وتفعيل Spanner API إذا لم يسبق لك فعل ذلك.
لا ينبغي أن يكلفك هذا الدرس التطبيقي أكثر من بضعة دولارات، ولكن قد تزيد التكاليف إذا قررت استخدام المزيد من الموارد أو إذا تركتها قيد التشغيل (راجع قسم "التنظيف" في نهاية هذا المستند). يمكن الاطّلاع على أسعار خدمة Google Cloud Spanner هنا.
إنّ مستخدمي Google Cloud Platform الجدد مؤهّلون للاستفادة من فترة تجريبية مجانية بقيمة 300 دولار أمريكي، ما يجعل هذا الدرس التطبيقي حول الترميز بدون أي تكلفة.
إعداد Google Cloud Shell
يمكن إدارة Google Cloud وSpanner عن بُعد من الكمبيوتر المحمول، ولكن في هذا الدرس التطبيقي حول الترميز، سنستخدم Google Cloud Shell، وهي بيئة سطر أوامر يتم تشغيلها في السحابة الإلكترونية.
هذا الجهاز الافتراضي المستند إلى نظام دبيان محمل بكل أدوات التطوير التي ستحتاج إليها. وتوفّر هذه الشبكة دليلاً رئيسيًا دائمًا بسعة 5 غيغابايت ويتم تشغيله في Google Cloud، ما يحسّن بشكل كبير من أداء الشبكة والمصادقة. وهذا يعني أنّ كل ما ستحتاجه في هذا الدرس التطبيقي حول الترميز هو متصفّح (نعم، يعمل على جهاز Chromebook).
- لتفعيل Cloud Shell من Cloud Console، ما عليك سوى النقر على رمز تفعيل Cloud Shell (من المفترَض أن تستغرق عملية الإعداد والاتصال بالبيئة بضع دقائق فقط).
بعد الربط بـ 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:
تضبط Cloud Shell أيضًا بعض متغيرات البيئة تلقائيًا، وهو ما قد يكون مفيدًا عند تشغيل الأوامر المستقبلية.
echo $GOOGLE_CLOUD_PROJECT
مخرجات الأمر
<PROJECT_ID>
تفعيل واجهة برمجة تطبيقات Spanner
gcloud services enable spanner.googleapis.com
ملخّص
في هذه الخطوة، يتم إعداد مشروعك إذا لم يسبق لك إجراء ذلك، وتفعيل Cloud Shell وتفعيل واجهات برمجة التطبيقات المطلوبة.
التالي
بعد ذلك، ستقوم بإعداد مثيل Spanner وقاعدة البيانات.
3- إنشاء مثيل Spanner وقاعدة بيانات
إنشاء مثيل Spanner
في هذه الخطوة، يتم إعداد مثيل Spanner للدرس التطبيقي حول الترميز. ولإجراء ذلك، افتح 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. تحميل مخطط Cymbal وبياناته
إنشاء مخطط Cymbal
لإعداد المخطط، انتقِل إلى Spanner Studio:
هناك جزءان للمخطط. أولاً، تريد إضافة الجدول 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<FLOAT32>,
createTime TIMESTAMP NOT NULL OPTIONS (
allow_commit_timestamp = true
),
inventoryCount INT64 NOT NULL,
priceInCents INT64,
) PRIMARY KEY(categoryId, productId);
بعد ذلك، انقر على الزر run
وانتظر بضع ثوانٍ حتى يتم إنشاء المخطط.
بعد ذلك، عليك إنشاء النموذجَين وضبطهما على نقاط نهاية نموذج VertexAI.
النموذج الأول هو نموذج تضمين يُستخدَم لإنشاء تضمينات من النص، والنموذج الثاني هو نموذج لغوي كبير يُستخدَم لإنشاء ردود استنادًا إلى البيانات في Spanner.
الصق المخطط التالي في علامة تبويب جديدة في Spanner Studio:
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
وانتظِر بضع ثوانٍ حتى يتم إنشاء نماذجك.
في الجزء الأيمن من Spanner Studio، من المفترض أن تظهر لك الجداول والنماذج التالية:
تحميل البيانات
الآن، سترغب في إدراج بعض المنتجات في قاعدة البيانات الخاصة بك. افتح علامة تبويب جديدة في 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
".
التالي
الخطوة التالية هي التكامل مع نموذج التضمين لإنشاء تضمينات لأوصاف المنتجات وتحويل طلب بحث نصي إلى تضمين للبحث عن المنتجات ذات الصلة.
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
للعثور على منتجات مشابهة. يُفترض أن تظهر النتائج على النحو التالي:
تجدر الإشارة إلى أنّه يتم استخدام فلاتر إضافية في طلب البحث، مثل الاهتمام بالمنتجات المتوفّرة (inventoryCount > 0
) فقط.
ملخّص
في هذه الخطوة، أنشأت تضمينات لوصف المنتج وطلب بحث مضمّن باستخدام SQL، مع الاستفادة من تكامل Spanner مع النماذج في VertexAI. وأجريت أيضًا بحث متّجه للعثور على منتجات مشابهة تتطابق مع طلب البحث.
الخطوات التالية
بعد ذلك، لنستخدم نتائج البحث لإضافة نموذج لغوي كبير (LLM) لإنشاء ردّ مخصّص لكل منتج.
6- استخدام نموذج لغوي كبير (LLM)
تسهِّل Spanner الدمج مع نماذج النماذج اللغوية الكبيرة (LLM) التي يتم عرضها من خلال VertexAI. ويتيح ذلك للمطوّرين استخدام 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
لإصدار طلب البحث. من المفترض أن تظهر النتائج على النحو التالي:
المنتج الأول مناسب للأطفال بعمر 3 سنوات بسبب الفئة العمرية في وصف المنتج (للأطفال الذين تتراوح أعمارهم بين عامين و4 أعوام). أما المنتجات الأخرى، فهي ليست مناسبة تمامًا.
ملخّص
في هذه الخطوة، تعاملت مع نموذج لغوي كبير (LLM) لإنشاء ردود أساسية على طلبات مستخدم.
الخطوات التالية
بعد ذلك، لنتعرف على كيفية استخدام ANN لتوسيع نطاق بحث المتجه.
7. توسيع نطاق بحث المتجه
استفادت الأمثلة السابقة من بحث الخط المتجه السابق من بحث متجه KNN الدقيق. وهذا أمر رائع عندما تتمكن من الاستعلام عن مجموعات فرعية محددة جدًا من بيانات Spanner. يُقال إنّ هذه الأنواع من طلبات البحث قابلة للتقسيم بشكل كبير.
في حال لم يكن لديك مهام عمل قابلة للتقسيم بشكل كبير، وكان لديك قدر كبير من البيانات، ستحتاج إلى استخدام بحث متّجه شبكة ANN للاستفادة من خوارزمية ScaNN لزيادة أداء عمليات البحث.
ولإجراء ذلك في Spanner، عليك فعل شيئين:
- إنشاء فهرس متجه
- عدِّل طلب البحث للاستفادة من دوال المسافة 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)
)
)
قم بتمييز النتائج من الاستعلام وانسخها.
بعد ذلك، استبدل <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;
من المفترض أن تظهر بشكلٍ مشابه لما يلي:
ملخّص
في هذه الخطوة، قمت بتحويل المخطط لإنشاء فهرس متجه. ثم أعدت كتابة استعلام التضمين لإجراء بحث ANN باستخدام فهرس المتجه. هذه خطوة مهمة مع نمو بياناتك لقياس أحمال عمل البحث المتجه.
الخطوات التالية
بعد ذلك، حان وقت التنظيف!
8. التنظيف (اختياري)
لتنظيف البيانات، انتقِل إلى قسم Cloud Spanner في Cloud Console واحذف مثيل 'retail-demo
' الذي أنشأناه في الدرس التطبيقي حول الترميز.
9. تهانينا
تهانينا، لقد أجريت بحث التشابه بنجاح باستخدام البحث المتجه المدمج في Spanner. بالإضافة إلى ذلك، لاحظوا مدى سهولة استخدام التضمين ونماذج النماذج اللغوية الكبيرة (LLM) لتوفير وظائف الذكاء الاصطناعي التوليدي مباشرةً باستخدام لغة الاستعلامات البنيوية (SQL).
أخيرًا، تعرَّفت على عملية إجراء بحث ANN بالاستناد إلى خوارزمية ScaNN لتوسيع نطاق مهام البحث المتعلّقة بالمتّجهات.
ما هي الخطوات التالية؟
تعرَّف على مزيد من المعلومات حول ميزة الجار الأقرب لـ Spanner هنا: https://cloud.google.com/spanner/docs/find-k-nearest-neighbors
تعرَّف على مزيد من المعلومات حول ميزة الجار الأقرب التقريبي (ANN) هنا: https://cloud.google.com/spanner/docs/find-approximate-nearest-neighbors
يمكنك أيضًا قراءة المزيد من المعلومات حول كيفية إجراء توقّعات على الإنترنت باستخدام SQL باستخدام تكامل VertexAI من Spanner من هنا: https://cloud.google.com/spanner/docs/ml.