יצירת הטמעות טקסט באמצעות הפונקציה AI.GENERATE_EMBEDDING

במסמך הזה מוסבר איך ליצור מודל מרוחק של BigQuery ML שמפנה למודל הטמעה. לאחר מכן משתמשים במודל הזה עם הפונקציה AI.GENERATE_EMBEDDING כדי ליצור הטמעות טקסט באמצעות נתונים מטבלה רגילה ב-BigQuery.

המערכת תומכת בסוגים הבאים של מודלים מרוחקים:

התפקידים הנדרשים

כדי ליצור מודל מרוחק ולהשתמש בפונקציה AI.GENERATE_EMBEDDING, אתם צריכים את התפקידים הבאים בניהול זהויות והרשאות גישה (IAM):

  • יצירה ושימוש במערכי נתונים, בטבלאות ובמודלים של BigQuery: BigQuery Data Editor (roles/bigquery.dataEditor) בפרויקט.
  • יצירה, הקצאה ושימוש בחיבורים ל-BigQuery: BigQuery Connections Admin (roles/bigquery.connectionsAdmin) בפרויקט.

    אם לא הגדרתם חיבור ברירת מחדל, תוכלו ליצור חיבור ולהגדיר אותו כחלק מהרצת ההצהרה CREATE MODEL. כדי לעשות זאת, צריך להיות לכם תפקיד BigQuery Admin ‏(roles/bigquery.admin) בפרויקט. מידע נוסף מופיע במאמר בנושא הגדרת חיבור ברירת המחדל.

  • נותנים הרשאות לחשבון השירות של החיבור: אדמין של IAM בפרויקט (roles/resourcemanager.projectIamAdmin) בפרויקט שמכיל את נקודת הקצה של Gemini Enterprise Agent Platform. זהו הפרויקט הנוכחי של מודלים מרוחקים שיוצרים על ידי ציון שם המודל כנקודת קצה. זהו הפרויקט שמזוהה בכתובת ה-URL של מודלים מרוחקים שיוצרים על ידי ציון כתובת URL כנקודת קצה.

  • יצירת משימות BigQuery: BigQuery Job User (roles/bigquery.jobUser) בפרויקט.

התפקידים המוגדרים מראש האלה מכילים את ההרשאות שנדרשות לביצוע המשימות שמתוארות במסמך הזה. כדי לראות את ההרשאות הנדרשות, מרחיבים את הקטע ההרשאות הנדרשות:

ההרשאות הנדרשות

  • יצירת מערך נתונים: bigquery.datasets.create
  • יצירה, הקצאה ושימוש בחיבור: bigquery.connections.*
  • מגדירים את ההרשאות לחשבון השירות: resourcemanager.projects.getIamPolicy ו- resourcemanager.projects.setIamPolicy
  • יצירת מודל והרצת הסקה:
    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
    • bigquery.models.updateMetadata
  • שאילתת נתונים בטבלה: bigquery.tables.getData

יכול להיות שתוכלו לקבל את ההרשאות האלה גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש אחרים.

לפני שמתחילים

  1. בדף לבחירת הפרויקט במסוף Cloud de Confiance , בוחרים פרויקט ב- Cloud de Confiance או יוצרים אותו.

    תפקידים שנדרשים כדי לבחור או ליצור פרויקט

    • Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
    • יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (roles/resourcemanager.projectCreator), שכולל את ההרשאה resourcemanager.projects.create. איך מקצים תפקידים

    כניסה לדף לבחירת הפרויקט

  2. מוודאים שהחיוב מופעל בפרויקט Cloud de Confiance .

  3. מפעילים את ממשקי ה-API‏ BigQuery,‏ BigQuery Connection ו-Agent Platform.

    תפקידים שנדרשים להפעלת ממשקי API

    כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאה serviceusage.services.enable. איך מקצים תפקידים

    הפעלת ממשקי ה-API

יצירת מערך נתונים

יוצרים מערך נתונים ב-BigQuery שיכיל את המשאבים:

המסוף

  1. במסוף Cloud de Confiance , עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. בחלונית הימנית, לוחצים על כלי הניתוחים:

    כפתור מודגש לחלונית הסייר.

    אם החלונית הימנית לא מוצגת, לוחצים על הרחבת החלונית הימנית כדי לפתוח אותה.

  3. בחלונית Explorer, לוחצים על שם הפרויקט.

  4. לוחצים על הצגת פעולות > יצירת מערך נתונים.

  5. בדף Create dataset, מבצעים את הפעולות הבאות:

    1. בשדה Dataset ID (מזהה מערך נתונים), מקלידים שם למערך הנתונים.

    2. בקטע Location type, בוחרים באפשרות Region או Multi-region.

      • אם בחרתם באפשרות אזור, בוחרים מיקום מהרשימה אזור.
      • אם בחרתם באפשרות Multi-region, בוחרים באפשרות US או Europe מהרשימה Multi-region.
    3. לוחצים על יצירת מערך נתונים.

BQ

  1. כדי ליצור מערך נתונים חדש, משתמשים בפקודה bq mk עם הדגל --location:

    bq --location=LOCATION mk -d DATASET_ID

    מחליפים את מה שכתוב בשדות הבאים:

    • LOCATION: המיקום של מערך הנתונים.
    • DATASET_ID הוא המזהה של מערך הנתונים שאתם יוצרים.
  2. בודקים שמערך הנתונים נוצר:

    bq ls

