شروع کار با جاسازی‌های برداری در Cloud SQL برای PostgreSQL

۱. مقدمه

در این آزمایشگاه کد، یاد می‌گیرید که چگونه با ترکیب جستجوی برداری با تعبیه‌های پلتفرم Gemini Enterprise Agent، از Cloud SQL برای ادغام هوش مصنوعی PostgreSQL استفاده کنید.

نمودار معماری که ادغام Cloud SQL را با پلتفرم Gemini Enterprise Agent نشان می‌دهد

پیش‌نیازها

  • درک اولیه از گوگل کلود و کنسول گوگل کلود
  • تجربه اولیه با رابط خط فرمان و Cloud Shell

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

  • یک Cloud SQL برای نمونه PostgreSQL مستقر کنید
  • یک پایگاه داده ایجاد کنید و ادغام Cloud SQL AI را فعال کنید
  • بارگذاری داده‌ها در پایگاه داده
  • از Cloud SQL Studio استفاده کنید
  • ایجاد جاسازی‌ها با استفاده از پلتفرم Gemini Enterprise Agent در Cloud SQL
  • از استودیوی پلتفرم عامل استفاده کنید
  • غنی‌سازی نتایج پرس‌وجو با استفاده از مدل تولیدی پلتفرم Gemini Enterprise Agent
  • بهبود عملکرد پرس‌وجو با استفاده از شاخص برداری HNSW

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

  • یک حساب کاربری گوگل کلود و یک پروژه گوگل کلود
  • یک مرورگر وب مانند کروم

۲. تنظیمات و الزامات

راه‌اندازی پروژه

  1. وارد کنسول گوگل کلود شوید. اگر از قبل حساب گوگل (جیمیل یا گوگل ورک اسپیس) ندارید، باید یک حساب گوگل ایجاد کنید .

به جای حساب کاری یا تحصیلی از حساب شخصی استفاده کنید.

  1. یک پروژه جدید ایجاد کنید یا از یک پروژه موجود دوباره استفاده کنید. برای ایجاد یک پروژه جدید در کنسول Google Cloud، روی «انتخاب یک پروژه» در نوار ابزار کلیک کنید.

یک پنجره محاوره‌ای پروژه را در کنسول گوگل کلود انتخاب کنید

در پنجره انتخاب پروژه ، روی «پروژه جدید» کلیک کنید.

37d264871000675d.png

در پنجره‌ی محاوره‌ای، نام پروژه را وارد کنید و گزینه‌ی «مکان» (Location) را انتخاب کنید.

۹۶d86d3d5655cdbe.png

  • نام پروژه ، نام نمایشی برای شرکت‌کنندگان این پروژه است. نام پروژه توسط APIهای گوگل استفاده نمی‌شود و می‌توان آن را در هر زمانی تغییر داد.
  • شناسه پروژه در تمام پروژه‌های گوگل کلود منحصر به فرد و غیرقابل تغییر است (پس از تنظیم، قابل تغییر نیست). کنسول گوگل کلود به طور خودکار یک شناسه منحصر به فرد تولید می‌کند، اما می‌توانید آن را سفارشی کنید. اگر شناسه تولید شده را دوست ندارید، می‌توانید یک شناسه تصادفی دیگر ایجاد کنید یا شناسه خودتان را برای بررسی در دسترس بودن آن ارائه دهید. در اکثر آزمایشگاه‌های کد، شما به شناسه پروژه خود ارجاع می‌دهید که معمولاً با جانگهدار
  • مقدار سوم، شماره پروژه ، توسط برخی از APIها استفاده می‌شود. برای کسب اطلاعات بیشتر در مورد هر سه این مقادیر، به مستندات ایجاد و مدیریت پروژه‌ها مراجعه کنید.

فعال کردن صورتحساب

یک حساب پرداخت شخصی تنظیم کنید

اگر صورتحساب را با استفاده از اعتبارهای Google Cloud تنظیم کرده‌اید، می‌توانید از این مرحله صرف نظر کنید.

برای تنظیم یک حساب پرداخت شخصی، پرداخت را در کنسول پرداخت ابری گوگل (Google Cloud Billing Console) فعال کنید.

