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

پیشنیازها
- درک اولیه از گوگل کلود و کنسول گوگل کلود
- تجربه اولیه با رابط خط فرمان و Cloud Shell
کاری که انجام خواهید داد
- یک Cloud SQL برای نمونه PostgreSQL مستقر کنید
- یک پایگاه داده ایجاد کنید و ادغام Cloud SQL AI را فعال کنید
- بارگذاری دادهها در پایگاه داده
- از Cloud SQL Studio استفاده کنید
- ایجاد جاسازیها با استفاده از پلتفرم Gemini Enterprise Agent در Cloud SQL
- از استودیوی پلتفرم عامل استفاده کنید
- غنیسازی نتایج پرسوجو با استفاده از مدل تولیدی پلتفرم Gemini Enterprise Agent
- بهبود عملکرد پرسوجو با استفاده از شاخص برداری HNSW
آنچه نیاز دارید
- یک حساب کاربری گوگل کلود و یک پروژه گوگل کلود
- یک مرورگر وب مانند کروم
۲. تنظیمات و الزامات
راهاندازی پروژه
- وارد کنسول گوگل کلود شوید. اگر از قبل حساب گوگل (جیمیل یا گوگل ورک اسپیس) ندارید، باید یک حساب گوگل ایجاد کنید .
به جای حساب کاری یا تحصیلی از حساب شخصی استفاده کنید.
- یک پروژه جدید ایجاد کنید یا از یک پروژه موجود دوباره استفاده کنید. برای ایجاد یک پروژه جدید در کنسول Google Cloud، روی «انتخاب یک پروژه» در نوار ابزار کلیک کنید.

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

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

- نام پروژه ، نام نمایشی برای شرکتکنندگان این پروژه است. نام پروژه توسط APIهای گوگل استفاده نمیشود و میتوان آن را در هر زمانی تغییر داد.
- شناسه پروژه در تمام پروژههای گوگل کلود منحصر به فرد و غیرقابل تغییر است (پس از تنظیم، قابل تغییر نیست). کنسول گوگل کلود به طور خودکار یک شناسه منحصر به فرد تولید میکند، اما میتوانید آن را سفارشی کنید. اگر شناسه تولید شده را دوست ندارید، میتوانید یک شناسه تصادفی دیگر ایجاد کنید یا شناسه خودتان را برای بررسی در دسترس بودن آن ارائه دهید. در اکثر آزمایشگاههای کد، شما به شناسه پروژه خود ارجاع میدهید که معمولاً با
جانگهدار - مقدار سوم، شماره پروژه ، توسط برخی از APIها استفاده میشود. برای کسب اطلاعات بیشتر در مورد هر سه این مقادیر، به مستندات ایجاد و مدیریت پروژهها مراجعه کنید.
فعال کردن صورتحساب
یک حساب پرداخت شخصی تنظیم کنید
اگر صورتحساب را با استفاده از اعتبارهای Google Cloud تنظیم کردهاید، میتوانید از این مرحله صرف نظر کنید.
برای تنظیم یک حساب پرداخت شخصی، پرداخت را در کنسول پرداخت ابری گوگل (Google Cloud Billing Console) فعال کنید.
یادداشتها:
- تکمیل این آزمایشگاه کمتر از ۵ دلار آمریکا از منابع ابری گوگل هزینه دارد.
- برای حذف منابع و جلوگیری از هزینههای بیشتر، مراحل انتهای این آزمایش را دنبال کنید.
- کاربران جدید واجد شرایط استفاده از دوره آزمایشی رایگان ۳۰۰ دلاری هستند.
شروع پوسته ابری
اگرچه میتوانید از راه دور و از طریق رایانه خود، گوگل کلود را مدیریت کنید، اما در این آزمایشگاه کد، از گوگل کلود شل ، یک محیط خط فرمان که در فضای ابری اجرا میشود، استفاده میکنید.
در نوار ابزار کنسول گوگل کلود ، روی فعال کردن پوسته کلود کلیک کنید:

روش دیگر این است که در کنسول Google Cloud، ابتدا g و سپس s را فشار دهید، یا 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
- در کنسول گوگل کلود، به Cloud SQL instances بروید و روی
my-cloudsql-instanceکلیک کنید.

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

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

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

اجرای کوئری
یک پرسوجو اجرا کنید تا 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 خود اجرا کنید):

این پرس و جو محصولات منطبق را که بر اساس فاصله کسینوسی مرتب شدهاند، برمیگرداند:
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، پاسخ هوش مصنوعی مولد به یک برنامه کلاینت را بهبود بخشید.
برای انجام این کار:
- یک فایل JSON از نتیجه جستجوی برداری در Cloud SQL ایجاد کنید.
- اعلان را در Agent Platform Studio آزمایش کنید.
- با استفاده از ادغام
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 ارائه دهید.
- در کنسول گوگل کلود، 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.

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

پاسخ شامل قیمت، توضیحات و اطلاعات تکمیلی است که مدل از منابع خارجی بر اساس اطلاعات مربوط به درخت و مکان دریافت میکند.
اجرای اعلان در psql
همچنین میتوانید از ادغام هوش مصنوعی Cloud SQL با پلتفرم Gemini Enterprise Agent برای دریافت پاسخها از یک مدل مولد مستقیماً در SQL استفاده کنید. ابتدا، مدل را ثبت کنید.
- در صورت لزوم، افزونه را به نسخه ۱.۴.۳ یا بالاتر ارتقا دهید. به
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';
- پرچم پایگاه داده
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;
- مدل
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';
- برای بازیابی نتایج جستجوی برداری و ارسال مستقیم آنها به
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].
۱۲. تبریک
تبریک میگویم! شما آزمایشگاه کد را به پایان رساندید.
این آزمایشگاه بخشی از پروژه «هوش مصنوعی آماده تولید با مسیر یادگیری ابری گوگل» است.
- برای پر کردن شکاف بین نمونه اولیه و تولید، برنامه درسی کامل را بررسی کنید .
- پیشرفت خود را با هشتگ
#ProductionReadyAIبه اشتراک بگذارید.
خلاصه
شما یاد گرفتید که چگونه:
- یک Cloud SQL برای نمونه PostgreSQL مستقر کنید
- یک پایگاه داده ایجاد کنید و ادغام Cloud SQL AI را فعال کنید
- بارگذاری دادهها در پایگاه داده
- از Cloud SQL Studio استفاده کنید
- از یک مدل تعبیهشدهی پلتفرم Gemini Enterprise Agent در Cloud SQL استفاده کنید
- از استودیوی پلتفرم عامل استفاده کنید
- غنیسازی نتایج پرسوجو با استفاده از مدل تولیدی پلتفرم Gemini Enterprise Agent
- بهبود عملکرد پرسوجو با استفاده از یک شاخص برداری
به جای HNSW، کدلبِ تعبیه بردار AI AlloyDB با شاخص ScaNN را امتحان کنید.