Analytics ของชั้นวางหนังสือ: ใช้ Gemini เพื่อสร้างแอปพลิเคชัน Java Cloud Run ที่นำข้อมูล BigQuery ไปใช้บนเว็บ

1. บทนำ

คุณชอบอ่านหนังสือไหม แต่รู้สึกว่ามีตัวเลือกเยอะเกินไปจนเลือกไม่ถูกใช่ไหม ลองนึกภาพว่ามีแอปที่ทำงานด้วยระบบ AI ซึ่งไม่เพียงแนะนำหนังสือที่เหมาะกับคุณเท่านั้น แต่ยังสรุปเนื้อหาโดยย่อตามประเภทที่คุณเลือกไว้ด้วย เพื่อให้คุณได้เห็นภาพรวมของหนังสือ ในโค้ดแล็บนี้ ฉันจะแนะนำวิธีสร้างแอปพลิเคชันดังกล่าวด้วย BigQuery, Vertex AI และ Cloud Run โดยมี Gemini เป็นผู้ช่วย

ภาพรวมของโปรเจ็กต์

กรณีการใช้งานของเรามุ่งเน้นที่องค์ประกอบสำคัญ 4 อย่างต่อไปนี้

  • ฐานข้อมูลหนังสือ: ชุดข้อมูลสาธารณะ BigQuery ของหนังสือใน Internet Archive จำนวนมหาศาลจะทำหน้าที่เป็นแคตตาล็อกหนังสือที่ครอบคลุมของเรา
  • เครื่องมือสรุปด้วย AI: ฟังก์ชันของ Google Cloud ที่ติดตั้งโมเดลภาษา Gemini Pro จะสร้างข้อมูลสรุปเชิงลึกที่ปรับให้เหมาะกับคำขอของผู้ใช้
  • การผสานรวม BigQuery: ฟังก์ชันระยะไกลภายใน BigQuery ที่เรียกใช้ Cloud Function ของเราเพื่อแสดงข้อมูลสรุปและธีมของหนังสือตามต้องการ
  • อินเทอร์เฟซผู้ใช้: เว็บแอปที่โฮสต์ใน Cloud Run ซึ่งจะนำเสนอเว็บแอปพลิเคชันให้ผู้ใช้ดูผลลัพธ์

เราได้แบ่งการติดตั้งใช้งานโปรเจ็กต์ทั้งหมดออกเป็น 3 Codelab และ Codelab นี้ครอบคลุม Codelab 3 ในรายการด้านล่าง

Codelab 1: ใช้ Gemini เพื่อสร้าง Cloud Function ของ Java สำหรับแอปพลิเคชัน Gemini

Codelab 2: ใช้ Gemini เพื่อสร้างแอปพลิเคชัน Generative 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. ไปที่Gemini Marketplace เพื่อเปิดใช้ API คุณยังใช้คำสั่งต่อไปนี้ได้ด้วย

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

  1. ไปที่หน้า Gemini แล้วคลิก "เริ่มแชท"

เปิดใช้ API อื่นๆ ที่จำเป็น

เราจะทำเช่นนั้นได้อย่างไร มาถาม Gemini กันดีกว่า แต่ก่อนอื่น โปรดทราบสิ่งต่อไปนี้

หมายเหตุ: LLM เป็นแบบไม่กำหนด ดังนั้นขณะที่คุณลองใช้พรอมต์เหล่านี้ คำตอบที่คุณได้รับอาจแตกต่างจากคำตอบในภาพหน้าจอของฉัน

ไปที่คอนโซลแชทของ 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

39e2ac03cc99cbac.png

พิมพ์ "gdelt-bq" หรือ "internetarchivebooks" ในแถบค้นหา แล้วคลิกค้นหาทุกโปรเจ็กต์ ขยายผลการค้นหาและติดดาวหนังสือใน Internet Archive ดังที่แสดงในรูปภาพด้านล่าง

68dba68a79cddfc9.png

ขยายชุดข้อมูล คลิก gdelt-bq.internetarchivebooks แล้วดูตัวอย่างข้อมูลในตาราง 1920 ตารางนี้มีหนังสือตั้งแต่ปี 1920 ที่เก็บถาวรไว้

หากต้องการดูสคีมาที่เราจะใช้ในส่วนต่อๆ ไป ให้เรียกใช้การค้นหาต่อไปนี้

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

