Analytics למדף הספרים: שימוש ב-Gemini כדי לפתח אפליקציית Java Cloud Run שמעבירה נתונים מ-BigQuery לאינטרנט

1. מבוא

אתם אוהבים לקרוא ספרים אבל מתקשים לבחור מתוך המגוון הרחב? תארו לעצמכם אפליקציה מבוססת-AI שממליצה על הספר המושלם בשבילכם, ומציעה גם סיכום תמציתי לפי הז'אנר שבחרתם, כדי שתוכלו להתרשם מהספר. ב-codelab הזה אראה לכם איך לבנות אפליקציה כזו באמצעות BigQuery,‏ Vertex AI ו-Cloud Run בעזרת Gemini.

סקירה כללית של הפרויקט

מקרה השימוש שלנו מתמקד ב-4 הרכיבים העיקריים האלה:

  • מסד נתונים של ספרים: מערך הנתונים הציבורי העצום של ספרים בארכיון האינטרנט ב-BigQuery ישמש כקטלוג מקיף של ספרים.
  • מנוע סיכום מבוסס-AI: Google Cloud Functions, שמצוידות במודל השפה Gemini-Pro, ייצרו סיכומים מועילים בהתאם לבקשות המשתמשים.
  • שילוב עם BigQuery: פונקציה מרוחקת ב-BigQuery שקוראת לפונקציה של Cloud Functions שלנו כדי לספק סיכומים ונושאים של ספרים על פי דרישה.
  • ממשק משתמש: אפליקציית אינטרנט שמתארחת ב-Cloud Run ומציעה למשתמשים אפליקציית אינטרנט לצפייה בתוצאות.

חילקנו את כל תהליך ההטמעה של הפרויקט ל-3 סדנאות קוד, ובסדנת הקוד הזו נסביר על סדנת קוד 3 שמופיעה ברשימה הבאה:

Codelab 1: שימוש ב-Gemini כדי ליצור פונקציה של Cloud Functions ב-Java לאפליקציית Gemini.

Codelab 2: שימוש ב-Gemini כדי לבנות אפליקציות AI גנרטיבי שמבוססות על SQL בלבד באמצעות BigQuery.

Codelab 3: שימוש ב-Gemini ליצירת אפליקציית אינטרנט Java Spring Boot שמבצעת אינטראקציה עם BigQuery.

2. שימוש ב-Gemini כדי ליצור אפליקציית אינטרנט של Spring Boot עם BigQuery

מה תפַתחו

  • יוצרים את מערך הנתונים והטבלה הנדרשים ב-BigQuery.
  • אפליקציית אינטרנט של Java Spring Boot שמבצעת אינטראקציה עם BigQuery כדי לאחזר נתונים של ספרים ולהציג אותם באינטרנט.
  • האפליקציה הזו נפרסת ב-Cloud Run.
  • תיישמו את השלבים האלה בעזרת Gemini.

3. דרישות

יצירת הפרויקט

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

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

הפעלת Cloud Shell

  1. תשתמשו ב-Cloud Shell, סביבת שורת פקודה שפועלת ב-Google Cloud ומגיעה עם bq שנטען מראש:

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

6757b2fb50ddcc2d.png

  1. אחרי שמתחברים ל-Cloud Shell, אמור להופיע אימות שכבר בוצע ושהפרויקט כבר הוגדר לפי מזהה הפרויקט. מריצים את הפקודה הבאה ב-Cloud Shell כדי לוודא שעברתם אימות:
gcloud auth list
  1. מריצים את הפקודה הבאה ב-Cloud Shell כדי לוודא שפקודת gcloud מכירה את הפרויקט.
gcloud config list project
  1. אם הפרויקט לא מוגדר, משתמשים בפקודה הבאה כדי להגדיר אותו:
gcloud config set project <YOUR_PROJECT_ID>

אפשר לעיין במאמרי העזרה בנושא פקודות gcloud ושימוש בהן.

4. הפעלת Gemini וממשקי ה-API הנדרשים

הפעלת Gemini

  1. כדי להפעיל את ה-API, עוברים אל Gemini Marketplace. אפשר גם להשתמש בפקודה הבאה:

gcloud services enable cloudaicompanion.googleapis.com --project PROJECT_ID

  1. נכנסים לדף Gemini ולוחצים על 'התחלת שיחה'.

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

איך עושים את זה? יש לך שאלה ל-Gemini? אבל לפני כן, חשוב לזכור:

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

כדי לעבור למסוף של Gemini, לוחצים על הסמל 'פתיחת Gemini' בפינה השמאלית העליונה, ליד סרגל החיפוש במסוף Google Cloud.

26e1491322855614.png

מקלידים את השאלה הבאה בקטע "כאן כותבים הנחיה":

How do I enable the BigQuery and Cloud Run apis using gcloud command?

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

b97a8a9fa9143b3f.png