یادداشت‌ها:

  • تکمیل این آزمایشگاه کمتر از ۵ دلار آمریکا از منابع ابری گوگل هزینه دارد.
  • برای حذف منابع و جلوگیری از هزینه‌های بیشتر، مراحل انتهای این آزمایش را دنبال کنید.
  • کاربران جدید واجد شرایط استفاده از دوره آزمایشی رایگان ۳۰۰ دلاری هستند.

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

اگرچه می‌توانید از راه دور و از طریق رایانه خود، گوگل کلود را مدیریت کنید، اما در این آزمایشگاه کد، از گوگل کلود شل ، یک محیط خط فرمان که در فضای ابری اجرا می‌شود، استفاده می‌کنید.

در نوار ابزار کنسول گوگل کلود ، روی فعال کردن پوسته کلود کلیک کنید:

فعال کردن پوسته ابری

روش دیگر این است که در کنسول Google Cloud، ابتدا g و سپس s را فشار دهید، یا Cloud Shell را باز کنید.

فقط چند لحظه طول می‌کشد تا آماده‌سازی و به محیط متصل شوید. پس از اتمام، باید ترمینال متصل را ببینید:

تصویر صفحه ترمینال Google Cloud Shell که نشان می‌دهد محیط متصل شده است

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

۳. فعال کردن APIها

برای استفاده از Cloud SQL ، Compute Engine ، Service Networking و Gemini Enterprise Agent Platform ، API های مربوط به آنها را در پروژه Google Cloud خود فعال کنید.

در ترمینال Cloud Shell، مطمئن شوید که شناسه پروژه شما تنظیم شده است:

gcloud config set project <PROJECT_ID>

متغیر محیطی PROJECT_ID را تنظیم کنید:

PROJECT_ID=$(gcloud config get-value project)

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

gcloud services enable sqladmin.googleapis.com \
                       compute.googleapis.com \
                       cloudresourcemanager.googleapis.com \
                       servicenetworking.googleapis.com \
                       aiplatform.googleapis.com

خروجی مورد انتظار:

student@cloudshell:~ (test-project-001-402417)$ gcloud config set project test-project-001-402417
Updated property [core/project].
student@cloudshell:~ (test-project-001-402417)$ PROJECT_ID=$(gcloud config get-value project)
Your active configuration is: [cloudshell-14650]
student@cloudshell:~ (test-project-001-402417)$ 
student@cloudshell:~ (test-project-001-402417)$ gcloud services enable sqladmin.googleapis.com \
                       compute.googleapis.com \
                       cloudresourcemanager.googleapis.com \
                       servicenetworking.googleapis.com \
                       aiplatform.googleapis.com
Operation "operations/acat.p2-4470404856-1f44ebd8-894e-4356-bea7-b84165a57442" finished successfully.

می‌توانید درباره هر API فعال‌شده در مستندات مطالعه کنید.

۴. یک نمونه SQL ابری ایجاد کنید

با ادغام پایگاه داده Gemini Enterprise Agent Platform، یک نمونه Cloud SQL ایجاد کنید.

ایجاد رمز عبور پایگاه داده

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

export CLOUDSQL_PASSWORD=$(openssl rand -hex 16)

نمایش مقدار رمز عبور تولید شده:

echo $CLOUDSQL_PASSWORD

رمز عبور ایجاد شده را یادداشت کنید تا بعداً از آن استفاده کنید.

ایجاد یک Cloud SQL برای نمونه PostgreSQL

نمونه‌های SQL ابری را می‌توان با استفاده از روش‌های مختلفی از جمله کنسول Google Cloud، Terraform یا رابط خط فرمان Google Cloud ( gcloud ) ایجاد کرد. در این آزمایشگاه کد، شما gcloud استفاده می‌کنید. برای یادگیری نحوه ایجاد یک نمونه با ابزارهای دیگر، به مستندات Create instances مراجعه کنید.

در Cloud Shell، دستور زیر را برای ایجاد نمونه اجرا کنید:

gcloud sql instances create my-cloudsql-instance \
--database-version=POSTGRES_18 \
--tier=db-custom-1-3840 \
--region=us-central1 \
--edition=ENTERPRISE \
--enable-google-ml-integration \
--database-flags cloudsql.enable_google_ml_integration=on

