با مدل‌های BigQuery و Gemini، یک بازار خودرو مبتنی بر هوش مصنوعی بسازید

۱. مقدمه

در این آزمایشگاه کد، شما بک‌اند را خواهید ساخت و فرانت‌اند را برای "Cymbal Autos"، یک بازار آنلاین خودرو، مستقر خواهید کرد. شما از مدل‌های BigQuery و Gemini در پلتفرم Gemini Enterprise Agent برای بررسی عکس‌های خودرو، پیش‌بینی قیمت‌ها با استفاده از BigQuery ML ، شناسایی لیست‌های کلاهبرداری با استفاده از جاسازی‌های برداری و محاسبه امتیاز معاملات ترکیبی استفاده خواهید کرد. در نهایت، این بینش‌ها را در یک فرانت‌اند Next.js مستقر در Cloud Run ارائه خواهید داد.

نمودار معماری که ارتباط BigQuery با Agent Platform و ارائه یک رابط کاربری Next.js Cloud Run را نشان می‌دهد

کاری که انجام خواهید داد

  • اتصال BigQuery به تصاویر بدون ساختار Cloud Storage با استفاده از ObjectRef
  • استخراج ویژگی‌های خودرو از عکس‌ها با استفاده از BigQuery با مدل‌های Gemini
  • پیش‌بینی قیمت‌های منصفانه بازار با آموزش مدل رگرسیون XGBoost با BigQuery ML
  • با جاسازی توضیحات خودرو و انجام VECTOR_SEARCH لیست‌های کلاهبرداری بالقوه و لیست‌های قابل اعتماد را شناسایی کنید.
  • برای هر آگهی، ضمن در نظر گرفتن سیگنال‌های وضعیت از توضیحات فروشنده با استفاده از AI.SCORE یک امتیاز جامع برای معامله محاسبه کنید.
  • داده‌ها را اکسپورت کنید و اپلیکیشن بازار Next.js را روی Google Cloud Run مستقر کنید

آنچه نیاز دارید

  • یک مرورگر وب مانند کروم
  • یک پروژه گوگل کلود با قابلیت پرداخت صورتحساب
  • آشنایی اولیه با SQL، پایتون و فضای ابری گوگل
  • مجوزهای IAM کافی برای فعال کردن APIها، ایجاد منابع و اختصاص مجوزها (مثلاً مالک پروژه)

این codelab برای توسعه‌دهندگان سطح متوسط ​​است.

منابع ایجاد شده در این آزمایشگاه کد باید کمتر از ۵ دلار هزینه داشته باشند.

۲. قبل از شروع

ایجاد یک پروژه ابری گوگل

  1. در کنسول گوگل کلود ، در صفحه انتخاب پروژه، یک پروژه گوگل کلود را انتخاب یا ایجاد کنید .
  2. مطمئن شوید که صورتحساب برای پروژه ابری شما فعال است. یاد بگیرید که چگونه بررسی کنید که آیا صورتحساب در یک پروژه فعال است یا خیر .

شروع پوسته ابری

شما از Google Cloud Shell برای دانلود کد، اجرای اسکریپت‌های راه‌اندازی و استقرار برنامه استفاده خواهید کرد.

  1. روی فعال کردن پوسته ابری (Cloud Shell) در بالای کنسول گوگل کلود (Google Cloud Console) کلیک کنید.

پوسته ابری را باز کنید

  1. پس از اتصال به Cloud Shell، جلسه خود را تأیید کنید تا مطمئن شوید که برنامه شما می‌تواند به APIهای Google Cloud دسترسی داشته باشد. برای تأیید Cloud Shell، دستورالعمل‌ها را دنبال کنید:
gcloud auth application-default login
  1. شناسه پروژه گوگل کلود خود و یک نام منحصر به فرد برای مخزن ذخیره‌سازی گوگل کلود خود (جایی که داده‌های خام را ذخیره خواهید کرد) تنظیم کنید:
export PROJECT_ID=$(gcloud config get-value project)
export USER_BUCKET="cymbal-autos-${PROJECT_ID}"