יצירת חיבור

יוצרים קישור למשאבים ב-Cloud ומקבלים את חשבון השירות של הקישור. יוצרים את החיבור באותו מיקום של מערך הנתונים שיצרתם בשלב הקודם.

אם כבר הגדרתם חיבור ברירת מחדל או שיש לכם את תפקיד האדמין ב-BigQuery, אתם יכולים לדלג על השלב הזה.

בוחרים באחת מהאפשרויות הבאות:

המסוף

  1. עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. בחלונית הימנית, לוחצים על כלי הניתוחים:

    כפתור מודגש לחלונית הסייר.

    אם החלונית הימנית לא מוצגת, לוחצים על הרחבת החלונית הימנית כדי לפתוח אותה.

  3. בחלונית Explorer מרחיבים את שם הפרויקט ואז לוחצים על Connections.

  4. בדף Connections (חיבורים), לוחצים על Create connection (יצירת חיבור).

  5. בשדה Connection type (סוג החיבור), בוחרים באפשרות Vertex AI remote models, remote functions, BigLake and Spanner (Cloud Resource) (מודלים מרוחקים של Vertex AI, פונקציות מרוחקות, BigLake ו-Spanner (משאב בענן)).

  6. בשדה מזהה החיבור, מזינים שם לחיבור.

  7. בקטע Location type, בוחרים מיקום לחיבור. החיבור צריך להיות ממוקם יחד עם משאבים אחרים, כמו מערכי נתונים.

  8. לוחצים על יצירת קישור.

  9. לוחצים על מעבר לחיבור.

  10. בחלונית Connection info (פרטי התחברות), מעתיקים את מזהה חשבון השירות לשימוש בשלב מאוחר יותר.

SQL

משתמשים בהצהרה CREATE CONNECTION:

  1. במסוף Cloud de Confiance , עוברים לדף BigQuery.

    כניסה ל-BigQuery

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

    CREATE CONNECTION [IF NOT EXISTS] `CONNECTION_NAME`
    OPTIONS (
      connection_type = "CLOUD_RESOURCE",
      friendly_name = "FRIENDLY_NAME",
      description = "DESCRIPTION"
      );

    מחליפים את מה שכתוב בשדות הבאים:

    • CONNECTION_NAME: השם של החיבור בפורמט PROJECT_ID.LOCATION.CONNECTION_ID,‏ LOCATION.CONNECTION_ID או CONNECTION_ID. אם לא מציינים את הפרויקט או המיקום, המערכת מסיקה אותם מהפרויקט והמיקום שבהם מופעלת ההצהרה.
    • FRIENDLY_NAME (אופציונלי): שם תיאורי לחיבור.
    • DESCRIPTION (אופציונלי): תיאור של הקישור.

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

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

BQ

  1. בסביבת שורת פקודה, יוצרים חיבור:

    bq mk --connection --location=REGION --project_id=PROJECT_ID \
        --connection_type=CLOUD_RESOURCE CONNECTION_ID

    הפרמטר --project_id מבטל את פרויקט ברירת המחדל.

    מחליפים את מה שכתוב בשדות הבאים:

    • REGION: אזור החיבור
    • PROJECT_ID: מזהה הפרויקט ב- Cloud de Confiance
    • CONNECTION_ID: מזהה לחיבור

    כשיוצרים משאב חיבור, מערכת BigQuery יוצרת חשבון שירות ייחודי ומקשרת אותו לחיבור.

    פתרון בעיות: אם מופיעה שגיאת החיבור הבאה, צריך לעדכן את Google Cloud SDK:

    Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
    
  2. מאחזרים ומעתיקים את מזהה חשבון השירות כדי להשתמש בו בשלב מאוחר יותר:

    bq show --connection PROJECT_ID.REGION.CONNECTION_ID

    הפלט אמור להיראות כך:

    name                          properties
    1234.REGION.CONNECTION_ID     {"serviceAccountId": "connection-1234-9u56h9@gcp-sa-bigquery-condel.s3ns-system.iam.gserviceaccount.com"}
    

Python

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Pythonהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Python API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

import google.api_core.exceptions
from google.cloud import bigquery_connection_v1

client = bigquery_connection_v1.ConnectionServiceClient()


def create_connection(
    project_id: str,
    location: str,
    connection_id: str,
):
    """Creates a BigQuery connection to a Cloud Resource.

    Cloud Resource connection creates a service account which can then be
    granted access to other Google Cloud resources for federated queries.

    Args:
        project_id: The Google Cloud project ID.
        location: The location of the connection (for example, "us-central1").
        connection_id: The ID of the connection to create.
    """

    parent = client.common_location_path(project_id, location)

    connection = bigquery_connection_v1.Connection(
        friendly_name="Example Connection",
        description="A sample connection for a Cloud Resource.",
        cloud_resource=bigquery_connection_v1.CloudResourceProperties(),
    )

    try:
        created_connection = client.create_connection(
            parent=parent, connection_id=connection_id, connection=connection
        )
        print(f"Successfully created connection: {created_connection.name}")
        print(f"Friendly name: {created_connection.friendly_name}")
        print(
            f"Service Account: {created_connection.cloud_resource.service_account_id}"
        )

    except google.api_core.exceptions.AlreadyExists:
        print(f"Connection with ID '{connection_id}' already exists.")
        print("Please use a different connection ID.")
    except Exception as e:
        print(f"An unexpected error occurred while creating the connection: {e}")

