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. ข้อกำหนด
- เบราว์เซอร์ เช่น Chrome หรือ Firefox
- โปรเจ็กต์ Google Cloud ที่เปิดใช้การเรียกเก็บเงิน
- ซึ่งจะเป็นประโยชน์หากคุณได้ติดตั้งใช้งาน Cloud Function เป็นส่วนหนึ่งของ Codelab ส่วนที่ 1 ใช้ Gemini เพื่อสร้างฟังก์ชัน Cloud ของ Java สำหรับแอปพลิเคชัน Generative AI Codelab
- แบบมีเงื่อนไข: หากคุณมีสิทธิ์เข้าถึงลิงก์เครดิต Google Cloud ฟรีในขณะนี้ (ซึ่งอาจได้รับการจัดสรรจากผู้จัดเวิร์กช็อป) ให้ทำตามวิธีการในหน้าด้านล่างเพื่อทำขั้นตอนการเปิดใช้งานเครดิตและการสร้างโปรเจ็กต์ให้เสร็จสมบูรณ์ล่วงหน้า หากไม่มีลิงก์นี้ ให้ทำตามขั้นตอนข้อกำหนดเบื้องต้นของโปรเจ็กต์และการเรียกเก็บเงินด้านล่าง
สร้างโปรเจ็กต์
คุณข้ามขั้นตอนด้านล่างได้หากเปิดใช้งานบัญชีสำหรับการเรียกเก็บเงินและสร้างโปรเจ็กต์โดยใช้ลิงก์ที่กล่าวถึงในขั้นตอนแบบมีเงื่อนไขด้านบนแล้ว
- ในคอนโซล Google Cloud ให้เลือกหรือสร้างโปรเจ็กต์ Google Cloud ในหน้าตัวเลือกโปรเจ็กต์
- ตรวจสอบว่าได้เปิดใช้การเรียกเก็บเงินสำหรับโปรเจ็กต์ Cloud แล้ว ดูวิธีตรวจสอบว่าได้เปิดใช้การเรียกเก็บเงินในโปรเจ็กต์แล้วหรือไม่
เปิดใช้งาน Cloud Shell
- คุณจะใช้ Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานใน Google Cloud และมาพร้อมกับ bq ที่โหลดไว้ล่วงหน้า
จาก Cloud Console ให้คลิกเปิดใช้งาน Cloud Shell ที่มุมขวาบน

- เมื่อเชื่อมต่อกับ Cloud Shell แล้ว คุณควรเห็นว่าคุณได้รับการตรวจสอบสิทธิ์แล้วและโปรเจ็กต์ได้รับการตั้งค่าเป็นรหัสโปรเจ็กต์ของคุณแล้ว เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อยืนยันว่าคุณได้รับการตรวจสอบสิทธิ์แล้ว
gcloud auth list
- เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อยืนยันว่าคำสั่ง gcloud รู้จักโปรเจ็กต์ของคุณ
gcloud config list project
- หากไม่ได้ตั้งค่าโปรเจ็กต์ ให้ใช้คำสั่งต่อไปนี้เพื่อตั้งค่า
gcloud config set project <YOUR_PROJECT_ID>
โปรดดูคำสั่งและการใช้งาน gcloud ในเอกสารประกอบ
4. การเปิดใช้ Gemini และ API ที่จำเป็น
เปิดใช้ Gemini
- ไปที่Gemini Marketplace เพื่อเปิดใช้ API คุณยังใช้คำสั่งต่อไปนี้ได้ด้วย
gcloud services enable cloudaicompanion.googleapis.com --project PROJECT_ID
- ไปที่หน้า Gemini แล้วคลิก "เริ่มแชท"
เปิดใช้ API อื่นๆ ที่จำเป็น
เราจะทำเช่นนั้นได้อย่างไร มาถาม Gemini กันดีกว่า แต่ก่อนอื่น โปรดทราบสิ่งต่อไปนี้
หมายเหตุ: LLM เป็นแบบไม่กำหนด ดังนั้นขณะที่คุณลองใช้พรอมต์เหล่านี้ คำตอบที่คุณได้รับอาจแตกต่างจากคำตอบในภาพหน้าจอของฉัน
ไปที่คอนโซลแชทของ Gemini โดยคลิกไอคอน "เปิด Gemini" ที่มุมขวาบนซึ่งอยู่ติดกับแถบค้นหาในคอนโซล Google Cloud