เราจะใช้ฟิลด์ 3 รายการต่อไปนี้สำหรับ Codelab

  • BookMeta_Title (title)
  • ธีม (ธีมที่คั่นด้วย ";')
  • BookMeta_FullText (ข้อความทั้งหมดของหนังสือ)

6. สร้างเทมเพลต Java Cloud Run พื้นฐานด้วย Gemini

เปิด Cloud Shell Editor โดยคลิกไอคอน Open Editor ที่มุมขวาบนของเทอร์มินัล Cloud Shell (โดยปกติแล้วฉันชอบเปิดเทอร์มินัลและเอดิเตอร์ในแท็บแยกกันแบบคู่ขนานเพื่อให้เขียนโค้ดในแท็บหนึ่งและสร้างในอีกแท็บหนึ่งได้)

edd258384bc74f1f.png

เมื่อเปิดเอดิเตอร์แล้ว ให้ตรวจสอบว่าโลโก้ Gemini ที่มุมขวาล่างของคอนโซลเอดิเตอร์ทำงานอยู่ (และไม่ได้ถูกยกเลิก) นอกจากนี้ โปรดตรวจสอบว่าโปรเจ็กต์ Google Cloud ที่มุมล่างซ้ายชี้ไปยังโปรเจ็กต์ที่ใช้งานอยู่ปัจจุบันที่คุณต้องการใช้ หากไม่ได้ใช้งาน ให้คลิกที่รายการเหล่านั้น ให้สิทธิ์ เลือกโปรเจ็กต์ Google Cloud ที่ต้องการให้ชี้ไป แล้วเปิดใช้งาน

เมื่อทั้ง 2 อย่างทำงานอยู่ ให้คลิกชื่อโปรเจ็กต์ที่มุมซ้ายล่าง แล้วเลื่อนลงไปที่ "แอปพลิเคชันใหม่" ในรายการป๊อปอัปที่เปิดขึ้นซึ่งมีชื่อว่า "Cloud Code"

db998cc557e83f40.png

ในรายการนั้น ให้เลือกแอปพลิเคชัน Cloud Run เลือก Java จากรายการที่ปรากฏขึ้น

c7748de85120507b.png

ในรายการที่ปรากฏ ให้พิมพ์ชื่อโปรเจ็กต์ "bookshelf-web" แทน helloworld แล้วคลิก OK

7c58c764277c571f.png

ไชโย คุณได้เริ่มต้นใช้งานแอปพลิเคชัน Java Cloud Run อย่างง่ายด้วย Gemini และไม่ได้ทำอะไรมากนอกจากการเปิดใช้และการกำหนดค่าการเปิดใช้งาน ใช่ไหม

นี่คือโครงสร้างโปรเจ็กต์ที่คุณควรเห็น

e6be37bbee730bd1.png

ตอนนี้คุณพร้อมที่จะทำให้แอปพลิเคชันใช้งานได้แล้ว แต่ไม่ใช่เหตุผลที่เราเริ่มทำสิ่งนี้ เรายังคงต้องรวมฟังก์ชันหลักของเว็บแอปพลิเคชัน ซึ่งก็คือการดึงข้อมูลวิเคราะห์จากฐานข้อมูล BigQuery และแสดงบนเว็บ

หากต้องการทำเช่นนี้ คุณสามารถเพิ่มพรอมต์และรับโค้ดที่พัฒนาขึ้นเรื่อยๆ ด้วย Gemini หรือเขียนตรรกะด้วยตนเอง ฉันจะใช้ทั้งสองอย่าง

7. เพิ่มการอ้างอิงเพื่อใช้ BigQuery ในเว็บแอป

ตอนนี้แอปพลิเคชันพร้อมใช้งานแล้ว เราจึงพร้อมที่จะทำการเปลี่ยนแปลงแหล่งที่มาและพร็อพเพอร์ตี้ของแอปพลิเคชัน ก่อนอื่น มาเพิ่มการอ้างอิงกัน มาขอให้ Gemini แนะนำกัน

ในโปรแกรมแก้ไข Cloud Code ให้ตรวจสอบว่าแถบสถานะแสดง Gemini ที่ใช้งานอยู่ที่มุมขวาล่าง และเลือกโปรเจ็กต์ Google Cloud ที่ใช้งานอยู่ที่มุมซ้ายล่าง

ในโปรแกรมแก้ไข Cloud Code ให้ไปที่ไฟล์ 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 ใน IDE แล้ว ให้ไปที่แผงแชทใน IDE แล้วป้อนพรอมต์ต่อไปนี้ อธิบายสิ่งนี้ ดูคำอธิบายโดยละเอียดที่ Gemini ระบุ คุณใช้ฟีเจอร์นี้ได้ทุกเมื่อเพื่อรับคำอธิบายเกี่ยวกับโค้ด
  2. คุณสามารถไฮไลต์ข้อมูลโค้ดหรือบรรทัดที่เฉพาะเจาะจงในโค้ด (เช่น @GetMapping("/") ) แล้วใช้พรอมต์ต่อไปนี้ อธิบายสิ่งนี้ ซึ่งจะแสดงคำอธิบายโดยละเอียดเฉพาะในบรรทัดของโค้ดหรือข้อมูลโค้ดที่คุณเลือก
  3. คุณยังลองใช้คำค้นหาที่ถามเกี่ยวกับโค้ดในรูปแบบต่างๆ ได้ด้วย เช่น คุณเลือกบรรทัดโค้ดต่อไปนี้ได้

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

และถามคำถามต่อไปนี้ "จะเกิดอะไรขึ้นหากตัวแปร BigQuery เป็น Null" 4. นอกจากนี้ คุณยังขอให้ปรับปรุงหรือรีแฟกเตอร์โค้ดได้ด้วยความช่วยเหลือจาก Gemini เช่น คุณสามารถเลือกโค้ดทั้งหมดสำหรับเมธอด helloWorld() แล้วป้อนพรอมต์ต่อไปนี้ "ฉันจะปรับปรุงหรือรีแฟกเตอร์โค้ดนี้ได้อย่างไร" ดูคำแนะนำที่ Gemini ให้ไว้

9. สร้างและติดตั้งใช้งาน

ไปที่เทอร์มินัลของ Cloud Shell ตรวจสอบว่าชี้ไปยังรหัสโปรเจ็กต์ในเทอร์มินัล

4b3392dd050340a3.png

ไปยังไดเรกทอรีโปรเจ็กต์โดยใช้คำสั่ง cd

cd bookshelf-web

เรียกใช้คำสั่งด้านล่างทีละรายการเพื่อให้แน่ใจว่าแอปทำงานในเครื่อง

mvn package

mvn spring-boot:run

ตอนนี้ ให้คลิกปุ่ม "ตัวอย่างเว็บ" แล้วคลิกตัวเลือก "แสดงตัวอย่างบนพอร์ต 8080" ดังที่แสดงด้านล่าง

ea9464498b6bd9df.png

ตรวจสอบว่าคุณเห็นแอปที่ทำงานในเครื่องในเครื่อง Cloud Shell

ตอนนี้มาถาม Gemini กันว่าเราจะทำให้เว็บแอปพลิเคชันนี้ใช้งานได้ใน Cloud Run ได้อย่างไร ไปที่ Gemini Chat โดยคลิกปุ่ม "เปิด Gemini" ใน Google Cloud Console

พรอมต์ของฉันคือ

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

คำตอบมีดังนี้

6f21c2d59b6dc416.png

มาแทนที่ตัวยึดตำแหน่งชื่อบริการและภูมิภาคในคำสั่ง gcloud ดังที่แสดงในข้อมูลโค้ดด้านล่างกัน

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

เรียกใช้คำสั่งนี้จากเทอร์มินัล Cloud Shell คุณควรเห็นคำถามติดตามผล 2-3 ข้อ ให้เลือกคำตอบที่เหมาะสม แล้วคุณจะเห็นการติดตั้งใช้งานที่กำลังดำเนินการอยู่

66f5d6e00c16a4db.png

การดำเนินการนี้ใช้เวลาไม่กี่นาทีและระบบจะนำแอปไปใช้งานใน Google Cloud แบบไร้เซิร์ฟเวอร์ คลิกแอปที่ติดตั้งใช้งาน Cloud Run แล้วดูผลลัพธ์บนเว็บ

fd342d8f16e664ab.png

10. ขอแสดงความยินดี

ยินดีด้วย เราได้สร้าง ทดสอบ และติดตั้งใช้งานเว็บแอปพลิเคชัน Java Cloud Run เพื่อทำการวิเคราะห์ชั้นวางหนังสือโดยใช้ Gemini เรียบร้อยแล้ว ในฐานะงานติดตามผล ให้ถาม Gemini ถึงวิธีลบบริการ Cloud Run ที่ทำให้ใช้งานได้จาก Google Cloud Console แล้วทำตามขั้นตอนที่ Gemini ตอบกลับมาเพื่อล้างข้อมูลทรัพยากร