מעתיקים את הפקודה (אפשר להשתמש בסמל ההעתקה בחלק העליון של קטע הפקודה) ומפעילים פתרונות חכמים בטרמינל של Cloud Shell כדי להפעיל את השירותים הרלוונטיים:

  • bigquery.googleapis.com
  • run.googleapis.com

5. התנסות במערך נתונים ציבורי של BigQuery עם נתוני ספרים

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

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

39e2ac03cc99cbac.png

מקלידים 'gdelt-bq' או 'internetarchivebooks' בסרגל החיפוש ולוחצים על 'חיפוש בכל הפרויקטים'. מרחיבים את התוצאה ומסמנים בכוכב ספרים מארכיון האינטרנט, כמו שמוצג בתמונה שלמטה:

68dba68a79cddfc9.png.

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

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

select * from  `gdelt-bq.internetarchivebooks.1920` limit 5;

אנחנו נשתמש בשלושת השדות הבאים ב-Codelab שלנו:

  • BookMeta_Title (title)
  • נושאים (הנושאים מופרדים באמצעות ';')
  • BookMeta_FullText (הטקסט המלא של הספר)

6. יצירת תבנית בסיסית של Java Cloud Run באמצעות Gemini

לוחצים על סמל Open Editor (פתיחת העורך) בפינה הימנית העליונה של Cloud Shell Terminal (אני בדרך כלל מעדיף לפתוח את הטרמינל ואת העורך בכרטיסיות נפרדות במקביל, כדי שאוכל לכתוב קוד בכרטיסייה אחת ולבצע בנייה בכרטיסייה אחרת).

edd258384bc74f1f.png

אחרי שפותחים את Editor, מוודאים שהלוגו של Gemini בפינה השמאלית התחתונה של מסוף Editor פעיל (ולא מבוטל). בנוסף, מוודאים שהפרויקט ב-Google Cloud בפינה הימנית התחתונה מצביע על הפרויקט הפעיל הנוכחי שרוצים לעבוד איתו. אם הם לא פעילים, לוחצים עליהם, מאשרים, בוחרים את פרויקט Google Cloud שאליו רוצים שהם יצביעו ומפעילים אותם.

אחרי ששתי האפשרויות פעילות, לוחצים על שם הפרויקט בפינה הימנית התחתונה, ובחלון הקופץ שנפתח עם הכותרת Cloud Code, גוללים למטה אל New Application (אפליקציה חדשה).

db998cc557e83f40.png

ברשימה הזו, בוחרים באפשרות Cloud Run application (אפליקציית Cloud Run). מהרשימה שקופצת, בוחרים באפשרות Java:

c7748de85120507b.png

ברשימה שמופיעה, מקלידים את שם הפרויקט bookshelf-web במקום helloworld ולוחצים על OK.

7c58c764277c571f.png

מעולה! השתמשת ב-Gemini כדי ליצור אפליקציית Java פשוטה ב-Cloud Run, ולא עשית הרבה מעבר להפעלת ההגדרות, נכון?

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

e6be37bbee730bd1.png

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

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

7. הוספת תלות כדי להשתמש ב-BigQuery באפליקציית האינטרנט

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

ב-Cloud Code Editor, מוודאים שבפינה השמאלית התחתונה מופיע Gemini פעיל, ובפינה השמאלית התחתונה מופיע הפרויקט הפעיל ב-Google Cloud.

ב-Cloud Code Editor, עוברים לקובץ pom.xml, ממש מעל התג </dependencies>, ומקלידים את הערת ההנחיה הבאה :

171d1c40ff8124e8.png

<!-- What maven dependency should I include to access BigQuery in the app-->

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

2df51efd655a3557.png

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

<dependency>
 <groupId>com.google.cloud</groupId>
 <artifactId>google-cloud-bigquery</artifactId>
</dependency>

8. עדכון המקור כדי להעביר את נתוני מדף הספרים לאינטרנט

מחליפים את הקוד HelloWorldController.java בקוד הבא:

package cloudcode.helloworld.web;
import java.util.UUID;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.JobId;
import com.google.cloud.bigquery.Job;
import com.google.cloud.bigquery.JobInfo;
import com.google.cloud.bigquery.QueryJobConfiguration;
import com.google.cloud.bigquery.TableResult;
import com.google.cloud.bigquery.FieldValueList;


@RestController
public final class HelloWorldController {


  /**
   * Create an endpoint for the landing page
   * @return the BigQuery analytics results string to the web
   */