พิมพ์คำถามนี้ในส่วน "ป้อนพรอมต์ที่นี่"
How do I enable the BigQuery and Cloud Run apis using gcloud command?
คุณจะได้รับคำตอบดังที่เห็นในรูปภาพต่อไปนี้

คัดลอกคำสั่งดังกล่าว (คุณใช้ไอคอนคัดลอกที่ด้านบนของข้อมูลโค้ดคำสั่งได้) แล้วเรียกใช้ในเทอร์มินัล Cloud Shell เพื่อเปิดใช้บริการที่เกี่ยวข้อง
- bigquery.googleapis.com
- run.googleapis.com
5. สำรวจชุดข้อมูลสาธารณะของ BigQuery สำหรับข้อมูลหนังสือ
เริ่มต้นด้วยการทำความคุ้นเคยกับชุดข้อมูลสาธารณะของ BigQuery ซึ่งมีข้อมูลเกี่ยวกับหนังสือในอินเทอร์เน็ตอาร์ไคฟ์จำนวนมาก หากคุณไม่สามารถเข้าถึงชุดข้อมูล internetarchivebooks จากลิงก์นี้ โปรดทำตามขั้นตอนด้านล่างเพื่อสำรวจชุดข้อมูล หรือทำตามเอกสารประกอบนี้
คุณดูชุดข้อมูลสาธารณะนี้ได้ในแผงสำรวจ BigQuery คุณจะเห็นส่วนนี้ทางด้านซ้ายเมื่อไปที่คอนโซล BigQuery

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

ขยายชุดข้อมูล คลิก 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 (โดยปกติแล้วฉันชอบเปิดเทอร์มินัลและเอดิเตอร์ในแท็บแยกกันแบบคู่ขนานเพื่อให้เขียนโค้ดในแท็บหนึ่งและสร้างในอีกแท็บหนึ่งได้)

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

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

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

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

ตอนนี้คุณพร้อมที่จะทำให้แอปพลิเคชันใช้งานได้แล้ว แต่ไม่ใช่เหตุผลที่เราเริ่มทำสิ่งนี้ เรายังคงต้องรวมฟังก์ชันหลักของเว็บแอปพลิเคชัน ซึ่งก็คือการดึงข้อมูลวิเคราะห์จากฐานข้อมูล BigQuery และแสดงบนเว็บ
หากต้องการทำเช่นนี้ คุณสามารถเพิ่มพรอมต์และรับโค้ดที่พัฒนาขึ้นเรื่อยๆ ด้วย Gemini หรือเขียนตรรกะด้วยตนเอง ฉันจะใช้ทั้งสองอย่าง
7. เพิ่มการอ้างอิงเพื่อใช้ BigQuery ในเว็บแอป
ตอนนี้แอปพลิเคชันพร้อมใช้งานแล้ว เราจึงพร้อมที่จะทำการเปลี่ยนแปลงแหล่งที่มาและพร็อพเพอร์ตี้ของแอปพลิเคชัน ก่อนอื่น มาเพิ่มการอ้างอิงกัน มาขอให้ Gemini แนะนำกัน
ในโปรแกรมแก้ไข Cloud Code ให้ตรวจสอบว่าแถบสถานะแสดง Gemini ที่ใช้งานอยู่ที่มุมขวาล่าง และเลือกโปรเจ็กต์ Google Cloud ที่ใช้งานอยู่ที่มุมซ้ายล่าง
ในโปรแกรมแก้ไข Cloud Code ให้ไปที่ไฟล์ pom.xml เหนือแท็ก </dependencies> ให้พิมพ์ความคิดเห็นพรอมต์ต่อไปนี้

<!-- What maven dependency should I include to access BigQuery in the app-->
ฉันได้รับผลลัพธ์ดังที่แสดงในรูปภาพด้านล่าง

