יצירת הטמעת נתונים אוטונומית
במסמך הזה מוסבר איך להשתמש ביצירת הטמעות אוטונומיות לנתונים, שמאפשרת ל-BigQuery לתחזק עמודה של הטמעות בטבלה על סמך עמודת מקור. סוג הנתונים בעמודת המקור חייב להיות STRING או ObjectRef. כשמוסיפים או משנים נתונים בעמודת המקור, BigQuery יוצר או מעדכן באופן אוטומטי את עמודת ההטמעה של הנתונים האלה באמצעות מודל הטמעה של Agent Platform.
האפשרות הזו שימושית אם אתם רוצים ש-BigQuery יתחזק את ההטמעות כשנתוני המקור מתעדכנים באופן קבוע.
הטמעות שימושיות לאפליקציות מודרניות של AI גנרטיבי, כמו Retrieval Augmented Generation (RAG), אבל יכול להיות מורכב ליצור, לנהל ולשלוח שאילתות לגביהן. אתם יכולים להשתמש ביצירת הטמעות אוטונומית כדי לפשט את התהליך של יצירה, תחזוקה ושאילתות של הטמעות לשימוש בחיפושים דומים ובאפליקציות אחרות של AI גנרטיבי.
לדוגמה, אתם יכולים להשתמש בשאילתות דומות לשאילתות הבאות כדי ליצור טבלה עם הטמעה אוטונומית, להוסיף נתונים ואז לבצע חיפוש סמנטי:
CREATE TABLE mydataset.products (
name STRING,
description STRING,
description_embedding STRUCT<result ARRAY<FLOAT64>, status STRING>
GENERATED ALWAYS AS (
AI.EMBED(description, connection_id => 'us.example_connection',
endpoint => 'text-embedding-005')
# Alternatively, you can use the syntax for a built-in model.
# AI.EMBED(description, model => 'embeddinggemma-300m')
) STORED OPTIONS( asynchronous = TRUE ));
# Values in the description_embedding column are automatically generated.
INSERT INTO mydataset.products (name, description) VALUES
('Super slingers', 'An exciting board game for the whole family'), ...;
SELECT * FROM AI.SEARCH(TABLE mydataset.products, 'description', 'A really fun toy');
לפני שמתחילים
כדי להפעיל יצירת הטמעות אוטונומית בטבלה, צריך את ההרשאות והחיבור הנדרשים, ולהפעיל את Vertex AI API בפרויקט.
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות להפעלת יצירת הטמעות אוטונומית, בקשו מהאדמין להקצות לכם את התפקידים הבאים ב-IAM:
-
כדי להשתמש במשאב של חיבור:
משתמש בחיבורים של BigQuery (
roles/bigquery.connectionUser) בחיבור -
כדי ליצור או לשנות טבלה:
BigQuery Data Editor (
roles/bigquery.dataEditor) בטבלה -
מקצים לחשבון השירות של החיבור את התפקיד הבא, כדי שתהיה לו גישה למודלים שמתארחים בנקודות הקצה של Agent Platform:
משתמש ב-Agent Platform (
roles/aiplatform.user) בפרויקט שבו נמצא החיבור
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
יצירת חיבור והענקת הרשאה לחשבון שירות
כדי להפעיל יצירת הטמעות אוטונומית בטבלה, צריך ליצור קישור למשאבים ב-Cloud.
לאחר מכן, מקצים את התפקיד "משתמש בפלטפורמת הסוכן" (roles/aiplatform.user) לחשבון השירות שנוצר כשיצרתם את החיבור.
יצירת עמודת הטמעה שנוצרת באופן אוטומטי
אתם יכולים ליצור עמודת הטמעה שנוצרת באופן אוטומטי בטבלה חדשה, או להוסיף עמודה כזו לטבלה קיימת.
כשמגדירים את הפונקציה AI.EMBED לעמודת הטמעה שנוצרת באופן אוטומטי, אם לא מציינים את הארגומנט task_type והמודל תומך ב-task_type, אז BigQuery מגדיר את task_type כ-RETRIEVAL_DOCUMENT כברירת מחדל.
כששולחים שאילתה לטבלה באמצעות הפונקציה AI.SEARCH או הפונקציה VECTOR_SEARCH, המערכת של BigQuery יוצרת את הטמעת השאילתה תוך כדי תנועה באמצעות ההתנהגות הבאה של task_type:
- אם בעמודת ההטמעה של הטבלה נעשה שימוש ב-
RETRIEVAL_DOCUMENT, כברירת מחדל או באופן מפורש, BigQuery משתמש ב-RETRIEVAL_QUERYכדי להטמיע את שאילתת החיפוש. - אחרת, BigQuery משתמש באותו
task_typeשהוגדר לעמודת ההטמעה של הטבלה.
יצירת טבלה עם עמודת הטמעה שנוצרת באופן אוטומטי
כדי ליצור הטמעות באופן אוטונומי, אתם יכולים להשתמש בפונקציה AI.EMBED בהצהרת CREATE TABLE.
SQL
משתמשים בהצהרת CREATE TABLE כדי ליצור טבלה עם עמודת הטמעה שנוצרת באופן אוטומטי. כדי ליצור את הטבלה:
נכנסים לדף BigQuery במסוף Google Cloud .
בעורך השאילתות, מזינים את ההצהרה הבאה:
CREATE TABLE DATASET_ID.TABLE ( [COLUMN, ...] SOURCE_COL { STRING | ObjectRef }, EMBEDDING_COL_NAME STRUCT<result ARRAY<FLOAT64>, status STRING> GENERATED ALWAYS AS ( AI.EMBED( SOURCE_COL, { connection_id => CONNECTION_ID, endpoint => ENDPOINT | model => MODEL }) ) STORED OPTIONS (asynchronous = TRUE) );
מחליפים את מה שכתוב בשדות הבאים:
-
DATASET_ID: שם מערך הנתונים שבו רוצים ליצור את הטבלה. -
TABLE: שם הטבלה שבה רוצים ליצור הטמעה אוטונומית. -
COLUMN, ...: כל עמודה שהטבלה צריכה להכיל, חוץ מהעמודה שרוצים להטמיע באופן אוטומטי. -
SOURCE_COL: שם העמודהSTRINGאוObjectRefשרוצים להטמיע באופן אוטומטי. -
EMBEDDING_COL_NAME: השם של עמודת ההטמעה שנוצרה באופן אוטומטי. -
CONNECTION_ID: ערךSTRINGשמכיל את שם החיבור שבו רוצים להשתמש, למשלmy_project.us.example_connection. אתם צריכים להקצות את התפקיד משתמש בפלטפורמת Agent לחשבון השירות של החיבור בפרויקט שבו אתם יוצרים את הטבלה. -
ENDPOINT: ערךSTRINGשמציין נקודת קצה נתמכת של מודל הטמעת טקסט ב-Agent Platform, שבה משתמשים במודל הטמעת הטקסט. ערך נקודת הקצה (endpoint) שאתם מציינים צריך לכלול את גרסת המודל, לדוגמה,text-embedding-005. אם מציינים את שם המודל במקום כתובת URL, BigQuery ML מזהה את המודל באופן אוטומטי ומשתמש בנקודת הקצה המלאה של המודל. -
MODEL(גרסת טרום-השקה (Preview)): ערךSTRINGשמציין מודל מובנה להטמעת טקסט. הערך הנתמך היחיד הוא המודלembeddinggemma-300m. אם מציינים את הפרמטר הזה, אי אפשר לציין את הפרמטריםendpointאוconnection_id. כשמציינים את הפרמטרMODEL, הנתונים נשארים ב-BigQuery והמשבצות משמשות ליצירת ההטמעות. לא נשלחים נתונים ל-Agent Platform ואין חיובים ב-Agent Platform.
-
לוחצים על הפעלה.
מידע נוסף על הרצת שאילתות זמין במאמר הרצת שאילתה אינטראקטיבית.
BQ
כדי ליצור טבלה עם עמודת הטמעה שנוצרת באופן אוטומטי באמצעות כלי שורת הפקודה של BigQuery, משתמשים בפקודה bq mk עם קובץ סכימה בפורמט JSON שמגדיר את סכימת הטבלה:
יוצרים קובץ סכימת JSON. בדוגמה הבאה מוצגת סכימה שיוצרת עמודת הטמעה על סמך עמודת מקור. בדוגמה הזו, נקודת הקצה של Agent Platform משמשת ליצירת הטמעה.
[ { "name": "SOURCE_COL", "type": "STRING" }, { "fields": [ { "mode": "REPEATED", "name": "result", "type": "FLOAT" }, { "name": "status", "type": "STRING" } ], "generatedColumn": { "generationExpressionInfo": { "asynchronous": true, "generationExpression": "AI.EMBED(SOURCE_COL, connection_id => 'CONNECTION_ID', endpoint => 'ENDPOINT')", "stored": true }, "generatedMode": "GENERATED_ALWAYS" }, "name": "EMBEDDING_COL_NAME", "type": "RECORD" } ]אם אתם משתמשים במודל מובנה במקום בנקודת קצה של Agent Platform, השתמשו בתחביר שדומה לזה של
generationExpression:"AI.EMBED(SOURCE_COL, model => 'MODEL')"כדי לדעת באילו ערכים להשתמש, קראו את התיאורים של
SOURCE_COL,EMBEDDING_COL_NAME,CONNECTION_ID,ENDPOINTו-MODELבכרטיסייה SQL.שומרים את הסכימה בקובץ, למשל
schema.json.יוצרים את הטבלה באמצעות הפקודה
bq mk --table:bq mk --table DATASET_ID.TABLE schema.json
מחליפים את מה שכתוב בשדות הבאים:
-
DATASET_ID: שם מערך הנתונים שבו רוצים ליצור את הטבלה. -
TABLE: שם הטבלה שבה רוצים ליצור הטמעה אוטונומית. -
COLUMN, ...: כל העמודות שהטבלה צריכה להכיל, חוץ מהעמודה שרוצים להטמיע באופן אוטומטי. -
STRING_COL: שם העמודה ב-STRINGשרוצים להטמיע באופן אוטומטי. -
EMBEDDING_COL_NAME: השם של עמודת ההטמעה שנוצרה באופן אוטומטי. -
CONNECTION_ID: ערךSTRINGשמכיל את שם החיבור שבו רוצים להשתמש, למשלmy_project.us.example_connection. אתם צריכים להקצות את התפקיד Agent Platform User לחשבון השירות של החיבור בפרויקט שבו אתם יוצרים את הטבלה. -
ENDPOINT: ערךSTRINGשמציין נקודת קצה נתמכת של מודל הטמעת טקסט ב-Agent Platform, שבה משתמשים במודל הטמעת הטקסט. ערך נקודת הקצה (endpoint) שאתם מציינים צריך לכלול את גרסת המודל, לדוגמהtext-embedding-005. אם מציינים את שם המודל במקום כתובת URL, BigQuery ML מזהה את המודל באופן אוטומטי ומשתמש בנקודת הקצה המלאה של המודל.
MODEL(גרסת טרום-השקה (Preview)): ערךSTRINGשמציין מודל מובנה להטמעת טקסט. הערך הנתמך היחיד הוא המודלembeddinggemma-300m. אם מציינים את הפרמטר הזה, אי אפשר לציין את הפרמטריםendpointאוconnection_id.כשמציינים את הפרמטר
MODEL, הנתונים נשארים ב-BigQuery והמשבצות משמשות ליצירת ההטמעות. לא נשלחים נתונים ל-Agent Platform ואין חיובים ב-Agent Platform.
הוספת עמודת הטמעה שנוצרת באופן אוטומטי לטבלה קיימת
אפשר גם להוסיף עמודת הטמעה שנוצרת באופן אוטומטי לטבלה קיימת באמצעות הצהרת ALTER TABLE ADD COLUMN.
SQL
משתמשים בהצהרת ALTER TABLE ADD COLUMN כדי להוסיף לטבלה קיימת עמודת הטמעה שנוצרת באופן אוטומטי. כדי להוסיף את העמודה, פועלים לפי השלבים הבאים:
נכנסים לדף BigQuery במסוף Google Cloud .
בעורך השאילתות, מזינים את ההצהרה הבאה:
ALTER TABLE DATASET_ID.TABLE ADD COLUMN EMBEDDING_COL_NAME STRUCT<result ARRAY<FLOAT64>, status STRING> GENERATED ALWAYS AS ( AI.EMBED( SOURCE_COL, { connection_id => CONNECTION_ID, endpoint => ENDPOINT | model => MODEL }) ) STORED OPTIONS (asynchronous = TRUE) ;
מחליפים את מה שכתוב בשדות הבאים:
-
DATASET_ID: השם של קבוצת הנתונים שמכילה את הטבלה. -
TABLE: שם הטבלה שאליה רוצים להוסיף את עמודת ההטמעה שנוצרה באופן אוטומטי. -
EMBEDDING_COL_NAME: השם של עמודת ההטמעה שנוצרה באופן אוטומטי. -
SOURCE_COL: שם העמודהSTRINGאוObjectRefשרוצים להטמיע באופן אוטומטי. -
CONNECTION_ID: ערךSTRINGשמכיל את שם החיבור שבו רוצים להשתמש, למשלmy_project.us.example_connection. -
ENDPOINT: ערךSTRINGשמציין נקודת קצה נתמכת של מודל הטמעת טקסט ב-Agent Platform, שבה משתמשים במודל הטמעת הטקסט. -
MODEL(גרסת טרום-השקה (Preview)): ערךSTRINGשמציין מודל מובנה להטמעת טקסט. הערך הנתמך היחיד הוא המודלembeddinggemma-300m. אם מציינים את הפרמטר הזה, אי אפשר לציין את הפרמטריםendpointאוconnection_id. כשמציינים את הפרמטרMODEL, הנתונים נשארים ב-BigQuery והמשבצות משמשות ליצירת ההטמעות. לא נשלחים נתונים ל-Agent Platform ואין חיובים ב-Agent Platform.
-
לוחצים על הפעלה.
מידע נוסף על הרצת שאילתות זמין במאמר הרצת שאילתה אינטראקטיבית.
BQ
כדי להוסיף לטבלה קיימת עמודת הטמעה שנוצרה באופן אוטומטי, משתמשים בפקודה bq update של כלי שורת הפקודה של BigQuery עם קובץ סכימת JSON שמגדיר את סכימת הטבלה המעודכנת:
- מורידים את הסכימה הנוכחית של הטבלה ושומרים אותה בקובץ, למשל
schema.json:bq show --schema --format=prettyjson DATASET_ID.TABLE > schema.json
עורכים את
schema.jsonכדי להוסיף את ההגדרה של עמודת ההטמעה החדשה שנוצרה באופן אוטומטי. בדוגמה הבאה מוצגת ההגדרה של עמודת הטמעה שמבוססת על עמודת מקור. בדוגמה הזו, נקודת הקצה של Agent Platform משמשת ליצירת הטמעה.[ { "name": "SOURCE_COL", "type": "STRING" }, { "fields": [ { "mode": "REPEATED", "name": "result", "type": "FLOAT" }, { "name": "status", "type": "STRING" } ], "generatedColumn": { "generationExpressionInfo": { "asynchronous": true, "generationExpression": "AI.EMBED(SOURCE_COL, connection_id => 'CONNECTION_ID', endpoint => 'ENDPOINT')", "stored": true }, "generatedMode": "GENERATED_ALWAYS" }, "name": "EMBEDDING_COL_NAME", "type": "RECORD" } ]אם אתם משתמשים במודל מובנה במקום בנקודת קצה של Agent Platform, השתמשו בתחביר שדומה לזה של
generationExpression:"AI.EMBED(SOURCE_COL, model => 'MODEL')"כדי לדעת באילו ערכים להשתמש, קראו את התיאורים של
SOURCE_COL,EMBEDDING_COL_NAME,CONNECTION_ID,ENDPOINTו-MODELבכרטיסייה SQL.מעדכנים את הטבלה באמצעות הפקודה
bq update --table:bq update --table DATASET_ID.TABLE schema.json
מחליפים את מה שכתוב בשדות הבאים:
-
DATASET_ID: השם של קבוצת הנתונים שמכילה את הטבלה. -
TABLE: שם הטבלה שאליה רוצים להוסיף את עמודת ההטמעה שנוצרה באופן אוטומטי.
-
המשימה להטמעת נתונים ברקע מתחילה זמן קצר אחרי שיוצרים או משנים את הטבלה, או אחרי שמעדכנים את הנתונים בעמודת המקור.
כדי לעקוב אחרי ההתקדמות של יצירת ההטמעה, אתם יכולים להשתמש בשאילתה דומה לזו:
SELECT
COUNT(*) AS total_num_rows,
COUNTIF(description_embedding IS NOT NULL
AND description_embedding.status = '') AS total_num_generated_embeddings
FROM
PROJECT_ID.DATASET_ID.TABLE;
אחרי שיוצרים את הטבלה עם ההטמעות, אפשר ליצור אינדקס וקטורי בעמודה STRUCT שמכילה את ההטמעה שנוצרה באופן אוטומטי.
דוגמה
נניח שאתם קמעונאים גדולים שמוכרים הרבה מוצרים שונים. יש לכם טבלה של שמות ותיאורים של מוצרים, ואתם רוצים לעזור ללקוחות למצוא את המוצרים שהם מחפשים. השאילתות הבאות מראות איך להגדיר יצירת הטמעות אוטונומית כדי לעזור בחיפוש סמנטי של תיאורי המוצרים.
קודם כל, יוצרים מערך נתונים:
CREATE SCHEMA mydataset;
בשלב הבא, יוצרים טבלה שבה מופעלת יצירת הטמעות אוטונומית, כדי לשמור את פרטי המוצרים. העמודה שנוצרת באופן אוטומטי נקראת description_embedding והיא מבוססת על העמודה description.
# Create a table of products and descriptions with a generated embedding column.
CREATE TABLE mydataset.products (
name STRING,
description STRING,
description_embedding STRUCT<result ARRAY<FLOAT64>, status STRING>
GENERATED ALWAYS AS (
AI.EMBED(description, connection_id => 'us.example_connection',
endpoint => 'text-embedding-005')
# Alternatively, you can use the syntax for a built-in model.
# AI.EMBED(description, model => 'embeddinggemma-300m')
) STORED OPTIONS( asynchronous = TRUE )
);
השאילתה הבאה מוסיפה לטבלה כמה שמות ותיאורים של מוצרים.
לא מציינים ערך ל-description_embedding כי הוא נוצר באופן אוטומטי.
# Insert product descriptions into the table.
# The description_embedding column is automatically updated.
INSERT INTO mydataset.products (name, description) VALUES
("Lounger chair", "A comfortable chair for relaxing in."),
("Super slingers", "An exciting board game for the whole family."),
("Encyclopedia set", "A collection of informational books.");
אם רוצים, אפשר ליצור אינדקס וקטורי בטבלה כדי לזרז את החיפוש.
אינדקס וקטורי דורש יותר משלוש שורות, לכן השאילתה הבאה מניחה שהוספתם נתונים נוספים. בכל פעם שמוסיפים נתונים, העמודה description_embedding מתעדכנת באופן אוטומטי.
CREATE VECTOR INDEX my_index
ON mydataset.products(description_embedding)
OPTIONS(index_type = 'IVF');
לבסוף, אתם יכולים להשתמש בפונקציה AI.SEARCH כדי לבצע חיפוש סמנטי במוצרים שלכם ולמצוא צעצוע מהנה:
# Search for products that are fun to play with.
SELECT base.name, base.description, distance
FROM AI.SEARCH(TABLE mydataset.products, 'description', "A really fun toy");
/*------------------+----------------------------------------------+----------------------+
| name | description | distance |
+------------------+----------------------------------------------+----------------------+
| Super slingers | An exciting board game for the whole family. | 0.80954913893618929 |
| Lounger chair | A comfortable chair for relaxing in. | 0.938933930620146 |
| Encyclopedia set | A collection of informational books. | 1.1119297739353384 |
+------------------+----------------------------------------------+----------------------*/
נוצרו הטמעות מ-ObjectRef עמודות
אתם יכולים להוסיף עמודות הטמעה שנוצרו לעמודת ObjectRef בטבלה.
בדוגמה הבאה מוסבר איך ליצור טבלה עם עמודת ObjectRef, ואז להוסיף עמודת הטמעה שנוצרה בשביל העמודה הזו:
# Create a table with ObjectRef columns.
CREATE TABLE mydataset.images AS
SELECT
REGEXP_EXTRACT(ref.uri, r'.*/(.*).jpg$') AS name,
ref
FROM mydataset.object_table;
# Add a generated embedding column for the ObjectRef column.
ALTER TABLE mydataset.images
ADD COLUMN image_embedding STRUCT<result ARRAY<FLOAT64>, status STRING>
GENERATED ALWAYS AS (
AI.EMBED(
ref,
connection_id => "us.my_connection",
endpoint => "multimodalembedding@001")
)
STORED OPTIONS (asynchronous = true);
מידע על עמודות הטמעה שנוצרות באופן אוטומטי
כדי לוודא שעמודה היא עמודת הטמעה שנוצרה באופן אוטומטי, שולחים שאילתה לתצוגה INFORMATION_SCHEMA.COLUMNS.
השאילתה הבאה מציגה מידע על כל עמודות ההטמעה שנוצרו באופן אוטומטי:
SELECT *
FROM PROJECT_ID.DATASET_ID.INFORMATION_SCHEMA.COLUMNS
WHERE is_generated = 'ALWAYS';
בשדה generation_expression מוצגת הקריאה לפונקציה AI.EMBED שמשמשת ליצירת ההטמעות בעמודה, כולל הארגומנט שמוגדר כברירת מחדל task_type => 'RETRIEVAL_DOCUMENT' אם לא ציינתם task_type למודל שתומך בכך.
שימוש בהזמנה משלכם
כברירת מחדל, BigQuery משתמש במשבצות על פי דרישה כדי לטפל בעיבוד שנדרש לתחזוקת עמודת ההטמעה שנוצרה. כדי להבטיח ביצועים צפויים ועקביים, אפשר ליצור הזמנה ולהגדיר את job_type ל-BACKGROUND. אם יש הזמנה ברקע, BigQuery משתמש בה כדי לתחזק את עמודת ההטמעה שנוצרה.
מכסות
כשמשתמשים בנקודת קצה של Agent Platform כדי ליצור הטמעות, מציינים את הפרמטר endpoint בפונקציה AI.EMBED, ו-BigQuery שולח בקשות ל-Agent Platform כדי ליצור הטמעות. הבקשות האלה כפופות למכסות של Agent Platform. המכסה של בקשות לדקה במודל ההטמעה משפיעה ישירות על התפוקה של משימות ליצירת הטמעות ברקע. אם יצירת ההטמעה איטית, אתם יכולים לבקש להגדיל את המכסה של Agent Platform לפי ההוראות שבמאמר בקשה להגדלת המכסה. אם מציינים את הפרמטר model בפונקציה AI.EMBED, ההטמעות נוצרות ב-BigQuery ולא נשלחות בקשות ל-Agent Platform, ולכן המכסות של Agent Platform לא חלות.
פתרון בעיות
עמודת ההטמעה שנוצרה מכילה שני שדות: result ו-status.
אם מתרחשת שגיאה כש-BigQuery מנסה ליצור הטמעה לשורה מסוימת בטבלה, השדה result הוא NULL והשדה status מתאר את השגיאה. לדוגמה, אם עמודת המקור היא NULL, גם ההטמעה של result היא NULL והסטטוס הוא NULL value is not supported for embedding generation.
שגיאה חמורה יותר יכולה לעכב את יצירת ההטמעה. במקרה כזה, אפשר לשלוח שאילתה לעמודה async_generation_status בתצוגה INFORMATION_SCHEMA.COLUMNS כדי לזהות את השגיאה שחוסמת את השאילתה.
שגיאות חסימה יכולות לכלול את הדברים הבאים:
- שגיאות מסוג Permission denied
- שגיאות מסוג "לא נמצא"
- שגיאות בנקודת הקצה של מודל הטמעה שלא נתמך
- שגיאות שקשורות ל-Vertex AI API שלא הופעל
אחרי שהמשימה הבאה ליצירת הטמעות מסתיימת בהצלחה, העמודה async_generation_status נמחקת.
השאילתה הבאה מראה איך לבדוק אם יש שגיאות חסימה:
SELECT
column_name,
async_generation_status
FROM
mydataset.INFORMATION_SCHEMA.COLUMNS
WHERE
table_name = 'images';
אם בעמודה image_embedding יש שגיאה שחוסמת את ההעלאה, התוצאה תהיה דומה לזו:
[
{
"column_name": "image_embedding",
"async_generation_status": {
"blocking_error": {
"message": "<service_account> does not have the permission to access resources used by AI.EMBED. Please follow https://docs.cloud.google.com/bigquery/docs/permissions-for-ai-functions to set up permissions.",
...
}
}
}
]
אפשר גם לשלוח שאילתה לתצוגה INFORMATION_SCHEMA.JOBS של משימת הרקע ולעיין במידע שבשדה error_result.
מזהה המשימה של משימת הטמעה ברקע מתחיל ב-gc_. לדוגמה, השאילתה הבאה מחלצת את כל המשימות ברקע שתוצאת השגיאה שלהן היא לא NULL:
SELECT * FROM `region-REGION.INFORMATION_SCHEMA.JOBS` j
WHERE EXISTS (
SELECT 1
FROM unnest(j.referenced_tables) t
WHERE
j.project_id = 'PROJECT_ID'
AND t.dataset_id = 'DATASET_ID'
AND t.table_id = 'TABLE'
)
AND starts_with(job_id, 'gc')
AND error_result IS NOT NULL
ORDER BY j.creation_time DESC;
מעקב אחרי העלויות
העלויות של יצירת הטמעות אוטונומיות מתחלקות לקטגוריות הבאות.
עלויות של DML ברקע ב-BigQuery
המערכת כותבת את ההטמעות שנוצרו בטבלה באמצעות משימות DML ברקע. כברירת מחדל, BigQuery משתמש ב-on-demand slots כדי לטפל במשימות האלה. הפרויקט של הטבלה מחויב לפי מודל החיוב על פי דרישה של DML.
לחלופין, כדי להבטיח ביצועים צפויים ועקביים, אפשר ליצור הזמנה ולהגדיר את job_type ל-BACKGROUND. אם יש הקצאה ברקע, BigQuery משתמש בה כדי להריץ את משימות ה-DML ברקע. וההזמנה ברקע תחויב על השימוש בזמן ה-slot של משימות ה-DML ברקע.
כדי לעקוב אחרי הערכים של total_slot_ms ו-total_bytes_billed במשימות DML שפועלות ברקע בטבלה, שולחים שאילתה לתצוגה INFORMATION_SCHEMA.JOBS כדי למצוא משימות עם הקידומת gc_ של job_id:
SELECT
job_id,
creation_time,
reservation_id,
total_slot_ms,
total_bytes_processed,
total_bytes_billed
FROM
`region-REGION.INFORMATION_SCHEMA.JOBS` j
WHERE
EXISTS (
SELECT 1
FROM UNNEST(j.referenced_tables) t
WHERE
j.project_id = 'PROJECT_ID'
AND t.dataset_id = 'DATASET_ID'
AND t.table_id = 'TABLE'
)
AND STARTS_WITH(job_id, 'gc_')
ORDER BY
j.creation_time DESC;
מחליפים את מה שכתוב בשדות הבאים:
-
REGION: האזור של קבוצת הנתונים שמכיל את הטבלה, לדוגמהus. -
PROJECT_ID: מזהה הפרויקט שמכיל את הטבלה. -
DATASET_ID: השם של קבוצת הנתונים שמכילה את הטבלה. -
TABLE: שם הטבלה שבה מופעלת יצירת הטמעות אוטונומית.
אם מציינים את המודל המובנה embeddinggemma-300m באמצעות הפרמטר model בפונקציה AI.EMBED, BigQuery יוצר את ההטמעות ישירות בתוך משימות ה-DML ברקע באמצעות יחידות קיבולת של BigQuery. לא נשלחות בקשות ל-Agent Platform, ואין חיובים על Agent Platform. מידע נוסף זמין במאמר בחירת מודל.
העלויות של פלטפורמת הסוכנים של Gemini Enterprise
כשמציינים מודל של Gemini Enterprise Agent Platform באמצעות הפרמטר endpoint בפונקציה AI.EMBED, יצירת הטמעות אוטונומית שולחת בקשות ל-Gemini Enterprise Agent Platform, וזה יכול להיות כרוך בעלויות. כדי לעקוב אחרי העלויות של Agent Platform שנובעות ממשימות הטמעה ברקע:
- צפייה בדוחות החיוב בחיוב ב-Cloud.
כדי לצמצם את התוצאות אפשר להשתמש במסננים.
בקטע Services, בוחרים באפשרות Vertex AI.
כדי לראות את החיובים של משימה ספציפית, מסננים לפי תווית.
מגדירים את המפתח לערך
bigquery_ml_jobואת הערך למזהה המשימה של משימת ההטמעה. לכל משימות ההטמעה ברקע יש את הקידומתgc_.
יכול להיות שיעברו עד 24 שעות עד שחלק מהחיובים יופיעו בחיוב ב-Cloud.
מגבלות
- כל טבלה תומכת בעמודת הטמעה אחת לכל היותר שנוצרת באופן אוטומטי.
- פעולות DML בו-זמניות יכולות לגרום לעיכובים ולכשלים זמניים ביצירת הטמעות. כדי לשפר את הביצועים ולהפחית את העלויות, מומלץ להזין נתונים בקבוצות ולהימנע מעדכוני DML תכופים.
- אם אתם משתמשים ב-API מדור קודם להטמעת נתונים בסטרימינג, יכול להיות שיהיו עיכובים לפני שיתחיל תהליך יצירת ההטמעות.
- כשמשתמשים ב-BigQuery Storage Write API (gRPC), יכול להיות שמשימות הטמעה ברקע ייכשלו אם משימת כתיבה בסטרימינג פועלת בו-זמנית. במצב כזה, המכסה ב-Agent Platform והעלויות של DML ברקע מתבזבזות. השימוש ב-Storage Write API (gRPC) גורם גם למשימות של יצירת הטמעות בו-זמניות בטבלה, אבל BigQuery מטפל בזה ולא מתבזבזת מכסה של Agent Platform או עלויות של DML ברקע.
- כדי להגדיל את הקיבולת בנקודות קצה מרוחקות של Agent Platform, מומלץ להשתמש במודלים של הטמעת טקסט במקום במודלים של Gemini. למידע נוסף, ראו מכסות.
- כשמציגים סכימה של טבלה באמצעות מסוף Google Cloud או השדה
ddlבתצוגהINFORMATION_SCHEMA.TABLES, אין אינדיקציה לכך שהעמודה נוצרה באופן אוטומטי. - אם יוצרים עותק, שכפול או תמונת מצב של טבלה שיש בה עמודת הטמעה שנוצרה, רק הנתונים מועתקים. הגדרת היצירה לא חלה על הטבלה החדשה, ועדכונים בעמודת המקור של הטבלה החדשה לא יגרמו להטמעות חדשות.
- אם משחזרים מטבלת תמונת מצב שהופעלה בה יצירת הטמעות אוטונומית, ההגדרות של יצירת ההטמעות לא משוחזרות.
- כשמשתמשים ב-BigQuery API, אפשר לציין את המאפיין
generatedColumnרק כשיוצרים עמודה חדשה. אי אפשר להוסיף, לעדכן או להסיר את המאפייןgeneratedColumnבעמודה קיימת. אחרי שיוצרים את עמודת ההטמעה שנוצרה, חלות המגבלות הבאות:
- אי אפשר למחוק את עמודת המקור או לשנות את השם שלה, אבל אפשר למחוק את עמודת ההטמעה שנוצרה או לשנות את השם שלה. אם תמחקו את עמודת ההטמעה, תוכלו למחוק את עמודת המקור או לשנות את השם שלה.
- אי אפשר לשנות את סוג הנתונים של עמודת המקור או של עמודת ההטמעה שנוצרה.
אי אפשר לציין ערכי ברירת מחדל לעמודות הטמעה שנוצרות באופן אוטומטי.
אי אפשר לכתוב ישירות לעמודות הטמעה שנוצרו באמצעות השיטות הבאות:
- DML
- כתיבה בסטרימינג
bq insertbq loadbq copy -a
בטבלאות עם עמודות הטמעה שנוצרו, אי אפשר להשתמש בכללי מדיניות אבטחה ברמת העמודה, כמו תגי מדיניות.
כשמפעילים פונקציית חיפוש, כמו
VECTOR_SEARCHאוAI.SEARCH, המערכת מדלגת על שורות שחסרות בהן הטמעות במסד הנתונים הטבלאי.אי אפשר ליצור אינדקס וקטורי מחולק למחיצות בטבלה שמופעל בה יצירת הטמעות אוטונומית.
אם יוצרים אינדקס וקטורי בעמודת ההטמעה שנוצרה באופן אוטומטי, אימון האינדקס מתחיל אחרי שנוצרו הטמעות ב-80% לפחות מהשורות. כדי לבדוק את התקדמות יצירת ההטמעה:
מריצים שאילתה כדי לבדוק את אחוז ההטמעות שנוצרו בטבלה:
SELECT COUNTIF(description_embedding IS NOT NULL AND description_embedding.status = '') * 100.0 / COUNT(*) AS percent FROM PROJECT_ID.DATASET_ID.TABLE;