דוגמה לתהליך הטמעה

בחירת גרסת המסמך:

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

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