הסבר על דוגמה לתהליך עבודה של הטמעה

בדף הזה מופיעה דוגמה לתהליך עבודה שממחיש איך הפונקציה 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 יוצר את ההטמעות באמצעות מודל ה-LLM עם המזהה 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;

מידע נוסף על יצירת אינדקס מהסוג הזה זמין במאמר יצירת אינדקס של השכן הקרוב ביותר. במאמר שאילתות והטמעות של אינדקסים מוסבר איך לשפר את האינדקס באמצעות הגדרת פרמטרים.

הרצת שאילתות שמבוססות על 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;

המאמרים הבאים

  • שילוב של Cloud SQL עם Vertex AI

  • עבודה עם הטמעות וקטורים

  • הפעלת חיזויים אונליין ממכונות של Cloud SQL

  • פיתוח אפליקציות מבוססות-LLM באמצעות LangChain