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

1. บทนำ

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

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

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

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

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

Codelab 1: ใช้ Gemini เพื่อสร้าง Java Cloud Function สำหรับแอปพลิเคชัน 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 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 Terminal เพื่อเปิดใช้บริการที่เกี่ยวข้อง

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

5. สำรวจชุดข้อมูลสาธารณะของ BigQuery สำหรับข้อมูลหนังสือ

เริ่มต้นด้วยการทำความคุ้นเคยกับชุดข้อมูลสาธารณะของ BigQuery ที่มีข้อมูลเกี่ยวกับหนังสือที่เก็บถาวรบนอินเทอร์เน็ตจำนวนมาก หากไปยังชุดข้อมูล internetarchivebooks จากลิงก์นี้ไม่ได้ โปรดทำตามขั้นตอนด้านล่างเพื่อสำรวจชุดข้อมูล หรือทำตามเอกสารประกอบนี้

คุณดูชุดข้อมูลสาธารณะนี้ได้ในแผงเครื่องมือสำรวจของ BigQuery ซึ่งจะอยู่ที่ด้านซ้ายเมื่อคุณไปที่คอนโซล BigQuery

39e2ac03cc99cbac.png

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

68dba68a79cddfc9.png

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

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

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

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

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

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

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

edd258384bc74f1f.png

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

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

db998cc557e83f40.png

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

c7748de85120507b.png

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

7c58c764277c571f.png

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

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

e6be37bbee730bd1.png

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

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

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

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

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

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

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

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

ไปที่ Terminal ของ 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

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

fd342d8f16e664ab.png

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

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