Node.js

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Node.jsהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Node.js API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

const {ConnectionServiceClient} =
  require('@google-cloud/bigquery-connection').v1;
const {status} = require('@grpc/grpc-js');

const client = new ConnectionServiceClient();

/**
 * Creates a new BigQuery connection to a Cloud Resource.
 *
 * A Cloud Resource connection creates a service account that can be granted access
 * to other Google Cloud resources.
 *
 * @param {string} projectId The Google Cloud project ID. for example, 'example-project-id'
 * @param {string} location The location of the project to create the connection in. for example, 'us-central1'
 * @param {string} connectionId The ID of the connection to create. for example, 'example-connection-id'
 */
async function createConnection(projectId, location, connectionId) {
  const parent = client.locationPath(projectId, location);

  const connection = {
    friendlyName: 'Example Connection',
    description: 'A sample connection for a Cloud Resource',
    // The service account for this cloudResource will be created by the API.
    // Its ID will be available in the response.
    cloudResource: {},
  };

  const request = {
    parent,
    connectionId,
    connection,
  };

  try {
    const [response] = await client.createConnection(request);

    console.log(`Successfully created connection: ${response.name}`);
    console.log(`Friendly name: ${response.friendlyName}`);

    console.log(`Service Account: ${response.cloudResource.serviceAccountId}`);
  } catch (err) {
    if (err.code === status.ALREADY_EXISTS) {
      console.log(`Connection '${connectionId}' already exists.`);
    } else {
      console.error(`Error creating connection: ${err.message}`);
    }
  }
}

Terraform

משתמשים במשאב google_bigquery_connection.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

בדוגמה הבאה נוצר קישור למשאבים ב-Cloud בשם my_cloud_resource_connection באזור US:


# This queries the provider for project information.
data "google_project" "default" {}

# This creates a cloud resource connection in the US region named my_cloud_resource_connection.
# Note: The cloud resource nested object has only one output field - serviceAccountId.
resource "google_bigquery_connection" "default" {
  connection_id = "my_cloud_resource_connection"
  project       = data.google_project.default.project_id
  location      = "US"
  cloud_resource {}
}

כדי להחיל את הגדרות Terraform בפרויקט ב- Cloud de Confiance , מבצעים את השלבים בקטעים הבאים.

הכנת Cloud Shell

  1. מפעילים את Cloud Shell.
  2. מגדירים את פרויקט ברירת המחדל שבו רוצים להחיל את ההגדרות של Terraform. Cloud de Confiance

    תצטרכו להריץ את הפקודה הזו רק פעם אחת לכל פרויקט, ותוכלו לעשות זאת בכל ספרייה.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    אם תגדירו ערכים ספציפיים בקובץ התצורה של Terraform, הם יבטלו את ערכי ברירת המחדל של משתני הסביבה.

הכנת הספרייה

לכל קובץ תצורה של Terraform צריכה להיות ספרייה משלו (שנקראת גם מודול ברמה הבסיסית).

  1. יוצרים ספרייה חדשה ב-Cloud Shell ובה יוצרים קובץ חדש. שם הקובץ חייב לכלול את הסיומת .tf, למשל main.tf. במדריך הזה, הקובץ נקרא main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. אם אתם עוקבים אחרי המדריך, תוכלו להעתיק את הקוד לדוגמה בכל קטע או שלב.

    מעתיקים את הקוד לדוגמה בקובץ main.tf החדש שיצרתם.

    לחלופין, אפשר גם להעתיק את הקוד מ-GitHub. כדאי לעשות את זה כשקטע הקוד של Terraform הוא חלק מפתרון מקצה לקצה.

  3. בודקים את הפרמטרים לדוגמה ומשנים אותם בהתאם לסביבה שלכם.
  4. שומרים את השינויים.
  5. מפעילים את Terraform. צריך לעשות זאת רק פעם אחת לכל ספרייה.
    terraform init

    אופציונלי: תוכלו לכלול את האפשרות -upgrade, כדי להשתמש בגרסה העדכנית ביותר של הספק של Google:

    terraform init -upgrade

החלה של השינויים

  1. בודקים את ההגדרות ומוודאים שהמשאבים שמערכת Terraform תיצור או תעדכן תואמים לציפיות שלכם:
    terraform plan

    מתקנים את ההגדרות לפי הצורך.

  2. מריצים את הפקודה הבאה ומזינים yes בהודעה שמופיעה, כדי להחיל את הגדרות Terraform:
    terraform apply

    ממתינים עד שב-Terraform תוצג ההודעה "Apply complete!‎".

  3. פותחים את Cloud de Confiance הפרויקט כדי לראות את התוצאות. במסוף Cloud de Confiance , נכנסים למשאבים בממשק המשתמש כדי לוודא שהם נוצרו או עודכנו ב-Terraform.

הקצאת תפקיד לחשבון השירות של חיבור המודל המרוחק

עליך להעניק לחשבון השירות של החיבור את התפקיד Agent Platform User.

