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. ข้อกำหนด
- เบราว์เซอร์ เช่น Chrome หรือ Firefox
- โปรเจ็กต์ Google Cloud ที่เปิดใช้การเรียกเก็บเงิน
- คุณควรทำให้ Cloud Function ใช้งานได้เป็นส่วนหนึ่งของ Codelab ส่วนที่ 1 ใช้ Gemini เพื่อสร้าง Cloud Function ของ Java สําหรับแอปพลิเคชัน Generative AI
- แบบมีเงื่อนไข: หากตอนนี้คุณมีสิทธิ์เข้าถึงลิงก์เครดิต Google Cloud ฟรี (ซึ่งผู้จัดเวิร์กช็อปอาจจัดสรรให้คุณ) ให้ทำตามวิธีการในหน้าด้านล่างเพื่อดำเนินการตามขั้นตอนการเปิดใช้งานเครดิตและการสร้างโปรเจ็กต์ให้เสร็จสมบูรณ์ก่อน หากไม่มีลิงก์นี้ ให้ทำตามขั้นตอนเบื้องต้นของโปรเจ็กต์และการเรียกเก็บเงินด้านล่าง
สร้างโปรเจ็กต์
คุณข้ามขั้นตอนด้านล่างได้หากเปิดใช้งานบัญชีสำหรับการเรียกเก็บเงินและสร้างโปรเจ็กต์โดยใช้ลิงก์ที่กล่าวถึงในขั้นตอนแบบมีเงื่อนไขด้านบนแล้ว
- ในคอนโซล Google Cloud ให้เลือกหรือสร้างโปรเจ็กต์ Google 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 Terminal เพื่อเปิดใช้บริการที่เกี่ยวข้อง
- bigquery.googleapis.com
- run.googleapis.com
5. สำรวจชุดข้อมูลสาธารณะของ BigQuery สำหรับข้อมูลหนังสือ
เริ่มต้นด้วยการทำความคุ้นเคยกับชุดข้อมูลสาธารณะของ BigQuery ที่มีข้อมูลเกี่ยวกับหนังสือที่เก็บถาวรบนอินเทอร์เน็ตจำนวนมาก หากไปยังชุดข้อมูล internetarchivebooks จากลิงก์นี้ไม่ได้ โปรดทำตามขั้นตอนด้านล่างเพื่อสำรวจชุดข้อมูล หรือทำตามเอกสารประกอบนี้
คุณดูชุดข้อมูลสาธารณะนี้ได้ในแผงเครื่องมือสำรวจของ BigQuery ซึ่งจะอยู่ที่ด้านซ้ายเมื่อคุณไปที่คอนโซล BigQuery
พิมพ์ "gdelt-bq" หรือ "internetarchivebooks" ในแถบค้นหา แล้วคลิก "ค้นหาทุกโปรเจ็กต์" ขยายผลการค้นหาและติดดาวหนังสือจากหอจดหมายเหตุอินเทอร์เน็ตดังที่แสดงในรูปภาพด้านล่าง
ขยายชุดข้อมูล คลิก 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 (ปกติแล้วเราชอบเปิดเทอร์มินัลและเครื่องมือแก้ไขในแท็บแยกกันแบบขนานกันเพื่อให้เขียนโค้ดในแท็บหนึ่งและบิลด์ในอีกแท็บหนึ่งได้)
หลังจากเปิดเครื่องมือแก้ไขแล้ว ให้ตรวจสอบว่าโลโก้ Gemini ที่มุมขวาล่างของคอนโซลเครื่องมือแก้ไขทำงานอยู่ (และไม่ได้ยกเลิก) นอกจากนี้ โปรดตรวจสอบว่าโปรเจ็กต์ Google Cloud ที่มุมล่างซ้ายชี้ไปยังโปรเจ็กต์ที่ใช้งานอยู่ในปัจจุบันซึ่งคุณต้องการทำงานด้วย หากไม่มีการใช้งาน ให้คลิก ให้สิทธิ์ เลือกโปรเจ็กต์ Google Cloud ที่ต้องการชี้ไปและเปิดใช้งาน
เมื่อทั้ง 2 อย่างทำงานแล้ว ให้คลิกชื่อโปรเจ็กต์ที่มุมซ้ายล่างและในรายการป๊อปอัปที่ปรากฏขึ้นที่ชื่อว่า "Cloud Code" ให้เลื่อนลงไปที่ "New Application"
เลือกแอปพลิเคชัน Cloud Run ในรายการดังกล่าว เลือก Java จากรายการที่ปรากฏขึ้น
ในรายการที่ปรากฏขึ้น ให้พิมพ์ชื่อโปรเจ็กต์ "bookshelf-web" แทน helloworld แล้วคลิก "ตกลง"
ไชโย คุณได้เริ่มต้นใช้งานแอปพลิเคชัน Java Cloud Run แบบง่ายด้วย Gemini และคุณไม่ได้ทำอะไรมากไปกว่าการเปิดใช้และการกําหนดค่าการเปิดใช้งาน ถูกต้องไหม
โครงสร้างโปรเจ็กต์ที่คุณควรเห็นมีดังนี้
ขณะนี้คุณพร้อมทำให้แอปพลิเคชันใช้งานได้แล้ว แต่นั่นไม่ใช่เหตุผลที่เราเริ่มทำแบบนี้ เรายังต้องรวมฟังก์ชันหลักของเว็บแอปพลิเคชันด้วย ซึ่งก็คือการดึงข้อมูลการวิเคราะห์จากฐานข้อมูล BigQuery และแสดงบนเว็บ
โดยคุณสามารถเพิ่มพรอมต์และทำให้โค้ดพัฒนาขึ้นเรื่อยๆ ด้วย Gemini หรือจะเขียนตรรกะด้วยตนเองก็ได้ ผมจะใช้ทั้ง 2 อย่างนี้
7. เพิ่มทรัพยากร Dependency เพื่อใช้ BigQuery ในเว็บแอป
เมื่อสร้างแอปพลิเคชันแล้ว เราพร้อมที่จะทําการเปลี่ยนแปลงแหล่งที่มาและพร็อพเพอร์ตี้ของแอปพลิเคชัน ก่อนอื่นมาเพิ่มการพึ่งพากัน เรามาขอให้ Gemini แนะนำกัน
ในเครื่องมือแก้ไขโค้ดบนระบบคลาวด์ ให้ตรวจสอบว่าแถบสถานะแสดง Gemini ที่ใช้งานอยู่ตรงมุมขวาล่าง และเลือกโปรเจ็กต์ Google Cloud ที่ใช้งานอยู่ตรงมุมซ้ายล่าง
ใน Cloud Code Editor ให้ไปที่ไฟล์ 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 แล้วป้อนพรอมต์ต่อไปนี้ Explain this ดูคำอธิบายโดยละเอียดที่ Gemini มีให้ คุณสามารถใช้ฟีเจอร์นี้ได้ทุกเมื่อเพื่อดูคำอธิบายเกี่ยวกับโค้ด
- คุณไฮไลต์ข้อมูลโค้ดหรือบรรทัดเฉพาะในโค้ดได้ (เช่น @GetMapping("/") ) จากนั้นอธิบายสิ่งนี้ ซึ่งจะแสดงคำอธิบายโดยละเอียดเกี่ยวกับบรรทัดโค้ดหรือข้อมูลโค้ดที่คุณเลือกเท่านั้น
- คุณยังลองใช้คำค้นหาที่สอบถามเกี่ยวกับรหัสด้วยวิธีอื่นได้ด้วย เช่น คุณสามารถเลือกบรรทัดโค้ดต่อไปนี้
BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
และส่งคําค้นหาต่อไปนี้ "จะเกิดอะไรขึ้นหากตัวแปร bigquery เป็นค่าว่าง" 4. นอกจากนี้ คุณยังขอการปรับปรุงโค้ดหรือการแยกส่วนโค้ดด้วยความช่วยเหลือจาก Gemini ได้ด้วย เช่น คุณอาจเลือกโค้ดทั้งหมดสำหรับเมธอด helloWorld() แล้วแสดงพรอมต์ว่า "ฉันจะปรับปรุงหรือรีแฟกทอริงโค้ดนี้ได้อย่างไร" ลองดูคำแนะนำจาก Gemini
9. สร้างและติดตั้งใช้งาน
ไปที่ Terminal ของ 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 ข้อ เลือกคำตอบที่เหมาะสม จากนั้นคุณควรจะเห็นการติดตั้งใช้งานที่กำลังดำเนินการ:
การดำเนินการนี้จะใช้เวลา 2-3 นาทีและแอปจะติดตั้งใช้งานใน Google Cloud แบบเซิร์ฟเวอร์เลส คลิกแอปที่ทำให้ใช้งานได้แล้วของ Cloud Run และดูผลลัพธ์บนเว็บ
10. ขอแสดงความยินดี
ยินดีด้วย เราได้สร้าง ติดตั้งใช้งาน และทดสอบเว็บแอปพลิเคชัน Java Cloud Run เพื่อวิเคราะห์ชั้นวางหนังสือโดยใช้ Gemini เรียบร้อยแล้ว ในฐานะงานติดตามผล โปรดสอบถาม Gemini เกี่ยวกับวิธีลบบริการ Cloud Run ที่ติดตั้งใช้งานแล้วออกจาก Google Cloud Console แล้วทําตามขั้นตอนที่ Gemini ตอบกลับเพื่อล้างข้อมูลทรัพยากร