ساخت یک موتور مازاد بلادرنگ با Gemini 3 Flash و Cloud SQL

۱. مرور کلی

در این آزمایشگاه کد، شما Neighbor Loop را خواهید ساخت، یک اپلیکیشن اشتراک‌گذاری مازاد پایدار که با هوش به عنوان یک شهروند درجه یک از لایه داده رفتار می‌کند.

با ادغام Gemini 3.0 Flash و ادغام یادگیری ماشینی Cloud SQL، شما از فضای ذخیره‌سازی پایه به حوزه هوش درون پایگاه داده قدم خواهید گذاشت. شما یاد خواهید گرفت که چگونه تجزیه و تحلیل آیتم‌های چندوجهی و کشف معنایی را مستقیماً در SQL انجام دهید.

645daa545b0e46a6.png

آنچه خواهید ساخت

یک برنامه وب با عملکرد بالا و قابلیت «کشیدن برای تطبیق» برای اشتراک‌گذاری مازاد جامعه.

آنچه یاد خواهید گرفت

  • تأمین با یک کلیک: نحوه راه‌اندازی یک Cloud SQL و نمونه طراحی‌شده برای بارهای کاری هوش مصنوعی.
  • جاسازی‌های درون پایگاه داده: تولید بردارهای text-embedding-005 مستقیماً درون دستورات INSERT.
  • استدلال چندوجهی: استفاده از Gemini 3.0 Flash برای «دیدن» موارد و تولید خودکار بیوگرافی‌های طنزآمیز به سبک قرار ملاقات.
  • کشف معنایی: انجام «بررسی‌های ارتعاشی» مبتنی بر منطق درون کوئری‌های SQL با استفاده از تابع ai.if() برای فیلتر کردن نتایج بر اساس زمینه، نه فقط ریاضی.

معماری

حلقه همسایه (Neighbor Loop) گلوگاه‌های سنتی لایه برنامه را دور می‌زند. به جای بیرون کشیدن داده‌ها برای پردازش آنها، از موارد زیر استفاده می‌کنیم:

  1. ادغام SQL ابری + ML: برای تولید و ذخیره بردارها به صورت بلادرنگ.
  2. فضای ابری گوگل: برای ذخیره تصاویر
  3. Gemini 3.0 Flash: برای انجام استدلال زیر ثانیه‌ای روی داده‌های تصویر و متن مستقیماً از طریق SQL.
  4. Cloud Run: برای میزبانی یک بک‌اند سبک و تک‌فایلی Flask.

الزامات

  • یک مرورگر، مانند کروم یا فایرفاکس .
  • یک پروژه گوگل کلود با قابلیت پرداخت.
  • آشنایی اولیه با SQL و پایتون.

۲. قبل از شروع

ایجاد یک پروژه

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

تصویر دکمه فعال کردن Cloud Shell

  1. پس از اتصال به Cloud Shell، با استفاده از دستور زیر بررسی می‌کنید که آیا از قبل احراز هویت شده‌اید و پروژه روی شناسه پروژه شما تنظیم شده است یا خیر:
gcloud auth list
  1. دستور زیر را در Cloud Shell اجرا کنید تا تأیید شود که دستور gcloud از پروژه شما اطلاع دارد.
gcloud config list project
  1. اگر پروژه شما تنظیم نشده است، از دستور زیر برای تنظیم آن استفاده کنید:
gcloud config set project <YOUR_PROJECT_ID>
  1. فعال کردن API های مورد نیاز: روی لینک کلیک کنید و API ها را فعال کنید.

به عنوان یک روش جایگزین، می‌توانید از دستور gcloud برای این کار استفاده کنید. برای مشاهده دستورات و نحوه استفاده از gcloud به مستندات آن مراجعه کنید.

اشکالات و عیب‌یابی

سندرم «پروژه ارواح»

شما gcloud config set project اجرا کردید، اما در واقع در رابط کاربری کنسول به پروژه‌ی دیگری نگاه می‌کنید. شناسه‌ی پروژه را در منوی کشویی بالا سمت چپ بررسی کنید!