אם אתם מתכננים לציין את נקודת הקצה ככתובת URL כשאתם יוצרים את המודל המרוחק, למשל endpoint = 'https://us-central1-aiplatform.googleapis.com/v1/projects/myproject/locations/us-central1/publishers/google/models/text-embedding-005', אתם צריכים להעניק את התפקיד הזה באותו פרויקט שציינתם בכתובת ה-URL.

אם אתם מתכננים לציין את נקודת הקצה באמצעות שם המודל כשאתם יוצרים את המודל המרוחק, למשל endpoint = 'text-embedding-005', צריך להעניק את התפקיד הזה באותו פרויקט שבו אתם מתכננים ליצור את המודל המרוחק.

הקצאת התפקיד בפרויקט אחר מובילה לשגיאה bqcx-1234567890-wxyz@gcp-sa-bigquery-condel.s3ns-system.iam.gserviceaccount.com does not have the permission to access resource.

כדי להקצות את התפקיד:

המסוף

  1. עוברים לדף IAM & Admin.

    כניסה לדף IAM & Admin

  2. לוחצים על Grant access.

    תיבת הדו-שיח Add principals נפתחת.

  3. בשדה New principals, מזינים את מזהה חשבון השירות שהעתקתם קודם.

  4. בשדה Select a role, בוחרים באפשרות Vertex AI ואז באפשרות Agent Platform User.

  5. לוחצים על Save.

gcloud

משתמשים בפקודה gcloud projects add-iam-policy-binding:

gcloud projects add-iam-policy-binding 'PROJECT_NUMBER' --member='serviceAccount:MEMBER' --role='roles/aiplatform.user' --condition=None

מחליפים את מה שכתוב בשדות הבאים:

  • PROJECT_NUMBER: מספר הפרויקט
  • MEMBER: המזהה של חשבון השירות שהעתקתם קודם

בחירת שיטת פריסה של מודל פתוח

אם יוצרים מודל מרוחק על בסיס מודל פתוח נתמך, אפשר לפרוס את המודל הפתוח באופן אוטומטי בזמן שיוצרים את המודל המרוחק. לשם כך, צריך לציין את מזהה המודל של Agent Platform Model Garden או Hugging Face בהצהרת CREATE MODEL. לחלופין, אפשר לפרוס את המודל הפתוח באופן ידני קודם, ואז להשתמש במודל הפתוח הזה עם המודל המרוחק על ידי ציון נקודת הקצה של המודל בהצהרת CREATE MODEL. מידע נוסף זמין במאמר פריסת מודלים פתוחים.

יצירת מודל מרוחק של BigQuery ML

יצירת מודל מרחוק:

מודלים של Agent Platform

  1. במסוף Cloud de Confiance , עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. באמצעות עורך ה-SQL, יוצרים מודל מרוחק:

    CREATE OR REPLACE MODEL
    `PROJECT_ID.DATASET_ID.MODEL_NAME`
    REMOTE WITH CONNECTION {DEFAULT | `PROJECT_ID.REGION.CONNECTION_ID`}
    OPTIONS (ENDPOINT = 'ENDPOINT');

    מחליפים את מה שכתוב בשדות הבאים:

    • PROJECT_ID: מזהה הפרויקט.
    • DATASET_ID: המזהה של מערך הנתונים שאמור להכיל את המודל. מערך הנתונים הזה צריך להיות באותו מיקום כמו החיבור שבו אתם משתמשים.
    • MODEL_NAME: שם המודל.
    • REGION: האזור שבו נעשה שימוש בחיבור.
    • CONNECTION_ID: המזהה של החיבור ל-BigQuery.

      אפשר לקבל את הערך הזה על ידי צפייה בפרטי החיבור במסוף Cloud de Confiance והעתקת הערך בקטע האחרון של מזהה החיבור המלא שמוצג במזהה החיבור. לדוגמה, projects/myproject/locations/connection_location/connections/myconnection.

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

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