gcloud config set project $PROJECT_ID

باید پیامی مشابه پیام زیر را ببینید:

Your active configuration is: [cloudshell-####]
Updated property [core/project]

فعال کردن APIها

این دستور را در Cloud Shell اجرا کنید تا تمام API های مورد نیاز برای این codelab فعال شوند:

gcloud services enable \
  aiplatform.googleapis.com \
  artifactregistry.googleapis.com \
  bigquery.googleapis.com \
  bigqueryconnection.googleapis.com \
  cloudbuild.googleapis.com \
  run.googleapis.com

در صورت اجرای موفقیت‌آمیز، باید پیامی مشابه آنچه در زیر نشان داده شده است را مشاهده کنید:

Operation "operations/..." finished successfully.

۳. کد و داده‌های راه‌اندازی را دریافت کنید

ابتدا، فایل‌های دمو را دانلود کنید و متغیرهای محیطی خود را پیکربندی کنید.

  1. از Cloud Shell، مخزن devrel-demos را کلون کنید و به دایرکتوری پروژه بروید:
git clone https://github.com/GoogleCloudPlatform/devrel-demos.git
cd devrel-demos/data-analytics/cymbal-autos-multimodal
  1. اسکریپت را اجرا کنید تا داده‌ها در محیط شما کپی شوند. این اسکریپت مجموعه داده‌های مخزن محلی را با سطل ذخیره‌سازی ابری شخصی شما همگام‌سازی می‌کند و تصاویر خودرو را از یک سطل عمومی دریافت می‌کند:
chmod +x scripts/setup/*.sh
./scripts/setup/00_copy_data.sh

پس از آن، باید پیامی مشابه زیر را مشاهده کنید:

Average throughput: 87.8MiB/s
Data copy complete!
  1. در مرحله بعد، اتصال منابع ابری BigQuery را تنظیم کنید. برای تجزیه و تحلیل تصاویر بدون ساختار در فضای ذخیره‌سازی ابری و فراخوانی مدل‌های پلتفرم عامل مستقیماً از طریق کوئری‌های SQL خود، BigQuery باید مجوزهای IAM را به یک حساب سرویس زیربنایی واگذار کند. این اسکریپت آن اتصال امن را ایجاد می‌کند و نقش‌های لازم Vertex AI User و Service Usage Consumer (که انتشار آن حدود یک دقیقه طول می‌کشد) را به آن اعطا می‌کند:
./scripts/setup/01_setup_api_connection.sh

شما باید پیامی مشابه زیر را ببینید:

Environment setup complete! Your BigQuery connection is ready.
  1. در نهایت، مجموعه داده اولیه BigQuery را ایجاد کرده و داده‌های جدولی خام را بارگذاری کنید. این کار مجموعه داده model_dev شما را ایجاد کرده و جداول شروع را پر می‌کند و پایه و اساس را قبل از نوشتن هرگونه کوئری یادگیری ماشین تنظیم می‌کند:
./scripts/setup/02_load_to_bq.sh

شما باید پیامی مشابه زیر را ببینید:

=================================================================
BigQuery load complete!
=================================================================

۴. استخراج بینایی چندوجهی

قبل از امتیازدهی به لیست خودروها، داده‌های ساختاریافته (مانند رنگ، مدل بدنه یا آسیب بصری) را از صدها عکس خام استخراج خواهید کرد. با استفاده از توابع ObjectRef و مدل‌های Gemini که در Agent Platform میزبانی می‌شوند، می‌توانید این ویژگی‌ها را بدون جابجایی هیچ فایلی یا نوشتن خطوط داده پیچیده تولید کنید. این استخراج مستقیماً نشان ✨ Visual Condition را در برنامه frontend فعال می‌کند.

  1. BigQuery Studio را در یک تب جدید مرورگر باز کنید.
  2. روی دکمه + نوشتن کوئری جدید کلیک کنید. شما در طول این آزمایشگاه کد از ویرایشگر SQL برای تعامل با کد SQL استفاده خواهید کرد.
  3. قبل از ساخت استخراج‌کننده‌های یادگیری ماشین، می‌توانید نگاهی سریع به تصاویر خام بیندازید. برای مشاهده آرایه URIهای تصاویر ذخیره شده در فضای ابری گوگل برای هر لیست، کوئری زیر را اجرا کنید:
SELECT auction_id, item_name, description, images 
FROM `model_dev.vehicle_metadata` LIMIT 5;
  1. اکنون، در ویرایشگر SQL BigQuery Studio خود، کد SQL زیر را برای ایجاد یک جدول جدید با ستون image_ref وارد کنید. روی Run کلیک کنید.
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. به ستون جدید image_ref ObjectRef که ایجاد کرده‌اید نگاهی بیندازید. جدول جدید اکنون دارای یک ستون ObjectRef است که مجوزهایی برای اجرا روی خود تصاویر دارد. برای مشاهده آن، کوئری زیر را اجرا کنید:
SELECT auction_id, item_name, description, image_ref 
FROM `model_dev.vehicle_multimodal` LIMIT 5;
  1. حالا از AI.GENERATE و AI.CLASSIFY برای تجزیه و تحلیل تصاویر استفاده خواهید کرد. AI.GENERATE با فراخوانی Gemini، امتیاز وضعیت و خلاصه‌ای از آسیب‌های یک جمله‌ای را استخراج می‌کند، در حالی که AI.CLASSIFY به طور دقیق سبک و رنگ بدنه خودرو را دسته‌بندی می‌کند.

برای استخراج این بینش‌ها در یک جدول ویژگی اختصاصی، کوئری زیر را اجرا کنید. انتظار می‌رود این کار حدود ۳ دقیقه طول بکشد.

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. برای مشاهده ویژگی‌های تولید شده توسط خودتان، کوئری زیر را اجرا کنید، یا فقط به تصویر زیر نگاه کنید:
SELECT auction_id, condition, description_summary, body_style, color, interior FROM `model_dev.vehicle_vision_features` LIMIT 5;

استخراج چندوجهی

خلاصه بخش: شما مستقیماً از BigQuery به تصاویر خام دسترسی پیدا کردید و از مدل‌های Gemini برای استخراج ویژگی‌های بصری ساختاریافته بدون جابجایی هیچ فایلی استفاده کردید.

۵. قیمت‌گذاری پیش‌بینی‌شده با XGBoost

برای محاسبه اینکه آیا یک وسیله نقلیه واقعاً معامله خوبی است یا خیر، به یک مبنای قابل اعتماد برای ارزش منصفانه بازار آن نیاز است. به جای اینکه داده‌ها را برای آموزش یک مدل به اسکریپت‌های محلی یا نوت‌بوک‌ها منتقل کنید، می‌توانید یک مدل XGBoost را مستقیماً در BigQuery با استفاده از SQL استاندارد آموزش دهید. این پیش‌بینی قیمت، منطق 📈 ارزش منصفانه بازار را در برنامه frontend هدایت می‌کند.

  1. به برگه BigQuery Studio خود برگردید.
  2. ابتدا، نگاهی به مجموعه داده‌های آموزشی بیندازید. برخلاف فهرست‌های فعال خودروها، این جدول synthetic_cars شامل ۱۰۰۰۰۰ فروش تاریخی است که برای آموزش مدل استفاده خواهد شد. برای بررسی اجمالی، این کوئری سریع را اجرا کنید:
SELECT
  *
FROM
  `model_dev.synthetic_cars`
LIMIT 10;
  1. حالا، SQL زیر را برای آموزش یک مدل رگرسیون XGBoost اجرا کنید. این مدل یاد می‌گیرد که چگونه ویژگی‌هایی مانند مسافت پیموده شده، سال، سازنده و وضعیت ظاهری بر قیمت از آن ۱۰۰۰۰۰ رکورد تاریخی تأثیر می‌گذارند:
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. قبل از پیش‌بینی قیمت برای فهرست‌های زنده و مداوم خودروها، باید تمام ویژگی‌های ورودی مربوطه را در یک مکان جمع‌آوری کنید. این SQL را اجرا کنید تا ابرداده‌های ساختاریافته خودرو با ویژگی‌های استخراج‌شده از بینایی که اخیراً ایجاد کرده‌اید، ادغام شوند:
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. در نهایت، ارزش منصفانه بازار هر فهرست خودرو در حال انجام را پیش‌بینی کنید. کوئری زیر را برای وارد کردن ویژگی‌های تجمیع‌شده به مدل تازه آموزش‌دیده خود اجرا کنید و خروجی‌های عددی را در یک جدول پیش‌بینی امن ذخیره کنید:
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. اکنون، خروجی مدل را تأیید کنید. این کوئری سریع را اجرا کنید تا پیش‌نمایشی از ارزش‌های پیش‌بینی‌شده بازار برای فهرست‌های زنده خودروها را مشاهده کنید:
SELECT * FROM `model_dev.vehicle_price_predictions` LIMIT 5;

پیش‌بینی XGBoost

خلاصه بخش: شما یک مدل رگرسیون XGBoost را با استفاده از ۱۰۰۰۰۰ تراکنش نمونه آموزش دادید و استنتاج دسته‌ای را برای پیش‌بینی ارزش منصفانه بازار برای هر فهرست فعال خودرو در مجموعه داده‌ها اجرا کردید.

۶. جاسازی‌های معنایی و تشخیص اصالت

در این بخش، شما دو خط لوله جاسازی مجزا را برای فعال کردن ویژگی‌های هوشمند برای بازار خودرو اجرا خواهید کرد:

  1. جستجوی تصویر چندوجهی: عکس‌های خام خودرو را به فضای برداری تبدیل کنید تا کاربران بتوانند با استفاده از زبان طبیعی جستجو کنند (مثلاً "یک کامیون کاری قابل اعتماد").
  2. جاسازی متن و جستجوی شباهت: توضیحات کتبی خودرو را به جاسازی‌های برداری تبدیل کنید تا با استفاده از VECTOR_SEARCH ، لیست‌های فعال را با پروفایل‌های کلاهبرداری یا علاقه‌مندان بالقوه مقایسه کنید. این کار امتیاز اصالت 🔍 را که خریداران در برنامه مشاهده می‌کنند، محاسبه می‌کند.
  1. ابتدا، باید جاسازی‌های چندوجهی را برای فهرست خودروها ایجاد کنید. با مدل gemini-embedding-2-preview ، می‌توانید هم تصاویر و هم متن را دقیقاً در یک جاسازی وارد کنید. اگرچه این مدل کاملاً قادر به پردازش همزمان چندین روش است، در این مورد خاص ما فقط تصاویر خودرو را جاسازی می‌کنیم. این کار نوار "جستجوی معنایی" را برای برنامه frontend فعال می‌کند و به خریداران اجازه می‌دهد از زبان طبیعی (مانند "یک وانت قابل اعتماد") استفاده کنند و به سرعت فهرست‌های منطبق را بازیابی کنند. این کوئری را اجرا کنید تا بردارهای چندوجهی را با استفاده از 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. در مرحله بعد، داده‌های پروفایل ریسک که قبلاً بارگذاری شده است را بررسی خواهید کرد. توجه داشته باشید که این داده‌ها شامل هر دو نوع کلاهبرداری شناخته شده و لیست نمونه‌های علاقه‌مندان قانونی است. برای مشاهده پروفایل‌های پایه، این پرس و جو را اجرا کنید:
SELECT profile_id, profile_type, description
FROM `model_dev.seller_risk_profiles`;
  1. اکنون آن توصیفات خام ریسک را به جاسازی‌های برداری تبدیل خواهید کرد. می‌توانید از یک مدل جاسازی متن تخصصی ( text-embedding-005 ) برای ارزیابی دقیق زبان نوشتاری که پیش‌نمایش آن را مشاهده کرده‌اید، استفاده کنید. SQL زیر را جایگذاری کنید و برای جاسازی پروفایل‌های پایه، روی Run کلیک کنید:
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. در مرحله بعد، جاسازی‌های قابل مقایسه‌ای برای موجودی واقعی وسایل نقلیه ایجاد کنید. این کوئری را اجرا کنید تا توضیحات خام HTML برای هر وسیله نقلیه به فضای برداری تبدیل شود تا بتوان آنها را با پروفایل‌های پایه مقایسه کرد:
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. در نهایت، جستجوی برداری را برای محاسبه فاصله معنایی بین فهرست‌های زنده و پروفایل‌های پایه اجرا کنید. SQL زیر را برای انجام نگاشت اجرا کنید. فاصله ریاضی کمتر به این معنی است که یک فهرست بسیار شبیه به یک خوشه کلاهبرداری شناخته شده است، در حالی که فاصله بالاتر نشان دهنده یک توصیف مشروع است.
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;

محتوای این جدول می‌تواند چیزی شبیه به موارد زیر باشد:

پیش‌بینی امتیاز اصالت

خلاصه بخش: شما جاسازی‌های چندوجهی را برای نوار جستجوی frontend ایجاد کردید و از جستجوی برداری مستقیماً در BigQuery برای ارزیابی لیست‌های متن خام HTML در برابر پروفایل‌های کلاهبرداری شناخته شده استفاده کردید.

۷. امتیازدهی خلاقانه به معاملات

اکنون مجموعه داده‌های ساختاریافته‌ای دارید که از طریق چندین تکنیک متمایز یادگیری ماشین تولید شده‌اند و همگی کاملاً در BigQuery هماهنگ شده‌اند: استخراج بینایی، مدل XGBoost برای پیش‌بینی ارزش منصفانه بازار و جاسازی‌های جستجوی برداری.

مرحله آخر، ادغام این سیگنال‌های هوش مصنوعی در یک نمای تلفیقی به عنوان امتیاز نهایی معامله برای برنامه کاربردی سمت کاربر است.

  1. ابتدا، فراداده‌های خام را با ویژگی‌های بینایی استخراج‌شده توسط هوش مصنوعی، خروجی‌های قیمت‌گذاری پیش‌بینی‌کننده و امتیازهای اصالت معنایی ترکیب کنید. دستور SQL زیر را اجرا کنید:
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. در مرحله بعد، با ترکیب چهار سیگنال هوش مصنوعی مجزا ، امتیاز معامله ۰ تا ۱۰۰ را محاسبه کنید. این فرمول، ارزش، کیفیت و ریسک را متعادل می‌کند تا بهترین لیست‌ها را ارائه دهد:
    • امتیاز قیمت (40%): میزان صرفه‌جویی در مقایسه با ارزش منصفانه بازار را اندازه‌گیری می‌کند.
    • امتیاز بینایی (30%): بینش‌هایی از تحلیل عکس‌های قبلی.
    • امتیاز اصالت (۱۵٪): ارزیابی ریسک کلاهبرداری.
    • امتیاز وضعیت (۱۵٪): از طریق 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;

برای اطمینان از ارائه توصیه‌های با کیفیت بالا، این پرس‌وجو دو لایه منطقی خاص را اعمال می‌کند:

  1. دروازه احراز اصالت : اگر یک آگهی به عنوان "پرخطر" (امتیاز کمتر از ۵۰) علامت‌گذاری شود، امتیاز کل معامله به طور خودکار ۸۰٪ کاهش می‌یابد تا از تبلیغ آگهی‌های مشکوک جلوگیری شود.
  2. بهینه‌سازی «جواهر پنهان» : این فرمول از منطق تکه‌ای برای پاداش‌دهی شدید به پس‌اندازها استفاده می‌کند، در حالی که نسبت به افزایش قیمت‌ها بخشنده‌تر است و تضمین می‌کند که یک خودروی گران‌قیمت در شرایط کاملاً سالم همچنان می‌تواند رتبه «منصفانه» را کسب کند.

جدول حاصل، model_dev.marketplace_listings ، شامل فیلدهایی مانند deal_score ، در کنار price_score و authenticity_score است.

  1. برای مشاهده امتیازات معامله، کوئری زیر را اجرا کنید، یا فقط به تصویر زیر نگاه کنید:
SELECT item_name, model_year, authenticity_score, predicted_market_value, price_score, deal_score FROM `model_dev.marketplace_listings`

امتیاز معامله تولید شده

خلاصه بخش: شما امتیازهای پیش‌بینی قیمت، ویژگی‌های بصری و اصالت را در کنار توضیحات فروشنده ترکیب کردید تا برای هر آگهی یک امتیاز خرید واحد محاسبه کنید.

۸. اپلیکیشن Frontend را مستقر کنید

حالا وقت آن رسیده که برنامه‌ی frontend را راه‌اندازی کنید. این به شما امکان می‌دهد تا بالاخره فهرست خودروها را جستجو کنید و با بینش‌های تولید شده توسط هوش مصنوعی که اخیراً ایجاد کرده‌اید، مانند امتیاز معامله، تعامل داشته باشید.

امتیازهای هوش مصنوعی را به فرانت‌اند ارسال کنید

رابط کاربری React برای بارگذاری سریع صفحات اولیه به یک JSON محلی متکی است. برای تقویت بازار، امتیازات نهایی Generative Deal Scores را از BigQuery استخراج کرده و آنها را دوباره به پروژه Next.js تزریق کنید.

  1. مطمئن شوید که محیط شما آماده است. اگر زمان جلسه Cloud Shell شما تمام شد یا به پوشه دیگری رفتید، دستور زیر را اجرا کنید تا به ریشه پروژه برگردید و متغیرهای محیط خود را بازیابی کنید:
cd ~/devrel-demos/data-analytics/cymbal-autos-multimodal && \
export PROJECT_ID=$(gcloud config get-value project) && \
export USER_BUCKET="cymbal-autos-${PROJECT_ID}"
  1. اسکریپت پایتون ارائه شده را اجرا کنید تا نمای نهایی BigQuery را پرس و جو کنید و امتیازات معاملاتی جدید را در مخزن داده اصلی برنامه ادغام کنید:
python3 scripts/setup/08_export_frontend_data.py

شما یک پیام تأیید مانند زیر دریافت خواهید کرد:

💾 Updated local file: app/src/data/cars.json

برنامه را روی Cloud Run مستقر کنید

با غنی‌سازی موفقیت‌آمیز داده‌ها، می‌توانید برنامه‌ی فرانت‌اند Next.js را با استفاده از Cloud Run در اینترنت عمومی مستقر کنید. این برنامه دارای یک رابط کاربری مدرن با رتبه‌بندی معاملات، چرخ فلک‌های تصویر تعاملی و یک نوار جستجوی معنایی ترکیبی پویا است که BigQuery را به صورت بلادرنگ جستجو می‌کند.

  1. در Cloud Shell، به پوشه app/ مخزن کلون شده خود بروید. این بسیار مهم است - ماندن در پوشه ریشه باعث شکست ساخت می‌شود.
cd app
  1. برنامه را به عنوان یک کانتینر بدون سرور با استفاده از Cloud Run مستقر کنید. دستور PROJECT_ID را به عنوان یک متغیر محیطی ارسال می‌کند تا API Next.js بداند کدام پروژه BigQuery را باید جستجو کند:
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. وقتی استقرار کامل شد، ترمینال یک URL سرویس امن را نمایش می‌دهد که شبیه به این خواهد بود:
Service URL: https://cymbal-autos-frontend-[YOUR-PROJECT-NUMBER].us-west1.run.app/

۹. اپلیکیشن Cymbal Autos را بررسی کنید

با قرار دادن کانتینر frontend خود در Cloud Run، زمان آن رسیده است که برنامه را آزمایش کنید.

  1. از سایت بازدید کنید: نشانی اینترنتی سرویس امن برگردانده شده توسط Cloud Run را باز کنید.

صفحه اصلی خودروهای سیمبال

  1. انجام جستجوی معنایی: سعی کنید یک مفهوم انتزاعی مانند «یک کامیون کاری قابل اعتماد که بار حمل می‌کند و می‌تواند خارج از جاده حرکت کند» را جستجو کنید. برنامه Next.js متن خام شما را به یک جاسازی بردار چندوجهی ترجمه می‌کند و یک VECTOR_SEARCH را به صورت بلادرنگ در BigQuery اجرا می‌کند و ایده شما را در برابر اکوسیستم وسایل نقلیه نگاشت می‌کند.

نوار جستجوی Cymbal Autos

توجه: فهرست‌ها بر اساس شباهت معنایی مرتب شده‌اند.

  1. نتایج را بررسی کنید: BigQuery فاصله ریاضی دقیقی بین ایده انتزاعی شما و ویژگی‌های وسیله نقلیه محاسبه کرد تا نزدیکترین تطابق معنایی را ارائه دهد.

نتایج جستجوی Cymbal Autos

  1. جزئیات را بررسی کنید: برای باز کردن مشخصات کامل هر وسیله نقلیه، روی آن کلیک کنید.
  2. سیگنال هوش مصنوعی را بررسی کنید: برای دیدن نمرات خام یادگیری ماشین که قبلاً در آزمایشگاه تولید کرده‌اید، جزئیات را مرور کنید:
    • 📈 ارزش منصفانه بازار: قیمت پایه پیش‌بینی‌شده توسط مدل XGBoost شما.
    • ✨ وضعیت بصری: رتبه‌بندی آسیب فیزیکی استخراج‌شده توسط مدل‌های Gemini.
    • 🔍 امتیاز اصالت: معیار بردار اصالت، فروشندگان قانونی را از کلاهبرداران بالقوه جدا می‌کند.

امتیازات فهرست‌بندی Cymbal Autos

۱۰. تمیز کردن

برای جلوگیری از تحمیل هزینه‌های مداوم به حساب Google Cloud خود برای منابع مورد استفاده در این codelab، می‌توانید کل پروژه Google Cloud که برای این codelab ایجاد کرده‌اید را حذف کنید ، یا می‌توانید اسکریپت خودکار teardown زیر را اجرا کنید.

  1. از ترمینال Cloud Shell خود، به دایرکتوری ریشه که حاوی آن است، برگردید:
cd ..
  1. اسکریپت پاکسازی زیر را اجرا کنید. این کار باعث خالی شدن فضای ذخیره‌سازی ابری گوگل شما، حذف مجموعه داده model_dev BigQuery، حذف اتصال BigQuery و حذف سرویس Cloud Run می‌شود.
chmod +x scripts/cleanup/teardown.sh
./scripts/cleanup/teardown.sh

۱۱. تبریک

تبریک! شما با موفقیت یک بازار هوشمند خودرو ایجاد کردید. شما از BigQuery برای یکپارچه‌سازی تجزیه و تحلیل داده‌های بدون ساختار، مدل‌سازی پیش‌بینی و ادغام هوش مصنوعی در یک فضای کاری واحد استفاده کردید.

آنچه آموخته‌اید

  • نحوه اتصال BigQuery به تصاویر بدون ساختار Cloud Storage با استفاده از ObjectRef
  • نحوه استخراج ویژگی‌های خودرو از عکس‌ها با استفاده از BigQuery با مدل‌های Gemini مانند توابع AI.GENERATE و AI.CLASSIFY
  • نحوه پیش‌بینی قیمت خودرو با استفاده از BigQuery ML
  • نحوه شناسایی لیست‌های کلاهبرداری احتمالی با جاسازی توضیحات خودرو و انجام VECTOR_SEARCH
  • نحوه استفاده از AI.SCORE برای ارزیابی داده‌های بدون ساختار در لحظه و گنجاندن نتایج در یک امتیاز جامع معاملاتی
  • نحوه خروجی گرفتن از داده‌ها و استقرار اپلیکیشن بازار Next.js در Cloud Run

مراحل بعدی