מסמך עזר לניהול נקודות קצה של מודלים

בדף הזה מפורטים הפרמטרים של פונקציות שונות ש-Cloud SQL מספק כדי לרשום ולנהל נקודות קצה של מודלים. בדף מפורטים גם הסודות שאפשר לנהל באמצעות ניהול נקודות קצה של מודלים.

מודלים

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

mysql.ml_create_model_registration()

בדוגמה הבאה אפשר לראות איך משתמשים בפונקציה mysql.ml_create_model_registration() כדי לרשום מטא-נתונים של נקודת קצה של מודל:

  CALL
    mysql.ml_create_model_registration(
      'MODEL_ID',
      'REQUEST_URL',
      'PROVIDER_ID',
      'MODEL_TYPE',
      'MODEL_QUALIFIED_NAME',
      'AUTH_TYPE',
      'AUTH_ID',
      'GENERATE_HEADER_FUNCTION',
      'INPUT_TRANSFORM_FUNCTION',
      'OUTPUT_TRANSFORM_FUNCTION');
פרמטר חובה תיאור
MODEL_ID חובה לכל נקודות הקצה של המודלים מזהה ייחודי לנקודת הקצה של המודל שהגדרתם.
REQUEST_URL יכול להיות NULL במודלים של Vertex AI נקודת הקצה הספציפית למודל כשמוסיפים הטמעת טקסט ונקודות קצה של מודלים גנריים.

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

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

PROVIDER_ID נדרש לנקודות קצה של מודלים להטמעת טקסט עם תמיכה מובנית הספק של נקודת הקצה של המודל. ערך ברירת המחדל הוא custom. ב-Cloud SQL, מגדירים את הספק ל-google עבור נקודות קצה של מודלים של Vertex AI, ל-open_ai עבור נקודות קצה של מודלים של OpenAI, ל-anthropic עבור נקודות קצה של מודלים של Anthropic, ל-hugging_face עבור נקודות קצה של מודלים של Hugging Face או ל-custom עבור נקודות קצה של מודלים בהוסטינג בהתאמה אישית.
MODEL_TYPE יכול להיות NULL בנקודות קצה של מודלים גנריים סוג המודל. אפשר להגדיר את הערך הזה כ-text_embedding עבור נקודות קצה של מודלים להטמעת טקסט, או כ-generic עבור כל נקודות הקצה של מודלים אחרים.
MODEL_QUALIFIED_NAME חובה לנקודות קצה של מודלים של OpenAI; יכול להיות NULL לנקודות קצה של מודלים אחרים השם המוגדר במלואו אם לנקודת הקצה של המודל יש כמה גרסאות או אם היא מוגדרת על ידי נקודת הקצה של המודל – לדוגמה, textembedding-gecko@001 או textembedding-gecko@002. מכיוון שמודל textembedding-gecko@001 רשום מראש בניהול נקודות קצה של מודלים, אפשר ליצור הטמעות באמצעות textembedding-gecko@001 כמזהה המודל.
AUTH_TYPE יכול להיות NULL אלא אם לנקודת הקצה של המודל יש דרישת אימות ספציפית סוג האימות שבו נעשה שימוש בנקודת הקצה של המודל. אפשר להגדיר את האפשרות auth_type_cloudsql_service_agent_iam למודלים של Vertex AI או auth_type_secret_manager לספקים אחרים.
AUTH_ID העברה כ-NULL לנקודות קצה של Vertex AI; נדרש לכל נקודות הקצה האחרות של המודלים שמאחסנות סודות ב-Secret Manager מזהה הסוד שהגדרתם, שמשמש בהמשך לרישום של נקודת קצה של מודל.
GENERATE_HEADER_FUNCTION יכול להיות NULL שם הפונקציה שהגדרתם ליצירת כותרות בהתאמה אישית. החתימה של הפונקציה הזו תלויה בפונקציה mysql.ml_predict_row(). מידע נוסף זמין במאמר בנושא פונקציה ליצירת כותרת HTTP.
INPUT_TRANSFORM_FUNCTION אופציונלי לנקודות קצה של מודלים להטמעת טקסט עם תמיכה מובנית; לא מגדירים לנקודות קצה של מודלים גנריים הפונקציה להמרת קלט של פונקציית החיזוי המתאימה לקלט ספציפי למודל. ראו פונקציות טרנספורמציה.
OUTPUT_TRANSFORM_FUNCTION אופציונלי לנקודות קצה של מודלים להטמעת טקסט עם תמיכה מובנית; לא מגדירים לנקודות קצה של מודלים גנריים הפונקציה להמרת פלט ספציפי של מודל לפלט של פונקציית החיזוי. ראו פונקציות טרנספורמציה.