מודלים פתוחים חדשים

  1. במסוף Cloud de Confiance , עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. באמצעות עורך ה-SQL, יוצרים מודל מרוחק:

    CREATE OR REPLACE MODEL
    `PROJECT_ID.DATASET_ID.MODEL_NAME`
    REMOTE WITH CONNECTION {DEFAULT | `PROJECT_ID.REGION.CONNECTION_ID`}
    OPTIONS (
      {HUGGING_FACE_MODEL_ID = 'HUGGING_FACE_MODEL_ID' |
         MODEL_GARDEN_MODEL_NAME = 'MODEL_GARDEN_MODEL_NAME'}
      [, HUGGING_FACE_TOKEN = 'HUGGING_FACE_TOKEN' ]
      [, MACHINE_TYPE = 'MACHINE_TYPE' ]
      [, MIN_REPLICA_COUNT = MIN_REPLICA_COUNT ]
      [, MAX_REPLICA_COUNT = MAX_REPLICA_COUNT ]
      [, RESERVATION_AFFINITY_TYPE = {'NO_RESERVATION' | 'ANY_RESERVATION' | 'SPECIFIC_RESERVATION'} ]
      [, RESERVATION_AFFINITY_KEY = 'compute.googleapis.com/reservation-name' ]
      [, RESERVATION_AFFINITY_VALUES = RESERVATION_AFFINITY_VALUES ]
      [, ENDPOINT_IDLE_TTL = ENDPOINT_IDLE_TTL ]
    );

    מחליפים את מה שכתוב בשדות הבאים:

    • PROJECT_ID: מזהה הפרויקט.
    • DATASET_ID: המזהה של מערך הנתונים שאמור להכיל את המודל. מערך הנתונים הזה צריך להיות באותו מיקום כמו החיבור שבו אתם משתמשים.
    • MODEL_NAME: שם המודל.
    • REGION: האזור שבו נעשה שימוש בחיבור.
    • CONNECTION_ID: המזהה של החיבור ל-BigQuery.

      אפשר לקבל את הערך הזה על ידי צפייה בפרטי החיבור במסוף Cloud de Confiance והעתקת הערך בקטע האחרון של מזהה החיבור המלא שמוצג במזהה החיבור. לדוגמה, projects/myproject/locations/connection_location/connections/myconnection.

    • HUGGING_FACE_MODEL_ID: ערך STRING שמציין את מזהה המודל של מודל נתמך של Hugging Face, בפורמט provider_name/model_name. לדוגמה, deepseek-ai/DeepSeek-R1. כדי לקבל את מזהה המודל, לוחצים על שם המודל ב-Hugging Face Model Hub ומעתיקים את מזהה המודל מחלקו העליון של כרטיס המודל.
    • MODEL_GARDEN_MODEL_NAME: ערך STRING שמציין את מזהה המודל ואת גרסת המודל של מודל נתמך ב-Model Garden של Gemini Enterprise Agent Platform, בפורמט publishers/publisher/models/model_name@model_version. לדוגמה, publishers/openai/models/gpt-oss@gpt-oss-120b. כדי לקבל את מזהה המודל, לוחצים על כרטיס המודל ב-Model Garden של Agent Platform ואז מעתיקים את מזהה המודל מהשדה מזהה המודל. אפשר להעתיק את גרסת ברירת המחדל של המודל מהשדה Version בכרטיס המודל. כדי לראות גרסאות אחרות של המודל שאפשר להשתמש בהן, לוחצים על Deploy model (פריסת המודל) ואז על השדה Resource ID (מזהה המשאב).
    • HUGGING_FACE_TOKEN: ערך STRING שמציין את User Access Token של Hugging Face שבו רוצים להשתמש. אפשר לציין ערך לאפשרות הזו רק אם מציינים ערך גם לאפשרות HUGGING_FACE_MODEL_ID.

      ל-token צריך להיות לפחות התפקיד read, אבל אפשר להשתמש גם ב-tokens עם היקף רחב יותר. האפשרות הזו נדרשת אם המודל שמזוהה לפי הערך HUGGING_FACE_MODEL_ID הוא מודל מוגבל או פרטי של Hugging Face.

      כדי לקבל גישה למודלים מסוימים שמוגבלת אליהם הגישה, צריך לאשר במפורש את התנאים וההגבלות שלהם. כדי לאשר את התנאים האלה, פועלים לפי השלבים הבאים:

      1. עוברים לדף של המודל באתר Hugging Face.
      2. מחפשים את התנאים וההגבלות של המודל ומעיינים בהם. בדרך כלל יש קישור להסכם השירות בכרטיס המודל.
      3. מאשרים את התנאים בהתאם להנחיות בדף.
    • MACHINE_TYPE: ערך STRING שמציין את סוג המכונה שבה יש להשתמש כשפורסים את המודל ב-Agent Platform. מידע על סוגי מכונות נתמכים זמין במאמר סוגי מכונות. אם לא מציינים ערך לאפשרות MACHINE_TYPE, נעשה שימוש בסוג המכונה שמוגדר כברירת מחדל ב-Agent Platform Model Garden עבור המודל.
    • MIN_REPLICA_COUNT: ערך INT64 שמציין את מספר הרפליקות המינימלי של המכונה שמשמשים לפריסת המודל בנקודת קצה של Agent Platform. השירות מגדיל או מקטין את מספר העותקים בהתאם לעומס ההסקה בנקודת הקצה. מספר העותקים שנעשה בהם שימוש אף פעם לא נמוך מהערך MIN_REPLICA_COUNT ואף פעם לא גבוה מהערך MAX_REPLICA_COUNT. הערך של MIN_REPLICA_COUNT צריך להיות בטווח [1, 4096]. ערך ברירת המחדל הוא 1.
    • MAX_REPLICA_COUNT: ערך INT64 שמציין את המספר המקסימלי של רפליקות של מכונות שמשמשים לפריסת המודל בנקודת קצה של Agent Platform. השירות מגדיל או מקטין את מספר העותקים בהתאם לעומס ההסקה בנקודת הקצה. מספר העותקים שנעשה בהם שימוש אף פעם לא נמוך מהערך MIN_REPLICA_COUNT ואף פעם לא גבוה מהערך MAX_REPLICA_COUNT. הערך של MAX_REPLICA_COUNT צריך להיות בטווח [1, 4096]. ערך ברירת המחדל הוא הערך MIN_REPLICA_COUNT.
    • RESERVATION_AFFINITY_TYPE: קובע אם המודל שנפרס משתמש בשמירת מקום ב-Compute Engine כדי לספק זמינות מובטחת של מכונה וירטואלית (VM) כשמוצגות תחזיות, ומציין אם המודל משתמש במכונות וירטואליות מכל השמירות הזמינות או רק משמירה ספציפית אחת. מידע נוסף זמין במאמר בנושא שמירת מקום ב-Compute Engine.

      אפשר להשתמש רק בהזמנות של Compute Engine שמשותפות עם Agent Platform. מידע נוסף זמין במאמר בנושא אישור שימוש בהזמנה.

      הערכים הנתמכים הם:

      • NO_RESERVATION: לא מתבצעת צריכה של הזמנה כשפורסים את המודל בנקודת קצה של Agent Platform. ציון הערך NO_RESERVATION זהה למצב שבו לא מציינים שיוך להזמנה.
      • ANY_RESERVATION: פריסת המודל של Agent Platform צורכת מכונות וירטואליות (VM) מהזמנות של Compute Engine שנמצאות בפרויקט הנוכחי או משותפות עם הפרויקט, ושהוגדרו לצריכה אוטומטית. נעשה שימוש רק במכונות וירטואליות שעומדות בדרישות הבאות:
        • הם משתמשים בסוג המכונה שצוין בערך MACHINE_TYPE.
        • אם מערך הנתונים ב-BigQuery שבו אתם יוצרים את המודל המרוחק נמצא באזור יחיד, ההזמנה צריכה להיות באותו אזור. אם מערך הנתונים נמצא באזור US, ההזמנה חייבת להיות באזור us-central1. אם מערך הנתונים נמצא במספר אזורים EU, ההזמנה חייבת להיות באזור europe-west4.

        אם אין מספיק קיבולת בהזמנות הזמינות, או אם לא נמצאו הזמנות מתאימות, המערכת תספק מכונות וירטואליות (VM) של Compute Engine לפי דרישה כדי לעמוד בדרישות המשאבים.

      • SPECIFIC_RESERVATION: פריסת המודל של Agent Platform צורכת מכונות וירטואליות רק מההזמנה שצוינה בערך RESERVATION_AFFINITY_VALUES. ההזמנה הזו צריכה להיות מוגדרת לצריכה שמכוונת באופן ספציפי. הפריסה תיכשל אם אין בהזמנה שצוינה מספיק קיבולת.
    • RESERVATION_AFFINITY_KEY: המחרוזת compute.googleapis.com/reservation-name. צריך לציין את האפשרות הזו אם הערך של RESERVATION_AFFINITY_TYPE הוא SPECIFIC_RESERVATION.
    • RESERVATION_AFFINITY_VALUES: ערך ARRAY<STRING> שמציין את שם המשאב המלא של ההזמנה ב-Compute Engine, בפורמט הבא:

      projects/myproject/zones/reservation_zone/reservations/reservation_name

      לדוגמה, RESERVATION_AFFINITY_values = ['projects/myProject/zones/us-central1-a/reservations/myReservationName'].

      אפשר לראות את שם השמירה והתחום בדף Reservations במסוף Cloud de Confiance . מידע נוסף זמין במאמר View reservations.

      חובה לציין את האפשרות הזו אם הערך של RESERVATION_AFFINITY_TYPE הוא SPECIFIC_RESERVATION.

    • ENDPOINT_IDLE_TTL: ערך INTERVAL שמציין את משך הזמן של חוסר פעילות שאחריו המודל הפתוח יבוטל אוטומטית מנקודת הקצה של Agent Platform.

      כדי להפעיל ביטול פריסה אוטומטי, מציינים ערך של מרווח זמן מילולי בין 390 דקות (6.5 שעות) ל-7 ימים. לדוגמה, אם מציינים INTERVAL 8 HOUR, המודל יבוטל אחרי 8 שעות של חוסר פעילות. ערך ברירת המחדל הוא 390 דקות (6.5 שעות).

      חוסר פעילות של מודל מוגדר כפרק הזמן שחלף מאז שאחת מהפעולות הבאות בוצעה במודל:

      כל אחת מהפעולות האלה מאפסת את טיימר חוסר הפעילות לאפס. האיפוס מופעל בתחילת משימת BigQuery שמבצעת את הפעולה.

      אחרי שמבטלים את הפריסה של המודל, בקשות להסקת מסקנות שנשלחות למודל מחזירות שגיאה. אובייקט המודל ב-BigQuery נשאר ללא שינוי, כולל מטא-נתונים של המודל. כדי להשתמש שוב במודל להסקת מסקנות, צריך לפרוס אותו מחדש על ידי הפעלת ההצהרה ALTER MODEL במודל והגדרת האפשרות DEPLOY_MODEL לערך TRUE.