سنگر بیلینگ

شما پروژه را فعال کرده‌اید، اما حساب صورتحساب را فراموش کرده‌اید. اگر صورتحساب خالی باشد، Cloud SQL شروع نمی‌شود.

تأخیر انتشار API

شما روی «فعال کردن APIها» کلیک کرده‌اید، اما خط فرمان هنوز می‌گوید Service Not Enabled . ۶۰ ثانیه به آن فرصت دهید. ابر به یک لحظه نیاز دارد تا نورون‌های خود را بیدار کند.

۳. راه‌اندازی پایگاه داده

در این آزمایش، ما از Cloud SQL برای PostgreSQL به عنوان پایگاه داده برای داده‌های آزمایشی استفاده خواهیم کرد.

بیایید یک نمونه Cloud SQL ایجاد کنیم که مجموعه داده‌های آزمایشی در آن بارگذاری شود.

  1. روی دکمه کلیک کنید یا لینک زیر را در مرورگر خود که کاربر Google Cloud Console در آن وارد شده است، کپی کنید.

  1. پس از اتمام این مرحله، مخزن در ویرایشگر پوسته ابری محلی شما کلون می‌شود و می‌توانید دستور زیر را از پوشه پروژه اجرا کنید (مهم است که مطمئن شوید در دایرکتوری پروژه هستید):
sh run.sh
  1. حالا از رابط کاربری استفاده کنید (با کلیک روی لینک در ترمینال یا کلیک روی لینک «پیش‌نمایش در وب» در ترمینال).
  2. برای شروع، اطلاعات خود را برای شناسه پروژه و نام نمونه وارد کنید.
  3. در حالی که کنده‌ها در حال حرکت هستند، یک قهوه بنوشید و می‌توانید در اینجا در مورد چگونگی انجام این کار در پشت صحنه بخوانید.

اشکالات و عیب‌یابی

عدم تطابق منطقه

اگر APIهای خود را در us-central1 فعال کرده‌اید اما سعی می‌کنید کلاستر را در asia-south1 آماده‌سازی کنید، ممکن است با مشکلات سهمیه‌بندی یا تأخیر در مجوز حساب سرویس مواجه شوید. در کل آزمایش به یک منطقه پایبند باشید!

مهلت زمانی پوسته ابری

اگر زمان استراحت قهوه شما 30 دقیقه طول بکشد، ممکن است Cloud Shell به حالت خواب برود و فرآیند sh run.sh قطع کند. تب را فعال نگه دارید!

۴. تأمین طرحواره

پس از اجرای نمونه Cloud SQL خود، به ویرایشگر SQL Cloud SQL Studio بروید تا افزونه‌های هوش مصنوعی را فعال کرده و طرحواره را آماده کنید.

5a835906362f7609.png

ممکن است لازم باشد منتظر بمانید تا نمونه شما به طور کامل ایجاد شود. پس از اتمام این کار، با استفاده از اعتبارنامه‌هایی که هنگام ایجاد آن ایجاد کرده‌اید، وارد نمونه Cloud SQL شوید. از داده‌های زیر برای تأیید اعتبار در PostgreSQL استفاده کنید:

  • نام کاربری: " postgres "
  • پایگاه داده: " postgres "
  • رمز عبور: " cloudsql " (یا هر چیزی که در زمان ایجاد تعیین کرده‌اید)

پس از اینکه با موفقیت در Cloud SQL Studio احراز هویت شدید، دستورات SQL در ویرایشگر وارد می‌شوند. می‌توانید با استفاده از علامت + در سمت راست آخرین پنجره، چندین پنجره ویرایشگر اضافه کنید.

9408d708b7dac90c.png

شما دستورات مربوط به Cloud SQL را در پنجره‌های ویرایشگر وارد خواهید کرد و در صورت لزوم از گزینه‌های Run، Format و Clear استفاده خواهید کرد.

فعال کردن افزونه‌ها