mysql.ml_alter_model_registration()

בדוגמה הבאה מוצג איך להפעיל את פונקציית ה-SQL‏ mysql.ml_alter_model_registration() שמשמשת לעדכון המטא-נתונים של נקודת הקצה של המודל:

    CALL
    mysql.ml_alter_model_registration(
      'MODEL_ID',
      'REQUEST_URL',
      'PROVIDER_ID',
      'MODEL_TYPE',
      'MODEL_QUALIFIED_NAME',
      'AUTH_TYPE',
      'AUTH_ID',
      'GENERATE_HEADER_FUNCTION',
      'INPUT_TRANSFORM_FUNCTION',
      'OUTPUT_TRANSFORM_FUNCTION');

mysql.ml_drop_model_registration()

בדוגמה הבאה מוצג איך להפעיל את פונקציית ה-SQL‏ mysql.ml_drop_model_registration() שמשמשת להסרת נקודת קצה של מודל:

  CALL mysql.ml_drop_model_registration('MODEL_ID');
פרמטר תיאור
MODEL_ID מזהה ייחודי לנקודת הקצה של המודל שהגדרתם.

mysql.ml_list_registered_model()

בדוגמה הבאה מוצג אופן הקריאה לפונקציית ה-SQL‏ mysql.ml_list_registered_model() שמשמשת להצגת מידע על נקודת הקצה של המודל:

  SELECT mysql.ml_list_registered_model('MODEL_ID');
פרמטר תיאור
MODEL_ID מזהה ייחודי לנקודת הקצה של המודל שהגדרתם.

mysql.cloudsql_ml_models

בדוגמה הבאה מוצגת שאילתה בטבלת mysql.cloudsql_ml_models שמשמשת להצגת מידע על נקודות קצה של מודלים עבור כל נקודות הקצה של המודלים:

  SELECT * FROM mysql.cloudsql_ml_models;

סודות

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

mysql.ml_create_sm_secret_registration()

בדוגמה הבאה מוצג איך להפעיל את פונקציית ה-SQL‏ mysql.ml_create_sm_secret_registration() שמשמשת להוספת הסוד שנוצר ב-Secret Manager:

    CALL
    mysql.ml_create_sm_secret_registration(
      'SECRET_ID',
      'projects/PROJECT_ID/secrets/SECRET_MANAGER_SECRET_ID/versions/VERSION_NUMBER');
פרמטר תיאור
SECRET_ID מזהה הסוד שהגדרתם, שמשמש בהמשך לרישום של נקודת קצה של מודל.
PROJECT_ID מזהה הפרויקט Google Cloud שמכיל את הסוד. הפרויקט הזה יכול להיות שונה מהפרויקט שמכיל את מופע Cloud SQL.
SECRET_MANAGER_SECRET_ID מזהה הסוד שהוגדר ב-Secret Manager כשנוצר הסוד.
VERSION_NUMBER מספר הגרסה של המזהה הסודי.

mysql.ml_alter_sm_secret_registration()