מודלים פתוחים שנפרסו

  1. במסוף Cloud de Confiance , עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. באמצעות עורך ה-SQL, יוצרים מודל מרוחק:

    CREATE OR REPLACE MODEL
    `PROJECT_ID.DATASET_ID.MODEL_NAME`
    REMOTE WITH CONNECTION {DEFAULT | `PROJECT_ID.REGION.CONNECTION_ID`}
    OPTIONS (
      ENDPOINT = 'https://ENDPOINT_REGION-aiplatform.googleapis.com/v1/projects/ENDPOINT_PROJECT_ID/locations/ENDPOINT_REGION/endpoints/ENDPOINT_ID'
    );

    מחליפים את מה שכתוב בשדות הבאים:

    • PROJECT_ID: מזהה הפרויקט.
    • DATASET_ID: המזהה של מערך הנתונים שאמור להכיל את המודל. מערך הנתונים הזה צריך להיות באותו מיקום כמו החיבור שבו אתם משתמשים.
    • MODEL_NAME: שם המודל.
    • REGION: האזור שבו נעשה שימוש בחיבור.
    • CONNECTION_ID: המזהה של החיבור ל-BigQuery.

      אפשר לקבל את הערך הזה על ידי צפייה בפרטי החיבור במסוף Cloud de Confiance והעתקת הערך בקטע האחרון של מזהה החיבור המלא שמוצג במזהה החיבור. לדוגמה, projects/myproject/locations/connection_location/connections/myconnection.

    • ENDPOINT_REGION: האזור שבו המודל הפתוח פרוס.
    • ENDPOINT_PROJECT_ID: הפרויקט שבו נפרס המודל הפתוח.
    • ENDPOINT_ID: המזהה של נקודת הקצה (endpoint) של HTTPS שבה נעשה שימוש במודל הפתוח. כדי לקבל את מזהה נקודת הקצה, מאתרים את המודל הפתוח בדף Online prediction ומעתיקים את הערך בשדה ID.

