1. Pengantar
Apakah Anda suka membaca buku tetapi kewalahan dengan banyaknya pilihan? Bayangkan Anda memiliki aplikasi berteknologi AI yang tidak hanya merekomendasikan bacaan terbaik, tetapi juga menawarkan ringkasan singkat berdasarkan genre pilihan Anda, sehingga Anda dapat melihat sekilas esensi buku tersebut. Dalam codelab ini, saya akan memandu Anda membangun aplikasi semacam itu dengan BigQuery, Vertex AI, dan Cloud Run yang dibantu oleh Gemini.
Ringkasan Project
Kasus penggunaan kami berpusat pada 4 komponen utama berikut:
- Database Buku: Set data publik BigQuery yang luas untuk buku arsip internet akan berfungsi sebagai katalog buku komprehensif kami.
- Mesin Peringkasan AI: Google Cloud Functions, yang dilengkapi dengan model bahasa Gemini Pro, akan menghasilkan ringkasan bermanfaat yang disesuaikan dengan permintaan pengguna.
- Integrasi BigQuery: Fungsi jarak jauh dalam BigQuery yang memanggil Cloud Function kami untuk memberikan tema dan ringkasan buku on-demand.
- Antarmuka Pengguna: Aplikasi web yang dihosting di Cloud Run dan akan menawarkan aplikasi web agar pengguna dapat melihat hasilnya.
Kami telah membagi seluruh implementasi project menjadi 3 codelab, dan codelab ini membahas Codelab 3 dalam daftar di bawah:
Codelab 1: Menggunakan Gemini untuk membangun Java Cloud Function untuk aplikasi Gemini.
Codelab 2: Menggunakan Gemini untuk membangun aplikasi AI Generatif khusus SQL dengan BigQuery.
Codelab 3: Menggunakan Gemini untuk membuat aplikasi web Java Spring Boot yang berinteraksi dengan BigQuery.
2. Menggunakan Gemini untuk membangun aplikasi web Spring Boot dengan BigQuery
Yang akan Anda bangun
- Buat set data dan tabel BigQuery yang diperlukan.
- Aplikasi web Java Spring Boot yang berinteraksi dengan BigQuery untuk mengambil data buku dan menampilkannya di web.
- Aplikasi ini di-deploy di Cloud Run.
- Anda akan menerapkan langkah-langkah ini dengan bantuan Gemini.
3. Persyaratan
- Browser, seperti Chrome atau Firefox
- Project Google Cloud yang mengaktifkan penagihan
- Akan sangat membantu jika Anda telah men-deploy Cloud Function sebagai bagian dari codelab bagian 1 yang berjudul Menggunakan Gemini untuk membangun Java Cloud Function untuk aplikasi AI Generatif.
- Bersyarat: Jika saat ini Anda memiliki akses ke link Kredit Google Cloud gratis (yang mungkin telah disediakan oleh penyelenggara workshop), gunakan petunjuk di bagian bawah halaman untuk menyelesaikan langkah AKTIVASI KREDIT dan PEMBUATAN PROJECT terlebih dahulu. Jika Anda tidak memiliki link ini, lanjutkan dengan langkah-langkah prasyarat penagihan dan project di bawah:
Buat project Anda
Anda dapat melewati langkah-langkah di bawah jika sudah mengaktifkan akun penagihan dan membuat project menggunakan link yang disebutkan pada langkah bersyarat di atas.
- Di Konsol Google Cloud, di halaman pemilih project, pilih atau buat project Google Cloud.
- Pastikan penagihan diaktifkan untuk project Cloud Anda. Pelajari cara memeriksa apakah penagihan telah diaktifkan pada suatu project.
Aktifkan Cloud Shell
- Anda akan menggunakan Cloud Shell, lingkungan command line yang berjalan di Google Cloud yang telah dilengkapi dengan bq:
Dari Cloud Console, klik Activate Cloud Shell di pojok kanan atas:
- Setelah terhubung ke Cloud Shell, Anda akan melihat bahwa Anda sudah diautentikasi dan project sudah ditetapkan ke project ID Anda. Jalankan perintah berikut di Cloud Shell untuk mengonfirmasi bahwa Anda telah diautentikasi:
gcloud auth list
- Jalankan perintah berikut di Cloud Shell untuk mengonfirmasi bahwa perintah gcloud mengetahui project Anda
gcloud config list project
- Jika project Anda belum ditetapkan, gunakan perintah berikut untuk menetapkannya:
gcloud config set project <YOUR_PROJECT_ID>
Baca dokumentasi untuk mempelajari perintah gcloud dan penggunaannya.
4. Mengaktifkan Gemini dan API yang diperlukan
Aktifkan Gemini
- Buka Marketplace Gemini untuk mengaktifkan API. Anda juga dapat menggunakan perintah berikut:
gcloud services enable cloudaicompanion.googleapis.com --project PROJECT_ID
- Buka halaman Gemini, lalu klik "Start chatting".
Aktifkan API lain yang diperlukan
Bagaimana cara melakukannya? Mari kita tanyakan pada Gemini. Tetapi sebelum itu, ingatlah:
Catatan: LLM bersifat non-deterministik. Sehingga, saat Anda mencoba perintah ini, respons yang Anda terima mungkin terlihat berbeda dengan yang ada di screenshot saya.
Buka konsol percakapan Gemini dengan mengklik ikon "Open Gemini" di sudut kanan atas di samping kotak penelusuran di konsol Google Cloud.
Ketik pertanyaan ini di bagian "Enter a prompt here":
How do I enable the BigQuery and Cloud Run apis using gcloud command?
Anda akan mendapatkan respons seperti yang terlihat dalam gambar berikut:
Salin perintah tersebut (Anda dapat menggunakan ikon salin di bagian atas cuplikan perintah) dan jalankan di Terminal Cloud Shell untuk mengaktifkan layanan masing-masing:
- bigquery.googleapis.com
- run.googleapis.com
5. Mengeksplorasi set data publik BigQuery untuk data buku
Mulailah dengan memahami set data publik BigQuery yang berisi informasi dari banyak buku arsip internet. Jika Anda tidak dapat mengakses set data internetarchivebooks dari link ini, ikuti langkah-langkah di bawah untuk menjelajahi set data tersebut atau buka dokumentasi ini:
Anda dapat menemukan set data publik ini di panel explorer BigQuery. Anda dapat menemukannya di sisi kiri saat membuka konsol BigQuery.
Ketik "gdelt-bq" atau "internetarchivebooks" di kotak penelusuran, lalu klik SEARCH ALL PROJECTS. Luaskan hasil dan bintangi buku arsip internet seperti yang ditunjukkan pada gambar di bawah:
.
Perluas set data, klik gdelt-bq.internetarchivebooks, lalu lihat pratinjau data pada tabel 1920. Tabel ini berisi buku dari tahun 1920 yang diarsipkan.
Untuk melihat skema yang akan kita gunakan di bagian berikutnya, jalankan kueri berikut:
select * from `gdelt-bq.internetarchivebooks.1920` limit 5;
Kita akan menggunakan tiga kolom berikut untuk codelab ini:
- BookMeta_Title (judul)
- Themes (tema yang dipisahkan oleh ‘;')
- BookMeta_FullText (teks buku lengkap)
6. Membuat template Java Cloud Run dasar dengan Gemini
Buka Cloud Shell Editor dengan mengklik ikon Open Editor di sudut kanan atas Terminal Cloud Shell (biasanya saya lebih suka membuka terminal dan editor di tab terpisah secara paralel sehingga kita bisa menulis kode di satu tab dan membangun kode di tab lainnya).
Setelah editor terbuka, pastikan logo Gemini di pojok kanan bawah konsol editor aktif (dan tidak dibatalkan). Pastikan juga bahwa Project Google Cloud Anda di pojok kiri bawah mengarah ke project aktif saat ini yang akan Anda kerjakan. Jika project tidak aktif, klik project, beri otorisasi, lalu pilih Project Google Cloud target dan aktifkan project tersebut.
Setelah keduanya aktif, klik nama project di pojok kiri bawah dan di daftar pop-up yang terbuka berjudul "Cloud Code", scroll ke "New Application" di bawah.
Dalam daftar tersebut, pilih aplikasi Cloud Run. Dari daftar yang muncul, pilih Java:
Dalam daftar yang muncul, ketik nama project "bookshelf-web", bukan helloworld, lalu klik OK.
Selamat! Anda telah melakukan bootstrap pada aplikasi Java Cloud Run sederhana dengan Gemini dan tidak banyak hal yang Anda lakukan selain pengaktifan dan konfigurasi aktivasi, bukan begitu?
Berikut struktur project yang akan Anda lihat:
Sekarang Anda siap men-deploy aplikasi. Namun, bukan itu alasan kami memulai codelab ini. Kita tetap harus menyertakan fungsi utama aplikasi web yaitu mengambil data analisis dari database BigQuery dan menampilkannya di web.
Untuk melakukannya, Anda dapat menambahkan lebih banyak perintah dan mengembangkan kode secara bertahap dengan Gemini atau menulis logika sendiri. Saya akan menggabungkan kedua metode tersebut.
7. Menambahkan dependensi untuk menggunakan BigQuery di aplikasi web
Setelah aplikasi di-bootstrap, kita siap membuat perubahan pada sumber dan properti aplikasi. Pertama, mari kita tambahkan dependensi. Mari kita minta Gemini untuk memberikan rekomendasi.
Di Cloud Code Editor, pastikan status bar menampilkan Gemini sudah aktif di pojok kanan bawah dan project Google Cloud yang aktif dipilih di pojok kiri bawah.
Di Cloud Code Editor, buka file pom.xml, tepat di atas tag </dependencies>, ketik komentar perintah berikut:
<!-- What maven dependency should I include to access BigQuery in the app-->
Saya mendapatkan hasil ini seperti yang ditunjukkan pada gambar di bawah:
Menempelkan dependensi di sini agar lebih mudah disalin. Jika saran muncul dengan tag versi, Anda dapat mengabaikannya.
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-bigquery</artifactId>
</dependency>
8. Memperbarui sumber untuk mengirimkan data bookshelf ke web
Ganti kode HelloWorldController.java dengan kode berikut:
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;
}
}
Kita telah melakukan perubahan berikut pada file sumber:
- Memperbarui @Controller menjadi @RestController di HelloWorldController.java.
- Mengganti konten metode helloWorld() untuk menyertakan panggilan ke BigQuery, eksekusi kueri yang mengambil data untuk mencantumkan judul dan tema buku.
- File akan diperbarui untuk menampilkan respons sebagai string ke web, bukan menampilkan template tampilan indeks saat dimuat.
Catatan Penting: Ingatlah untuk memperbarui hal di bawah
- Perbarui file HelloWorldControllerTests.Java menjadikan panggilan mvc.perform(...) saat ini sebagai komentar.
Gemini untuk Penjelasan Kode
Kami telah memberikan kode kepada Anda dan menjelaskan perubahan yang kami lakukan pada file sumber. Anda dapat menggunakan Gemini untuk mendapatkan penjelasan kode dan/atau komentar kode jika diperlukan. Berikut beberapa hal yang dapat Anda coba:
- Dengan file HelloWorldController.java terbuka di IDE, buka Panel Chat di IDE dan berikan perintah berikut: Explain this. Simak penjelasan mendetail yang diberikan Gemini. Anda dapat menggunakannya kapan saja untuk mendapatkan penjelasan tentang kode.
- Anda dapat menandai cuplikan atau baris tertentu dalam kode (mis. @GetMapping("/")), lalu menggunakan perintah berikut: Explain this. Tindakan ini hanya akan memberikan penjelasan mendetail tentang baris kode atau cuplikan yang Anda pilih.
- Anda bahkan dapat mencoba beberapa kueri yang menanyakan tentang kode dengan cara yang berbeda. Misalnya, Anda dapat memilih baris kode berikut
BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
dan tanyakan kueri berikut "What will happen if the BigQuery variable is null?" (Apa yang akan terjadi jika variabel BigQuery bernilai null?) 4. Anda juga dapat meminta peningkatan kode atau pemfaktoran ulang dengan bantuan Gemini. Misalnya, Anda dapat memilih seluruh kode untuk metode helloWorld() dan memberikan perintah berikut: "How do I improve or refactor this code?" ("Bagaimana cara meningkatkan atau memfaktor ulang kode ini?"). Lihat saran yang diberikan Gemini.
9. Membangun dan Men-deploy
Buka Terminal Cloud Shell. Pastikan kode tersebut mengarah ke project ID Anda di terminal.
Buka direktori project menggunakan perintah cd:
cd bookshelf-web
Jalankan perintah di bawah satu per satu untuk memastikan aplikasi Anda berjalan secara lokal.
mvn package
mvn spring-boot:run
Sekarang, klik tombol "Web Preview" dan klik opsi "Preview on port 8080" seperti yang ditunjukkan di bawah:
Pastikan Anda dapat melihat aplikasi berjalan secara lokal di mesin Cloud Shell.
Sekarang mari kita tanya Gemini cara men-deploy aplikasi web ini di Cloud Run. Buka Gemini Chat dengan mengklik tombol "Open Gemini" di Konsol Google Cloud.
Berikut adalah perintah saya:
What is the gcloud command to deploy my app to cloud run without having to containerize, only by giving the source file?
Berikut adalah responsnya:
Mari kita ganti placeholder region dan nama layanan di perintah gcloud seperti yang ditunjukkan dalam cuplikan di bawah:
gcloud run deploy bookshelf-web --source . --allow-unauthenticated --region $REGION
Jalankan perintah ini dari Terminal Cloud Shell. Anda akan melihat beberapa pertanyaan lanjutan, pilih respons yang sesuai, dan Anda akan dapat melihat bahwa deployment sedang diproses:
Proses ini memerlukan waktu beberapa menit dan aplikasi akan di-deploy ke Google Cloud secara serverless. Klik aplikasi yang di-deploy Cloud Run dan lihat hasilnya di web:
10. Selamat
Selamat! Kita telah berhasil membangun, men-deploy, dan menguji aplikasi web Java Cloud Run untuk melakukan analisis bookshelf menggunakan Gemini. Sebagai tugas lanjutan, tanyakan kepada Gemini cara menghapus Layanan Cloud Run yang di-deploy dari Google Cloud Console dan ikuti langkah-langkah yang diberikan untuk membersihkan resource.