שיפור מודל באמצעות הנתונים שלכם

במאמר הזה נסביר איך ליצור מודל מרוחק של BigQuery ML שמפנה למודל של Gemini Enterprise Agent Platform, ואז להגדיר את המודל לביצוע כוונון בפיקוח. המודל של Agent Platform חייב להיות אחד מהמודלים הבאים:

  • gemini-2.5-pro
  • gemini-2.5-flash-lite
  • gemini-2.0-flash-001
  • gemini-2.0-flash-lite-001

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

מידע נוסף זמין במאמר בנושא כוונון מודלים מפוקח של Vertex AI Gemini API.

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

כדי ליצור ולהעריך מודל שעבר התאמה, אתם צריכים את התפקידים הבאים בניהול זהויות והרשאות גישה (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

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

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

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

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

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

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

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

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

    תפקידים שנדרשים להפעלת ממשקי 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.

מעניקים גישה לחשבון השירות של החיבור

מקצים לחשבון השירות של החיבור את התפקיד 'סוכן שירות של Vertex AI'.

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

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

הקצאת התפקיד בפרויקט אחר מובילה לשגיאה 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.

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

  4. לוחצים על בחירת תפקיד.

  5. בקטע Filter, מקלידים Vertex AI Service Agent ובוחרים את התפקיד.

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

gcloud

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

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

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

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

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

יצירת מודל עם כוונון בפיקוח

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

    כניסה ל-BigQuery

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

    CREATE OR REPLACE MODEL
    `PROJECT_ID.DATASET_ID.MODEL_NAME`
    REMOTE WITH CONNECTION {DEFAULT | `PROJECT_ID.REGION.CONNECTION_ID`}
    OPTIONS (
      ENDPOINT = 'ENDPOINT',
      MAX_ITERATIONS = MAX_ITERATIONS,
      LEARNING_RATE_MULTIPLIER = LEARNING_RATE_MULTIPLIER,
      DATA_SPLIT_METHOD = 'DATA_SPLIT_METHOD',
      DATA_SPLIT_EVAL_FRACTION = DATA_SPLIT_EVAL_FRACTION,
      DATA_SPLIT_COL = 'DATA_SPLIT_COL',
      EVALUATION_TASK = 'EVALUATION_TASK',
      PROMPT_COL = 'INPUT_PROMPT_COL',
      INPUT_LABEL_COLS = INPUT_LABEL_COLS)
    AS SELECT PROMPT_COLUMN, LABEL_COLUMN
    FROM `TABLE_PROJECT_ID.TABLE_DATASET.TABLE_NAME`;

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

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

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

    • ENDPOINT: ערך STRING שמציין את שם המודל שבו רוצים להשתמש.
    • MAX_ITERATIONS: ערך INT64 שמציין את מספר השלבים להרצה לצורך כוונון מפוקח. הערך של MAX_ITERATIONS צריך להיות בין 1 ל-.

      מודלים של Gemini מתאמנים באמצעות תקופות (epochs) ולא באמצעות שלבים, ולכן BigQuery ML ממיר את הערך MAX_ITERATIONS לתקופות. ערך ברירת המחדל של MAX_ITERATIONS הוא מספר השורות בנתוני הקלט, ששווה לאפוקה אחת. כדי להשתמש בכמה תקופות, מציינים כפולה של מספר השורות בנתוני האימון. לדוגמה, אם יש לכם 100 שורות של נתוני קלט ואתם רוצים להשתמש בשתי תקופות, צריך לציין 200 כערך הארגומנט. אם תספקו ערך שלא מתחלק במספר השורות בנתוני הקלט, BigQuery ML יעגל כלפי מעלה לאפוקה הקרובה ביותר. לדוגמה, אם יש לכם 100 שורות של נתוני קלט וציינתם 101 כערך של MAX_ITERATIONS, האימון יתבצע עם שתי תקופות אימון.

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

    • DATA_SPLIT_METHOD: ערך STRING שמציין את השיטה שבה משתמשים כדי לפצל את נתוני הקלט לקבוצות אימון והערכה. האפשרויות התקפות הן:
      • AUTO_SPLIT: מערכת BigQuery ML מפצלת את הנתונים באופן אוטומטי. אופן חלוקת הנתונים משתנה בהתאם למספר השורות בטבלת הקלט. זה ערך ברירת המחדל.
      • RANDOM: הנתונים עוברים רנדומיזציה לפני שהם מפולגים לקבוצות. כדי להתאים אישית את פיצול הנתונים, אפשר להשתמש באפשרות הזו עם האפשרות DATA_SPLIT_EVAL_FRACTION.
      • CUSTOM: הנתונים מפולחים באמצעות העמודה שצוינה באפשרות DATA_SPLIT_COL. הערך DATA_SPLIT_COL חייב להיות השם של עמודה מהסוג BOOL. שורות עם הערך TRUE או NULL משמשות כנתוני הערכה, ושורות עם הערך FALSE משמשות כנתוני אימון.
      • SEQ: פיצול נתונים באמצעות העמודה שצוינה באפשרות DATA_SPLIT_COL. הערך DATA_SPLIT_COL צריך להיות שם של עמודה מאחד מהסוגים הבאים:
        • NUMERIC
        • BIGNUMERIC
        • STRING
        • TIMESTAMP

        הנתונים ממוינים מהקטן לגדול לפי העמודה שצוינה.

        המערכת משתמשת ב-n השורות הראשונות כנתוני הערכה, כאשר n הוא הערך שצוין עבור DATA_SPLIT_EVAL_FRACTION. השורות שנותרו משמשות כנתוני אימון.

      • NO_SPLIT: לא מתבצע פיצול של הנתונים; כל נתוני הקלט משמשים כנתוני אימון.

      מידע נוסף על האפשרויות האלה לפיצול נתונים זמין במאמר DATA_SPLIT_METHOD.

    • DATA_SPLIT_EVAL_FRACTION: ערך FLOAT64 שמציין את החלק מהנתונים שייעשה בו שימוש כנתוני הערכה כשמבצעים התאמה מפוקחת. הערך חייב להיות בטווח [0, 1.0]. ערך ברירת המחדל הוא 0.2.

      משתמשים באפשרות הזו כשמציינים RANDOM או SEQ כערך של האפשרות DATA_SPLIT_METHOD. כדי להתאים אישית את פיצול הנתונים, אפשר להשתמש באפשרות DATA_SPLIT_METHOD עם האפשרות DATA_SPLIT_EVAL_FRACTION.

    • DATA_SPLIT_COL: ערך STRING שמציין את שם העמודה שבה יש להשתמש כדי למיין את נתוני הקלט לקבוצת האימון או לקבוצת ההערכה. משתמשים בערך CUSTOM או SEQ באפשרות DATA_SPLIT_METHOD.
    • EVALUATION_TASK: ערך STRING שמציין את סוג המשימה שרוצים לכוונן את המודל לביצוע שלה. האפשרויות התקפות הן:
      • TEXT_GENERATION
      • CLASSIFICATION
      • SUMMARIZATION
      • QUESTION_ANSWERING
      • UNSPECIFIED

      ערך ברירת המחדל הוא UNSPECIFIED.

    • INPUT_PROMPT_COL: ערך STRING שמכיל את השם של עמודת ההנחיות בטבלת נתוני האימון, לשימוש כשמבצעים כוונון בהשגחה. ערך ברירת המחדל הוא prompt.
    • INPUT_LABEL_COLS: ערך ARRAY<<STRING> שמכיל את השם של עמודת התווית בטבלת נתוני האימון, לשימוש בהתאמה מפוקחת. אפשר לציין רק רכיב אחד במערך. ערך ברירת המחדל הוא מערך ריק. כתוצאה מכך, label יהיה ערך ברירת המחדל של הארגומנט LABEL_COLUMN.
    • PROMPT_COLUMN: העמודה בטבלת נתוני האימון שמכילה את ההנחיה להערכת התוכן בעמודה LABEL_COLUMN. העמודה הזו צריכה להיות מסוג STRING או להיות מומרת ל-STRING. אם מציינים ערך לאפשרות INPUT_PROMPT_COL, צריך לציין את אותו ערך גם לאפשרות PROMPT_COLUMN. אחרת, הערך הזה חייב להיות prompt. אם בטבלה אין עמודה prompt, צריך להשתמש בכינוי כדי לציין עמודה קיימת בטבלה. לדוגמה, AS SELECT hint AS prompt, label FROM mydataset.mytable.
    • LABEL_COLUMN: העמודה בטבלת נתוני האימון שמכילה את הדוגמאות לאימון המודל. העמודה הזו צריכה להיות מסוג STRING או להיות מומרת ל-STRING. אם מציינים ערך לאפשרות INPUT_LABEL_COLS, צריך לציין את אותו ערך גם לאפשרות LABEL_COLUMN. אחרת, הערך הזה חייב להיות label. אם בטבלה אין עמודה label, צריך להשתמש בכינוי כדי לציין עמודה קיימת בטבלה. לדוגמה, AS SELECT prompt, feature AS label FROM mydataset.mytable.
    • TABLE_PROJECT_ID: מזהה הפרויקט שמכיל את טבלת נתוני האימון.
    • TABLE_DATASET: השם של מערך הנתונים שמכיל את טבלת נתוני האימון.
    • TABLE_NAME: השם של הטבלה שמכילה את הנתונים שישמשו לאימון המודל.

הערכת המודל שעבר התאמה

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

    כניסה ל-BigQuery

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

    SELECT
    *
    FROM
    ML.EVALUATE(
      MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`,
      TABLE `TABLE_PROJECT_ID.TABLE_DATASET.TABLE_NAME`,
      STRUCT('TASK_TYPE' AS task_type, TOKENS AS max_output_tokens,
        TEMPERATURE AS temperature, TOP_K AS top_k,
        TOP_P AS top_p));

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

    • PROJECT_ID: מזהה הפרויקט שמכיל את המודל.
    • DATASET_ID: המזהה של מערך הנתונים שמכיל את המודל.
    • MODEL_NAME: שם המודל.
    • TABLE_PROJECT_ID: מזהה הפרויקט שמכיל את טבלת נתוני ההערכה.
    • TABLE_DATASET: השם של מערך הנתונים שמכיל את טבלת נתוני ההערכה.
    • TABLE_NAME: שם הטבלה שמכילה את נתוני ההערכה.

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

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

    • TASK_TYPE: ערך STRING שמציין את סוג המשימה שעבורה רוצים להעריך את המודל. האפשרויות התקפות הן:
      • TEXT_GENERATION
      • CLASSIFICATION
      • SUMMARIZATION
      • QUESTION_ANSWERING
      • UNSPECIFIED
    • TOKENS: ערך INT64 שמגדיר את המספר המקסימלי של טוקנים שאפשר ליצור בתגובה. הערך חייב להיות בטווח [1,1024]. מציינים ערך נמוך יותר לתשובות קצרות וערך גבוה יותר לתשובות ארוכות. ערך ברירת המחדל הוא 128.
    • TEMPERATURE: ערך FLOAT64 בטווח [0.0,1.0] ששולט במידת האקראיות בבחירת האסימון. ערך ברירת המחדל הוא 0.

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

    • TOP_K: ערך INT64 בטווח [1,40] שקובע את מאגר האסימונים ההתחלתי שהמודל בוחן לצורך בחירה. מציינים ערך נמוך יותר לתשובות פחות אקראיות וערך גבוה יותר לתשובות יותר אקראיות. ערך ברירת המחדל הוא 40.
    • TOP_P: ערך FLOAT64 בטווח [0.0,1.0] עוזר לקבוע אילו טוקנים מהמאגר שנבחר על ידי TOP_K ייבחרו. מציינים ערך נמוך יותר כדי לקבל תשובות פחות אקראיות, וערך גבוה יותר כדי לקבל תשובות יותר אקראיות. ערך ברירת המחדל הוא 0.95.

יצירת טקסט

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

עמודת ההנחיות

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

SELECT *
FROM AI.GENERATE_TEXT(
  MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`,
  TABLE PROJECT_ID.DATASET_ID.TABLE_NAME,
  STRUCT(TOKENS AS max_output_tokens, TEMPERATURE AS temperature,
  TOP_P AS top_p,
  STOP_SEQUENCES AS stop_sequences)
);

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

  • PROJECT_ID: מזהה הפרויקט.
  • DATASET_ID: המזהה של מערך הנתונים שמכיל את המודל.
  • MODEL_NAME: שם המודל.
  • TABLE_NAME: שם הטבלה שמכילה את ההנחיה. בטבלה הזו צריכה להיות עמודה שהשם שלה זהה לשם של עמודת התכונות במודל המכוונן. אפשר להגדיר את שם העמודה של התכונה במודל באמצעות האפשרות PROMPT_COL כשיוצרים את המודל. אחרת, שם עמודת התכונות במודל הוא prompt כברירת מחדל, או שאפשר להשתמש בשם חלופי כדי להשתמש בעמודה עם שם אחר.
  • TOKENS: ערך INT64 שמגדיר את המספר המקסימלי של טוקנים שאפשר ליצור בתגובה. הערך חייב להיות בטווח [1,8192]. מציינים ערך נמוך יותר לתשובות קצרות וערך גבוה יותר לתשובות ארוכות. ערך ברירת המחדל הוא 128.
  • TEMPERATURE: ערך FLOAT64 בטווח [0.0,1.0] ששולט במידת האקראיות בבחירת האסימון. ערך ברירת המחדל הוא 0.

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

  • TOP_P: ערך FLOAT64 בטווח [0.0,1.0] עוזר לקבוע את ההסתברות של הטוקנים שנבחרו. מציינים ערך נמוך יותר לתשובות פחות אקראיות וערך גבוה יותר לתשובות יותר אקראיות. ערך ברירת המחדל הוא 0.95.
  • STOP_SEQUENCES: ערך ARRAY<STRING> שמסיר את המחרוזות שצוינו אם הן נכללות בתשובות מהמודל. ההתאמה בין המחרוזות היא מדויקת, כולל אותיות רישיות. ברירת המחדל היא מערך ריק.
  • GROUND_WITH_GOOGLE_SEARCH: ערך BOOL שקובע אם המודל של Gemini Enterprise Agent Platform משתמש בעיגון באמצעות חיפוש Google כשנוצרות תשובות. ההארקה מאפשרת למודל להשתמש במידע נוסף מהאינטרנט כשהוא יוצר תשובה, כדי שהתשובות יהיו ספציפיות ועובדתיות יותר. כשהשדה הזה מוגדר ל-True, התוצאות כוללות עמודה נוספת grounding_result שמצוינים בה המקורות שבהם המודל השתמש כדי לאסוף מידע נוסף. ערך ברירת המחדל הוא FALSE.
  • SAFETY_SETTINGS: ערך ARRAY<STRUCT<STRING AS category, STRING AS threshold>> שמגדיר את ספי האבטחה של התוכן לסינון התשובות. הרכיב הראשון במבנה מציין קטגוריה של נזק, והרכיב השני במבנה מציין סף חסימה תואם. המודל מסנן תוכן שמפר את ההגדרות האלה. אפשר לציין כל קטגוריה רק פעם אחת. לדוגמה, אי אפשר לציין גם את STRUCT('HARM_CATEGORY_DANGEROUS_CONTENT' AS category, 'BLOCK_MEDIUM_AND_ABOVE' AS threshold) וגם את STRUCT('HARM_CATEGORY_DANGEROUS_CONTENT' AS category, 'BLOCK_ONLY_HIGH' AS threshold). אם אין הגדרת בטיחות לקטגוריה מסוימת, נעשה שימוש בהגדרת הבטיחות של BLOCK_MEDIUM_AND_ABOVE.

    הקטגוריות הנתמכות הן:

    • HARM_CATEGORY_HATE_SPEECH
    • HARM_CATEGORY_DANGEROUS_CONTENT
    • HARM_CATEGORY_HARASSMENT
    • HARM_CATEGORY_SEXUALLY_EXPLICIT

    הערכים האפשריים:

    • BLOCK_NONE (מוגבל)
    • BLOCK_LOW_AND_ABOVE
    • BLOCK_MEDIUM_AND_ABOVE (ברירת מחדל)
    • BLOCK_ONLY_HIGH
    • HARM_BLOCK_THRESHOLD_UNSPECIFIED

    מידע נוסף מופיע בהגדרות של קטגוריית בטיחות וסף החסימה.

  • REQUEST_TYPE: ערך STRING שמציין את סוג בקשת ההסקה שרוצים לשלוח למודל Gemini. סוג הבקשה קובע באיזו מכסה הבקשה משתמשת. הערכים התקינים הם:
    • DEDICATED: הפונקציה AI.GENERATE_TEXT משתמשת רק במכסת הקצאת משאבים לפי התפוקה שנקבעה. הפונקציה AI.GENERATE_TEXT מחזירה את השגיאה Provisioned throughput is not purchased or is not active אם המכסה של הקצאת משאבים לפי התפוקה שנקבעה לא זמינה.
    • SHARED: הפונקציה AI.GENERATE_TEXT משתמשת רק במכסת תפוקה דינמית משותפת (DSQ), גם אם רכשתם מכסת הקצאת משאבים לפי התפוקה שנקבעה.
    • UNSPECIFIED: הפונקציה AI.GENERATE_TEXT משתמשת במכסה באופן הבא:
      • אם לא רכשתם מכסת הקצאת משאבים לפי התפוקה שנקבעה, הפונקציה AI.GENERATE_TEXT משתמשת במכסת DSQ.
      • אם רכשתם מכסת הקצאת משאבים לפי התפוקה שנקבעה, הפונקציה AI.GENERATE_TEXT משתמשת קודם במכסת הקצאת משאבים לפי התפוקה שנקבעה. אם הבקשות חורגות ממכסת הקצאת המשאבים לפי התפוקה שנקבעה, התנועה העודפת משתמשת במכסת DSQ.

    ערך ברירת המחדל הוא UNSPECIFIED.

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

  • MODEL_PARAMS: מחרוזת מילולית בפורמט JSON שמספקת פרמטרים למודל. הערך צריך להיות בפורמט של גוף הבקשה generateContent. אפשר לספק ערך לכל שדה בגוף הבקשה, חוץ מהשדה contents[]. אם מגדירים את השדה הזה, אי אפשר לציין גם פרמטרים של מודל בארגומנט של המבנה ברמה העליונה לפונקציה AI.GENERATE_TEXT. צריך לציין את כל פרמטר של המודל בשדה MODEL_PARAMS, או להשמיט את השדה הזה ולציין כל פרמטר בנפרד.

בדוגמה הבאה מוצגת בקשה עם המאפיינים האלה:

  • משתמש בעמודה prompt של הטבלה prompts להנחיה.
  • תשובה קצרה עם סבירות בינונית.
  • הפונקציה מחזירה את הטקסט שנוצר ואת מאפייני הבטיחות בעמודות נפרדות.
SELECT *
FROM
  AI.GENERATE_TEXT(
    MODEL `mydataset.mymodel`,
    TABLE mydataset.prompts,
    STRUCT(
      0.4 AS temperature, 100 AS max_output_tokens, 0.5 AS top_p));

שאילתת הנחיה

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

SELECT *
FROM AI.GENERATE_TEXT(
  MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`,
  (PROMPT_QUERY),
  STRUCT(TOKENS AS max_output_tokens, TEMPERATURE AS temperature,
  TOP_P AS top_p,
  STOP_SEQUENCES AS stop_sequences)
);

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

  • PROJECT_ID: מזהה הפרויקט.
  • DATASET_ID: המזהה של מערך הנתונים שמכיל את המודל.
  • MODEL_NAME: שם המודל.
  • PROMPT_QUERY: שאילתה שמספקת את נתוני ההנחיה.
  • TOKENS: ערך INT64 שמגדיר את המספר המקסימלי של טוקנים שאפשר ליצור בתגובה. הערך חייב להיות בטווח [1,8192]. מציינים ערך נמוך יותר לתשובות קצרות וערך גבוה יותר לתשובות ארוכות. ערך ברירת המחדל הוא 128.
  • TEMPERATURE: ערך FLOAT64 בטווח [0.0,1.0] ששולט במידת האקראיות בבחירת האסימון. ערך ברירת המחדל הוא 0.

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

  • TOP_P: ערך FLOAT64 בטווח [0.0,1.0] עוזר לקבוע את ההסתברות של הטוקנים שנבחרו. מציינים ערך נמוך יותר לתשובות פחות אקראיות וערך גבוה יותר לתשובות יותר אקראיות. ערך ברירת המחדל הוא 0.95.
  • STOP_SEQUENCES: ערך ARRAY<STRING> שמסיר את המחרוזות שצוינו אם הן נכללות בתשובות מהמודל. ההתאמה בין המחרוזות היא מדויקת, כולל אותיות רישיות. ברירת המחדל היא מערך ריק.
  • GROUND_WITH_GOOGLE_SEARCH: ערך BOOL שקובע אם המודל של Gemini Enterprise Agent Platform משתמש בעיגון באמצעות חיפוש Google כשנוצרות תשובות. ההארקה מאפשרת למודל להשתמש במידע נוסף מהאינטרנט כשהוא יוצר תשובה, כדי שהתשובות יהיו ספציפיות ועובדתיות יותר. כשהשדה הזה מוגדר ל-True, התוצאות כוללות עמודה נוספת grounding_result שמצוינים בה המקורות שבהם המודל השתמש כדי לאסוף מידע נוסף. ערך ברירת המחדל הוא FALSE.
  • SAFETY_SETTINGS: ערך ARRAY<STRUCT<STRING AS category, STRING AS threshold>> שמגדיר את ספי האבטחה של התוכן לסינון התשובות. הרכיב הראשון במבנה מציין קטגוריה של נזק, והרכיב השני במבנה מציין סף חסימה תואם. המודל מסנן תוכן שמפר את ההגדרות האלה. אפשר לציין כל קטגוריה רק פעם אחת. לדוגמה, אי אפשר לציין גם את STRUCT('HARM_CATEGORY_DANGEROUS_CONTENT' AS category, 'BLOCK_MEDIUM_AND_ABOVE' AS threshold) וגם את STRUCT('HARM_CATEGORY_DANGEROUS_CONTENT' AS category, 'BLOCK_ONLY_HIGH' AS threshold). אם אין הגדרת בטיחות לקטגוריה מסוימת, נעשה שימוש בהגדרת הבטיחות של BLOCK_MEDIUM_AND_ABOVE.

    הקטגוריות הנתמכות הן:

    • HARM_CATEGORY_HATE_SPEECH
    • HARM_CATEGORY_DANGEROUS_CONTENT
    • HARM_CATEGORY_HARASSMENT
    • HARM_CATEGORY_SEXUALLY_EXPLICIT

    הערכים האפשריים:

    • BLOCK_NONE (מוגבל)
    • BLOCK_LOW_AND_ABOVE
    • BLOCK_MEDIUM_AND_ABOVE (ברירת מחדל)
    • BLOCK_ONLY_HIGH
    • HARM_BLOCK_THRESHOLD_UNSPECIFIED

    מידע נוסף מופיע בהגדרות של קטגוריית בטיחות וסף החסימה.

  • REQUEST_TYPE: ערך STRING שמציין את סוג בקשת ההסקה שרוצים לשלוח למודל Gemini. סוג הבקשה קובע באיזו מכסה הבקשה משתמשת. הערכים התקינים הם:
    • DEDICATED: הפונקציה AI.GENERATE_TEXT משתמשת רק במכסת הקצאת משאבים לפי התפוקה שנקבעה. הפונקציה AI.GENERATE_TEXT מחזירה את השגיאה Provisioned throughput is not purchased or is not active אם המכסה של הקצאת משאבים לפי התפוקה שנקבעה לא זמינה.
    • SHARED: הפונקציה AI.GENERATE_TEXT משתמשת רק במכסת תפוקה דינמית משותפת (DSQ), גם אם רכשתם מכסת הקצאת משאבים לפי התפוקה שנקבעה.
    • UNSPECIFIED: הפונקציה AI.GENERATE_TEXT משתמשת במכסה באופן הבא:
      • אם לא רכשתם מכסת הקצאת משאבים לפי התפוקה שנקבעה, הפונקציה AI.GENERATE_TEXT משתמשת במכסת DSQ.
      • אם רכשתם מכסת הקצאת משאבים לפי התפוקה שנקבעה, הפונקציה AI.GENERATE_TEXT משתמשת קודם במכסת הקצאת משאבים לפי התפוקה שנקבעה. אם הבקשות חורגות ממכסת הקצאת המשאבים לפי התפוקה שנקבעה, התנועה העודפת משתמשת במכסת DSQ.

    ערך ברירת המחדל הוא UNSPECIFIED.

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

  • MODEL_PARAMS: מחרוזת מילולית בפורמט JSON שמספקת פרמטרים למודל. הערך צריך להיות בפורמט של גוף הבקשה generateContent. אפשר לספק ערך לכל שדה בגוף הבקשה, חוץ מהשדה contents[]. אם מגדירים את השדה הזה, אי אפשר לציין גם פרמטרים של מודל בארגומנט של המבנה ברמה העליונה לפונקציה AI.GENERATE_TEXT. צריך לציין את כל פרמטר של המודל בשדה MODEL_PARAMS, או להשמיט את השדה הזה ולציין כל פרמטר בנפרד.

דוגמה 1

בדוגמה הבאה מוצגת בקשה עם המאפיינים האלה:

  • הנחיות לסיכום הטקסט בעמודה body בטבלה articles.
  • מחזירה תשובה ארוכה למדי וסבירה יותר.
  • הפונקציה מחזירה את הטקסט שנוצר ואת מאפייני הבטיחות בעמודות נפרדות.
SELECT *
FROM
  AI.GENERATE_TEXT(
    MODEL `mydataset.mymodel`,
    (
      SELECT CONCAT('Summarize this text', body) AS prompt
      FROM mydataset.articles
    ),
    STRUCT(
      0.2 AS temperature, 650 AS max_output_tokens, 0.2 AS top_p));

דוגמה 2

בדוגמה הבאה מוצגת בקשה עם המאפיינים האלה:

  • משתמשים בשאילתה כדי ליצור את נתוני ההנחיה על ידי שרשור מחרוזות שמספקות קידומות להנחיה עם עמודות בטבלה.
  • תשובה קצרה עם סבירות בינונית.
  • לא מחזירה את הטקסט שנוצר ואת מאפייני הבטיחות בעמודות נפרדות.
SELECT *
FROM
  AI.GENERATE_TEXT(
    MODEL `mydataset.mytuned_model`,
    (
      SELECT CONCAT(question, 'Text:', description, 'Category') AS prompt
      FROM mydataset.input_table
    ),
    STRUCT(
      0.4 AS temperature, 100 AS max_output_tokens, 0.5 AS top_p));