1. מבוא
Spanner הוא שירות מנוהל של מסד נתונים עם יכולת התאמה אופקית ופצה גלובלי, שמתאים מאוד לעומסי עבודה תפעוליים רלציוניים ולא רלציוניים.
ב-Spanner יש תמיכה מובנית בחיפוש וקטורים, שמאפשרת לבצע חיפוש לפי דמיון או חיפוש סמנטי ולהטמיע יצירת מודלים משופרת לאחזור (RAG) באפליקציות של GenAI בקנה מידה נרחב, תוך ניצול התכונות K-nearest neighbor (KNN) או approximate nearest neighbor (ANN).
שאילתות החיפוש הוקטורי של Spanner מחזירות נתונים עדכניים בזמן אמת ברגע שהטרנזקציות מועברות, בדיוק כמו כל שאילתה אחרת על הנתונים התפעוליים.
בשיעור ה-Lab הזה תלמדו איך להגדיר את התכונות הבסיסיות הנדרשות כדי להשתמש ב-Spanner לביצוע חיפוש וקטור, ואיך לגשת למודלים של הטמעה (embedding) ולמודלים של LLM מ-VertexAI's model garden באמצעות SQL.
הארכיטקטורה תיראה כך:
על סמך היסודות האלה, תלמדו איך ליצור אינדקס וקטור שמבוסס על אלגוריתם ScaNN, ואיך להשתמש בפונקציות המרחק APPROX כשצריך להתאים את עומסי העבודה הסמנטיים לעומס.
מה תפַתחו
במסגרת שיעור ה-Lab הזה תלמדו:
- יצירת מכונה של Spanner
- הגדרת הסכימה של מסד הנתונים של Spanner כדי לשלב אותה עם מודלים של הטמעה ו-LLM ב-VertexAI
- טעינה של קבוצת נתונים של קמעונאי
- שליחת שאילתות חיפוש לפי דמיון למערך הנתונים
- לספק הקשר למודל ה-LLM כדי ליצור המלצות ספציפיות למוצרים.
- משנים את הסכימה ויוצרים אינדקס וקטורים.
- משנים את השאילתות כדי לנצל את מדד הוקטורים החדש שנוצר.
מה תלמדו
- איך מגדירים מכונה של Spanner
- איך משלבים עם VertexAI
- איך משתמשים ב-Spanner כדי לבצע חיפוש וקטורי ולמצוא פריטים דומים בקבוצת נתונים של קמעונאות
- איך מכינים את מסד הנתונים כדי להתאים את עומסי העבודה של חיפוש וקטורים באמצעות חיפוש ANN.
מה נדרש
2. הגדרה ודרישות
יצירת פרויקט
אם עדיין אין לכם חשבון Google (Gmail או Google Apps), עליכם ליצור חשבון. נכנסים למסוף Google Cloud Platform ( console.cloud.google.com) ויוצרים פרויקט חדש.
אם כבר יש לכם פרויקט, לוחצים על התפריט הנפתח לבחירת פרויקט בפינה הימנית העליונה של המסוף:
ולוחצים על הלחצן 'פרויקט חדש' בתיבת הדו-שיח שנפתחת כדי ליצור פרויקט חדש:
אם עדיין אין לכם פרויקט, אמורה להופיע תיבת דו-שיח כזו כדי ליצור את הפרויקט הראשון:
בתיבת הדו-שיח הבאה ליצירת פרויקט תוכלו להזין את הפרטים של הפרויקט החדש:
חשוב לזכור את מזהה הפרויקט, שהוא שם ייחודי לכל הפרויקטים ב-Google Cloud (השם שלמעלה כבר נלקח ולא יתאים לכם, סליחה!). בהמשך הקודה לאימון נתייחס אליו בתור PROJECT_ID.
לאחר מכן, אם עדיין לא עשיתם זאת, תצטרכו להפעיל את החיוב במסוף הפיתוח כדי להשתמש במשאבים של Google Cloud ולהפעיל את Spanner API.
השלמת הקודלאב הזה לא אמורה לעלות יותר מכמה דולרים, אבל העלות עשויה להיות גבוהה יותר אם תחליטו להשתמש במשאבים נוספים או אם תמשיכו להפעיל אותם (ראו את הקטע 'ניקוי' בסוף המסמך הזה). כאן מפורט התמחור של Google Cloud Spanner.
משתמשים חדשים ב-Google Cloud Platform זכאים לתקופת ניסיון בחינם בשווי 300$, כך שהקודלאב הזה אמור להיות ללא תשלום.
הגדרת Google Cloud Shell
אפשר להפעיל את Google Cloud ו-Spanner מרחוק מהמחשב הנייד, אבל בסדנת הקוד הזו נשתמש ב-Google Cloud Shell, סביבת שורת פקודה שפועלת ב-Cloud.
המכונה הווירטואלית הזו מבוססת על Debian, וטעונים בה כל הכלים הדרושים למפתחים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, משפרת מאוד את הביצועים והאימות של הרשת. כל מה שצריך לקודלאב הזה הוא דפדפן (כן, הוא פועל ב-Chromebook).
- כדי להפעיל את Cloud Shell במסוף Cloud, פשוט לוחצים על Activate 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:
ב-Cloud Shell מוגדרים גם כמה משתני סביבה כברירת מחדל, שיכולים להיות שימושיים כשמריצים פקודות בעתיד.
echo $GOOGLE_CLOUD_PROJECT
פלט הפקודה
<PROJECT_ID>
הפעלת Spanner API
gcloud services enable spanner.googleapis.com
סיכום
בשלב הזה הגדרתם את הפרויקט, אם עדיין לא היה לכם פרויקט, הפעלתם את Cloud Shell והפעלתם את ממשקי ה-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. טעינת הסכימה והנתונים של 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.
המודל הראשון הוא מודל הטמעה (Embedding) שמשמש ליצירת הטמעות מטקסט, והשני הוא מודל LLM שמשמש ליצירת תשובות על סמך הנתונים ב-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
.
השלב הבא
בשלב הבא, תבצעו שילוב עם מודל הטמעת הנתונים (Embedding) כדי ליצור הטמעות של תיאורי המוצרים, וגם כדי להמיר בקשת חיפוש טקסטואלית להטמעת נתונים כדי לחפש מוצרים רלוונטיים.
5. עבודה עם הטמעות (embeddings)
יצירת הטמעות ווקטוריות לתיאורי מוצרים
כדי שחיפוש הדמיון יפעל במוצרים, צריך ליצור הטמעות (embeddings) של תיאורי המוצרים.
בעזרת EmbeddingsModel
שנוצר בסכימה, זוהי טענת DML פשוטה של 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
כדי למצוא את המוצרים הדומים. התוצאות אמורות להיראות כך:
שימו לב שבשאילתה נעשה שימוש במסננים נוספים, כמו התעניינות רק במוצרים שזמינים במלאי (inventoryCount > 0
).
סיכום
בשלב הזה יצרתם הטמעות של תיאורי מוצרים והטמעה של בקשת חיפוש באמצעות SQL, תוך ניצול השילוב של Spanner עם מודלים ב-VertexAI. בנוסף, ביצעתם חיפוש וקטורי כדי למצוא מוצרים דומים שתואמים לבקשת החיפוש.
השלבים הבאים
בשלב הבא נשתמש בתוצאות החיפוש כדי להזין LLM וליצור תשובה מותאמת אישית לכל מוצר.
6. עבודה עם LLM
בעזרת Spanner קל לשלב מודלים של LLM שמוצגים מ-VertexAI. כך המפתחים יכולים להשתמש ב-SQL כדי ליצור ממשק ישירות עם LLMs, במקום לדרוש מהאפליקציה לבצע את הלוגיקה.
לדוגמה, יש לנו את התוצאות משאילתת ה-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 בגלל טווח הגילאים שמופיע בתיאור המוצר (2-4 שנים). המוצרים האחרים לא מתאימים במיוחד.
סיכום
בשלב הזה השתמשתם ב-LLM כדי ליצור תשובות בסיסיות להנחיות ממשתמש.
השלבים הבאים
בשלב הבא נסביר איך משתמשים ב-ANN כדי להתאים את החיפוש לפי וקטור לעומס.
7. חיפוש וקטור מותאם
בדוגמאות הקודמות לחיפוש וקטורים נעשה שימוש בחיפוש וקטורים של KNN מדויק. האפשרות הזו שימושית מאוד כשאתם יכולים להריץ שאילתות על קבוצות משנה ספציפיות מאוד של נתוני Spanner. שאילתות מהסוג הזה נקראות שאילתות שניתן לפצל אותן בקלות.
אם אין לכם עומסי עבודה שניתן לחלק אותם למחיצות בקלות, ויש לכם כמות גדולה של נתונים, כדאי להשתמש בחיפוש וקטור של ANN תוך ניצול אלגוריתם ScaNN כדי לשפר את ביצועי החיפוש.
כדי לעשות זאת ב-Spanner, צריך לבצע שתי פעולות:
- יצירת אינדקס וקטור
- משנים את השאילתה כך שתשתמש בפונקציות המרחק APPROX.
יצירת Vector Index
כדי ליצור אינדקס וקטור במערך הנתונים הזה, קודם צריך לשנות את העמודה productDescriptionEmbeddings
כדי להגדיר את האורך של כל וקטור. כדי להוסיף את אורך הווקטור לעמודה, צריך להסיר את העמודה המקורית וליצור אותה מחדש.
ALTER TABLE `products` DROP COLUMN `productDescriptionEmbedding`;
ALTER TABLE
`products` ADD COLUMN `productDescriptionEmbedding` ARRAY<FLOAT32>(vector_length=>768);
בשלב הבא, יוצרים מחדש את הטמעות הנתונים (embeddings) מהשלב 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 בנפרד.
- מעתיקים את התוצאות של ההטמעות לשאילתה הסופית.
יצירת הטמעות (embeddings)
-- 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 ומוחקים את המכונה 'retail-demo
' שיצרנו בקודלאב.
9. מעולה!
מעולה, ביצעתם חיפוש דמיון באמצעות חיפוש הוקטורים המובנה של Spanner. בנוסף, ראינו כמה קל לעבוד עם מודלים של הטמעה ומודלים של LLM כדי לספק פונקציונליות של AI גנרטיבי ישירות באמצעות SQL.
לבסוף, למדתם איך לבצע חיפוש ANN שמבוסס על האלגוריתם ScaNN כדי להתאים לעומסי עבודה של חיפוש וקטורים.
מה השלב הבא?
מידע נוסף על התכונה 'שכנות קרובה מדויקת' (חיפוש וקטור KNN) ב-Spanner זמין כאן: https://cloud.google.com/spanner/docs/find-k-nearest-neighbors
מידע נוסף על התכונה 'שכנות קרובה קרובה (ANN)' ב-Spanner זמין כאן: https://cloud.google.com/spanner/docs/find-approximate-nearest-neighbors
מידע נוסף על ביצוע תחזיות אונליין באמצעות SQL באמצעות השילוב של VertexAI ב-Spanner זמין כאן: https://cloud.google.com/spanner/docs/ml