מודל שפה גדול (LLM) בלבד ל-SQL עם BigQuery ML באמצעות Vertex AI PaLM API

1. מבוא

ב-Codelab הזה מפורטים השלבים לסיכום קוד מקור ממאגרי GitHub ולזיהוי שפת התכנות במאגר, באמצעות מודל שפה גדול (LLM) של Vertex AI ליצירת טקסט ( text-bison) כפונקציה מרוחקת מתארחת ב-BigQuery. בזכות פרויקט הארכיון של GitHub, יש לנו עכשיו תמונת מצב מלאה של יותר מ-2.8 מיליון מאגרי קוד פתוח ב-GitHub במערכי נתונים ציבוריים של Google BigQuery. רשימת השירותים שנעשה בהם שימוש:

  1. BigQuery ML
  2. Vertex AI PaLM API

מה תפַתחו

תצרו

  • מערך נתונים ב-BigQuery שיכיל את המודל
  • מודל BigQuery שמארח את Vertex AI PaLM API כפונקציה מרוחקת
  • חיבור חיצוני כדי ליצור את החיבור בין BigQuery ל-Vertex AI

2. דרישות

  • דפדפן, כמו Chrome או Firefox
  • פרויקט ב-Google Cloud שהחיוב בו מופעל

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

  1. ב-מסוף Google Cloud, בדף לבחירת הפרויקט, בוחרים או יוצרים פרויקט ב-Google Cloud.
  2. הקפידו לוודא שהחיוב מופעל בפרויקט שלכם ב-Cloud. כך בודקים אם החיוב מופעל בפרויקט
  3. מוודאים שכל ממשקי ה-API הנדרשים (BigQuery API, ‏ Vertex AI API, ‏ BigQuery Connection API) מופעלים.
  4. תשתמשו ב-Cloud Shell, סביבת שורת פקודה שפועלת ב-Google Cloud וכוללת את bq. אפשר לעיין במאמרי העזרה בנושא פקודות gcloud ושימוש בהן.

בפינה הימנית העליונה של Cloud Console, לוחצים על 'הפעלת Cloud Shell':

51622c00acec2fa.png

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

gcloud config set project <YOUR_PROJECT_ID>
  1. אפשר לעבור ישירות למסוף BigQuery על ידי הזנת כתובת ה-URL הבאה בדפדפן: https://console.cloud.google.com/bigquery

4. הנתונים בשלבי הכנה

בתרחיש השימוש הזה אנחנו משתמשים בתוכן של קוד המקור ממערך הנתונים github_repos במערכי הנתונים הציבוריים של Google BigQuery. כדי להשתמש בזה, במסוף BigQuery, מחפשים את github_repos ומקישים על Enter. לוחצים על הכוכב לצד מערך הנתונים שמופיע כתוצאת החיפוש. לאחר מכן לוחצים על האפשרות 'הצגת נתונים עם כוכב בלבד' כדי לראות את מערך הנתונים הזה רק מתוך מערכי הנתונים הציבוריים.

dc6bf1e2fa6bba8a.png

מרחיבים את הטבלאות במערך הנתונים כדי לראות את הסכימה ותצוגה מקדימה של הנתונים. אנחנו נשתמש ב-sample_contents, שמכיל רק דגימה (10%) של הנתונים המלאים בטבלת התוכן. זוהי תצוגה מקדימה של הנתונים:

e021c689c56abf22.png

5. יצירת מערך הנתונים ב-BigQuery

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

יוצרים קבוצת נתונים באזור 'ארה"ב' (או בכל אזור אחר לפי ההעדפה) בשם bq_llm

c67e9f929629739a.png

מערך הנתונים הזה יכיל את מודל ה-ML שייווצר בשלבים הבאים. בדרך כלל אנחנו גם מאחסנים את הנתונים שבהם אנחנו משתמשים באפליקציית ה-ML בטבלה במערך הנתונים הזה, אבל בתרחיש השימוש שלנו הנתונים כבר נמצאים במערך נתונים ציבורי ב-BigQuery, ואנחנו נפנה אליו ישירות ממערך הנתונים החדש שיצרנו לפי הצורך. אם אתם רוצים לבצע את הפרויקט הזה במערך נתונים משלכם שנמצא בקובץ CSV (או בכל קובץ אחר), אתם יכולים לטעון את הנתונים לטבלה במערך נתונים ב-BigQuery על ידי הפעלת הפקודה הבאה ממסוף Cloud Shell:

bq load --source_format=CSV --skip_leading_rows=1 bq_llm.table_to_hold_your_data \
./your_file.csv \ text:string,label:string

6. יצירת חיבור חיצוני

יוצרים חיבור חיצוני (אם עדיין לא עשיתם זאת, מפעילים את BQ Connection API) ורושמים את מזהה חשבון השירות מפרטי הגדרת החיבור:

  1. לוחצים על הלחצן +ADD בחלונית BigQuery Explorer (בצד ימין של מסוף BigQuery) ולוחצים על Connection to external data sources (חיבור למקורות נתונים חיצוניים) ברשימת המקורות הפופולריים.
  2. בוחרים באפשרות 'BigLake ופונקציות מרוחקות' בתור סוג החיבור ומזינים llm-conn בתור מזהה החיבור.