برای ساخت این برنامه، از افزونه‌های pgvector و google_ml_integration استفاده خواهیم کرد. افزونه pgvector به شما امکان ذخیره و جستجوی جاسازی‌های برداری را می‌دهد. افزونه google_ml_integration توابعی را ارائه می‌دهد که برای دسترسی به نقاط پایانی پیش‌بینی هوش مصنوعی Vertex برای دریافت پیش‌بینی‌ها در SQL استفاده می‌کنید. این افزونه‌ها را با اجرای DDL های زیر فعال کنید :

CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE;
CREATE EXTENSION IF NOT EXISTS vector;

ایجاد یک جدول

شما می‌توانید با استفاده از دستور DDL زیر در Cloud SQL Studio یک جدول ایجاد کنید:

-- Items Table (The "Profile" you swipe on)
CREATE TABLE items (
   item_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
   owner_id UUID,
   provider_name TEXT,
   provider_phone TEXT,
   title TEXT,
   bio TEXT,
   category TEXT,
   image_url TEXT,
   item_vector VECTOR(768),
   status TEXT DEFAULT 'available',
   created_at TIMESTAMP DEFAULT NOW()
);

-- Swipes Table (The Interaction)
CREATE TABLE swipes (
   swipe_id SERIAL PRIMARY KEY,
   swiper_id UUID,
   item_id UUID REFERENCES items(item_id),
   direction TEXT CHECK (direction IN ('left', 'right')),
   is_match BOOLEAN DEFAULT FALSE,
   created_at TIMESTAMP DEFAULT NOW()
);

ستون item_vector امکان ذخیره‌سازی مقادیر برداری متن را فراهم می‌کند.

اعطای مجوز

برای اعطای مجوز اجرا به تابع "embedding"، دستور زیر را اجرا کنید:

GRANT EXECUTE ON FUNCTION embedding TO postgres;

فعال کردن ادغام ML

برای استفاده مستقیم از ویژگی‌های یادگیری ماشین در پایگاه داده خود، باید پرچم ادغام ML را فعال کنید.

می‌توانید دستور زیر را از ترمینال Cloud Shell اجرا کنید:

INSTANCE_NAME="<<The name of your Cloud SQL Instance>>"

gcloud sql instances patch $INSTANCE_NAME --tier=db-custom-1-3840

gcloud sql instances patch $INSTANCE_NAME \
    --database-flags=cloudsql.enable_google_ml_integration=on

gcloud sql instances patch $INSTANCE_NAME --enable-google-ml-integration

اعطای نقش کاربری Vertex AI به حساب سرویس Cloud SQL

از کنسول Google Cloud IAM ، به حساب سرویس Cloud SQL (که به این شکل است: service-<<PROJECT_NUMBER>>@cp-sa-cloud-sql.iam.gserviceaccount.com) دسترسی به نقش "Vertex AI User" را بدهید. PROJECT_NUMBER شماره پروژه شما را خواهد داشت.

همچنین می‌توانید دستور زیر را از ترمینال Cloud Shell اجرا کنید:

INSTANCE_NAME="<<The name of your Cloud SQL Instance>>"
PROJECT_ID=$(gcloud config get-value project)

SA_EMAIL=$(gcloud sql instances describe $INSTANCE_NAME --format='value(serviceAccountEmailAddress)')
gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member="serviceAccount:$SA_EMAIL" \
    --role="roles/aiplatform.user"

مدل Gemini 3 Flash را در Cloud SQL ثبت کنید

دستور SQL زیر را از ویرایشگر کوئری Cloud SQL اجرا کنید.

CALL google_ml.create_model(
    model_id => 'gemini-3-flash-preview',
    model_request_url => 'https://aiplatform.googleapis.com/v1/projects/<<YOUR_PROJECT_ID>>/locations/global/publishers/google/models/gemini-3-flash-preview:generateContent',
    model_qualified_name => 'gemini-3-flash-preview',
    model_provider => 'google',
    model_type => 'generic',
    model_auth_type => 'cloudsql_service_agent_iam'
);
--replace <<YOUR_PROJECT_ID>> with your project id.