پس از ایجاد نمونه، برای کاربر پیش‌فرض ( postgres ) یک رمز عبور تعیین کنید و تأیید کنید که می‌توانید متصل شوید:

gcloud sql users set-password postgres \
    --instance=my-cloudsql-instance \
    --password=$CLOUDSQL_PASSWORD

با استفاده از gcloud sql connect به نمونه متصل شوید. در صورت درخواست، رمز عبور را وارد کنید:

gcloud sql connect my-cloudsql-instance --user=postgres

با فشردن کلیدهای Ctrl+D یا وارد کردن exit از جلسه psql خارج شوید:

exit

فعال‌سازی یکپارچه‌سازی پلتفرم Gemini Enterprise Agent

نقش IAM لازم را به حساب سرویس Cloud SQL اعطا کنید تا ادغام پلتفرم Gemini Enterprise Agent فعال شود.

ایمیل حساب سرویس Cloud SQL را بازیابی کنید و آن را به عنوان یک متغیر محیطی صادر کنید:

SERVICE_ACCOUNT_EMAIL=$(gcloud sql instances describe my-cloudsql-instance --format="value(serviceAccountEmailAddress)")
echo $SERVICE_ACCOUNT_EMAIL

نقش roles/aiplatform.user را به حساب سرویس Cloud SQL اعطا کنید:

PROJECT_ID=$(gcloud config get-value project)
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:$SERVICE_ACCOUNT_EMAIL" \
  --role="roles/aiplatform.user"

برای اطلاعات بیشتر در مورد ایجاد و پیکربندی نمونه، به «ادغام Cloud SQL با پلتفرم Gemini Enterprise Agent» مراجعه کنید.

۵. پایگاه داده را آماده کنید

یک پایگاه داده ایجاد کنید و پشتیبانی از بردار را فعال کنید.

ایجاد پایگاه داده

یک پایگاه داده با نام quickstart_db ایجاد کنید. می‌توانید با استفاده از کلاینت‌های پایگاه داده (مانند psql )، رابط خط فرمان گوگل کلود یا Cloud SQL Studio پایگاه‌های داده ایجاد کنید. در این مرحله، از gcloud استفاده کنید.

در Cloud Shell، دستور زیر را برای ایجاد پایگاه داده اجرا کنید:

gcloud sql databases create quickstart_db --instance=my-cloudsql-instance

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

برای کار با پلتفرم Gemini Enterprise Agent و vectors، دو افزونه را در پایگاه داده quickstart_db فعال کنید: google_ml_integration و vector .

در Cloud Shell، به پایگاه داده متصل شوید:

gcloud sql connect my-cloudsql-instance --database quickstart_db --user=postgres

وقتی از شما خواسته شد، رمز عبور پایگاه داده خود را وارد کنید.

در جلسه SQL، دستورات زیر را اجرا کنید:

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

خروج از جلسه SQL:

exit;

۶. بارگذاری داده‌ها

جداولی را در پایگاه داده ایجاد کنید و داده‌ها را با استفاده از فایل‌های مجموعه داده فرضی Cymbal Store که در یک مخزن ذخیره‌سازی ابری عمومی با فرمت CSV ذخیره شده‌اند، بارگذاری کنید.

ابتدا، اشیاء طرحواره مورد نیاز را ایجاد کنید. برای دانلود و وارد کردن طرحواره gcloud sql connect و gcloud storage را اجرا کنید:

در Cloud Shell، دستور زیر را اجرا کنید (در صورت درخواست، رمز عبور ایجاد شده برای نمونه را وارد کنید):

gcloud storage cat gs://cloud-training/gcc/gcc-tech-004/cymbal_demo_schema.sql | gcloud sql connect my-cloudsql-instance --database quickstart_db --user=postgres

این دستور به پایگاه داده متصل می‌شود و کد SQL دانلود شده را برای ایجاد جداول، ایندکس‌ها و توالی‌ها اجرا می‌کند.

در مرحله بعد، فایل‌های داده CSV را از Cloud Storage دانلود کنید:

gcloud storage cp gs://cloud-training/gcc/gcc-tech-004/cymbal_products.csv .
gcloud storage cp gs://cloud-training/gcc/gcc-tech-004/cymbal_inventory.csv .
gcloud storage cp gs://cloud-training/gcc/gcc-tech-004/cymbal_stores.csv .

اتصال به پایگاه داده:

gcloud sql connect my-cloudsql-instance --database quickstart_db --user=postgres

وارد کردن داده‌ها از فایل‌های CSV:

\copy cymbal_products from 'cymbal_products.csv' csv header
\copy cymbal_inventory from 'cymbal_inventory.csv' csv header
\copy cymbal_stores from 'cymbal_stores.csv' csv header

اگر از داده‌های خودتان استفاده می‌کنید و فایل‌های CSV با ابزار وارد کردن Cloud SQL در کنسول Google Cloud سازگار هستند، می‌توانید به جای خط فرمان از کنسول استفاده کنید.

۷. ایجاد جاسازی‌ها

با استفاده از مدل text-embedding-005 از Gemini Enterprise Agent Platform، برای توضیحات محصول، جاسازی‌هایی بسازید و آنها را به عنوان داده‌های برداری ذخیره کنید.

اگر جلسه شما قطع شد، به پایگاه داده متصل شوید:

gcloud sql connect my-cloudsql-instance --database quickstart_db --user=postgres

با استفاده از تابع embedding یک ستون تولید شده با نام embedding در جدول cymbal_products ایجاد کنید. این دستور یک ستون تولید شده ذخیره شده ایجاد می‌کند که بردارهای embedding تولید شده از ستون product_description را برای تمام ردیف‌های جدول نگه می‌دارد. مدل به عنوان پارامتر اول و ستون متن منبع به عنوان پارامتر دوم مشخص می‌شود:

ALTER TABLE cymbal_products ADD COLUMN embedding vector(768) GENERATED ALWAYS AS (google_ml.embedding('text-embedding-005', product_description)) STORED;

برای ۹۰۰ تا ۱۰۰۰ ردیف، این فرآیند معمولاً ۱ تا ۵ دقیقه طول می‌کشد.

وقتی یک ردیف جدید به جدول اضافه می‌کنید یا product_description در یک ردیف موجود به‌روزرسانی می‌کنید، ستون embedding به‌طور خودکار به‌روزرسانی می‌شود.

۸. جستجوی شباهت را اجرا کنید

با مقایسه‌ی جاسازی‌های برداری محاسبه‌شده برای توضیحات محصول در مقابل جاسازی برای یک عبارت جستجو، یک جستجوی شباهت انجام دهید.

شما می‌توانید کوئری‌های SQL را از خط فرمان با استفاده از gcloud sql connect یا از Cloud SQL Studio اجرا کنید. Cloud SQL studio روش راحت‌تری برای ویرایش و اجرای دستورات طولانی SQL با چندین ردیف در خروجی ارائه می‌دهد.

شروع به کار با Cloud SQL Studio

  1. در کنسول گوگل کلود، به Cloud SQL instances بروید و روی my-cloudsql-instance کلیک کنید.

لیست نمونه‌های SQL ابری در کنسول Google Cloud

  1. در منوی ناوبری، روی Cloud SQL Studio کلیک کنید.

مورد منوی Cloud SQL Studio

  1. در کادر محاوره‌ای احراز هویت، نام پایگاه داده و اطلاعات احراز هویت را وارد کنید:
    • پایگاه داده : quickstart_db
    • کاربر : postgres
    • رمز عبور :
  2. روی تأیید اعتبار کلیک کنید.

پنجره احراز هویت Cloud SQL Studio

  1. برای باز کردن ویرایشگر SQL، روی تب Editor کلیک کنید.

تب ویرایشگر SQL در Cloud SQL Studio

اجرای کوئری

یک پرس‌وجو اجرا کنید تا 10 محصول برتر مرتبط با پرسش مشتری را بازیابی کنید: "چه نوع درختان میوه‌ای اینجا خوب رشد می‌کنند؟"

SELECT
        cp.product_name,
        left(cp.product_description,80) as description,
        cp.sale_price,
        cs.zip_code,
        (cp.embedding <=> embedding('text-embedding-005','What kind of fruit trees grow well here?')::vector) as distance
