בדף הזה מוסבר איך להשתמש ב-API של Gemini Enterprise Agent Platform text embedding כדי ליצור, לאחסן ולעדכן הטמעות טקסט לנתונים שמאוחסנים במסדי נתונים של Spanner עם ניב GoogleSQL ובמסדי נתונים עם ניב PostgreSQL.
הטבעת טקסט היא ייצוג וקטורי של נתוני טקסט, והיא משמשת בדרכים רבות למציאת פריטים דומים. אתם נתקלים בהם בכל פעם שאתם מבצעים חיפוש ב-Google או רואים המלצות כשאתם קונים באינטרנט. כשיוצרים הטמעות של טקסט, מקבלים ייצוגים וקטוריים של טקסט טבעי כמערכים של מספרים ממשיים. המשמעות היא שלכל טקסט קלט מוקצה ייצוג מספרי. על ידי השוואה של המרחק המספרי בין ייצוגי הווקטור של שני קטעי טקסט, אפליקציה יכולה לקבוע את הדמיון בין הטקסט או האובייקטים שמיוצגים על ידי הטקסט.
באמצעות Agent Platform text embeddings API, אפשר ליצור הטמעה של טקסט באמצעות AI גנרטיבי. במדריך הזה, משתמשים במודל הטמעת הטקסט של Agent Platform כדי ליצור הטמעות טקסט לנתונים שמאוחסנים ב-Spanner.
מידע נוסף על הטמעות טקסט ומודלים נתמכים זמין במאמר בנושא קבלת הטמעות טקסט.
מטרה
במדריך הזה תלמדו איך:
- רושמים מודל להטמעת טקסט ב-Agent Platform בסכימת Spanner באמצעות הצהרות DDL.
- אפשר להפנות למודל הרשום באמצעות שאילתות SQL כדי ליצור הטמעות מנתונים שמאוחסנים ב-Spanner.
תמחור
במדריך הזה נעשה שימוש ברכיבים של Google Cloudשחלים עליהם חיובים, כולל:
- Spanner
- Agent Platform
מידע נוסף על העלויות של Spanner מופיע בדף תמחור Spanner.
מידע נוסף על העלויות של Agent Platform זמין בדף התמחור של Agent Platform.
יצירה ושמירה של הטמעות טקסט
יצירת ההטמעות עשויה להימשך זמן מה, בהתאם למודל שבו אתם משתמשים. בעומסי עבודה שרגישים יותר לביצועים, מומלץ להימנע מיצירת הטמעות בעסקאות של קריאה וכתיבה. במקום זאת, אפשר ליצור את ההטמעות בטרנזקציה לקריאה בלבד באמצעות דוגמאות ה-SQL הבאות.
GoogleSQL
רישום של מודל הטמעות טקסט ב-Spanner
ב-GoogleSQL, צריך לרשום מודל לפני שמשתמשים בו עם הפונקציה ML.PREDICT. כדי לרשום את מודל הטמעת הטקסט של Agent Platform במסד נתונים של Spanner, מריצים את הצהרת ה-DDL הבאה:
CREATE MODEL MODEL_NAME
INPUT(
content STRING(MAX),
-- Optional: For models that support specifying task type.
task_type STRING(MAX),
)
OUTPUT(
embeddings
STRUCT<
statistics STRUCT<truncated BOOL, token_count FLOAT64>,
values ARRAY<FLOAT64>>
)
REMOTE OPTIONS (
endpoint = '//aiplatform.googleapis.com/projects/PROJECT/locations/LOCATION/publishers/google/models/$MODEL_NAME'
);
מחליפים את מה שכתוב בשדות הבאים:
-
MODEL_NAME: השם של מודל הטמעת הטקסט ב-Agent Platform -
PROJECT: הפרויקט שמארח את נקודת הקצה של Agent Platform -
LOCATION: המיקום של נקודת הקצה של Agent Platform
מערכת Spanner מעניקה את ההרשאות המתאימות באופן אוטומטי. אם לא, כדאי לעיין במאמר בנושא בקרת גישה לנקודות קצה של מודלים.
אי אפשר לגלות ולבדוק סכימות במודלים של AI גנרטיבי. עליך לספק סעיפים של INPUT ושל OUTPUT שתואמים לסכימת המודלים. כאן אפשר לראות את הסכימה המלאה של מודל הטמעת הטקסט.
יצירת הטמעות טקסט
כדי ליצור הטמעות, מעבירים קטע טקסט ישירות לפונקציה ML.PREDICT באמצעות ה-SQL הבא:
SELECT embeddings.values
FROM ML.PREDICT(
MODEL MODEL_NAME,
(SELECT "A product description" as content)
);
כדי ליצור הטמעות של נתונים שמאוחסנים בטבלה, משתמשים ב-SQL הבא:
SELECT id, embeddings.values
FROM ML.PREDICT(
MODEL MODEL_NAME,
(SELECT id, description as content FROM Products)
);
כדי לציין סוג משימה ומאפייני פלט:
UPDATE Products p
SET description_embedding = (
SELECT embeddings.values
FROM ML.PREDICT(
MODEL MODEL_NAME,
(SELECT p.description as content, "RETRIEVAL_DOCUMENT" as task_type),
STRUCT(768 AS outputDimensionality)
));
SELECT p.product_id, p.name, p.description, COSINE_DISTANCE(
p.description_embedding,
(
SELECT embeddings.values
FROM ML.PREDICT(
MODEL MODEL_NAME,
(SELECT @user_query as content, "RETRIEVAL_QUERY" as task_type),
STRUCT(768 AS outputDimensionality)
)
)
) AS distance
FROM Products p
ORDER BY distance
LIMIT 5;
אחסון הטמעות של טקסט
אחרי יצירת ההטמעות בעסקה לקריאה בלבד, מאחסנים אותן ב-Spanner כדי שאפשר יהיה לנהל אותן באמצעות הנתונים התפעוליים. כדי לאחסן את ההטמעות, משתמשים בטרנזקציה של קריאה וכתיבה.
עבור עומסי עבודה שפחות רגישים לביצועים, אפשר ליצור ולהוסיף הטמעות באמצעות ה-SQL הבא בעסקת קריאה-כתיבה:
CREATE TABLE Products(
id INT64 NOT NULL,
description STRING(MAX),
embeddings ARRAY<FLOAT32>,
) PRIMARY KEY(id);
INSERT INTO Products (id, description, embeddings)
SELECT @Id, @Description, embeddings.values
FROM ML.PREDICT(
MODEL MODEL_NAME,
(SELECT @Description as content)
);
PostgreSQL
יצירת הטמעות טקסט
כדי ליצור הטמעות, מעבירים קטע טקסט ישירות לפונקציה spanner.ML_PREDICT_ROW באמצעות ה-SQL הבא:
SELECT
spanner.ML_PREDICT_ROW(
'projects/PROJECT/locations/LOCATION/publishers/google/models/$MODEL_NAME',
'{"instances": [{"content": "A product description"}]}'::jsonb
) ->'predictions'->0->'embeddings'->'values';
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT: הפרויקט שמארח את נקודת הקצה של Agent Platform -
LOCATION: המיקום של נקודת הקצה של Agent Platform -
MODEL_NAME: השם של מודל הטמעת הטקסט ב-Agent Platform
כדי ליצור הטמעות של נתונים שמאוחסנים בטבלה, משתמשים ב-SQL הבא:
SELECT id, spanner.ML_PREDICT_ROW(
'projects/PROJECT/locations/LOCATION/publishers/google/models/$MODEL_NAME',
JSONB_BUILD_OBJECT('instances', JSONB_BUILD_ARRAY(JSONB_BUILD_OBJECT('content', description))))
) -> 'predictions'->0->'embeddings'->'values'
FROM Products;
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT: הפרויקט שמארח את נקודת הקצה של Agent Platform -
LOCATION: המיקום של נקודת הקצה של Agent Platform -
MODEL_NAME: השם של מודל הטמעת הטקסט ב-Agent Platform
כדי לציין סוג משימה ומאפייני פלט:
UPDATE Products p
SET description_embedding = spanner.float64_array(
spanner.ML_PREDICT_ROW(
'projects/PROJECT/locations/LOCATION/publishers/google/models/$MODEL_NAME',
JSONB_BUILD_OBJECT(
'instances', JSONB_BUILD_ARRAY(
JSONB_BUILD_OBJECT(
'content', p.description,
'task_type', 'RETRIEVAL_DOCUMENT'
)
),
'parameters', JSONB_BUILD_OBJECT('outputDimensionality', 768)
)
)->'predictions'->0->'embeddings'->'values'
);
SELECT p.product_id, p.name, p.description, spanner.COSINE_DISTANCE(
p.description_embedding,
spanner.float64_array(
spanner.ML_PREDICT_ROW(
'projects/PROJECT/locations/LOCATION/publishers/google/models/$MODEL_NAME',
JSONB_BUILD_OBJECT(
'instances', JSONB_BUILD_ARRAY(
JSONB_BUILD_OBJECT(
'content', $1,
'task_type', 'RETRIEVAL_QUERY'
)
),
'parameters', JSONB_BUILD_OBJECT('outputDimensionality', 768)
)
)->'predictions'->0->'embeddings'->'values'
)
) AS distance
FROM Products p
ORDER BY distance
LIMIT 5;
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT: הפרויקט שמארח את נקודת הקצה של Agent Platform -
LOCATION: המיקום של נקודת הקצה של Agent Platform -
MODEL_NAME: השם של מודל הטמעת הטקסט ב-Agent Platform
אחסון הטמעות של טקסט
אחרי יצירת ההטמעות בעסקה לקריאה בלבד, מאחסנים אותן ב-Spanner כדי שאפשר יהיה לנהל אותן באמצעות הנתונים התפעוליים. כדי לאחסן את ההטמעות, משתמשים בטרנזקציה של קריאה וכתיבה.
עבור עומסי עבודה שפחות רגישים לביצועים, אפשר ליצור ולהוסיף הטמעות באמצעות ה-SQL הבא בעסקת קריאה-כתיבה:
CREATE TABLE Products (
id INT8 NOT NULL,
description TEXT,
embeddings REAL[],
PRIMARY KEY(id)
);
INSERT INTO Products (id, description, embeddings)
SELECT @Id, @Description, spanner.FLOAT32_ARRAY(spanner.ML_PREDICT_ROW(
'projects/PROJECT/locations/LOCATION/publishers/google/models/$MODEL_NAME',
JSONB_BUILD_OBJECT('instances', JSONB_BUILD_ARRAY(JSONB_BUILD_OBJECT('content', @Description)))
) -> 'predictions'->0->'embeddings'->'values'
));
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT: הפרויקט שמארח את נקודת הקצה של Agent Platform -
LOCATION: המיקום של נקודת הקצה של Agent Platform -
MODEL_NAME: השם של מודל הטמעת הטקסט ב-Agent Platform
עדכון הטמעות טקסט
כדי לעדכן את ההטמעות או להטמיע נתונים בזמן אמת, משתמשים בהצהרה UPDATE(GoogleSQL ו-PostgreSQL).
כדי לעדכן את הטבלה Products בדוגמה הקודמת, משתמשים ב-SQL הבא:
GoogleSQL
UPDATE Products
SET
description = @description,
embeddings = (SELECT embeddings.values
FROM ML.PREDICT(MODEL MODEL_NAME, (SELECT @description as content))
)
WHERE id = @id;
מחליפים את מה שכתוב בשדות הבאים:
-
MODEL_NAME: השם של מודל הטמעת הטקסט ב-Agent Platform
PostgreSQL
UPDATE
Products
SET
description = $1,
embeddings = spanner.FLOAT32_ARRAY(
spanner.ML_PREDICT_ROW(
'projects/PROJECT/locations/LOCATION/publishers/google/models/$MODEL_NAME',
JSONB_BUILD_OBJECT('instances', JSONB_BUILD_ARRAY(JSONB_BUILD_OBJECT('content', $1)))
) -> 'predictions'->0->'embeddings'->'values')
WHERE
id = $2;
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT: הפרויקט שמארח את נקודת הקצה של Agent Platform -
LOCATION: המיקום של נקודת הקצה של Agent Platform -
MODEL_NAME: השם של מודל הטמעת הטקסט ב-Agent Platform
המאמרים הבאים
- איך משתמשים ב-Agent Platform Vector Search כדי לחפש פריטים דומים מבחינה סמנטית
- בקורס המהיר שלנו בנושא הטמעות אפשר לקרוא מידע נוסף על למידת מכונה והטמעות.
- מידע נוסף על מודלים להטמעת טקסט ב-Agent Platform