  @GetMapping("/")
  public String helloWorld() throws Exception {
    /* Connect to bigquery and write a select SQL to fetch Title, Theme and Summary fields from the table `bookshelf.bookshelf_theme` if you have executed the codelab 1 of this series, if not just directly use records from gdelt-bq.internetarchivebooks.1920 table */

 
String query = "SELECT  BookMeta_Title || ' (' || Themes || ') ' as summary  from gdelt-bq.internetarchivebooks.1920 limit 10 ";


    BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
    QueryJobConfiguration queryConfig =
        QueryJobConfiguration.newBuilder(query)
            .setUseLegacySql(false)
            .build();
    // Create a job ID so that we can safely retry.
    JobId jobId = JobId.of(UUID.randomUUID().toString());
    Job queryJob = bigquery.create(JobInfo.newBuilder(queryConfig).setJobId(jobId).build());
    // Wait for the query to complete.
    queryJob = queryJob.waitFor();
    // Check for errors
    if (queryJob == null) {
      throw new RuntimeException("Job no longer exists");
    } else if (queryJob.getStatus().getError() != null) {
      throw new RuntimeException(queryJob.getStatus().getError().toString());
    }
    // Get the results.
    TableResult result = queryJob.getQueryResults();
    String responseString = "";
    // Print all pages of the results.
    for (FieldValueList row : result.iterateAll()) {
      responseString += row.get("summary").getStringValue() + ".         \n";
      System.out.printf("%s\n", row.get("summary").getStringValue());
    }
    return responseString;
  }
}

ביצענו את השינויים הבאים בקובצי המקור:

  1. ב-HelloWorldController.java, מחליפים את ‎ @Controller ב-‎ @RestController.
  2. החלפתי את התוכן של השיטה helloWorld() כדי לכלול את הקריאה ל-BigQuery, את ההפעלה של השאילתה שמביאה את הנתונים כדי להציג את הכותרת ואת הנושאים של הספר.
  3. במקום להחזיר את תבנית תצוגת האינדקס בטעינה, היא מתעדכנת כדי להחזיר את התגובה כמחרוזת לאינטרנט.

הערה חשובה: אל תשכחו לעדכן את הפרטים שבהמשך

  1. מעדכנים את הקובץ HelloWorldControllerTests.Java כדי להוסיף הערה להפעלה הנוכחית של mvc.perform(...).

‫Gemini להסבר קוד

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

  1. כשהקובץ HelloWorldController.java פתוח בסביבת הפיתוח המשולבת, עוברים לחלונית הצ'אט בסביבת הפיתוח המשולבת ומזינים את ההנחיה הבאה: Explain this (הסבר על זה). כדאי לעיין בהסבר המפורט ש-Gemini מספק. תוכלו להשתמש בו בכל שלב כדי לקבל הסבר על הקוד.
  2. אתם יכולים לסמן קטע או שורה ספציפיים בקוד (לדוגמה, @GetMapping("/")) ואז להשתמש בהנחיה הבאה: Explain this. הפעולה הזו תספק הסבר מפורט רק על שורת הקוד או על קטע הקוד שבחרתם.
  3. אפשר גם לנסות לשאול שאילתות שמתייחסות לקוד בצורה אחרת. לדוגמה, אפשר לבחור את שורת הקוד הבאה

BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();‎

ואז שולחים את השאילתה הבאה "What will happen if the bigquery variable is null?" 4. אפשר גם לבקש מ-Gemini לשפר את הקוד או לבצע בו רפקטורינג. לדוגמה, אפשר לבחור את כל הקוד של השיטה helloWorld() ולהזין את ההנחיה הבאה: "איך אפשר לשפר או לשכתב את הקוד הזה?". בודקים את ההצעות ש-Gemini מספק.

9. בנייה ופריסה

עוברים אל Cloud Shell Terminal. מוודאים שהיא מצביעה על מזהה הפרויקט במסוף.

4b3392dd050340a3.png

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

cd bookshelf-web

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

mvn package

mvn spring-boot:run

עכשיו לוחצים על הלחצן Web Preview (תצוגה מקדימה באינטרנט) ואז על האפשרות Preview on port 8080 (תצוגה מקדימה ביציאה 8080) כמו שמוצג בהמשך:

ea9464498b6bd9df.png

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

עכשיו נשאל את Gemini איך לפרוס את אפליקציית האינטרנט הזו ב-Cloud Run. כדי לעבור אל Gemini Chat, לוחצים על הלחצן 'פתיחת Gemini' במסוף Google Cloud.

זו ההנחיה שלי:

What is the gcloud command to deploy my app to cloud run without having to containerize, only by giving the source file?

התשובה:

6f21c2d59b6dc416.png

מחליפים את ה-placeholders של שם השירות והאזור בפקודת gcloud, כמו שמוצג בקטע הקוד הבא:

gcloud run deploy bookshelf-web --source . --allow-unauthenticated --region $REGION

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

66f5d6e00c16a4db.png

התהליך נמשך כמה דקות והאפליקציה נפרסת ב-Google Cloud ללא שרת. לוחצים על האפליקציה שנפרסה ב-Cloud Run ורואים את התוצאה באינטרנט:

fd342d8f16e664ab.png

10. מזל טוב

מעולה! יצרנו, פרסנו ובדקנו בהצלחה אפליקציית אינטרנט של Java Cloud Run כדי לבצע ניתוח של מדף ספרים באמצעות Gemini. כמשימת המשך, אפשר לבקש מ-Gemini להסביר איך למחוק את שירות Cloud Run שנפרס ממסוף Google Cloud, ולפעול לפי השלבים שהוא יציג כדי לנקות את המשאב.