FROM
        cymbal_products cp
JOIN cymbal_inventory ci on
        ci.uniq_id=cp.uniq_id
JOIN cymbal_stores cs on
        cs.store_id=ci.store_id
        AND ci.inventory>0
        AND cs.store_id = 1583
ORDER BY
        distance ASC
LIMIT 10;

در Cloud SQL Studio، کوئری را وارد کنید و روی Run کلیک کنید (یا کوئری را در جلسه psql خود اجرا کنید):

اجرای کوئری SQL در Cloud SQL Studio

این پرس و جو محصولات منطبق را که بر اساس فاصله کسینوسی مرتب شده‌اند، برمی‌گرداند:

product_name       |                                   description                                    | sale_price | zip_code |      distance       
-------------------------+----------------------------------------------------------------------------------+------------+----------+---------------------
 Cherry Tree             | This is a beautiful cherry tree that will produce delicious cherries. It is an d |      75.00 |    93230 | 0.43922018972266397
 Meyer Lemon Tree        | Meyer Lemon trees are California's favorite lemon tree! Grow your own lemons by  |         34 |    93230 |  0.4685112926118228
 Toyon                   | This is a beautiful toyon tree that can grow to be over 20 feet tall. It is an e |      10.00 |    93230 |  0.4835677149651668
 California Lilac        | This is a beautiful lilac tree that can grow to be over 10 feet tall. It is an d |       5.00 |    93230 |  0.4947204525907498
 California Peppertree   | This is a beautiful peppertree that can grow to be over 30 feet tall. It is an e |      25.00 |    93230 |  0.5054166905547247
 California Black Walnut | This is a beautiful walnut tree that can grow to be over 80 feet tall. It is a d |     100.00 |    93230 |  0.5084219510932597
 California Sycamore     | This is a beautiful sycamore tree that can grow to be over 100 feet tall. It is  |     300.00 |    93230 |  0.5140519790508755
 Coast Live Oak          | This is a beautiful oak tree that can grow to be over 100 feet tall. It is an ev |     500.00 |    93230 |  0.5143126438081371
 Fremont Cottonwood      | This is a beautiful cottonwood tree that can grow to be over 100 feet tall. It i |     200.00 |    93230 |  0.5174774727252058
 Madrone                 | This is a beautiful madrona tree that can grow to be over 80 feet tall. It is an |      50.00 |    93230 |  0.5227400803389093
(10 rows)

۹. بهبود پاسخ LLM با استفاده از داده‌های بازیابی شده

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

برای انجام این کار:

  1. یک فایل JSON از نتیجه جستجوی برداری در Cloud SQL ایجاد کنید.
  2. اعلان را در Agent Platform Studio آزمایش کنید.
  3. با استفاده از ادغام google_ml ، مستقیماً از SQL، اعلان سرتاسری را اجرا کنید.

تولید خروجی با فرمت JSON

کوئری را طوری تغییر دهید که نتیجه به صورت JSON قالب‌بندی شود و یک ردیف برگرداند:

WITH trees as (
SELECT
        cp.product_name,
        left(cp.product_description,80) as description,
        cp.sale_price,
        cs.zip_code,
        cp.uniq_id as product_id
FROM
        cymbal_products cp
JOIN cymbal_inventory ci on
        ci.uniq_id=cp.uniq_id
JOIN cymbal_stores cs on
        cs.store_id=ci.store_id
        AND ci.inventory>0
        AND cs.store_id = 1583
ORDER BY
        (cp.embedding <=> embedding('text-embedding-005','What kind of fruit trees grow well here?')::vector) ASC
LIMIT 1)
SELECT json_agg(trees) FROM trees;

خروجی JSON مورد انتظار:

[{"product_name":"Cherry Tree","description":"This is a beautiful cherry tree that will produce delicious cherries. It is an d","sale_price":75.00,"zip_code":93230,"product_id":"d536e9e823296a2eba198e52dd23e712"}]

اجرای اعلان در Agent Platform Studio

JSON تولید شده را به عنوان متن در یک اعلان به یک مدل مولد در Agent Platform Studio ارائه دهید.

  1. در کنسول گوگل کلود، Agent Platform Studio را باز کنید.

