יצירת הטמעת נתונים אוטונומית

במסמך הזה מוסבר איך להשתמש ביצירת הטמעות אוטונומיות לנתונים, שמאפשרת ל-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 כדי ליצור טבלה עם עמודת הטמעה שנוצרת באופן אוטומטי. כדי ליצור את הטבלה:

  1. נכנסים לדף BigQuery במסוף Google Cloud .

    כניסה ל-BigQuery

  2. בעורך השאילתות, מזינים את ההצהרה הבאה:

    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.

  3. לוחצים על הפעלה.

מידע נוסף על הרצת שאילתות זמין במאמר הרצת שאילתה אינטראקטיבית.

BQ

כדי ליצור טבלה עם עמודת הטמעה שנוצרת באופן אוטומטי באמצעות כלי שורת הפקודה של BigQuery, משתמשים בפקודה bq mk עם קובץ סכימה בפורמט JSON שמגדיר את סכימת הטבלה:

  1. יוצרים קובץ סכימת 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.

  2. שומרים את הסכימה בקובץ, למשל schema.json.

  3. יוצרים את הטבלה באמצעות הפקודה 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 כדי להוסיף לטבלה קיימת עמודת הטמעה שנוצרת באופן אוטומטי. כדי להוסיף את העמודה, פועלים לפי השלבים הבאים:

  1. נכנסים לדף BigQuery במסוף Google Cloud .

    כניסה ל-BigQuery

  2. בעורך השאילתות, מזינים את ההצהרה הבאה:

    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.

  3. לוחצים על הפעלה.

מידע נוסף על הרצת שאילתות זמין במאמר הרצת שאילתה אינטראקטיבית.

BQ

כדי להוסיף לטבלה קיימת עמודת הטמעה שנוצרה באופן אוטומטי, משתמשים בפקודה bq update של כלי שורת הפקודה של BigQuery עם קובץ סכימת JSON שמגדיר את סכימת הטבלה המעודכנת:

  1. מורידים את הסכימה הנוכחית של הטבלה ושומרים אותה בקובץ, למשל schema.json:
    bq show --schema --format=prettyjson DATASET_ID.TABLE > schema.json
    
  2. עורכים את 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.

  3. מעדכנים את הטבלה באמצעות הפקודה 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 שנובעות ממשימות הטמעה ברקע:

  1. צפייה בדוחות החיוב בחיוב ב-Cloud.
  2. כדי לצמצם את התוצאות אפשר להשתמש במסננים.

    בקטע Services, בוחרים באפשרות Vertex AI.

  3. כדי לראות את החיובים של משימה ספציפית, מסננים לפי תווית.

    מגדירים את המפתח לערך 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 insert
    • bq load
    • bq 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;
    

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