اشکالات و عیب‌یابی

حلقه‌ی «فراموشی رمز عبور»

اگر از تنظیمات «یک کلیک» استفاده کرده‌اید و رمز عبور خود را به خاطر نمی‌آورید، به صفحه اطلاعات اولیه Instance در کنسول بروید و برای تنظیم مجدد رمز عبور postgres روی «ویرایش» کلیک کنید.

خطای "افزونه یافت نشد"

اگر CREATE EXTENSION با شکست مواجه شود، اغلب به این دلیل است که نمونه هنوز از زمان آماده‌سازی اولیه در حالت "Maintenance" یا "Updating" است. بررسی کنید که آیا مرحله ایجاد نمونه کامل شده است یا خیر و در صورت نیاز چند ثانیه صبر کنید.

شکاف انتشار IAM

شما دستور gcloud IAM را اجرا کردید، اما CALL SQL همچنان با خطای مجوز مواجه می‌شود. تغییرات IAM ممکن است کمی طول بکشد تا در ستون فقرات گوگل منتشر شوند . نفس عمیقی بکشید.

عدم تطابق ابعاد برداری

جدول items روی VECTOR(768) تنظیم شده است. اگر بعداً سعی کنید از مدل متفاوتی (مانند مدل 1536-dim) استفاده کنید، درج‌های شما از بین می‌روند. به text-embedding-005 پایبند باشید.

شناسه پروژه، غلط املایی

در فراخوانی create_model ، اگر براکت‌ها را « » بگذارید یا شناسه پروژه خود را اشتباه تایپ کنید، ثبت مدل موفقیت‌آمیز به نظر می‌رسد اما در اولین پرس‌وجوی واقعی با شکست مواجه می‌شود. رشته خود را دوباره بررسی کنید!

ادغام هوش مصنوعی Vertex غیرفعال است

دستور –enable-google-ml-integration را اجرا کنید (جدا از پرچم پایگاه داده)

۵. فضای ذخیره‌سازی تصویر (فضای ذخیره‌سازی ابری گوگل)

برای ذخیره عکس‌های اقلام اضافی‌مان، از یک سطل GCS استفاده می‌کنیم. برای این اپلیکیشن آزمایشی، می‌خواهیم تصاویر به صورت عمومی در دسترس باشند تا فوراً در کارت‌های ما نمایش داده شوند.

  1. ایجاد یک سطل: یک سطل جدید در پروژه GCP خود (مثلاً neighborloop-images) ایجاد کنید ، ترجیحاً در همان ناحیه‌ای که پایگاه داده و برنامه شما قرار دارد.
  2. پیکربندی دسترسی عمومی: * به برگه مجوزهای سطل بروید.
  3. تابع اصلی allUsers را اضافه کنید.
  4. نقش «مشاهده‌گر اشیاء ذخیره‌سازی» (تا همه بتوانند عکس‌ها را ببینند) و نقش « خالق اشیاء ذخیره‌سازی» (برای آپلود نسخه آزمایشی) را تعیین کنید.

جایگزین (حساب کاربری سرویس): اگر ترجیح می‌دهید از دسترسی عمومی استفاده نکنید، مطمئن شوید که به حساب کاربری سرویس برنامه شما دسترسی کامل به Cloud SQL و نقش‌های ذخیره‌سازی لازم برای مدیریت ایمن اشیاء داده شده است.

اگر می‌خواهید دستور را اجرا کنید و دسترسی عمومی بدهید، دستورات زیر را در ترمینال Cloud Shell اجرا کنید:

BUCKET_NAME="<<your-bucket-name>>"
gcloud storage buckets add-iam-policy-binding gs://$BUCKET_NAME \
    --member="allUsers" \
    --role="roles/storage.objectViewer"

اشکالات و عیب‌یابی

کشش منطقه