6b75042881eaec5f.png

  1. אחרי שיוצרים את החיבור, רושמים את חשבון השירות שנוצר מפרטי הגדרת החיבור.

7. מתן הרשאות

בשלב הזה ניתן הרשאות לחשבון השירות לגשת לשירות Vertex AI:

פותחים את IAM ומוסיפים את חשבון השירות שהעתקתם אחרי שיצרתם את החיבור החיצוני כ-Principal, ובוחרים בתפקיד Vertex AI User.

ff8e1d730879f972.png

8. יצירת מודל ML מרוחק

יוצרים את המודל המרוחק שמייצג מודל שפה גדול (LLM) שמתארח ב-Vertex AI:

CREATE OR REPLACE MODEL bq_llm.llm_model
  REMOTE WITH CONNECTION `us.llm-conn`
  OPTIONS (remote_service_type = 'CLOUD_AI_LARGE_LANGUAGE_MODEL_V1');

הפונקציה יוצרת מודל בשם llm_model במערך הנתונים bq_llm, שמסתמך על CLOUD_AI_LARGE_LANGUAGE_MODEL_V1 API של Vertex AI כפונקציה מרוחקת. התהליך יימשך כמה שניות.

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

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

SELECT
  ml_generate_text_result['predictions'][0]['content'] AS generated_text,
  ml_generate_text_result['predictions'][0]['safetyAttributes']
    AS safety_attributes,
  * EXCEPT (ml_generate_text_result)
FROM
  ML.GENERATE_TEXT(
    MODEL `bq_llm.llm_model`,
    (
  SELECT
        CONCAT('Can you read the code in the following text and generate a summary for what the code is doing and what language it is written in:', content)
        AS prompt from `bigquery-public-data.github_repos.sample_contents`
          limit 5
    ),
    STRUCT(
      0.2 AS temperature,
      100 AS max_output_tokens));

**הסבר:

‫ml_generate_text_result** היא התגובה של מודל יצירת הטקסט בפורמט JSON, שמכילה גם תוכן וגם מאפייני בטיחות: א. התוכן מייצג את תוצאת הטקסט שנוצרה b. מאפייני הבטיחות מייצגים את מסנן התוכן המובנה עם סף מתכוונן שמופעל ב-Vertex AI Palm API כדי למנוע תשובות לא מכוונות או בלתי צפויות ממודל השפה הגדול – התשובה נחסמת אם היא חורגת מסף הבטיחות

ML.GENERATE_TEXT הוא מבנה שמשתמשים בו ב-BigQuery כדי לגשת ל-LLM של Vertex AI ולבצע משימות של יצירת טקסט

CONCAT מוסיפה את הצהרת ה-PROMPT ואת רשומת מסד הנתונים

github_repos הוא שם מערך הנתונים, ו-sample_contents הוא שם הטבלה שמכילה את הנתונים שבהם נשתמש בתכנון ההנחיה.

Temperature הוא פרמטר ההנחיה ששולט באקראיות של התשובה – ככל שהערך נמוך יותר, כך התשובה רלוונטית יותר

Max_output_tokens הוא מספר המילים שרוצים בתשובה

התגובה לשאילתה נראית כך:

1156f6eecb548cd5.png

10. השטחת תוצאת השאילתה

נשטח את התוצאה כדי שלא נצטרך לפענח את ה-JSON באופן מפורש בשאילתה:

SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL `bq_llm.llm_model`,
    (
  SELECT
        CONCAT('Can you read the code in the following text and generate a summary for what the code is doing and what language it is written in:', content)
        AS prompt from `bigquery-public-data.github_repos.sample_contents`
          limit 5
        ),
    STRUCT(
      0.2 AS temperature,
      100 AS max_output_tokens,
      TRUE AS flatten_json_output));

**הסבר:

‫Flatten_json_output** מייצג את הערך הבוליאני, שאם הוא מוגדר כ-True, מחזיר טקסט שטוח וברור שחולץ מתגובת ה-JSON.

התגובה לשאילתה נראית כך:

3b662ef7d3ba9263.png

11. הסרת המשאבים

כדי לא לצבור חיובים לחשבון Google Cloud על המשאבים שבהם השתמשתם במאמר הזה:

  1. במסוף Google Cloud, עוברים לדף Manage resources.
  2. ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על סמל המחיקה.
  3. כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.

12. מזל טוב

מעולה! השתמשתם בהצלחה בתוכנית Vertex AI Text Generation LLM באופן פרוגרמטי כדי לבצע ניתוח טקסט על הנתונים שלכם באמצעות שאילתות SQL בלבד. מידע נוסף על המודלים הזמינים מופיע בתיעוד המוצר Vertex AI LLM.