Membangun Marketplace Kendaraan yang Didukung AI dengan Model BigQuery dan Gemini

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.

Diagram arsitektur yang menunjukkan BigQuery berkomunikasi dengan Platform Agen dan menyajikan frontend Cloud Run Next.js

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

  1. Di Konsol Google Cloud, di halaman pemilih project, pilih atau buat project Google Cloud.
  2. 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.

  1. Klik Activate Cloud Shell di bagian atas Konsol Google Cloud.

Buka Cloud Shell

  1. 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
  1. 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.

  1. Dari Cloud Shell, clone repositori devrel-demos dan buka direktori project:
git clone https://github.com/GoogleCloudPlatform/devrel-demos.git
cd devrel-demos/data-analytics/cymbal-autos-multimodal
  1. 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!
  1. 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.
  1. Terakhir, buat set data BigQuery awal dan muat data tabulasi mentah. Tindakan ini akan membuat set data model_dev dan 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.

  1. Buka BigQuery Studio di tab browser baru.
  2. Klik tombol + Compose new query. Anda akan menggunakan Editor SQL untuk berinteraksi dengan kode SQL di sepanjang codelab ini.
  3. 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;
  1. 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`;
  1. Lihat kolom image_ref ObjectRef 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;
  1. Sekarang Anda akan menggunakan AI.GENERATE dan AI.CLASSIFY untuk menganalisis gambar. AI.GENERATE mengekstrak skor kondisi dan ringkasan kerusakan satu kalimat dengan meminta Gemini, sementara AI.CLASSIFY mengategorikan 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;
  1. 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;

Ekstraksi multimodal

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.

  1. Buka kembali tab BigQuery Studio Anda.
  2. Pertama, lihat set data pelatihan. Tidak seperti listingan kendaraan aktif, tabel synthetic_cars ini 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;
  1. 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`;
  1. 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;
  1. 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`)
);
  1. 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;

Prediksi XGBoost

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:

  1. Penelusuran Gambar Multimodal: Terjemahkan foto mentah kendaraan ke dalam ruang vektor untuk memungkinkan pengguna menelusuri menggunakan bahasa alami (misalnya, "truk kerja yang andal").
  2. 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.
  1. 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 menggunakan AI.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;
  1. 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`;
  1. 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`;
  1. 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;
  1. 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:

Prediksi skor keaslian

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.

  1. 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;
  1. 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.
    Jalankan kueri berikut:
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:

  1. Pembatasan Keaslian: Jika listingan ditandai sebagai "Berisiko Tinggi" (skor < 50), Skor Promo total akan otomatis dipangkas sebesar 80% untuk mencegah listingan mencurigakan dipromosikan.
  2. 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.

  1. 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`

Skor promo yang dihasilkan

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.

  1. 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}"
  1. 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.

  1. 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
  1. Deploy aplikasi sebagai container serverless menggunakan Cloud Run. Perintah ini meneruskan PROJECT_ID sebagai 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
  1. 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.

  1. Buka situs: Buka URL Layanan aman yang ditampilkan oleh Cloud Run.

Halaman Beranda Cymbal Autos

  1. 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_SEARCH real-time terhadap BigQuery, yang memetakan ide Anda terhadap ekosistem kendaraan.

Kotak Penelusuran Cymbal Autos

Catatan: listingan diurutkan berdasarkan kemiripan semantik.

  1. Tinjau Hasilnya: BigQuery menghitung jarak matematika yang tepat antara ide abstrak Anda dan fitur kendaraan untuk menampilkan kecocokan semantik terdekat.

Hasil Penelusuran Cymbal Autos

  1. Pelajari Detailnya: Klik kendaraan mana pun untuk membuka profil listingan lengkapnya.
  2. 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.

Skor Listingan Cymbal Autos

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.

  1. Dari terminal Cloud Shell, kembali ke direktori yang berisi root:
cd ..
  1. 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.GENERATE dan AI.CLASSIFY
  • Cara memprediksi harga kendaraan menggunakan BigQuery ML
  • Cara mengidentifikasi potensi listingan scam dengan menyematkan deskripsi kendaraan dan melakukan VECTOR_SEARCH
  • Cara menggunakan AI.SCORE untuk 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