בדף הזה מופיעה דוגמה לתהליך עבודה שממחיש איך פונקציית mysql.ml_embedding() פועלת עם הנתונים שמאוחסנים בטבלאות ועם פונקציית השאילתות mysql vector. בדוגמה
נעשה שימוש בקלט של טקסט פשוט כדי לאחזר תוצאה ממסד נתונים שמסתמך על ניתוח סמנטי של משמעות הטקסט שמבוסס על מודל שפה גדול (LLM).
תרחיש לדוגמה של תהליך הטמעה
תארו לעצמכם מסד נתונים שפועל ב-Cloud SQL ל-MySQL עם המאפיינים הבאים:
מסד הנתונים מכיל טבלה:
items. כל שורה בטבלה הזו מתארת פריט שהעסק שלכם מוכר.הטבלה
itemsמכילה עמודה:complaints. בעמודה הזו מאוחסנות תלונות של קונים שנרשמו לגבי כל פריט כטקסט רגיל.מסד הנתונים משולב עם Vertex AI Model Garden, ולכן יש לו גישה ל-LLM
gemini-embedding.
למרות שבמסד הנתונים הזה מאוחסנות תלונות על פריטים, התלונות האלה מאוחסנות כטקסט פשוט, ולכן קשה לבצע שאילתות. לדוגמה, אם אתם רוצים לראות אילו פריטים קיבלו הכי הרבה תלונות מלקוחות שקיבלו מוצרים בצבע הלא נכון, אתם יכולים להריץ שאילתות SQL רגילות בטבלה ולחפש התאמות שונות למילות מפתח. עם זאת, הגישה הזו מתאימה רק לשורות שמכילות את מילות המפתח המדויקות האלה.
לדוגמה, שאילתת SQL בסיסית כמו SELECT * FROM item WHERE complaints LIKE
"%wrong color%" לא מחזירה שורה שבה השדה complaints מכיל רק The picture shows a blue one, but the one I received was red.
שאילתות SQL באמצעות הטמעות מבוססות-LLM יכולות לעזור לגשר על הפער הזה. באמצעות הטמעות, אפשר לשלוח שאילתה לטבלה בדוגמה הזו לגבי פריטים שבהם יש דמיון סמנטי בין התלונות לבין הנחיית טקסט נתונה, כמו "הצבע לא נכון".
בשלבים הבאים מוסבר איך להפעיל את האפשרות הזו בתרחיש לדוגמה שתיארנו קודם.
הכנת הטבלה
לפני שמריצים שאילתות מבוססות-LLM על התוכן של טבלת items, צריך להכין את הטבלה לאחסון ולהוספה לאינדקס של הטמעות על סמך הנתונים הקיימים.
יצירת עמודה לאחסון הטמעות
מוסיפים עמודה לטבלה כדי לאחסן את ההטמעות.
sql
ALTER TABLE items ADD COLUMN complaint_embedding vector(3072) using varbinary;
בדוגמה הזו, הארגומנט הוא 3072 כי זה מספר המאפיינים שמודל ה-LLM gemini-embedding תומך בו. מידע נוסף זמין במאמר בנושא יצירת הטמעה.
בדוגמה, סוג הנתונים vector מוחל על העמודה כדי לפשט את השימוש בפונקציות ובאופרטורים pgvector עם הערכים של העמודה.
מילוי העמודה החדשה
משתמשים בפונקציה mysql.ml_embedding()
כדי לאכלס את העמודה החדשה הזו בהטמעות שמבוססות
על הערך של הטקסט בכל שורה שמופיע בעמודה complaints. בדוגמה הזו, Cloud SQL יוצר הטבעות באמצעות מודל שפה גדול עם המזהה gemini-embedding, גרסה 001.
UPDATE items SET complaint_embedding = mysql.ml_embedding('gemini-embedding-001', complaints);
mysql.ml_embedding()
מומר באופן מרומז לערך vector כדי לאחסן את הערך בעמודה vector שיצרתם במאמר יצירת עמודה לאחסון הטמעות.
יצירת אינדקס
כדי לשפר את הביצועים, כדאי להוסיף אינדקס לטבלה items.
CREATE VECTOR INDEX complaint_embed_idx ON items(complaint_embedding)
USING SCANN DISTANCE_MEASURE=COSINE;
מידע נוסף על יצירת אינדקס מסוג כזה זמין במאמר יצירת אינדקס של השכנים הקרובים ביותר. בנוסף, במאמר Query and index embeddings (הטמעות של שאילתות ואינדקסים) מוסבר איך לכוונן את האינדקס באמצעות הגדרת פרמטרים.
הרצת שאילתות מבוססות-LLM עם טקסט שסופק
עכשיו אפשר להריץ שאילתות סמנטיות של השכן הקרוב ביותר בטבלה items. השאילתה הבאה משתמשת בפונקציה approx_distance כדי לבצע את הפעולות הבאות:
- מיון השורות בטבלה לפי קרבה סמנטית לטקסט של
It was the wrong color. - החזרת עשר התלונות המובילות.
השאילתה מציגה את הערכים id ו-name של השורה הממוינת הראשונה.
SELECT mysql.ML_EMBEDDING('gemini-embedding-001', 'It was the wrong color') into @query_vector;
select id, name from items order by approx_distance(complaint_embedding , @query_vector,'distance_measure=cosine') limit 10;