اگر پایگاه داده شما در us-central1 و باکت شما در europe-west1 باشد، شما به معنای واقعی کلمه هوش مصنوعی خود را کند می‌کنید. "بررسی ارتعاش" سریع اتفاق می‌افتد، اما دریافت تصویر برای رابط کاربری کند به نظر می‌رسد. آنها را در یک منطقه نگه دارید!

منحصر به فرد بودن نام سطل

نام‌های سطل یک فضای نام سراسری هستند. اگر سعی کنید سطل خود را neighborloop-images نامگذاری کنید، احتمالاً شخص دیگری از قبل آن را دارد. اگر ایجاد شما با شکست مواجه شد، یک پسوند تصادفی اضافه کنید.

خلط مبحث «خالق» در مقابل «بیننده»

اشتباه در انتخاب «خالق» در مقابل «مشاهده‌گر»: اگر فقط «مشاهده‌گر» را اضافه کنید، وقتی کاربر سعی می‌کند یک مورد جدید را فهرست کند، برنامه شما از کار می‌افتد زیرا مجوز نوشتن فایل را ندارد. برای این تنظیمات نمایشی خاص، به هر دو نیاز دارید.

۶. بیایید برنامه را ایجاد کنیم

این مخزن را در پروژه خود کلون کنید و بیایید آن را بررسی کنیم.

  1. برای کلون کردن این، از ترمینال Cloud Shell خود (در دایرکتوری ریشه یا از هر جایی که می‌خواهید این پروژه را ایجاد کنید)، دستورات زیر را یکی یکی اجرا کنید:
git clone https://github.com/flazer99/neighbor-loop-cloud-sql

cd neighbor-loop-cloud-sql/

این باید پروژه را ایجاد کند و شما می‌توانید آن را در ویرایشگر Cloud Shell تأیید کنید.

53a398aff6ba7d5b.png

  1. چگونه کلید API جمینی خود را دریافت کنید
  2. از استودیوی هوش مصنوعی گوگل دیدن کنید: به aistudio.google.com بروید.
  3. ورود: از همان حساب گوگلی که برای پروژه گوگل کلود خود استفاده می‌کنید، استفاده کنید.
  4. ایجاد کلید API:
  5. در نوار کناری سمت چپ، روی «دریافت کلید API» کلیک کنید.
  6. روی دکمه‌ی «ایجاد کلید API در پروژه‌ی جدید» کلیک کنید.
  7. کپی کردن کلید: پس از تولید کلید، روی نماد کپی کلیک کنید.
  8. حالا متغیرهای محیطی را در فایل .env تنظیم کنید.
GEMINI_API_KEY=<<YOUR_GEMINI_API_KEY>>
DATABASE_URL=postgresql+pg8000://postgres:<<YOUR_PASSWORD>>@<<HOST_IP>>:<<PORT>>/postgres
GCS_BUCKET_NAME=<<YOUR_GCS_BUCKET>>

مقادیر مربوط به متغیرهای <<YOUR_GEMINI_API_KEY>>, <<YOUR_PASSWORD>, <<HOST_IP>>, <<PORT>> and <<YOUR_GCS_BUCKET>>.

اشکالات و عیب‌یابی

سردرگمی در مورد حساب‌های کاربری متعدد

اگر به چندین حساب گوگل (شخصی در مقابل کاری) وارد شده‌اید، ممکن است AI Studio به طور پیش‌فرض روی حساب اشتباهی تنظیم شود. آواتار گوشه بالا سمت راست را بررسی کنید تا مطمئن شوید که با حساب پروژه GCP شما مطابقت دارد.

سهمیه «ردیف رایگان» به اوج خود رسید

اگر از سطح رایگان استفاده می‌کنید، محدودیت‌های سرعت وجود دارد (RPM - درخواست در دقیقه). اگر در حلقه همسایه خیلی سریع "swipe" کنید، ممکن است با خطای 429 Too Many Requests مواجه شوید. سرعت خود را کم کنید!

امنیت کلید افشا شده

اگر به طور تصادفی فایل .env خود را که کلید درون آن قرار دارد، با git commit کردید، همیشه .env را به .gitignore خود اضافه کنید.

