בדף הזה מופיעה דוגמה לתהליך עבודה שממחיש איך פונקציית embedding() פועלת עם הנתונים שמאוחסנים בטבלאות ועם פונקציית השאילתות pgvector.
בדוגמה
נעשה שימוש בקלט של טקסט פשוט כדי לאחזר תוצאה ממסד נתונים שמסתמך על ניתוח סמנטי של משמעות הטקסט שמבוסס על מודל שפה גדול (LLM).
תרחיש לדוגמה של תהליך הטמעה
נניח שיש מסד נתונים שפועל ב-Cloud SQL ל-PostgreSQL עם ההיבטים הבאים:
מסד הנתונים מכיל טבלה:
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);
בדוגמה הזו, הארגומנט הוא 3072 כי זה מספר המאפיינים שמודל ה-LLM gemini-embedding תומך בו. מידע נוסף זמין במאמר בנושא יצירת הטמעה.
בדוגמה, סוג הנתונים vector מוחל על העמודה כדי לפשט את השימוש בפונקציות ובאופרטורים pgvector עם הערכים של העמודה.
מילוי העמודה החדשה
משתמשים בפונקציה embedding() כדי לאכלס את העמודה החדשה הזו ב-embeddings על סמך הערך של הטקסט בכל שורה שמופיע בעמודה complaints. בדוגמה הזו, Cloud SQL יוצר הטבעות באמצעות מודל שפה גדול עם המזהה gemini-embedding, גרסה 001.
UPDATE items SET complaint_embedding = embedding('gemini-embedding-001', complaints);
real[] מועבר לערך vector באופן מרומז כדי לאחסן את הערך בעמודה vector שיצרתם במאמר יצירת עמודה לאחסון הטמעות.embedding()
יצירת אינדקס
כדי לשפר את הביצועים, כדאי להוסיף אינדקס לטבלה items.
CREATE INDEX complaint_embed_idx ON items
USING hnsw (complaint_embedding vector_cosine_ops);
מידע נוסף על יצירת אינדקס מסוג כזה זמין במאמר יצירת אינדקס של השכנים הקרובים ביותר. בנוסף, מידע נוסף על כוונון האינדקס באמצעות הגדרת פרמטרים זמין במאמר שאילתות והטמעות של אינדקס באמצעות pgvector.
הרצת שאילתות מבוססות-LLM עם טקסט שסופק
עכשיו אפשר להריץ שאילתות סמנטיות של השכן הקרוב ביותר בטבלה items. השאילתה הבאה משתמשת באופרטור <-> שpgvector מספק כדי לבצע את הפעולות הבאות:
- מיון השורות בטבלה לפי קרבה סמנטית לטקסט של
It was the wrong color. - החזרת עשר התלונות המובילות.
השאילתה מציגה את הערכים id ו-name של השורה הממוינת הראשונה.
SELECT id, name FROM items
ORDER BY complaint_embedding
<-> embedding('gemini-embedding-001', 'It was the wrong color')::vector LIMIT 10;