1. מבוא
Spanner הוא שירות מנוהל של מסד נתונים שמופץ ברחבי העולם, עם אפשרות הרחבה ויכולת התאמה לעומס. שירות מעולה לעומסי עבודה תפעוליים ולא יחסיים.
ב-Spanner יש תמיכה מובנית בחיפוש וקטורים, וכך לבצע חיפוש סמנטי או דמיון ולהטמיע יצירה מורחבת (RAG) לאחזור באפליקציות GenAI בקנה מידה נרחב, תוך שימוש בתכונות שכן K-בקרבת מקום מדויק (KNN) או בסביבה הקרובה ביותר (ANN).
שאילתות החיפוש הווקטורי של Spanner מחזירות נתונים עדכניים בזמן אמת ברגע שבוצעו עסקאות, בדיוק כמו כל שאילתה אחרת על נתונים התפעוליים שלכם.
בשיעור ה-Lab הזה תלמדו להגדיר את התכונות הבסיסיות שנדרשות כדי להשתמש ב-Spanner לביצוע חיפוש וקטורים, ולגשת למודלים של הטמעה ו-LLM מגן המודלים של VertexAI באמצעות 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) ויוצרים פרויקט חדש.
אם כבר יש לכם פרויקט, לוחצים על התפריט הנפתח לבחירת פרויקט בפינה השמאלית העליונה של המסוף:
ולוחצים על 'New project' (פרויקט חדש). בתיבת הדו-שיח שמתקבלת כדי ליצור פרויקט חדש:
אם עדיין אין לכם פרויקט, אמורה להופיע תיבת דו-שיח כזו כדי ליצור את הפרויקט הראשון:
בתיבת הדו-שיח הבאה ליצירת פרויקט תוכלו להזין את פרטי הפרויקט החדש:
חשוב לזכור את מזהה הפרויקט, שהוא שם ייחודי בכל הפרויקטים ב-Google Cloud (השם שלמעלה כבר תפוס ולא מתאים לכם, סליחה). בהמשך ב-Codelab הזה, המערכת תתייחס אליה בתור PROJECT_ID.
בשלב הבא, אם עדיין לא עשית זאת, יהיה עליך להפעיל את החיוב ב-Developers Console כדי להשתמש במשאבים של Google Cloud ולהפעיל את Spanner API.
ההרצה של Codelab הזה לא אמורה לעלות לך יותר מכמה דולרים, אבל זה יכול להיות גבוה יותר אם תחליטו להשתמש ביותר משאבים או אם תשאירו אותם פועלים (עיינו בקטע 'ניקוי' בסוף המסמך). התמחור ב-Google Cloud Spanner מופיע כאן.
משתמשים חדשים ב-Google Cloud Platform זכאים לתקופת ניסיון בחינם בשווי 300$, שמאפשרת ל-Codelab הזה בחינם לגמרי.
הגדרת Google Cloud Shell
אומנם אפשר להפעיל את Google Cloud ואת Spanner מרחוק מהמחשב הנייד, אבל ב-Codelab הזה נשתמש ב-Google Cloud Shell, סביבת שורת הפקודה שפועלת ב-Cloud.
המכונה הווירטואלית הזו שמבוססת על Debian נטענת עם כל הכלים למפתחים שדרושים לכם. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר משמעותית את ביצועי הרשת והאימות. כלומר, כל מה שדרוש ל-Codelab הזה הוא דפדפן (כן, הוא פועל ב-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 מאפשר להשתמש בכמה מסדי נתונים במכונה אחת.
מסד הנתונים הוא המקום שבו מגדירים את הסכימה. תוכלו גם לקבוע למי תהיה גישה למסד הנתונים, להגדיר הצפנה מותאמת אישית, להגדיר את כלי האופטימיזציה ולהגדיר את תקופת השמירה.
כדי ליצור את מסד הנתונים, משתמשים שוב בכלי שורת הפקודה של Google Cloud:
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
ומחכים כמה שניות עד שהסכימה תיווצר.
בשלב הבא תיצרו את שני המודלים ותגדירו אותם לנקודות קצה (endpoints) של מודל VertexAI.
המודל הראשון הוא מודל הטמעה שמשמש ליצירת הטמעות מטקסט, והמודל השני הוא מודל 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
.
השלב הבא
בשלב הבא, תשלבו עם מודל ההטמעה כדי ליצור הטמעות לתיאורי המוצרים, וגם להמיר בקשת חיפוש טקסטואלית להטמעה כדי לחפש מוצרים רלוונטיים.
5. עבודה עם הטמעות
יצירת הטמעות וקטורים לתיאורי מוצרים
כדי שחיפוש דמיון עם המוצרים יפעל, צריך ליצור הטמעות לתיאורי המוצרים.
באמצעות ה-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 כדי להתממשק ישירות עם מודלים גדולים של שפה, במקום לדרוש מהאפליקציה לבצע את הלוגיקה.
לדוגמה, קיבלנו את התוצאות של שאילתת ה-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. סביר להניח ששאילתות כאלה יהיו מחולקות למחיצות (partitioning) ברמה גבוהה.
אם אין לכם עומסי עבודה שאפשר לחלק אותם למחיצות, ויש לכם כמות גדולה של נתונים, כדאי להשתמש בחיפוש וקטורי 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 בשאילתה הסופית שבהמשך נדרשות. - ליצור את ההטמעות (embeddings) מהפונקציה 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 ומוחקים את המכונה של 'retail-demo
' שיצרנו ב-Codelab.
9. מעולה!
כל הכבוד, ביצעת בהצלחה חיפוש דמיון באמצעות חיפוש וקטורים מובנה של Spanner. בנוסף, הבנתם כמה קל לעבוד עם מודלים של הטמעה ו-LLM כדי לספק פונקציונליות של בינה מלאכותית גנרטיבית ישירות באמצעות SQL.
לבסוף, למדתם את התהליך לביצוע חיפוש ANN שמגובה על ידי האלגוריתם של ScaNN להתאמה לעומס (scaling) של עומסי העבודה של חיפוש וקטורים.
מה השלב הבא?
מידע נוסף על התכונה 'השכנה הקרובה ביותר של Spanner' (חיפוש וקטור של KNN) זמין כאן: https://cloud.google.com/spanner/docs/find-k-nearest-neighbors
מידע נוסף על התכונה 'השכן הקרוב ביותר' של Spanner (חיפוש וקטורי ANN) זמין כאן: https://cloud.google.com/spanner/docs/find-approximate-nearest-neighbors
מידע נוסף על ביצוע חיזויים אונליין באמצעות SQL באמצעות שילוב Vertex AI של Spanner זמין כאן: https://cloud.google.com/spanner/docs/ml