בדף הזה מוסבר איך ליצור ולאחסן הטמעות וקטורים על סמך מודל.
מידע נוסף זמין במאמר פיתוח אפליקציות של AI גנרטיבי באמצעות Cloud SQL.
ב-Cloud SQL אתם יכולים להשתמש במודל הטמעה שמתארח ב-Vertex AI כדי לתרגם מחרוזת טקסט להטמעה, שהיא הייצוג של המודל למשמעות הסמנטית של הטקסט הנתון כווקטור מספרי.
ב-Cloud SQL, ההטמעות מיושמות כמערכים של ערכי real. אתם יכולים להשתמש בהטמעות שנוצרו כקלט לפונקציות של התוסף pgvector.
לפני שמתחילים
חלק מהדרישות משתנות בהתאם לשאלה אם אתם רוצים להשתמש ב-Cloud SQL כדי ליצור הטמעות, או אם אתם צריכים לעבוד רק עם הטמעות שמאוחסנות במסד הנתונים שלכם ממקור אחר.
הגבלות אזוריות
כדי ליצור הטמעות של Vertex AI באמצעות Cloud SQL, המכונה צריכה להיות באזור שבו יש תמיכה במודלים בסיסיים של AI גנרטיבי.
המודלים של Vertex AI ש-Cloud SQL יכול להשתמש בהם להטמעות, text-embedding ו-gemini-embedding, נמצאים באזור הזה.
תוספי מסד נתונים נדרשים
כדי לעבוד עם הטמעות, מתקינים את התוסף google_ml_integration במכונה של Cloud SQL. למודלים של Vertex AI, צריך להתקין את גרסה 1.2 ואילך. במודלים של צד שלישי או במודלים בהתאמה אישית, צריך להתקין את גרסה 1.4.2 ואילך.
אם רוצים לאחסן את ההטמעות האלה ולהשתמש בפונקציות ובאופרטורים של וקטורים עם ההטמעות, צריך גם את התוסף pgvector.
ב-Cloud SQL יש את שני התוספים האלה. אפשר להתקין אותם בכל מסד נתונים במכונה. מידע נוסף זמין במאמר הגדרת תוספים של PostgreSQL.
הגדרת הגישה למודלים
כדי ליצור הטמעות ממכונה של Cloud SQL, צריך להגדיר את Cloud SQL כך שיעבוד עם מודל הטמעת טקסט.
כדי לעבוד עם המודל text-embedding או gemini-embedding שמבוסס-ענן, צריך לשלב את Cloud SQL עם Vertex AI.
מתן גישה למשתמשים במסד הנתונים כדי ליצור הטמעות
נותנים למשתמשים במסד הנתונים הרשאה להשתמש בפונקציה embedding כדי להריץ חיזויים:
מחברים לקוח
psqlלמכונה הראשית, כמו שמתואר במאמר התחברות באמצעות לקוח psql.בשורת הפקודה של
psql, מתחברים למסד הנתונים ונותנים הרשאות:\c DB_NAME GRANT EXECUTE ON FUNCTION embedding TO USER_NAME;מחליפים את מה שכתוב בשדות הבאים:
DB_NAME: שם מסד הנתונים שאתם נותנים לו הרשאות
USER_NAME: שם המשתמש שאתם נותנים לו הרשאות
יצירת הטמעות
ב-Cloud SQL יש פונקציה שמאפשרת לתרגם טקסט להטמעת וקטורים. אחר כך אתם יכולים לאחסן את ההטמעה הזו במסד הנתונים כנתוני וקטור, ואם רוצים, להשתמש בפונקציות של pgvector כדי להריץ עליה שאילתות.
יצירת הטמעה
כדי ליצור הטמעה באמצעות Cloud SQL, משתמשים בפונקציה embedding שמספק התוסף google_ml_integration:
SELECT embedding( 'MODEL_ID_WITH_VERSION', 'TEXT');
מחליפים את הפרטים הבאים:
MODEL_ID_WITH_VERSION: המזהה המלא של המודל שרוצים לשלוח אליו שאילתה.
אם אתם משתמשים ב-Vertex AI Model Garden, ציינו את
text-embedding-004או אתtext-multilingual-embedding-002. אלה המודלים מבוססי-הענן ש-Cloud SQL יכול להשתמש בהם להטמעות טקסט. מידע נוסף זמין במאמר הטמעות טקסט.TEXT: הטקסט שרוצים לתרגם להטמעת וקטורים.
בדוגמה הבאה נעשה שימוש במודל text-embedding-004 כדי ליצור הטמעה על סמך מחרוזת מילולית שסופקה:
SELECT embedding( 'text-embedding-004', 'Cloud SQL is a managed, cloud-hosted SQL database service.');
שמירת הטמעה שנוצרה
הערך המוחזר של הפונקציה embedding() הוא מערך של ערכי real.
כדי לשמור את הערך הזה בטבלה, מוסיפים עמודה מסוג real[]:
ALTER TABLE TABLE ADD COLUMN EMBEDDING_COLUMN real[DIMENSIONS];
מחליפים את הפרטים הבאים:
TABLE: שם הטבלה
EMBEDDING_COLUMN: השם של עמודת ההטמעה החדשה
DIMENSIONS: מספר המאפיינים שהמודל תומך בהם.
אם אתם משתמשים באחד מהמודלים של
text-embeddingעם Vertex AI, ציינו את768.
אם התקנתם את התוסף pgvector, אתם יכולים לאחסן את ההטמעות כערכי vector:
ALTER TABLE TABLE ADD COLUMN EMBEDDING_COLUMN vector(DIMENSIONS);
אחרי שיוצרים עמודה לאחסון הטמעות, אפשר לאכלס אותה על סמך הערכים שכבר מאוחסנים בעמודה אחרת באותה טבלה:
UPDATE TABLE SET EMBEDDING_COLUMN = embedding('MODEL_ID_WITH_VERSION', SOURCE_TEXT_COLUMN);
מחליפים את הפרטים הבאים:
TABLE: שם הטבלה.
EMBEDDING_COLUMN: שם עמודת ההטמעה.
MODEL_ID_WITH_VERSION: המזהה המלא של המודל שרוצים לשלוח אליו שאילתה.
אם אתם משתמשים ב-Vertex AI Model Garden, ציינו את
text-embedding-004או אתtext-multilingual-embedding-002. אלה המודלים מבוססי-הענן ש-Cloud SQL יכול להשתמש בהם להטמעות טקסט. מידע נוסף זמין במאמר הטמעות טקסט.SOURCE_TEXT_COLUMN: שם העמודה שבה מאוחסן הטקסט. אתם מתרגמים את הטקסט הזה להטמעות.
הפקודה הקודמת פועלת גם בעמודות ההטמעה real[] וגם בעמודות ההטמעה vector. אם עמודת ההטמעה היא מסוג vector, אז Cloud SQL ממיר את הערך המוחזר של embedding() ממערך real לערך vector באופן משתמע.
בדוגמה הבאה משתמשים במודל text-embedding-004 כדי לאכלס את העמודה messages.message_vector בהטמעות שמבוססות על התוכן של העמודה messages.message:
UPDATE messages SET message_vector = embedding( 'text-embedding-004', message);
שאילתות והטמעות של אינדקסים באמצעות pgvector
התוסף pgvector ל-PostgreSQL מאפשר להשתמש בפונקציות ובאופרטורים ספציפיים לווקטורים כשמאחסנים, מוסיפים לאינדקס ושולחים שאילתות להטמעות טקסט במסד הנתונים.
ל-Cloud SQL יש אופטימיזציות משלו לעבודה עם pgvector, שמאפשרות ליצור אינדקסים שיכולים להאיץ שאילתות שכוללות הטמעות.
יצירת אינדקס של השכן הקרוב ביותר
pgvector תומך בחיפושים של השכן הקרוב ביותר (ANN) באמצעות הוספה לאינדקס.
כדי ליצור אינדקס HNSW, משתמשים בפונקציה hnsw, כמו בדוגמה הבאה:
CREATE INDEX ON TABLE
USING hnsw (EMBEDDING_COLUMN DISTANCE_FUNCTION)
WITH (m = M, ef_construction = EF_CONSTRUCTION);
מחליפים את הפרטים הבאים:
TABLE: הטבלה שאליה מוסיפים את האינדקס.
EMBEDDING_COLUMN: עמודה שמאחסנת נתוני
vector.DISTANCE_FUNCTION: פונקציית המרחק שבה משתמשים באינדקס הזה. צריך לבחור אחת מהאפשרויות:
מרחק L2:
vector_l2_opsמכפלה פנימית:
vector_ip_opsמרחק קוסינוס:
vector_cosine_ops
M (אופציונלי): המספר המקסימלי של חיבורים עם נקודות סמוכות על הגרף. מומלץ לבחור טווח של 5 עד 48. ערך ברירת המחדל הוא 16.
EF_CONSTRUCTION (אופציונלי): גודל הרשימה שמכילה את המועמדים הקרובים ביותר במהלך המעבר על התרשים בזמן בניית האינדקס. ערכים גבוהים יותר גורמים לאלגוריתם להביא בחשבון יותר מועמדים, וכך ליצור אינדקס טוב יותר. גודל ברירת המחדל הוא 64.
כדי ליצור את האינדקס הזה בעמודת הטמעה שמשתמשת בסוג הנתונים real[] במקום ב-vector, צריך להמיר את העמודה לסוג הנתונים vector:
CREATE INDEX ON TABLE
USING hnsw ((CAST(EMBEDDING_COLUMN AS vector(DIMENSIONS))) DISTANCE_FUNCTION)
WITH (m = M, ef_construction = EF_CONSTRUCTION);
מחליפים את DIMENSIONS ברוחב של עמודת ההטמעה.
בקטע הבא מוצגת דוגמה לאינדקס מהסוג הזה.
יצירת שאילתה של השכן הקרוב ביותר עם טקסט נתון
אחרי שמאחסנים ומאנדקסים את ההטמעות במסד הנתונים, אפשר להשתמש בכל פונקציות השאילתות של pgvector.
כדי למצוא את השכנים הסמנטיים הקרובים ביותר לקטע טקסט, משתמשים בפונקציה embedding() כדי לתרגם את הטקסט לווקטור. באותה שאילתה, מפעילים את הווקטור הזה על אופרטור השכן הקרוב ביותר pgvector, <->, כדי למצוא את שורות מסד הנתונים עם ההטמעות הכי דומות מבחינה סמנטית.
מכיוון שהפונקציה embedding() מחזירה מערך real, צריך להמיר את הקריאה ל-embedding() ל-vector כדי להשתמש בערכים האלה עם אופרטורים של pgvector.
SELECT RESULT_COLUMNS FROM TABLE
ORDER BY EMBEDDING_COLUMN
<-> embedding('MODEL_ID_WITH_VERSION', 'TEXT')::vector
LIMIT ROW_COUNT
מחליפים את הפרטים הבאים:
RESULT_COLUMNS: העמודות שיוצגו משורות דומות מבחינה סמנטית.
TABLE: הטבלה שמכילה את ההטמעה שאליה משווים את הטקסט.
EMBEDDING_COLUMN: העמודה שמכילה את ההטמעות השמורות.
MODEL_ID_WITH_VERSION: המזהה המלא של המודל שרוצים לשלוח אליו שאילתה.
אם אתם משתמשים ב-Vertex AI Model Garden, ציינו את
text-embedding-004או אתtext-embedding-multilingual-002. אלה המודלים מבוססי-הענן ש-Cloud SQL יכול להשתמש בהם להטמעות טקסט. מידע נוסף זמין במאמר הטמעות טקסט.TEXT: הטקסט שרוצים כדי למצוא את השכנים הסמנטיים השמורים הקרובים ביותר.
ROW_COUNT: מספר השורות שיוחזרו. אם רוצים לקבל רק את ההתאמה הכי טובה, מציינים
1כערך של הפרמטר הזה.
כדי להריץ את השאילתה הזו עם עמודת הטמעה מאוחסנת שמשתמשת בסוג הנתונים real[] במקום ב-vector, צריך להמיר את העמודה לסוג הנתונים vector:
SELECT RESULT_COLUMNS FROM TABLE
ORDER BY EMBEDDING_COLUMN::vector
<-> embedding('MODEL_ID_WITH_VERSION', 'TEXT')::vector
LIMIT ROW_COUNT
כדי למנוע שגיאות, צריך לציין את מזהה המודל המלא
Cloud SQL ממליץ מאוד להשתמש תמיד בגרסה יציבה של מודל ההטמעות שבחרתם. ברוב המודלים, צריך להגדיר גרסה באופן מפורש. לדוגמה, צריך להשתמש ב-gemini-embedding-001 במקום ב-gemini-embedding.
קריאה לפונקציה embedding() בלי לציין את גרסת המודל היא תקינה מבחינה תחבירית, אבל היא לא יציבה ועלולה לגרום לשגיאות.
מידע נוסף על גרסאות מודלי ה-AI שזמינות ב-Vertex AI מופיע במאמר המודלים היציבים העדכניים.
גרסה נתונה של מודל Vertex AI תמיד מחזירה את אותה תשובה של embedding() לקלט טקסט נתון. אם לא תציינו את גרסת המודל בקריאות להטמעה, יכול להיות שגרסת מודל חדשה שתפורסם תשנה באופן פתאומי את הווקטור שמוחזר לקלט נתון. זה עלול לגרום לשגיאות או להתנהגות בלתי צפויה אחרת באפליקציות.