ناوبری استودیوی پلتفرم عامل

  1. دستور زیر را در Agent Platform Studio وارد کنید:

وارد کردن اعلان در Agent Platform Studio

You are a friendly advisor helping to find a product based on the customer's needs.
Based on the client request we have loaded a list of products closely related to search.
The list in JSON format with list of values like {"product_name":"name","description":"some description","sale_price":10,"zip_code": 10234, "product_id": "02056727942aeb714dc9a2313654e1b0"}
Here is the list of products:
<JSON_OUTPUT>
The customer asked "What tree is growing the best here?"
You should give information about the product, price and some supplemental information.
Do not ask any additional questions and assume location based on the zip code provided in the list of products.

جایگزین کردن با پاسخ JSON از پرس و جوی شما:

You are a friendly advisor helping to find a product based on the customer's needs.
Based on the client request we have loaded a list of products closely related to search.
The list in JSON format with list of values like {"product_name":"name","description":"some description","sale_price":10,"zip_code": 10234, "product_id": "02056727942aeb714dc9a2313654e1b0"}
Here is the list of products:
[{"product_name":"Cherry Tree","description":"This is a beautiful cherry tree that will produce delicious cherries. It is an d","sale_price":75.00,"zip_code":93230,"product_id":"d536e9e823296a2eba198e52dd23e712"}]
The customer asked "What tree is growing the best here?"
You should give information about the product, price and some supplemental information.
Do not ask any additional questions and assume location based on the zip code provided in the list of products.

اعلان در Agent Platform Studio

  1. اعلان را اجرا کنید.

نتیجه سریع در Agent Platform Studio

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

اجرای اعلان در psql

همچنین می‌توانید از ادغام هوش مصنوعی Cloud SQL با پلتفرم Gemini Enterprise Agent برای دریافت پاسخ‌ها از یک مدل مولد مستقیماً در SQL استفاده کنید. ابتدا، مدل را ثبت کنید.

  1. در صورت لزوم، افزونه را به نسخه ۱.۴.۳ یا بالاتر ارتقا دهید. به quickstart_db متصل شوید و دستور زیر را اجرا کنید:
SELECT extversion from pg_extension where extname='google_ml_integration';

اگر نسخه برگردانده شده پایین‌تر از 1.4.3 بود، دستور زیر را اجرا کنید:

ALTER EXTENSION google_ml_integration UPDATE TO '1.4.3';
  1. پرچم پایگاه داده google_ml_integration.enable_model_support را بررسی کنید:
SHOW google_ml_integration.enable_model_support;

اگر پرچم off است، پرچم پایگاه داده را در Cloud Shell به‌روزرسانی کنید:

gcloud sql instances patch my-cloudsql-instance \
--database-flags google_ml_integration.enable_model_support=on,cloudsql.enable_google_ml_integration=on

این عملیات ۱ تا ۳ دقیقه طول می‌کشد. تنظیمات را دوباره بررسی کنید:

SHOW google_ml_integration.enable_model_support;
  1. مدل gemini-3.5-flash را برای تولید پاسخ‌ها ثبت کنید (جایگزین کنید) با شناسه پروژه شما):
CALL
  google_ml.create_model(
    model_id => 'gemini-3.5-flash',
    model_request_url => 'https://aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/global/publishers/google/models/gemini-3.6-flash:generateContent',
    model_provider => 'google',
    model_auth_type => 'cloudsql_service_agent_iam');

مدل‌های ثبت‌شده را تأیید کنید:

SELECT model_id, model_type FROM google_ml.model_info_view WHERE model_id='gemini-3.5-flash';
  1. برای بازیابی نتایج جستجوی برداری و ارسال مستقیم آنها به gemini-3.5-flash کوئری SQL کامل را اجرا کنید:
WITH trees AS (
SELECT
        cp.product_name,
        cp.product_description AS description,
        cp.sale_price,
        cs.zip_code,
        cp.uniq_id AS product_id
FROM
        cymbal_products cp
JOIN cymbal_inventory ci ON
        ci.uniq_id = cp.uniq_id
JOIN cymbal_stores cs ON
        cs.store_id = ci.store_id
        AND ci.inventory>0
        AND cs.store_id = 1583
ORDER BY
        (cp.embedding <=> embedding('text-embedding-005',
        'What kind of fruit trees grow well here?')::vector) ASC
LIMIT 1),
prompt AS (
SELECT
        'You are a friendly advisor helping to find a product based on the customer''s needs.
Based on the client request we have loaded a list of products closely related to search.
The list in JSON format with list of values like {"product_name":"name","product_description":"some description","sale_price":10}
Here is the list of products:' || json_agg(trees) || 'The customer asked "What kind of fruit trees grow well here?"
You should give information about the product, price and some supplemental information' AS prompt_text
FROM
        trees),
response AS (
SELECT
        google_ml.predict_row( model_id =>'gemini-3.5-flash',
        request_body => json_build_object('contents',
        json_build_object('role',
        'user',
        'parts',
        json_build_object('text',
        prompt_text))))->'candidates'->0->'content'->'parts'->0->'text' AS resp
FROM
        prompt)
SELECT
REPLACE(resp::text, '\n', CHR(10))
FROM
        response;

خروجی مورد انتظار:

"Hello there! If you're looking for a wonderful fruit tree to plant, I have a fantastic option for you: ### **Cherry Tree** * **Price:** $75.00 * **Product ID:** `d536e9e823296a2eba198e52dd23e712` --- ### **Why it's a great choice:** * **Fruit & Shade:** Not only will it produce delicious, sweet cherries, but it also grows into a beautiful 15-foot deciduous tree that provides excellent shade and privacy for your yard. * **Seasonal Beauty:** Its leaves are a lovely dark green throughout the summer and transition into a striking red during the fall. * **Ideal Growing Conditions:** Cherry trees thrive best in cool, moist climates with sandy soil and are suitable for **USDA hardiness zones 4–9**. If your local climate matches these conditions, this Cherry Tree would make a beautiful and tasty addition to your garden! Let me know if you'd like more details or help placing an order."

۱۰. ایجاد یک شاخص نزدیکترین همسایه

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

ایجاد یک فهرست HNSW

شاخص سلسله مراتبی جهان کوچک قابل پیمایش (HNSW) یک شاخص برداری مبتنی بر گراف است.

برای ساخت یک شاخص HNSW روی ستون embedding ، تابع فاصله ( vector_cosine_ops ) و پارامترهای اختیاری مانند m و ef_construction را مشخص کنید. برای اطلاعات بیشتر، به بخش «کار با جاسازی‌های برداری» مراجعه کنید.

CREATE INDEX cymbal_products_embeddings_hnsw ON cymbal_products
  USING hnsw (embedding vector_cosine_ops)
  WITH (m = 16, ef_construction = 64);

خروجی مورد انتظار:

quickstart_db=> CREATE INDEX cymbal_products_embeddings_hnsw ON cymbal_products
  USING hnsw (embedding vector_cosine_ops)
  WITH (m = 16, ef_construction = 64);
CREATE INDEX
quickstart_db=>

مقایسه عملکرد پرس و جو

کوئری جستجوی برداری را با EXPLAIN (ANALYZE) اجرا کنید تا تأیید کنید که برنامه‌ریز کوئری از ایندکس استفاده می‌کند:

EXPLAIN (ANALYZE) 
WITH trees as (
SELECT
        cp.product_name,
        left(cp.product_description,80) as description,
        cp.sale_price,
        cs.zip_code,
        cp.uniq_id as product_id
FROM
        cymbal_products cp
JOIN cymbal_inventory ci on
        ci.uniq_id=cp.uniq_id
JOIN cymbal_stores cs on
        cs.store_id=ci.store_id
        AND ci.inventory>0
        AND cs.store_id = 1583
ORDER BY
        (cp.embedding <=> embedding('text-embedding-005','What kind of fruit trees grow well here?')::vector) ASC
LIMIT 1)
SELECT json_agg(trees) FROM trees;