יצירת הטבעות טקסט

כדי ליצור הטמעות טקסט באמצעות הפונקציה AI.GENERATE_EMBEDDING, משתמשים בנתוני טקסט מעמודה בטבלה או משאילתה.

בדרך כלל, משתמשים במודל הטמעת טקסט לתרחישי שימוש שמבוססים על טקסט בלבד, ובמודל הטמעה מולטימודאלי לתרחישי שימוש של חיפוש חוצה מודאלי, שבהם ההטמעות של טקסט ותוכן חזותי נוצרות באותו מרחב סמנטי.

טקסט של Agent Platform

יצירת הטמעות טקסט באמצעות מודל מרוחק דרך מודל הטמעת טקסט של Agent Platform:

SELECT *
FROM AI.GENERATE_EMBEDDING(
  MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`,
  {TABLE PROJECT_ID.DATASET_ID.TABLE_NAME | (CONTENT_QUERY)},
  STRUCT(TASK_TYPE AS task_type,
    OUTPUT_DIMENSIONALITY AS output_dimensionality)
);

מחליפים את מה שכתוב בשדות הבאים:

  • PROJECT_ID: מזהה הפרויקט.
  • DATASET_ID: המזהה של מערך הנתונים שמכיל את המודל.
  • MODEL_NAME: השם של המודל המרוחק, במקום מודל הטמעה.
  • TABLE_NAME: שם הטבלה שמכילה את הטקסט להטמעה. בטבלה הזו צריכה להיות עמודה בשם content, או שאפשר להשתמש בכינוי כדי להשתמש בעמודה עם שם אחר.
  • CONTENT_QUERY: שאילתה שהתוצאה שלה מכילה עמודה STRING בשם content.
  • TASK_TYPE: מחרוזת STRING שמציינת את האפליקציה שאליה מיועדת ההטמעה, כדי לעזור למודל ליצור הטמעות באיכות טובה יותר. TASK_TYPE מקבלת את הערכים הבאים:
    • RETRIEVAL_QUERY: מציין שהטקסט שצוין הוא שאילתה בהגדרה של חיפוש או אחזור.
    • RETRIEVAL_DOCUMENT: מציין שהטקסט שצוין הוא מסמך בהגדרה של חיפוש או אחזור.

      כשמשתמשים בסוג המשימה הזה, מומלץ לכלול את שם המסמך בהצהרת השאילתה כדי לשפר את איכות ההטמעה. שם המסמך צריך להיות בעמודה שנקראת title או title, למשל:

            SELECT *
            FROM
              AI.GENERATE_EMBEDDING(
                MODEL mydataset.embedding_model,
                (SELECT abstract as content, header as title, publication_number
                FROM mydataset.publications),
                STRUCT('RETRIEVAL_DOCUMENT' as task_type)
            );
            

      ציון עמודת הכותרת בשאילתת הקלט מאכלס את השדה title בגוף הבקשה שנשלח למודל. אם מציינים ערך title כשמשתמשים בסוג משימה אחר, המערכת מתעלמת מהקלט הזה ואין לו השפעה על תוצאות ההטמעה.

    • SEMANTIC_SIMILARITY: מציין שהטקסט שצוין ישמש לדמיון סמנטי בין טקסטים (STS).
    • CLASSIFICATION: מציין שההטמעות ישמשו לסיווג.
    • CLUSTERING: מציין שההטמעות ישמשו לאשכול.
    • QUESTION_ANSWERING: מציין שההטמעות ישמשו למענה לשאלות.
    • FACT_VERIFICATION: מציין שההטמעות ישמשו לאימות עובדות.
    • CODE_RETRIEVAL_QUERY: מציין שההטמעות ישמשו לאחזור קוד.
  • OUTPUT_DIMENSIONALITY: ערך INT64 שמציין את מספר המאפיינים שבהם יש להשתמש כשיוצרים הטמעה. לדוגמה, אם מציינים 256 AS output_dimensionality, עמודת הפלט embedding מכילה הטמעה של 256 מאפיינים לכל ערך קלט.

    במודלים מרוחקים מעל gemini-embedding-2-preview או במודלים של gemini-embedding-001, הערך OUTPUT_DIMENSIONALITY צריך להיות בטווח [1, 3072]. ערך ברירת המחדל הוא 3072. במודלים מרוחקים מעל text-embedding, הערך OUTPUT_DIMENSIONALITY חייב להיות בטווח [1, 768]. ערך ברירת המחדל הוא 768.

דוגמה: הטמעת טקסט בטבלה

בדוגמה הבאה מוצגת בקשה להטמעת העמודה content בטבלה text_data:

SELECT *
FROM
  AI.GENERATE_EMBEDDING(
    MODEL `mydataset.embedding_model`,
    TABLE mydataset.text_data,
    STRUCT('CLASSIFICATION' AS task_type)
  );

טקסט פתוח

הערה: כדי לשלוח משוב או לבקש תמיכה בנוגע לתכונה הזו, אפשר לפנות לכתובת bqml-feedback@google.com.

יצירת הטמעות טקסט באמצעות מודל מרוחק על פני מודל הטמעה פתוח:

SELECT *
FROM AI.GENERATE_EMBEDDING(
  MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`,
  {TABLE PROJECT_ID.DATASET_ID.TABLE_NAME | (CONTENT_QUERY)},
);