۷. بیایید کد را بررسی کنیم

«پروفایل دوستیابی» برای سایت شما

c2c543562cc9b353.png

وقتی کاربری عکسی از یک کالا آپلود می‌کند، نباید مجبور باشد توضیح طولانی بنویسد. من از Gemini 3 Flash برای «دیدن» کالا و نوشتن توضیحات برای آنها استفاده می‌کنم.

در بخش مدیریت، کاربر فقط یک عنوان و یک عکس ارائه می‌دهد. Gemini بقیه کارها را انجام می‌دهد:

prompt = """
You are a witty community manager for NeighborLoop.
Analyze this surplus item and return JSON:
{
   "bio": "First-person witty dating-style profile bio for the product, not longer than 2 lines",
   "category": "One-word category",
   "tags": ["tag1", "tag2"]
}
"""
response = genai_client.models.generate_content(
   model="gemini-3-flash-preview",
   contents=[types.Part.from_bytes(data=image_bytes, mime_type="image/jpeg"), prompt],
   config=types.GenerateContentConfig(response_mime_type="application/json")
)

21f871a1b549efcf.png

جاسازی‌های درون پایگاه داده به صورت بلادرنگ

aa783a459f1b02da.png

یکی از جالب‌ترین ویژگی‌های Cloud SQL، قابلیت تولید جاسازی‌ها بدون ترک زمینه SQL است. به جای فراخوانی یک مدل جاسازی در پایتون و ارسال بردار به پایگاه داده، من همه این کارها را در یک دستور INSERT با استفاده از تابع embedding() انجام می‌دهم:

INSERT INTO items (owner_id, provider_name, provider_phone, title, bio, category, image_url, status, item_vector)
VALUES (
   :owner, :name, :phone, :title, :bio, :cat, :url, 'available',
   embedding('text-embedding-005', :title || ' ' || :bio)::vector
)

این تضمین می‌کند که هر آیتم از همان لحظه ارسال، بر اساس معنی‌اش «قابل جستجو» باشد. و توجه داشته باشید که این بخشی است که ویژگی «لیست کردن محصول» برنامه Neighbor Loop را پوشش می‌دهد.

اضافه کردن تصویر ویژگی لیست محصولات

جستجوی برداری پیشرفته و فیلتر هوشمند با Gemini 3.0

جستجوی استاندارد کلمات کلیدی محدود است. اگر عبارت "چیزی برای تعمیر صندلی من" را جستجو کنید، یک پایگاه داده سنتی ممکن است چیزی را برنگرداند اگر کلمه "صندلی" در عنوان نباشد. Neighbor Loop این مشکل را با جستجوی برداری پیشرفته Cloud SQL AI حل می‌کند.

با استفاده از افزونه pgvector و فضای ذخیره‌سازی بهینه‌شده Cloud SQLs، می‌توانیم جستجوهای شباهت بسیار سریعی انجام دهیم. اما «جادو»ی واقعی زمانی اتفاق می‌افتد که نزدیکی برداری را با منطق مبتنی بر LLM ترکیب کنیم.

SELECT item_id, title, bio, category, image_url,
      1 - (item_vector <=> embedding('text-embedding-005', :query)::vector) as score
FROM items 
WHERE status = 'available' 
 AND item_vector IS NOT NULL 
ORDER BY score DESC 
LIMIT 5

این پرس‌وجو نشان‌دهنده یک تغییر معماری عمده است: ما در حال انتقال منطق به داده‌ها هستیم. به جای اینکه هزاران نتیجه را برای فیلتر کردن آنها به کد برنامه وارد کنیم، Gemini 3 Flash یک "بررسی ارتعاش" را در داخل موتور پایگاه داده انجام می‌دهد. این امر باعث کاهش تأخیر، کاهش هزینه‌های خروجی و تضمین این می‌شود که نتایج نه تنها از نظر ریاضی مشابه هستند، بلکه از نظر زمینه‌ای نیز مرتبط هستند.

تصویر ویژگی جستجوی معنایی