خروجی مورد انتظار:

 Aggregate  (cost=779.12..779.13 rows=1 width=32) (actual time=1.066..1.069 rows=1 loops=1)
   ->  Subquery Scan on trees  (cost=769.05..779.12 rows=1 width=142) (actual time=1.038..1.041 rows=1 loops=1)
         ->  Limit  (cost=769.05..779.11 rows=1 width=158) (actual time=1.022..1.024 rows=1 loops=1)
               ->  Nested Loop  (cost=769.05..9339.69 rows=852 width=158) (actual time=1.020..1.021 rows=1 loops=1)
                     ->  Nested Loop  (cost=768.77..9316.48 rows=852 width=945) (actual time=0.858..0.859 rows=1 loops=1)
                           ->  Index Scan using cymbal_products_embeddings_hnsw on cymbal_products cp  (cost=768.34..2572.47 rows=941 width=941) (actual time=0.532..0.539 rows=3 loops=1)
...
 Planning Time: 112.398 ms
 Execution Time: 1.221 ms

طرح اجرایی، Index Scan using cymbal_products_embeddings_hnsw نشان می‌دهد.

کوئری را بدون EXPLAIN اجرا کنید:

WITH trees as (
SELECT
        cp.product_name,
        left(cp.product_description,80) as description,
        cp.sale_price,
        cs.zip_code,
        cp.uniq_id as product_id
FROM
        cymbal_products cp
JOIN cymbal_inventory ci on
        ci.uniq_id=cp.uniq_id
JOIN cymbal_stores cs on
        cs.store_id=ci.store_id
        AND ci.inventory>0
        AND cs.store_id = 1583
ORDER BY
        (cp.embedding <=> embedding('text-embedding-005','What kind of fruit trees grow well here?')::vector) ASC
LIMIT 1)
SELECT json_agg(trees) FROM trees;

خروجی مورد انتظار:

[{"product_name":"Cherry Tree","description":"This is a beautiful cherry tree that will produce delicious cherries. It is an d","sale_price":75.00,"zip_code":93230,"product_id":"d536e9e823296a2eba198e52dd23e712"}]

برای اطلاعات بیشتر و مثال‌هایی در مورد LangChain و شاخص‌های برداری، به مستندات Cloud SQL AI overview مراجعه کنید.

۱۱. منابع را پاکسازی کنید

بعد از اتمام کدنویسی، نمونه Cloud SQL را حذف کنید.

در Cloud Shell، اگر جلسه شما قطع شد، متغیرهای پروژه و محیط را تنظیم کنید:

export INSTANCE_NAME=my-cloudsql-instance
export PROJECT_ID=$(gcloud config get-value project)

حذف نمونه:

gcloud sql instances delete $INSTANCE_NAME --project=$PROJECT_ID

خروجی مورد انتظار:

student@cloudshell:~$ gcloud sql instances delete $INSTANCE_NAME --project=$PROJECT_ID
All of the instance data will be lost when the instance is deleted.

Do you want to continue (Y/n)?  y

Deleting Cloud SQL instance...done.                                                                                                                
Deleted [https://sandbox.googleapis.com/v1beta4/projects/test-project-001-402417/instances/my-cloudsql-instance].

۱۲. تبریک

تبریک می‌گویم! شما آزمایشگاه کد را به پایان رساندید.

این آزمایشگاه بخشی از پروژه «هوش مصنوعی آماده تولید با مسیر یادگیری ابری گوگل» است.

خلاصه

شما یاد گرفتید که چگونه:

  • یک Cloud SQL برای نمونه PostgreSQL مستقر کنید
  • یک پایگاه داده ایجاد کنید و ادغام Cloud SQL AI را فعال کنید
  • بارگذاری داده‌ها در پایگاه داده
  • از Cloud SQL Studio استفاده کنید
  • از یک مدل تعبیه‌شده‌ی پلتفرم Gemini Enterprise Agent در Cloud SQL استفاده کنید
  • از استودیوی پلتفرم عامل استفاده کنید
  • غنی‌سازی نتایج پرس‌وجو با استفاده از مدل تولیدی پلتفرم Gemini Enterprise Agent
  • بهبود عملکرد پرس‌وجو با استفاده از یک شاخص برداری

به جای HNSW، کدلبِ تعبیه بردار AI AlloyDB با شاخص ScaNN را امتحان کنید.