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

1. מבוא

בשיעור ה-Codelab הזה, פירטתי את השלבים לביצוע סיכום קוד מקור ממאגרים של GitHub וזיהוי שפת התכנות במאגר, באמצעות Vertex AI Large Language Model ליצירת טקסט ( text-bison) כפונקציה מרוחקת מתארחת ב-BigQuery. בזכות פרויקט Archive ב-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, לוחצים על Activate 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

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

e021c689c56abf22.png

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

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

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

c67e9f929629739a.png

מערך הנתונים הזה יאכלס את מודל למידת המכונה שניצור בשלבים הבאים. בדרך כלל נאחסן גם את הנתונים שבהם אנחנו משתמשים באפליקציית למידת המכונה בטבלה הזו במערך הנתונים הזה. אבל בתרחיש לדוגמה שלנו, הנתונים כבר נמצאים במערך נתונים ציבורי ב-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 source (חיבור למקורות נתונים חיצוניים'). במקורות הפופולריים שצוינו
  2. בוחרים את סוג החיבור בתור "BigLake and Remote Functions" (פונקציות של BigLake ופונקציות מרוחקות) ולספק 'llm-conn' כמזהה החיבור

6b75042881eaec5f.png

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

7. מתן הרשאות

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

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

ff8e1d730879f972.png

8. יצירת מודל למידת מכונה מרחוק

יוצרים את המודל המרוחק שמייצג מודל שפה גדול (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 שמכיל גם את מאפייני התוכן וגם את מאפייני הבטיחות: a. התוכן מייצג את תוצאת הטקסט שנוצרה ב. מאפייני הבטיחות מייצגים את מסנן התוכן המובנה עם סף מתכוונן שמופעל ב-Vertex AI Palm API, כדי למנוע תגובות לא מכוונות או בלתי צפויות ממודל השפה הגדול (LLM). התגובה תיחסם אם היא מפירה את סף הבטיחות.

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

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

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

טמפרטורה היא הפרמטר של ההנחיה לשליטה ברנדומיזציה של התשובה – ככל שתבחינו ברלוונטיות נמוכה יותר, כך היא נמוכה יותר

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. ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete (מחיקה).
  3. כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down

12. מזל טוב

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