حلقه «کشیدن برای تطبیق»

رابط کاربری یک دسته کارت کلاسیک است.

کشیدن انگشت به چپ: حذف کردن.

به راست بکشید: این یک تطابق است!

تصویر صفحه با قابلیت کشیدن انگشت برای تطبیق

وقتی به سمت راست می‌کشید، بک‌اند تعامل را در جدول سوایپ‌های ما ثبت می‌کند و کالا را به عنوان منطبق علامت‌گذاری می‌کند. فرانت‌اند فوراً یک پنجره‌ی مودال را باز می‌کند که اطلاعات تماس ارائه‌دهنده را نشان می‌دهد تا بتوانید زمان تحویل گرفتن کالا را هماهنگ کنید.

۸. بیایید آن را در Cloud Run مستقر کنیم

  1. با اجرای دستور زیر از ترمینال Cloud Shell که پروژه در آن کلون شده است، آن را روی Cloud Run مستقر کنید و مطمئن شوید که در پوشه ریشه پروژه هستید .

این را در ترمینال Cloud Shell خود اجرا کنید:

gcloud run deploy neighbor-loop-cloud-sql \
   --source . \
   --region=us-central1 \
   --allow-unauthenticated \
   --network=easy-cloudsql-vpc \
   --subnet=easy-cloudsql-subnet \
   --vpc-egress=private-ranges-only \
   --set-env-vars GEMINI_API_KEY=<<YOUR_GEMINI_API_KEY>>,DATABASE_URL=postgresql+pg8000://postgres:<<YOUR_PASSWORD>>@<<PRIVATE_IP_HOST>>:5432/postgres,GCS_BUCKET_NAME=<<YOUR_GCS_BUCKET>>

مقادیر مربوط به متغیرهای <<YOUR_GEMINI_API_KEY>>, <<YOUR_PASSWORD>, <<PRIVATE_IP_HOST>>, <<PORT>> and <<YOUR_GCS_BUCKET>> را جایگزین کنید.

پس از اتمام دستور، یک URL سرویس نمایش داده می‌شود. آن را کپی کنید.

حالا از آدرس اینترنتی سرویس (نقطه پایانی Cloud Run که قبلاً کپی کرده‌اید) استفاده کنید و برنامه را آزمایش کنید. عکسی از آن ابزار برقی قدیمی آپلود کنید و بگذارید Gemini بقیه کارها را انجام دهد!

اشکالات و عیب‌یابی

حلقه‌ی «بازنگری ناموفق»

اگر نصب تمام شد اما URL 500 Internal Server Error را نشان داد، لاگ‌ها را بررسی کنید! این مشکل معمولاً به دلیل از دست رفتن یک متغیر محیطی (مانند اشتباه تایپی در DATABASE_URL ) یا عدم دسترسی حساب سرویس Cloud Run برای خواندن از مخزن GCS شما ایجاد می‌شود.

۹. عیب‌یابی سطح بالا

206a26fcd93ea48.png

۱۰. نسخه آزمایشی

شما باید بتوانید از نقطه پایانی خود برای آزمایش‌ها استفاده کنید.

اما برای اهداف آزمایشی برای چند روز، می‌توانید با این کار کنید:

۱۱. تمیز کردن

پس از انجام این آزمایش، فراموش نکنید که نمونه Cloud SQL را حذف کنید.

۱۲. تبریک

شما با موفقیت برنامه Neighbor Loop را برای جوامع پایدار با Google Cloud ساختید. با انتقال جاسازی و منطق هوش مصنوعی Gemini 3 Flash به Cloud SQL ، برنامه فوق‌العاده سریع است (منوط به تنظیمات استقرار) و کد به طرز چشمگیری تمیز است. ما فقط داده‌ها را ذخیره نمی‌کنیم - ما قصد (intent) را ذخیره می‌کنیم.

ترکیب سرعت Gemini 3 Flash و پردازش برداری بهینه شده Cloud SQL واقعاً مرز بعدی برای پلتفرم‌های مبتنی بر جامعه است.