בדף הזה מופיעה דוגמה לזרימת עבודה שממחישה איך הפונקציה embedding() פועלת יחד עם הנתונים שמאוחסנים בטבלה ועם התכונה pgvector. בדוגמה הזו, קלט של טקסט פשוט משמש לאחזור תוצאה ממסד נתונים שמסתמך על ניתוח סמנטי מבוסס-מודל שפה גדול (LLM) של משמעות הטקסט.
תרחיש לדוגמה
דמיינו מסד נתונים שפועל ב-AlloyDB עם ההיבטים הבאים:
מסד הנתונים מכיל טבלה בשם
items. כל שורה בטבלה הזו מתארת פריט שהעסק שלכם מוכר.הטבלה
itemsמכילה עמודה בשםcomplaints. בעמודהTEXTמאוחסנות תלונות של קונים שנרשמו לגבי כל פריט.מסד הנתונים משתלב עם Vertex AI Model Garden, וכך יש לו גישה למודלים של
text-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 יכולות לעזור לגשר על הפער הזה. באמצעות הטמעות, אפשר לשלוח שאילתה לטבלה בדוגמה הזו כדי למצוא פריטים שהתלונות לגביהם דומות מבחינה סמנטית לפרומפט טקסטואלי נתון, כמו 'הצבע לא נכון'.
בשלבים הבאים מוסבר איך להפעיל את האפשרות הזו בהגדרת הדוגמה שמתוארת למעלה.
לפני שמתחילים
עליכם לוודא שאתם עומדים בדרישות הבאות.
תוסף מסד נתונים נדרש
מוודאים שהתוספים הבאים מותקנים במסד הנתונים של AlloyDB.
התוסף
google_ml_integrationתוסף
vector, גרסה0.5.0.google-1ואילך
מידע נוסף על התקנה וניהול של תוספים זמין במאמר הגדרת תוספים למסד נתונים.
- מגדירים את הדגל לניהול מסד הנתונים
google_ml_integration.enable_model_supportלערךoff.
הגדרת הגישה למודלים
כדי ליצור הטמעות ממסד נתונים של AlloyDB, צריך להגדיר את AlloyDB כך שיעבוד עם מודל הטמעת טקסט.
כדי לעבוד עם מודל text-embedding-005 מבוסס-ענן, צריך לשלב את מסד הנתונים עם Vertex AI.
הכנת הטבלה
לפני שמריצים שאילתות מבוססות-LLM על התוכן של הטבלה items, צריך להכין את הטבלה לאחסון ולהוספה לאינדקס של הטמעות על סמך הנתונים הקיימים.
יצירת עמודה לאחסון הטמעות
מוסיפים עמודה לטבלה לאחסון ההטמעות.
ALTER TABLE items ADD COLUMN complaint_embedding vector(768);
בדוגמה הזו מצוין הארגומנט 768, כי זה מספר המאפיינים שנתמכים במודלים של text-embedding-005 באנגלית. מידע נוסף זמין במאמר בנושא יצירת הטמעה.
בדוגמה הזו, סוג הנתונים vector מוחל על העמודה כדי שיהיה קל יותר להשתמש בפונקציות ובאופרטורים של pgvector עם הערכים שלה.
אכלוס העמודה החדשה
אם כבר יש לכם הטמעות בפורמט CSV, אתם יכולים לפעול לפי השלבים במאמר אחסון הטמעות וקטוריות כדי לאחסן את ההטמעות.
אפשר גם להשתמש בפונקציה embedding() כדי לאכלס את העמודה החדשה הזו בהטמעות, אם יש לכם טקסט שמאוחסן בעמודה complaints. בדוגמה הזו, AlloyDB יוצר את ההטמעות באמצעות המודל text-embedding, גרסה 005.
UPDATE items SET complaint_embedding = embedding('text-embedding-005', complaints);
בדוגמה הזו, ערך ההחזרה real[] של embedding() מומר באופן משתמע לערך vector, כדי לאחסן את הערך בעמודה vector שנוצרה קודם.
יצירת אינדקס
כדי לשפר את הביצועים, מוסיפים אינדקס ל-items שמשתמש בשיטות של קוונטיזציה סקלרית.
CREATE INDEX complaint_embed_idx ON items
USING scann (complaint_embedding l2)
WITH (num_leaves=20);
מידע נוסף על יצירת אינדקס ScaNN זמין במאמר יצירת אינדקסים ווקטורים של שאילתות.
הרצת שאילתות שמבוססות על LLM עם טקסט שסופק
עכשיו אפשר לבצע שאילתות סמנטיות של השכן הקרוב ביותר בטבלה items. בשאילתה הבאה נעשה שימוש באופרטור <-> שסופק על ידי pgvector כדי למיין את שורות הטבלה לפי קרבה סמנטית לטקסט It was the wrong color ולהחזיר את עשר התלונות המובילות. השאילתה מציגה את הערכים id ו-name של השורה הראשונה שמוינה.
SELECT id, name FROM items
ORDER BY complaint_embedding::vector
<-> embedding('text-embedding-005', 'It was the wrong color') LIMIT 10;
המאמרים הבאים
- דוגמה נוספת לתהליך עבודה שכולל את AlloyDB ואת
pgvectorמופיעה במאמר פיתוח אפליקציות מבוססות-AI במסדי נתונים של Google Cloud באמצעות pgvector, LLM ו-LangChain.