1. Pengantar
Dalam codelab ini, Anda akan membangun backend dan men-deploy frontend untuk "Cymbal Autos", marketplace kendaraan online. Anda akan menggunakan BigQuery dan model Gemini di Platform Agen Gemini Enterprise untuk memeriksa foto kendaraan, memprediksi harga menggunakan BigQuery ML, mendeteksi listingan penipuan menggunakan sematan vektor, dan menghitung skor kesepakatan komposit. Terakhir, Anda akan menampilkan insight ini di frontend Next.js yang di-deploy ke Cloud Run.

Yang akan Anda lakukan
- Menghubungkan BigQuery ke gambar Cloud Storage tidak terstruktur menggunakan ObjectRef
- Mengekstrak atribut kendaraan dari foto menggunakan BigQuery dengan model Gemini
- Memprediksi harga wajar pasar dengan melatih model regresi XGBoost menggunakan BigQuery ML
- Identifikasi potensi penipuan dan listingan tepercaya dengan menyematkan deskripsi kendaraan dan melakukan
VECTOR_SEARCH - Menghitung Skor Penawaran yang komprehensif untuk setiap listingan, sekaligus menggabungkan sinyal kondisi dari deskripsi penjual menggunakan
AI.SCORE - Mengekspor data dan men-deploy aplikasi marketplace Next.js ke Google Cloud Run
Yang Anda butuhkan
- Browser web seperti Chrome
- Project Google Cloud yang mengaktifkan penagihan
- Pemahaman dasar tentang SQL, Python, dan Google Cloud
- Izin IAM yang memadai untuk mengaktifkan API, membuat resource, dan menetapkan izin (misalnya, Pemilik Project)
Codelab ini ditujukan untuk developer tingkat menengah.
Resource yang dibuat dalam codelab ini seharusnya berbiaya kurang dari $5.
2. Sebelum memulai
Membuat Project Google Cloud
- 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.
Mulai Cloud Shell
Anda akan menggunakan Google Cloud Shell untuk mendownload kode, menjalankan skrip penyiapan, dan men-deploy aplikasi.
- Klik Activate Cloud Shell di bagian atas Konsol Google Cloud.