מחליפים את מה שכתוב בשדות הבאים:

  • PROJECT_ID: מזהה הפרויקט.
  • DATASET_ID: המזהה של מערך הנתונים שמכיל את המודל.
  • MODEL_NAME: השם של המודל המרוחק, במקום מודל הטמעה.
  • TABLE_NAME: שם הטבלה שמכילה את הטקסט להטמעה. בטבלה הזו צריכה להיות עמודה בשם content, או שאפשר להשתמש בכינוי כדי להשתמש בעמודה עם שם אחר.
  • CONTENT_QUERY: שאילתה שהתוצאה שלה מכילה עמודה STRING בשם content.

מולטי-מודאליות ב-Agent Platform

יצירת הטמעות טקסט באמצעות מודל מרוחק על פני מודל הטמעה מולטימודאלי של Agent Platform:

SELECT *
FROM AI.GENERATE_EMBEDDING(
  MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`,
  {TABLE PROJECT_ID.DATASET_ID.TABLE_NAME | (CONTENT_QUERY)},
  STRUCT(OUTPUT_DIMENSIONALITY AS output_dimensionality)
);

מחליפים את מה שכתוב בשדות הבאים:

  • PROJECT_ID: מזהה הפרויקט.
  • DATASET_ID: המזהה של מערך הנתונים שמכיל את המודל.
  • MODEL_NAME: השם של המודל המרוחק, מעל מודל multimodalembedding@001.
  • TABLE_NAME: שם הטבלה שמכילה את הטקסט להטמעה. בטבלה הזו צריכה להיות עמודה בשם content, או שאפשר להשתמש בכינוי כדי להשתמש בעמודה עם שם אחר.
  • CONTENT_QUERY: שאילתה שהתוצאה שלה מכילה עמודה STRING בשם content.
  • OUTPUT_DIMENSIONALITY: ערך INT64 שמציין את מספר הממדים שבהם יש להשתמש כשיוצרים הטבעות. הערכים התקפים הם 128,‏ 256,‏ 512 ו-1408. ערך ברירת המחדל הוא 1408. לדוגמה, אם מציינים 256 AS output_dimensionality, עמודת הפלט embedding מכילה הטבעה דו-ממדית לכל ערך קלט. 

דוגמה: שימוש בהטמעות לדירוג הדמיון הסמנטי

בדוגמה הבאה מוטמעת אוסף של ביקורות על סרטים, והן מסודרות לפי מרחק קוסינוס מהביקורת 'הסרט הזה היה ממוצע' באמצעות הפונקציה VECTOR_SEARCH. מרחק קטן יותר מצביע על דמיון סמנטי רב יותר.

מידע נוסף על חיפוש וקטורי ועל אינדקס וקטורי זמין במאמר מבוא לחיפוש וקטורי.

CREATE TEMPORARY TABLE movie_review_embeddings AS (
  SELECT *
  FROM
    AI.GENERATE_EMBEDDING(
      MODEL `bqml_tutorial.embedding_model`,
      (
        SELECT "This movie was fantastic" AS content
        UNION ALL
        SELECT "This was the best movie I've ever seen!!" AS content
        UNION ALL
        SELECT "This movie was just okay..." AS content
        UNION ALL
        SELECT "This movie was terrible." AS content
      )
    )
);

WITH average_review_embedding AS (
  SELECT embedding
  FROM
    AI.GENERATE_EMBEDDING(
      MODEL `bqml_tutorial.embedding_model`,
      (SELECT "This movie was average" AS content)
    )
)
SELECT
  base.content AS content,
  distance AS distance_to_average_review
FROM
  VECTOR_SEARCH(
    TABLE movie_review_embeddings,
    "embedding",
    (SELECT embedding FROM average_review_embedding),
    distance_type=>"COSINE",
    top_k=>-1
  )
ORDER BY distance_to_average_review;

התוצאה אמורה להיראות כך:

+------------------------------------------+----------------------------+
| content                                  | distance_to_average_review |
+------------------------------------------+----------------------------+
| This movie was just okay...              | 0.062789813467745592       |
| This movie was fantastic                 |  0.18579561313064263       |
| This movie was terrible.                 |  0.35707466240930985       |
| This was the best movie I've ever seen!! |  0.41844932504542975       |
+------------------------------------------+----------------------------+

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