בדף הזה מוסבר איך ליצור ולאחסן הטבעות וקטוריות על סמך מודל.
מידע נוסף מופיע במאמר פיתוח אפליקציות AI גנרטיבי באמצעות Cloud SQL.
ב-Cloud SQL אפשר להשתמש במודל הטמעה שמתארח ב-Vertex AI כדי לתרגם מחרוזת טקסט להטמעה, שהיא הייצוג של המודל של המשמעות הסמנטית של הטקסט הנתון כווקטור מספרי.
ב-Cloud SQL, הטמעות מיוצגות כמערכים של ערכי real. אתם יכולים להשתמש בהטמעות שנוצרו כקלט לפונקציות של התוסף pgvector.
לפני שמתחילים
יש דרישות שונות בהתאם לכך שאתם רוצים להשתמש ב-Cloud SQL כדי ליצור הטמעות, או שאתם רק צריכים לעבוד עם הטמעות שמאוחסנות במסד הנתונים שלכם ממקור אחר.
הגבלות אזוריות
כדי ליצור הטמעות של Vertex AI באמצעות Cloud SQL, המופע צריך להיות באזור שבו מודלים בסיסיים של AI גנרטיבי נתמכים.
מודלים של Vertex AI ש-Cloud SQL יכול להשתמש בהם להטמעות, text-embedding וtextembedding-gecko, נמצאים באזור הזה.
תוספים נדרשים למסד הנתונים
כדי לעבוד עם הטמעות, צריך להתקין את התוסף google_ml_integration במכונת Cloud SQL. למודלים של Vertex AI, צריך להתקין את גרסה 1.2 ומעלה. למודלים של צד שלישי או מודלים בהתאמה אישית, צריך להתקין גרסה
1.4.2 ומעלה.
אם רוצים לאחסן את ההטמעות האלה ולהשתמש בפונקציות ובאופרטורים של וקטורים עם ההטמעות, צריך גם את התוסף pgvector.
שני התוספים האלה זמינים ב-Cloud SQL. אפשר להתקין אותם בכל מסד נתונים במופע. מידע נוסף זמין במאמר הגדרת תוספים ל-PostgreSQL.
הגדרת גישה למודל
כדי ליצור הטמעות ממופע של Cloud SQL, צריך להגדיר את Cloud SQL כך שיפעל עם מודל הטמעת טקסט.
כדי לעבוד עם מודל text-embedding או textembedding-gecko מבוסס-ענן, צריך לשלב את 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_IDVERSION_TAG', 'TEXT');
מחליפים את הפרטים הבאים:
MODEL_ID: המזהה של המודל שאליו רוצים לשלוח שאילתה.
אם אתם משתמשים ב-Vertex AI Model Garden, צריך לציין
text-embedding-004אוtext-multilingual-embedding-002. אלה המודלים מבוססי-הענן ש-Cloud SQL יכול להשתמש בהם להטמעות טקסט. מידע נוסף זמין במאמר בנושא הטמעות של טקסט.VERSION_TAG (אופציונלי): תג הגרסה של המודל שאליו מתבצעת השאילתה. בגרסאות של
textembedding-geckoשקודמות לגרסהtext-embedding-004או לגרסהtext-multilingual-embedding-002, מוסיפים את התג@לפני התג.אם אתם משתמשים באחד מהמודלים של
textembedding-geckoעם Vertex AI, צריך לציין אחד מתגי הגרסה שמופיעים בגרסאות המודלים.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אוtextembedding-geckoעם Vertex AI, צריך לציין768.
אופציונלי: אם התקנתם את התוסף pgvector, תוכלו לאחסן הטמעות כערכים של vector:
ALTER TABLE TABLE ADD COLUMN EMBEDDING_COLUMN vector(DIMENSIONS);
אחרי שיוצרים עמודה לאחסון הטמעות, אפשר לאכלס אותה על סמך הערכים שכבר מאוחסנים בעמודה אחרת באותה טבלה:
UPDATE TABLE SET EMBEDDING_COLUMN = embedding('MODEL_IDVERSION_TAG', SOURCE_TEXT_COLUMN);
מחליפים את הפרטים הבאים:
TABLE: שם הטבלה.
EMBEDDING_COLUMN: השם של עמודת ההטמעה.
MODEL_ID: המזהה של המודל שאליו רוצים לשלוח שאילתה.
אם אתם משתמשים ב-Vertex AI Model Garden, צריך לציין
text-embedding-004אוtext-multilingual-embedding-002. אלה המודלים מבוססי-הענן ש-Cloud SQL יכול להשתמש בהם להטמעות טקסט. מידע נוסף זמין במאמר בנושא הטמעות של טקסט.VERSION_TAG (אופציונלי): תג הגרסה של המודל שאליו רוצים לשלוח את השאילתה. בגרסאות של
textembedding-geckoשקודמות לגרסהtext-embedding-004או לגרסהtext-multilingual-embedding-002,Prepend the tag with@`.אם אתם משתמשים באחד מהמודלים של
textembedding-geckoעם Vertex AI, צריך לציין אחד מתגי הגרסה שמופיעים בגרסאות המודלים.SOURCE_TEXT_COLUMN: שם העמודה שבה מאוחסן הטקסט. אתם מתרגמים את הטקסט הזה להטמעות.
הפקודה הקודמת פועלת גם בעמודות הטמעה של real[] וגם בעמודות הטמעה של vector. אם עמודת ההטמעה היא מסוג vector, Cloud SQL מבצע המרה (cast) של ערך ההחזרה של embedding() ממערך real לערך vector באופן מרומז.
בדוגמה הבאה נעשה שימוש במודל text-embedding-004 כדי לאכלס את העמודה messages.message_vector ב-embeddings על סמך התוכן של העמודה 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_IDVERSION_TAG', 'TEXT')::vector
LIMIT ROW_COUNT
מחליפים את הפרטים הבאים:
RESULT_COLUMNS: העמודות שיוצגו משורות דומות מבחינה סמנטית.
TABLE: הטבלה שמכילה את ההטמעה שאליה משווים את הטקסט.
EMBEDDING_COLUMN: העמודה שמכילה את ההטמעות המאוחסנות.
MODEL_ID: המזהה של המודל שאליו רוצים לשלוח שאילתה.
אם אתם משתמשים ב-Vertex AI Model Garden, צריך לציין
text-embedding-004אוtext-embedding-multilingual-002. אלה המודלים מבוססי-הענן ש-Cloud SQL יכול להשתמש בהם להטמעות טקסט. מידע נוסף זמין במאמר בנושא הטמעות של טקסט.VERSION_TAG (אופציונלי): תג הגרסה של המודל שאליו רוצים לשלוח את השאילתה. מוסיפים את התג עם הקידומת
@.אם אתם משתמשים באחד מהמודלים של
textembedding-geckoעם Vertex AI, צריך לציין אחד מתגי הגרסה שמופיעים בגרסאות המודלים.TEXT: הטקסט שרוצים כדי למצוא את השכנים הסמנטיים הקרובים ביותר שמאוחסנים.
ROW_COUNT: מספר השורות שיש להחזיר. אם רוצים רק את ההתאמה הטובה ביותר, צריך לציין
1כערך של הפרמטר הזה.
כדי להריץ את השאילתה הזו עם עמודת הטמעה מאוחסנת שמשתמשת בסוג הנתונים real[] במקום vector, צריך להמיר את העמודה לסוג הנתונים vector:
SELECT RESULT_COLUMNS FROM TABLE
ORDER BY EMBEDDING_COLUMN::vector
<-> embedding('MODEL_IDVERSION_TAG', 'TEXT')::vector
LIMIT ROW_COUNT
שימוש בתגי גרסת מודל כדי למנוע שגיאות
מומלץ מאוד ב-Cloud SQL להשתמש תמיד בגרסה יציבה של מודל ההטמעות שבחרתם. ברוב המודלים, המשמעות היא שצריך להגדיר תג גרסה באופן מפורש.
הפעלת הפונקציה embedding() בלי לציין את תג הגרסה של המודל היא תקינה מבחינת התחביר, אבל היא עלולה לגרום לשגיאות.
אם משמיטים את תג הגרסה כשמשתמשים במודל ב-Vertex AI Model Garden, Vertex AI משתמש בגרסה האחרונה של המודל. יכול להיות שזו לא הגרסה היציבה העדכנית. מידע נוסף על גרסאות המודלים הזמינות של Vertex AI זמין במאמר גרסאות מודלים.
גרסה נתונה של מודל Vertex AI תמיד מחזירה את אותה תשובה embedding() לקלט טקסט נתון. אם לא מציינים את גרסת המודל בקריאות להטמעה, יכול להיות שגרסה חדשה של המודל שפורסמה תשנה באופן פתאומי את הווקטור שמוחזר עבור קלט נתון. הדבר עלול לגרום לשגיאות או להתנהגות לא צפויה אחרת באפליקציות.