- Setelah terhubung ke Cloud Shell, autentikasi sesi Anda untuk memastikan aplikasi Anda dapat mengakses Google Cloud API. Ikuti petunjuk untuk memberikan otorisasi pada Cloud Shell:
gcloud auth application-default login
- Tetapkan ID Project Google Cloud Anda dan nama unik untuk bucket Google Cloud Storage Anda (tempat Anda akan menyimpan data mentah):
export PROJECT_ID=$(gcloud config get-value project)
export USER_BUCKET="cymbal-autos-${PROJECT_ID}"
gcloud config set project $PROJECT_ID
Anda akan melihat pesan yang mirip dengan yang di bawah ini:
Your active configuration is: [cloudshell-####] Updated property [core/project]
Mengaktifkan API
Jalankan perintah ini di Cloud Shell untuk mengaktifkan semua API yang diperlukan untuk codelab ini:
gcloud services enable \
aiplatform.googleapis.com \
artifactregistry.googleapis.com \
bigquery.googleapis.com \
bigqueryconnection.googleapis.com \
cloudbuild.googleapis.com \
run.googleapis.com
Setelah berhasil dieksekusi, Anda akan melihat pesan yang mirip dengan yang ditampilkan di bawah:
Operation "operations/..." finished successfully.
3. Mendapatkan Kode dan Menyiapkan Data
Pertama, download aset demo dan konfigurasi variabel lingkungan Anda.
- Dari Cloud Shell, clone repositori
devrel-demosdan buka direktori project:
git clone https://github.com/GoogleCloudPlatform/devrel-demos.git
cd devrel-demos/data-analytics/cymbal-autos-multimodal
- Jalankan skrip untuk menyalin data ke lingkungan Anda. Skrip ini menyinkronkan set data repositori lokal ke bucket Cloud Storage pribadi Anda dan mengambil gambar kendaraan dari bucket publik:
chmod +x scripts/setup/*.sh
./scripts/setup/00_copy_data.sh
Setelah itu, Anda akan melihat pesan yang mirip dengan:
Average throughput: 87.8MiB/s Data copy complete!
- Selanjutnya, siapkan Koneksi Resource Cloud BigQuery. Untuk menganalisis gambar tidak terstruktur di Cloud Storage dan memanggil model Agent Platform langsung dari kueri SQL Anda, BigQuery harus mendelegasikan izin IAM ke Akun Layanan yang mendasarinya. Skrip ini membuat koneksi yang aman tersebut dan memberikan peran Vertex AI User dan Service Usage Consumer yang diperlukan (yang memerlukan waktu sekitar satu menit untuk diterapkan):
./scripts/setup/01_setup_api_connection.sh
Anda akan melihat pesan yang mirip dengan:
Environment setup complete! Your BigQuery connection is ready.
- Terakhir, buat set data BigQuery awal dan muat data tabulasi mentah. Tindakan ini akan membuat set data
model_devdan mengisi tabel awal, serta menyiapkan fondasi sebelum Anda menulis kueri machine learning:
./scripts/setup/02_load_to_bq.sh
Anda akan melihat pesan yang mirip dengan:
================================================================= BigQuery load complete! =================================================================
4. Ekstraksi Multimodal Vision
Sebelum memberi skor pada listingan kendaraan, Anda akan mengekstrak data terstruktur (seperti warna, gaya bodi, atau kerusakan visual) dari ratusan foto mentah. Dengan memanfaatkan fungsi ObjectRef dan model Gemini yang dihosting di Platform Agen, Anda dapat membuat fitur ini tanpa memindahkan file atau menulis pipeline data yang kompleks. Ekstraksi ini secara langsung mendukung badge ✨ Kondisi Visual di aplikasi frontend.
- Buka BigQuery Studio di tab browser baru.
- Klik tombol + Compose new query. Anda akan menggunakan Editor SQL untuk berinteraksi dengan kode SQL di sepanjang codelab ini.
- Sebelum membuat ekstraktor machine learning, Anda dapat melihat sekilas gambar mentah. Jalankan kueri berikut untuk melihat array URI gambar yang disimpan di Google Cloud Storage untuk setiap listingan:
SELECT auction_id, item_name, description, images
FROM `model_dev.vehicle_metadata` LIMIT 5;
- Sekarang, di Editor SQL BigQuery Studio, tempel SQL berikut untuk membuat tabel baru dengan kolom
image_ref. Klik Jalankan.
CREATE OR REPLACE TABLE `model_dev.vehicle_multimodal` AS
SELECT
*,
ARRAY(
SELECT OBJ.FETCH_METADATA(OBJ.MAKE_REF(uri, 'us.conn'))
FROM UNNEST(images) AS uri
) AS image_ref
FROM `model_dev.vehicle_metadata`;
- Lihat kolom
image_refObjectRef baru yang baru saja Anda buat. Tabel baru kini memiliki kolom ObjectRef yang memiliki izin untuk dieksekusi pada gambar itu sendiri. Jalankan kueri berikut untuk melihatnya:
SELECT auction_id, item_name, description, image_ref
FROM `model_dev.vehicle_multimodal` LIMIT 5;
- Sekarang Anda akan menggunakan
AI.GENERATEdanAI.CLASSIFYuntuk menganalisis gambar.AI.GENERATEmengekstrak skor kondisi dan ringkasan kerusakan satu kalimat dengan meminta Gemini, sementaraAI.CLASSIFYmengategorikan gaya dan warna bodi kendaraan secara ketat.
Jalankan kueri berikut untuk mengekstrak insight ini ke dalam tabel fitur khusus. Anda perlu waktu sekitar 3 menit untuk menyelesaikan proses ini.
CREATE OR REPLACE TABLE `model_dev.vehicle_vision_features` AS
WITH generated_data AS (
SELECT
auction_id,
AI.GENERATE(
prompt => ('Rate the condition of this car on a scale from 0-100. Output a 1 sentence description of any glaring red flags', image_ref),
output_schema => 'condition INT64, description_summary STRING'
).* EXCEPT(full_response,status)
FROM
`model_dev.vehicle_multimodal`
),
-- Object-centric Classifications
classified_data AS (
SELECT
auction_id,
AI.CLASSIFY(
('What type of automobile is this?', image_ref[0]),
categories => ['Truck', 'Sedan', 'SUV']) AS body_style,
AI.CLASSIFY(
('Color of the exterior of the automobile', image_ref[0]),
categories => ['Black', 'White', 'Silver', 'Gray', 'Red', 'Blue', 'Brown', 'Green', 'Beige', 'Gold']) AS color,
AI.CLASSIFY(
('Color of the interior of the automobile', image_ref[0]),
categories => ['Black', 'Gray', 'Beige', 'Tan', 'Brown', 'White', 'Red']) AS interior
FROM `model_dev.vehicle_multimodal`
)
-- Join the AI insights back together into the final feature table
SELECT
g.auction_id,
g.condition,
g.description_summary,
c.body_style,
c.color,
c.interior
FROM generated_data g
JOIN classified_data c ON g.auction_id = c.auction_id;
- Untuk melihat sendiri fitur yang dihasilkan, jalankan kueri berikut, atau cukup lihat screenshot di bawah:
SELECT auction_id, condition, description_summary, body_style, color, interior FROM `model_dev.vehicle_vision_features` LIMIT 5;

Ringkasan Bagian: Anda mengakses gambar mentah langsung dari BigQuery dan menggunakan model Gemini untuk mengekstrak fitur visual terstruktur tanpa memindahkan file apa pun.
5. Harga Prediktif dengan XGBoost
Untuk menghitung apakah kendaraan merupakan penawaran yang benar-benar bagus, diperlukan dasar pengukuran yang andal untuk nilai wajar pasarnya. Daripada menarik data ke dalam skrip atau notebook lokal untuk melatih model, Anda dapat melatih model XGBoost langsung di dalam BigQuery menggunakan SQL standar. Prediksi harga ini mendorong logika 📈 Nilai Pasar Wajar di aplikasi frontend.
- Buka kembali tab BigQuery Studio Anda.
- Pertama, lihat set data pelatihan. Tidak seperti listingan kendaraan aktif, tabel
synthetic_carsini berisi 100.000 penjualan historis yang akan digunakan untuk melatih model. Jalankan kueri cepat ini untuk melihatnya:
SELECT
*
FROM
`model_dev.synthetic_cars`
LIMIT 10;
- Sekarang, jalankan SQL berikut untuk melatih model regresi XGBoost. Model ini mempelajari pengaruh atribut seperti jarak tempuh, tahun, merek, dan kondisi visual terhadap harga dari 100.000 data historis tersebut:
CREATE OR REPLACE MODEL `model_dev.car_price_model`
OPTIONS(
MODEL_TYPE = 'BOOSTED_TREE_REGRESSOR',
INPUT_LABEL_COLS = ['selling_price'],
MAX_ITERATIONS = 15,
TREE_METHOD = 'HIST'
) AS
SELECT
* EXCEPT(vin, sale_date, market_value, seller)
FROM
`model_dev.synthetic_cars`;
- Sebelum memprediksi harga untuk listingan kendaraan yang aktif dan sedang berlangsung, Anda harus mengumpulkan semua fitur input yang relevan di satu tempat. Jalankan SQL ini untuk menggabungkan metadata kendaraan terstruktur dengan fitur yang diekstrak dari visi yang baru saja Anda buat:
CREATE OR REPLACE TABLE `model_dev.vehicle_prediction_features` AS
SELECT
meta.auction_id,
meta.model_year,
meta.make,
meta.model,
meta.mileage,
meta.transmission_type,
meta.state,
COALESCE(vision.body_style, 'Unknown') AS body_style,
COALESCE(vision.condition, 50) AS condition,
COALESCE(meta.color, vision.color, 'Unknown') AS color,
COALESCE(vision.interior, 'Unknown') AS interior
FROM `model_dev.vehicle_metadata` meta
LEFT JOIN `model_dev.vehicle_vision_features` vision
ON meta.auction_id = vision.auction_id;
- Terakhir, prediksi nilai pasar wajar setiap listingan kendaraan yang sedang berlangsung. Jalankan kueri berikut untuk memasukkan fitur gabungan ke dalam model yang baru dilatih dan simpan output numerik ke tabel prediksi yang aman:
CREATE OR REPLACE TABLE `model_dev.vehicle_price_predictions` AS
SELECT
auction_id,
ROUND(predicted_selling_price, 2) AS predicted_market_value
FROM ML.PREDICT(
MODEL `model_dev.car_price_model`,
(SELECT * FROM `model_dev.vehicle_prediction_features`)
);
- Sekarang, verifikasi output model. Jalankan kueri cepat ini untuk melihat pratinjau nilai pasar yang diprediksi untuk listingan kendaraan aktif:
SELECT * FROM `model_dev.vehicle_price_predictions` LIMIT 5;

Ringkasan Bagian: Anda melatih model regresi XGBoost menggunakan 100.000 sampel transaksi dan menjalankan inferensi batch untuk memprediksi nilai wajar pasar untuk setiap listingan kendaraan aktif dalam set data.
6. Penyematan Semantik & Deteksi Keaslian
Di bagian ini, Anda akan menjalankan dua pipeline penyematan yang berbeda untuk mengaktifkan fitur smart untuk marketplace kendaraan:
- Penelusuran Gambar Multimodal: Terjemahkan foto mentah kendaraan ke dalam ruang vektor untuk memungkinkan pengguna menelusuri menggunakan bahasa alami (misalnya, "truk kerja yang andal").
- Penyematan Teks & Penelusuran Kemiripan: Terjemahkan deskripsi kendaraan tertulis ke dalam penyematan vektor untuk membandingkan listingan aktif dengan profil penggemar atau potensi penipu yang diketahui menggunakan
VECTOR_SEARCH. Hal ini menghitung 🔍 Skor Keaslian yang dilihat pembeli di aplikasi.
- Pertama, Anda perlu membuat embedding multimodal untuk listingan kendaraan. Dengan model
gemini-embedding-2-preview, Anda dapat memasukkan gambar dan teks ke dalam embedding yang sama persis. Meskipun model ini sepenuhnya mampu memproses beberapa modalitas secara bersamaan, dalam kasus khusus ini, kita hanya menyematkan gambar kendaraan. Hal ini mendukung kolom "penelusuran semantik" untuk aplikasi frontend, sehingga pembeli dapat menggunakan bahasa alami (seperti "truk pikap yang andal") dan mengambil listingan yang cocok dengan cepat. Jalankan kueri ini untuk membuat vektor multimodal menggunakanAI.EMBED:
CREATE OR REPLACE TABLE `model_dev.vehicle_images_embedded` AS
SELECT
auction_id,
AI.EMBED(
STRUCT(image_ref),
endpoint => 'gemini-embedding-2-preview').result AS multimodal_embedding
FROM `model_dev.vehicle_multimodal`
WHERE ARRAY_LENGTH(image_ref) > 0;
- Selanjutnya, Anda akan memeriksa data profil risiko yang dimuat sebelumnya. Perhatikan bahwa halaman ini berisi tipologi penipuan yang diketahui dan contoh listingan penggemar yang sah. Jalankan kueri ini untuk melihat profil dasar pengukuran:
SELECT profile_id, profile_type, description
FROM `model_dev.seller_risk_profiles`;
- Sekarang Anda akan menerjemahkan deskripsi risiko mentah tersebut ke dalam embedding vektor. Anda dapat menggunakan model embedding teks khusus (
text-embedding-005) untuk mengevaluasi secara ketat bahasa tertulis yang baru saja Anda pratinjau. Tempel SQL berikut dan klik Jalankan untuk menyematkan profil dasar pengukuran:
CREATE OR REPLACE TABLE `model_dev.seller_risk_profiles_embedded` AS
SELECT
profile_id,
description AS content,
profile_type,
AI.EMBED(description, endpoint => 'text-embedding-005').result AS text_embedding
FROM `model_dev.seller_risk_profiles`;
- Selanjutnya, buat sematan yang sebanding untuk inventaris kendaraan live yang sebenarnya. Jalankan kueri ini untuk menerjemahkan deskripsi HTML mentah untuk setiap kendaraan ke dalam ruang vektor sehingga dapat dibandingkan dengan profil dasar:
CREATE OR REPLACE TABLE `model_dev.vehicle_descriptions_embedded` AS
SELECT
auction_id,
description AS content,
AI.EMBED(description, endpoint => 'text-embedding-005').result AS text_embedding
FROM `model_dev.vehicle_metadata`
WHERE description IS NOT NULL;
- Terakhir, jalankan penelusuran vektor untuk menghitung jarak semantik antara listingan aktif dan profil dasar. Jalankan SQL berikut untuk melakukan pemetaan. Jarak matematika yang lebih rendah berarti listingan sangat mirip dengan kelompok scam yang diketahui, sedangkan jarak yang lebih tinggi menunjukkan deskripsi yang sah.
CREATE OR REPLACE TABLE `model_dev.vehicle_authenticity_scores` AS
SELECT
scam_search.query.auction_id,
CAST(
GREATEST(0.0, LEAST(100.0, ROUND((MIN(scam_search.distance) - 0.33) / 0.12 * 100.0)))
AS INT64
) AS authenticity_score
FROM VECTOR_SEARCH(
TABLE `model_dev.seller_risk_profiles_embedded`,
'text_embedding',
(
SELECT text_embedding, auction_id
FROM `model_dev.vehicle_descriptions_embedded`
),
top_k => 15,
distance_type => 'COSINE'
) AS scam_search
WHERE scam_search.base.profile_type = 'scam'
GROUP BY 1;
Isi tabel ini mungkin terlihat seperti berikut:

Ringkasan Bagian: Anda telah membuat embedding multimodal untuk kotak penelusuran frontend, dan menggunakan penelusuran vektor langsung di dalam BigQuery untuk mengevaluasi listingan teks HTML mentah terhadap profil scam yang diketahui.
7. Penilaian Kesepakatan Generatif
Sekarang Anda memiliki set data terstruktur yang dihasilkan melalui beberapa teknik machine learning yang berbeda, yang semuanya diatur sepenuhnya dalam BigQuery: ekstraksi visual, model XGBoost untuk memprediksi nilai wajar pasar, dan embedding penelusuran vektor.
Langkah terakhir adalah menggabungkan sinyal AI ini ke dalam tampilan gabungan sebagai Skor Promo definitif untuk aplikasi frontend.
- Pertama, gabungkan metadata mentah dengan fitur visi yang diekstrak AI, output penetapan harga prediktif, dan skor keaslian semantik. Jalankan SQL berikut:
CREATE OR REPLACE TABLE `model_dev.vehicle_features_enhanced` AS
SELECT
meta.auction_id,
meta.item_name,
meta.model_year,
meta.make,
meta.model,
meta.mileage,
meta.current_bid,
meta.listing_url,
meta.transmission_type,
meta.description,
meta.state,
COALESCE(vision.body_style, 'Unknown') AS body_style,
COALESCE(vision.condition, 50) AS condition,
COALESCE(meta.color, vision.color, 'Unknown') AS color,
COALESCE(vision.interior, 'Unknown') AS interior,
COALESCE(scam.authenticity_score, 100) AS authenticity_score,
vision.description_summary,
prices.predicted_market_value
FROM `model_dev.vehicle_metadata` meta
LEFT JOIN `model_dev.vehicle_vision_features` vision
ON meta.auction_id = vision.auction_id
LEFT JOIN `model_dev.vehicle_price_predictions` prices
ON meta.auction_id = prices.auction_id
LEFT JOIN `model_dev.vehicle_authenticity_scores` scam
ON meta.auction_id = scam.auction_id;
- Selanjutnya, hitung Skor Promo 0-100 dengan menggabungkan empat sinyal AI yang berbeda. Formula ini menyeimbangkan nilai, kualitas, dan risiko untuk menampilkan listingan terbaik:
- Skor Harga (40%): Mengukur penghematan terhadap nilai wajar pasar.
- Skor Vision (30%): Insight dari analisis foto sebelumnya.
- Skor Keaslian (15%): Penilaian risiko penipuan.
- Skor Kondisi (15%): Disimpulkan secara langsung dari deskripsi penjual melalui
AI.SCORE.
CREATE OR REPLACE TABLE `model_dev.marketplace_listings` AS
WITH score_elements AS (
SELECT
*,
-- 1. SELLER DESCRIPTION SCORE (use AI.SCORE on seller description)
AI.SCORE(
FORMAT("Rate the vehicle condition (0-100) based ONLY on this text: '%s'", description)
) AS description_score,
-- 2. PRICE SCORE
-- Higher impact for underpricing, lower impact for overpricing.
CAST(LEAST(100.0, GREATEST(0.0,
75.0 + (
IF((predicted_market_value - current_bid) > 0,
((predicted_market_value - current_bid) / NULLIF(predicted_market_value, 0)) * 250.0,
((predicted_market_value - current_bid) / NULLIF(predicted_market_value, 0)) * 40.0
)
)
)) AS INT64) AS price_score
FROM `model_dev.vehicle_features_enhanced`
),
final_calcs AS (
SELECT
*,
-- 3. Combine scores: Price (40%), Condition (30%), Description (15%), Authenticity (15%)
ROUND(
(
(price_score * 0.40) +
(CAST(condition AS INT64) * 0.30) +
(COALESCE(description_score, 50) * 0.15) +
(CAST(authenticity_score AS INT64) * 0.15)
)
-- Authenticity penalty for scores below 50.
* (IF(CAST(authenticity_score AS INT64) < 50, 0.20, 1.05))
) AS raw_score
FROM score_elements
)
SELECT
* EXCEPT(raw_score),
-- 4. Set floor values: low authenticity scores drop to 10; others floor at 35.
CAST(GREATEST(
(IF(CAST(authenticity_score AS INT64) < 50, 10, 35)),
LEAST(100, raw_score)
) AS INT64) AS deal_score
FROM final_calcs;
Untuk memastikan rekomendasi berkualitas tinggi, kueri menerapkan dua lapisan logika tertentu:
- Pembatasan Keaslian: Jika listingan ditandai sebagai "Berisiko Tinggi" (skor < 50), Skor Promo total akan otomatis dipangkas sebesar 80% untuk mencegah listingan mencurigakan dipromosikan.
- Pengoptimalan"Permata Tersembunyi": Formula ini menggunakan logika piecewise untuk memberikan penghargaan yang agresif atas penghematan sekaligus lebih toleran terhadap kenaikan harga, sehingga memastikan bahwa mobil yang terlalu mahal dalam kondisi prima tetap dapat mencapai peringkat "Cukup".
Tabel yang dihasilkan, model_dev.marketplace_listings, berisi kolom seperti deal_score, bersama dengan price_score dan authenticity_score.
- Untuk melihat skor penawaran sendiri, jalankan kueri berikut, atau cukup lihat screenshot di bawah:
SELECT item_name, model_year, authenticity_score, predicted_market_value, price_score, deal_score FROM `model_dev.marketplace_listings`

Ringkasan Bagian: Anda menggabungkan harga prediktif, fitur visual, dan skor keaslian bersama dengan deskripsi penjual untuk menghitung Skor Promo tunggal untuk setiap listingan.
8. Men-deploy Aplikasi Frontend
Sekarang saatnya menyiapkan aplikasi frontend. Dengan demikian, Anda dapat menelusuri inventaris listingan kendaraan dan berinteraksi dengan insight yang dihasilkan AI yang baru saja Anda buat, seperti Skor Kesepakatan.
Mengekspor Skor AI ke Frontend
Frontend React mengandalkan payload JSON lokal untuk pemuatan halaman awal yang cepat. Untuk mendukung marketplace, ekstrak Skor Kesepakatan Generatif akhir dari BigQuery dan masukkan kembali ke project Next.js.
- Pastikan lingkungan Anda sudah siap. Jika sesi Cloud Shell Anda habis waktunya atau Anda membuka folder lain, jalankan perintah berikut untuk kembali ke root project dan memulihkan variabel lingkungan Anda:
cd ~/devrel-demos/data-analytics/cymbal-autos-multimodal && \
export PROJECT_ID=$(gcloud config get-value project) && \
export USER_BUCKET="cymbal-autos-${PROJECT_ID}"
- Jalankan skrip Python yang disediakan untuk membuat kueri tampilan BigQuery akhir dan gabungkan Skor Kesepakatan baru ke dalam penyimpanan data pokok aplikasi:
python3 scripts/setup/08_export_frontend_data.py
Anda akan menerima pesan konfirmasi seperti:
💾 Updated local file: app/src/data/cars.json
Men-deploy Aplikasi ke Cloud Run
Setelah data berhasil di-enrich, Anda dapat men-deploy aplikasi frontend Next.js ke internet publik menggunakan Cloud Run. Fitur ini menampilkan antarmuka modern dengan rating promo, carousel gambar interaktif, dan kolom penelusuran semantik hibrida dinamis yang membuat kueri BigQuery secara real-time.
- Di Cloud Shell, buka direktori
app/repositori yang di-clone. Hal ini sangat penting—tetap berada di direktori root akan menyebabkan build gagal.
cd app
- Deploy aplikasi sebagai container serverless menggunakan Cloud Run. Perintah ini meneruskan
PROJECT_IDsebagai variabel lingkungan sehingga Next.js API mengetahui project BigQuery mana yang akan dikueri:
gcloud run deploy cymbal-autos-frontend \
--source . \
--region us-west1 \
--allow-unauthenticated \
--min-instances 1 \
--set-env-vars PROJECT_ID=$PROJECT_ID \
--project $PROJECT_ID
- Setelah deployment selesai, terminal akan menampilkan URL Layanan yang aman. Tampilannya akan terlihat seperti ini:
Service URL: https://cymbal-autos-frontend-[YOUR-PROJECT-NUMBER].us-west1.run.app/
9. Mempelajari Aplikasi Cymbal Autos
Setelah container frontend dikirim ke Cloud Run, saatnya menguji aplikasi.
- Buka situs: Buka URL Layanan aman yang ditampilkan oleh Cloud Run.

- Lakukan Penelusuran Semantik: Coba telusuri konsep abstrak, seperti "Truk kerja yang andal untuk mengangkut barang dan bisa digunakan di medan offroad". Aplikasi Next.js menerjemahkan teks mentah Anda menjadi embedding vektor multimodal dan memicu
VECTOR_SEARCHreal-time terhadap BigQuery, yang memetakan ide Anda terhadap ekosistem kendaraan.

Catatan: listingan diurutkan berdasarkan kemiripan semantik.
- Tinjau Hasilnya: BigQuery menghitung jarak matematika yang tepat antara ide abstrak Anda dan fitur kendaraan untuk menampilkan kecocokan semantik terdekat.

- Pelajari Detailnya: Klik kendaraan mana pun untuk membuka profil listingan lengkapnya.
- Periksa Sinyal AI: Scroll detail untuk melihat skor machine learning mentah yang Anda hasilkan sebelumnya di lab:
- 📈 Nilai Pasar Wajar: Harga dasar yang diprediksi oleh model XGBoost Anda.
- ✨ Kondisi Visual: Rating kerusakan fisik yang diekstrak oleh model Gemini.
- 🔍 Skor Keaslian: Metrik vektor keaslian memisahkan penjual yang sah dari calon penipu.

10. Pembersihan
Agar tidak menimbulkan biaya berkelanjutan pada akun Google Cloud Anda untuk resource yang digunakan dalam codelab ini, Anda dapat menghapus seluruh project Google Cloud yang Anda buat untuk codelab ini, atau Anda dapat menjalankan skrip penonaktifan otomatis berikut.
- Dari terminal Cloud Shell, kembali ke direktori yang berisi root:
cd ..
- Jalankan skrip pembersihan di bawah. Tindakan ini akan mengosongkan bucket Google Cloud Storage Anda, menghapus set data BigQuery
model_dev, menghapus koneksi BigQuery, dan menghapus layanan Cloud Run.
chmod +x scripts/cleanup/teardown.sh
./scripts/cleanup/teardown.sh
11. Selamat
Selamat! Anda berhasil membuat marketplace kendaraan pintar. Anda menggunakan BigQuery untuk menyatukan analisis data tidak terstruktur, pemodelan prediktif, dan integrasi AI ke dalam satu ruang kerja.
Yang telah Anda pelajari
- Cara menghubungkan BigQuery ke gambar Cloud Storage tidak terstruktur menggunakan ObjectRef
- Cara mengekstrak atribut kendaraan dari foto menggunakan BigQuery dengan model Gemini seperti fungsi
AI.GENERATEdanAI.CLASSIFY - Cara memprediksi harga kendaraan menggunakan BigQuery ML
- Cara mengidentifikasi potensi listingan scam dengan menyematkan deskripsi kendaraan dan melakukan
VECTOR_SEARCH - Cara menggunakan
AI.SCOREuntuk mengevaluasi data tidak terstruktur secara langsung dan menggabungkan hasilnya ke dalam Skor Kesepakatan yang komprehensif - Cara mengekspor data dan men-deploy aplikasi marketplace Next.js ke Cloud Run
Langkah berikutnya
- Temukan berbagai fungsi AI generatif yang tersedia di BigQuery
- Pelajari lebih lanjut cara membuat model prediktif dengan GoogleSQL