בדוגמה הבאה מוצג אופן השימוש בפונקציית ה-SQL‏ mysql.ml_alter_sm_secret_registration() לעדכון פרטי סוד:

  CALL
    mysql.ml_alter_sm_secret_registration(
      'SECRET_ID',
      'projects/PROJECT_ID/secrets/SECRET_MANAGER_SECRET_ID/versions/VERSION_NUMBER');
פרמטר תיאור
SECRET_ID מזהה הסוד שהגדרתם, שמשמש בהמשך לרישום של נקודת קצה של מודל.
PROJECT_ID מזהה הפרויקט Google Cloud שמכיל את הסוד. הפרויקט הזה יכול להיות שונה מהפרויקט שמכיל את מופע Cloud SQL.
SECRET_MANAGER_SECRET_ID מזהה הסוד שהוגדר ב-Secret Manager כשנוצר הסוד.
VERSION_NUMBER מספר הגרסה של המזהה הסודי.

mysql.ml_drop_sm_secret_registration()

בדוגמה הבאה מוצג אופן ההפעלה של פונקציית ה-SQL‏ mysql.ml_drop_sm_secret_registration() שמשמשת להסרת סוד:

  CALL mysql.ml_drop_sm_secret_registration('SECRET_ID');
פרמטר תיאור
SECRET_ID מזהה הסוד שהגדרתם, שמשמש בהמשך לרישום של נקודת קצה של מודל.

פונקציות חיזוי

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

mysql.ml_embedding()

בדוגמה הבאה אפשר לראות איך יוצרים הטמעות:

SELECT
  mysql.ml_embedding(
    'MODEL_ID',
    'CONTENT');
פרמטר תיאור
MODEL_ID מזהה ייחודי לנקודת הקצה של המודל שהגדרתם.
CONTENT הטקסט שרוצים לתרגם להטמעה בווקטור.

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

mysql.ml_predict_row()

בדוגמה הבאה אפשר לראות איך מפעילים חיזויים:

SELECT
  mysql.ml_predict_row(
    'MODEL_ID',
    'REQUEST_BODY');
פרמטר תיאור
MODEL_ID מזהה ייחודי לנקודת הקצה של המודל שהגדרתם.
REQUEST_BODY הפרמטרים של פונקציית החיזוי, בפורמט JSON.

דוגמאות לשאילתות SQL להפעלת תחזיות זמינות במאמר דוגמאות.

טרנספורמציה של פונקציות

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

פונקציית שינוי קלט

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

  CREATE FUNCTION IF NOT EXISTS
  INPUT_TRANSFORM_FUNCTION(model_id VARCHAR(100), input_text TEXT) RETURNS JSON DETERMINISTIC;
פרמטר תיאור
INPUT_TRANSFORM_FUNCTION הפונקציה להמרת קלט של פונקציית החיזוי המתאימה לקלט ספציפי של נקודת הקצה של המודל.

פונקציית שינוי פלט

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

  CREATE FUNCTION IF NOT EXISTS
  OUTPUT_TRANSFORM_FUNCTION(model_id VARCHAR(100), response_json JSON) RETURNS BLOB DETERMINISTIC;
פרמטר תיאור
OUTPUT_TRANSFORM_FUNCTION הפונקציה להמרת פלט ספציפי של נקודת קצה של מודל לפלט של פונקציית החיזוי.

דוגמה לפונקציות של שינוי

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

בדוגמה הבאה, בקשת curl יוצרת הטמעות על סמך ההנחיה ונקודת הקצה של המודל:

  curl -m 100 -X POST https://cymbal.com/models/text/embeddings/v1 \
    -H "Content-Type: application/json"
    -d '{"prompt": ["Cloud SQL Embeddings"]}'

התגובה הבאה מוחזרת:

[[ 0.3522231  -0.35932037  0.10156056  0.17734447 -0.11606089 -0.17266059
   0.02509351  0.20305622 -0.09787305 -0.12154685 -0.17313677 -0.08075467
   0.06821183 -0.06896557  0.1171584  -0.00931572  0.11875633 -0.00077482
   0.25604948  0.0519384   0.2034983  -0.09952664  0.10347155 -0.11935943
  -0.17872004 -0.08706985 -0.07056875 -0.05929353  0.4177883  -0.14381726
   0.07934926  0.31368294  0.12543282  0.10758053 -0.30210832 -0.02951015
   0.3908268  -0.03091059  0.05302926 -0.00114946 -0.16233777  0.1117468
  -0.1315904   0.13947351 -0.29569918 -0.12330773 -0.04354299 -0.18068913
   0.14445548  0.19481727]]

על סמך הקלט והתשובה, אפשר להסיק את הדברים הבאים:

  • המודל מצפה לקלט JSON דרך השדה prompt. בשדה הזה אפשר להזין מערך של קלטים. הפונקציה mysql.ml_embedding() היא פונקציה ברמת השורה, ולכן היא מצפה לקבל קלט טקסט אחד בכל פעם. לכן, צריך ליצור פונקציית המרת קלט שיוצרת מערך עם רכיב יחיד.

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

בדוגמה הבאה מוצגות פונקציות ההמרה של הקלט והפלט שמשמשות את נקודת הקצה של המודל הזו כשהיא רשומה בניהול נקודות קצה של מודלים:

פונקציית שינוי קלט

DELIMITER $$
CREATE FUNCTION IF NOT EXISTS cymbal_text_input_transform(model_id VARCHAR(100), input_text TEXT)
RETURNS JSON
DETERMINISTIC

BEGIN
  RETURN JSON_OBJECT('prompt', JSON_ARRAY(input_text));
END $$

פונקציית טרנספורמציה של פלט

CREATE FUNCTION IF NOT EXISTS cymbal_text_output_transform(model_id VARCHAR(100), response_json JSON)
RETURNS BLOB
DETERMINISTIC

BEGIN
  RETURN STRING_TO_VECTOR(
         JSON_EXTRACT(
              content,
              '$.predictions[0].embeddings.values'
            )
    );

END $$
DELIMITER ;

Default included transform functions

Model Endpoint Management provides in-built support for two common text embedding model families, Google's Gemini embedding models and OpenAI's text embedding models. The input and output transforms are preloaded when these models are registered, for convenience. They can be overwritten by specifying your own transform functions during registration, or by calling mysql.ml_alter_model_registration().

HTTP header generation function

The following shows signature for the header generation function that can be used with the `mysql.ml_embedding()` prediction function when registering other text embedding model endpoints.

  CREATE FUNCTION IF NOT EXISTS GENERATE_HEADERS(model_id VARCHAR(100), input_text TEXT) RETURNS JSON DETERMINISTIC;

For the mysql.ml_predict_row() prediction function, the signature is as follows:

CREATE FUNCTION IF NOT EXISTS GENERATE_HEADERS(model_id TEXT, input JSON) RETURNS JSON DETERMINISTIC;
Parameter Description
GENERATE_HEADERS The function to generate custom headers. You can also pass the authorization header generated by the header generation function while registering the model endpoint.

Header generation function example

To better understand how to create a function that generates output in JSON key value pairs that are used as HTTP headers, consider a custom-hosted text embedding model endpoint.

The following example curl request passes the version HTTP header, which is used by the model endpoint:

  curl -m 100 -X POST https://cymbal.com/models/text/embeddings/v1 \
      -H "Content-Type: application/json" \
      -H "version: 2024-01-01" \
      -d '{"prompt": ["Cloud SQL Embeddings"]}'

The model expects text input through the version field and returns the version value in JSON format. The following example shows the header generation function that is used for this text embedding model endpoint when it is registered with model endpoint management:

DELIMITER $$
CREATE FUNCTION IF NOT EXISTS header_gen_fn(model_id VARCHAR(100), input_text TEXT)
RETURNS JSON
DETERMINISTIC
BEGIN
  RETURN JSON_OBJECT('version', '2024-01-01');
END;
$$
DELIMITER ;