1
embedding() פועלת יחד עם הנתונים שמאוחסנים בטבלה ועם התכונה pgvector. בדוגמה
נעשה שימוש בקלט של טקסט פשוט כדי לאחזר תוצאה ממסד נתונים שמסתמך על ניתוח סמנטי של משמעות הטקסט שמבוסס על מודל שפה גדול (LLM).
תרחיש לדוגמה
דמיינו מסד נתונים שפועל ב-AlloyDB עם ההיבטים הבאים:
מסד הנתונים מכיל טבלה,
items. כל שורה בטבלה הזו מתארת פריט שהעסק שלכם מוכר.הטבלה
itemsמכילה עמודה,complaints. בעמודהTEXTהזו מאוחסנות תלונות של קונים שנרשמו לגבי כל פריט.המסד נתונים משולב עם Vertex AI Model Garden, ולכן יש לו גישה למודלים
textembedding-geckoבאנגלית.
למרות שבמסד הנתונים הזה מאוחסנות תלונות על פריטים, התלונות האלה מאוחסנות כטקסט פשוט, ולכן קשה לבצע שאילתות. לדוגמה, אם אתם רוצים לראות אילו פריטים קיבלו הכי הרבה תלונות מלקוחות שקיבלו מוצרים בצבע הלא נכון, אתם יכולים להריץ שאילתות 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 יכולות לעזור לגשר על הפער הזה. באמצעות הטמעות, אפשר לשלוח שאילתה לטבלה בדוגמה הזו כדי למצוא פריטים שהתלונות עליהם דומות מבחינה סמנטית להנחיית טקסט נתונה, כמו "הצבע לא היה נכון".
בשלבים הבאים מוסבר איך להפעיל את האפשרות הזו בהגדרת הדוגמה שמתוארת למעלה.
לפני שמתחילים
צריך לוודא שאתם עומדים בדרישות הבאות:
תוסף נדרש למסד הנתונים
מוודאים שהתוספים הבאים מותקנים במסד הנתונים של AlloyDB.
תוסף
google_ml_integration
vectorextension, version0.5.0.google-1or later
מידע נוסף על התקנה וניהול של תוספים זמין במאמר הגדרת תוספים למסד נתונים.
- מגדירים את הדגל
google_ml_integration.enable_model_supportשל מסד הנתונים לערךoff.
הגדרת גישה למודל
כדי ליצור הטבעות ממסד נתונים של AlloyDB, צריך להגדיר את AlloyDB כך שיפעל עם מודל הטבעת טקסט.
כדי לעבוד עם מודל textembeddings-gecko מבוסס-ענן, צריך לשלב את מסד הנתונים עם Vertex AI.
הכנת הטבלה
לפני שמריצים שאילתות מבוססות-LLM על התוכן של הטבלה items, צריך להכין את הטבלה לאחסון ולהוספה לאינדקס של הטמעות על סמך הנתונים הקיימים.
יצירת עמודה לאחסון הטמעות
מוסיפים עמודה לטבלה לאחסון ההטמעות.
ALTER TABLE items ADD COLUMN complaint_embedding vector(768);
בדוגמה הזו מצוין 768 כארגומנט, כי זה מספר המימדים שנתמכים על ידי המודלים באנגלית textembedding-gecko. מידע נוסף זמין במאמר בנושא יצירת הטמעה.
בדוגמה הזו, סוג הנתונים vector מוחל על העמודה כדי שיהיה קל להשתמש בפונקציות ובאופרטורים של pgvector עם הערכים שלה.
מילוי העמודה החדשה
אם כבר יש לכם הטמעות בפורמט CSV, אתם יכולים לפעול לפי השלבים במאמר אחסון הטמעות וקטוריות כדי לאחסן את ההטמעות.
אפשר גם להשתמש בפונקציה embedding() כדי לאכלס את העמודה החדשה הזו בהטמעות, אם יש לכם טקסט שמאוחסן בעמודה complaints. בדוגמה הזו, AlloyDB יוצר את ההטמעות באמצעות מודל textembedding-gecko, גרסה 003.
UPDATE items SET complaint_embedding = embedding('textembedding-gecko@003', complaints);
בדוגמה הזו, מתבצעת המרה מרומזת של ערך ההחזרה של real[] שהוא embedding() לערך vector, כדי לאחסן את הערך בעמודה vector שנוצרה קודם.
יצירת אינדקס
כדי לשפר את הביצועים, כדאי להוסיף אינדקס ל-items שמשתמש בטכניקות של קוונטיזציה סקלרית.
CREATE INDEX complaint_embed_idx ON items
USING ivf (complaint_embedding vector_l2_ops)
WITH (lists = 20, quantizer = 'SQ8');
מידע נוסף על יצירת אינדקסים של שכנים קרובים משוערים זמין במאמר בנושא יצירת אינדקסים.
הרצת שאילתות מבוססות-LLM עם טקסט שסופק
עכשיו אפשר להריץ שאילתות סמנטיות של השכן הקרוב ביותר בטבלה items. השאילתה הבאה משתמשת באופרטור <-> שסופק על ידי pgvector כדי למיין את השורות בטבלה לפי קרבה סמנטית לטקסט It was the wrong color ולהחזיר את עשר התלונות המובילות. השאילתה מציגה את הערכים id ו-name של השורה הממוינת הראשונה.
SELECT id, name FROM items
ORDER BY complaint_embedding::vector
<-> embedding('textembedding-gecko@003', 'It was the wrong color') LIMIT 10;
המאמרים הבאים
- דוגמה נוספת לתהליך עבודה שכולל את AlloyDB ו-
pgvectorמופיעה במאמר Building AI-powered apps on Google Cloud databases using pgvector, LLMs and LangChain.