วางการอ้างอิงที่นี่เพื่อความสะดวก หากในกรณีของคุณ คำแนะนำมาพร้อมกับแท็กเวอร์ชัน คุณสามารถเพิกเฉยต่อแท็กนั้นได้
<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;
}
}
เราได้ทำการเปลี่ยนแปลงไฟล์ต้นฉบับดังนี้
- ใน HelloWorldController.java ให้อัปเดต @Controller เป็น @RestController
- แทนที่เนื้อหาของเมธอด helloWorld() เพื่อรวมการเรียกไปยัง BigQuery, การเรียกใช้คําค้นหาที่ดึงข้อมูลเพื่อแสดงรายการชื่อและธีมของหนังสือ
- แทนที่จะแสดงผลเทมเพลตมุมมองดัชนีเมื่อโหลด ระบบจะอัปเดตให้แสดงผลการตอบกลับเป็นสตริงไปยังเว็บ
หมายเหตุสำคัญ: อย่าลืมอัปเดตข้อมูลด้านล่าง
- อัปเดตไฟล์ HelloWorldControllerTests.Java เพื่อแสดงความคิดเห็นในการเรียกใช้ mvc.perform(...) ปัจจุบัน
Gemini สำหรับคำอธิบายโค้ด
เราได้ให้โค้ดแก่คุณและอธิบายการเปลี่ยนแปลงที่เราทำกับไฟล์ต้นฉบับ คุณยังใช้ Gemini เพื่อรับคำอธิบายโค้ดและ/หรือความคิดเห็นในโค้ดได้ตามต้องการด้วย คุณลองทำสิ่งต่อไปนี้ได้
- เมื่อเปิดไฟล์ HelloWorldController.java ใน IDE แล้ว ให้ไปที่แผงแชทใน IDE แล้วป้อนพรอมต์ต่อไปนี้ อธิบายสิ่งนี้ ดูคำอธิบายโดยละเอียดที่ Gemini ระบุ คุณใช้ฟีเจอร์นี้ได้ทุกเมื่อเพื่อรับคำอธิบายเกี่ยวกับโค้ด
- คุณสามารถไฮไลต์ข้อมูลโค้ดหรือบรรทัดที่เฉพาะเจาะจงในโค้ด (เช่น @GetMapping("/") ) แล้วใช้พรอมต์ต่อไปนี้ อธิบายสิ่งนี้ ซึ่งจะแสดงคำอธิบายโดยละเอียดเฉพาะในบรรทัดของโค้ดหรือข้อมูลโค้ดที่คุณเลือก
- คุณยังลองใช้คำค้นหาที่ถามเกี่ยวกับโค้ดในรูปแบบต่างๆ ได้ด้วย เช่น คุณเลือกบรรทัดโค้ดต่อไปนี้ได้
BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
และถามคำถามต่อไปนี้ "จะเกิดอะไรขึ้นหากตัวแปร BigQuery เป็น Null" 4. นอกจากนี้ คุณยังขอให้ปรับปรุงหรือรีแฟกเตอร์โค้ดได้ด้วยความช่วยเหลือจาก Gemini เช่น คุณสามารถเลือกโค้ดทั้งหมดสำหรับเมธอด helloWorld() แล้วป้อนพรอมต์ต่อไปนี้ "ฉันจะปรับปรุงหรือรีแฟกเตอร์โค้ดนี้ได้อย่างไร" ดูคำแนะนำที่ Gemini ให้ไว้
9. สร้างและติดตั้งใช้งาน
ไปที่เทอร์มินัลของ Cloud Shell ตรวจสอบว่าชี้ไปยังรหัสโปรเจ็กต์ในเทอร์มินัล

ไปยังไดเรกทอรีโปรเจ็กต์โดยใช้คำสั่ง cd
cd bookshelf-web
เรียกใช้คำสั่งด้านล่างทีละรายการเพื่อให้แน่ใจว่าแอปทำงานในเครื่อง
mvn package
mvn spring-boot:run
ตอนนี้ ให้คลิกปุ่ม "ตัวอย่างเว็บ" แล้วคลิกตัวเลือก "แสดงตัวอย่างบนพอร์ต 8080" ดังที่แสดงด้านล่าง

ตรวจสอบว่าคุณเห็นแอปที่ทำงานในเครื่องในเครื่อง 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?
คำตอบมีดังนี้

มาแทนที่ตัวยึดตำแหน่งชื่อบริการและภูมิภาคในคำสั่ง gcloud ดังที่แสดงในข้อมูลโค้ดด้านล่างกัน
gcloud run deploy bookshelf-web --source . --allow-unauthenticated --region $REGION
เรียกใช้คำสั่งนี้จากเทอร์มินัล Cloud Shell คุณควรเห็นคำถามติดตามผล 2-3 ข้อ ให้เลือกคำตอบที่เหมาะสม แล้วคุณจะเห็นการติดตั้งใช้งานที่กำลังดำเนินการอยู่

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

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