1. Giriş
Bu codelab'de, yerleştirmeleri kullanarak anlamsal arama için MySQL İçin Cloud SQL yapay zeka entegrasyonunu nasıl kullanacağınızı ve vektör verilerinde dizin kullanarak performansı nasıl artıracağınızı öğreneceksiniz.

Ön koşullar
- Google Cloud ve Google Cloud Console hakkında temel düzeyde bilgi sahibi olmak
- Komut satırı arayüzü ve Cloud Shell ile ilgili temel deneyim
Neler öğreneceksiniz?
- MySQL için Cloud SQL örneği dağıtma
- Veritabanı oluşturma ve Cloud SQL yapay zeka entegrasyonunu etkinleştirme
- Veritabanına veri yükleme
- Cloud SQL Studio'yu kullanma
- Cloud SQL'de Vertex AI yerleştirme modelini kullanma
- Agent Platform Studio'yu kullanma
- Gemini Enterprise Agent Platform modelini kullanarak sonucu zenginleştirme
- Vektör dizini kullanarak performansı artırma
Gerekenler
- Google Cloud Hesabı ve Google Cloud Projesi
- Chrome gibi bir web tarayıcısı
2. Kurulum ve Gereksinimler
Proje Kurulumu
- Google Cloud Console'da oturum açın. Gmail veya Google Workspace hesabınız yoksa Google Hesabı oluşturmanız gerekir.
İş veya okul hesabı yerine kişisel hesap kullanın.
- Yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. Google Cloud Console'da yeni bir proje oluşturmak için araç çubuğunda Proje seç'i tıklayın.

Proje seçin penceresinde Yeni Proje düğmesini tıklayın. Bu işlem, yeni proje için bir iletişim kutusu açar.

İletişim kutusunda bir Proje adı girin ve Konum'u seçin.

- Proje adı, bu projenin katılımcıları için görünen addır. Proje adı, Google API'leri tarafından kullanılmaz ve istendiğinde değiştirilebilir.
- Proje kimliği, tüm Google Cloud projelerinde benzersizdir ve sabittir (ayarlandıktan sonra değiştirilemez). Google Cloud Console, otomatik olarak benzersiz bir kimlik oluşturur ancak bu kimliği özelleştirebilirsiniz. Oluşturulan kimliği beğenmediyseniz başka bir rastgele kimlik oluşturabilir veya kullanılabilirliğini kontrol etmek için kendi kimliğinizi girebilirsiniz. Çoğu codelab'de, genellikle
yer tutucusuyla tanımlanan proje kimliğinize referans verirsiniz. - Bazı API'lerin kullandığı üçüncü bir değer olan Proje Numarası da vardır. Bu üç değer hakkında daha fazla bilgiyi Proje oluşturma ve yönetme belgelerinde bulabilirsiniz.
Faturalandırmayı etkinleştirme
Faturalandırmayı etkinleştirmek için iki seçeneğiniz vardır. Kişisel faturalandırma hesabınızı kullanabilir veya aşağıdaki adımları uygulayarak kredileri kullanabilirsiniz.
Google Cloud kredilerini kullanma (isteğe bağlı)
Bu atölyeyi düzenlemek için kredili bir faturalandırma hesabınızın olması gerekir. Başlamak için atölye düzenleyicileri tarafından sağlanan kredileri veya bu codelab'in üst kısmındaki banner'da sağlanan kredileri kullanın. Zaten bir faturalandırma hesabına bağlıysanız bu adımı atlayabilirsiniz.
Kişisel faturalandırma hesabı oluşturma
Faturalandırmayı Google Cloud kredilerini kullanarak ayarladıysanız bu adımı atlayabilirsiniz.
Kişisel faturalandırma hesabı oluşturmak için Google Cloud Billing konsolu'nda faturalandırmayı etkinleştirin.
Notlar:
- Bu laboratuvarı tamamlamak için 5 ABD dolarından daha az tutarda Google Cloud kaynağı gerekir.
- Kaynakları silmek ve daha fazla ücret ödememek için bu laboratuvarın sonundaki adımları uygulayın.
- Yeni kullanıcılar 300 ABD doları değerinde ücretsiz deneme sürümünden yararlanabilir.
- Yeni ve mevcut kullanıcılar, Cloud SQL ücretsiz deneme örneğini kullanarak Cloud SQL'i kullanmaya başlayabilir.
Cloud Shell'i başlatma
Google Cloud'u bilgisayarınızdan uzaktan çalıştırabilirsiniz ancak bu codelab'de bulutta çalışan bir komut satırı ortamı olan Google Cloud Shell'i kullanacaksınız.
Google Cloud Console'da, sağ üstteki araç çubuğunda Cloud Shell simgesini tıklayın:

Alternatif olarak, Google Cloud Console'da g ve ardından s tuşuna basın veya Cloud Shell'i açın.
Birkaç saniye içinde ortam sağlanır ve bağlantı kurulur. İşlem tamamlandığında bağlı terminali görürsünüz:

Bu sanal makine, ihtiyaç duyduğunuz tüm geliştirme araçlarını içerir. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud üzerinde çalışır. Bu sayede ağ performansı ve kimlik doğrulama önemli ölçüde güçlenir. Bu codelab'deki tüm çalışmalarınızı tarayıcıda yapabilirsiniz.
3. Başlamadan önce
API'yi etkinleştirme
Cloud SQL, Compute Engine, Service Networking ve Gemini Enterprise Agent Platform'u kullanmak için Google Cloud projenizde ilgili API'leri etkinleştirin.
Cloud Shell terminalinde proje kimliğinizin ayarlandığından emin olun:
gcloud config get project
Boş bir dize döndürürse aşağıdaki komutla ayarlayın:
gcloud config set project [YOUR-PROJECT-ID]
PROJECT_ID ortam değişkenini ayarlayın:
PROJECT_ID=$(gcloud config get-value project)
Gerekli tüm API'leri etkinleştirin:
gcloud services enable sqladmin.googleapis.com \
compute.googleapis.com \
cloudresourcemanager.googleapis.com \
servicenetworking.googleapis.com \
aiplatform.googleapis.com
Beklenen çıktı
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.
Etkinleştirilen her API hakkında bilgiyi dokümanlarda bulabilirsiniz.
4. Cloud SQL örneği oluşturma
Gemini Enterprise Agent Platform veritabanı entegrasyonu ile Cloud SQL örneği oluşturun.
Veritabanı şifresi oluşturma
Varsayılan veritabanı kullanıcısı için bir şifre tanımlayın. Kendi şifrenizi tanımlayabilir veya rastgele bir şifre oluşturmak için rastgele işlevini kullanabilirsiniz:
export CLOUDSQL_PASSWORD=`openssl rand -hex 16`
Oluşturulan şifre değerini görüntüleyin:
echo $CLOUDSQL_PASSWORD
Daha sonra kullanmak üzere oluşturulan şifreyi not edin.
MySQL için Cloud SQL örneği oluşturma
Cloud SQL örnekleri, Google Cloud Console, Terraform veya Google Cloud KSA (gcloud) gibi çeşitli yöntemler kullanılarak oluşturulabilir. Bu codelab'de gcloud'yı kullanacaksınız. Diğer araçlarla örnek oluşturmayı öğrenmek için Örnek oluşturma dokümanına bakın.
cloudsql_vector işareti, örnek oluşturulurken etkinleştirilebilir. Vektör desteği, MySQL 8.0 R20241208.01_00 veya daha yeni sürümlerde kullanılabilir.
Cloud Shell oturumunda şunu çalıştırın:
gcloud sql instances create my-cloudsql-instance \
--database-version=MYSQL_8_4 \
--tier=db-custom-2-8192 \
--region=us-central1 \
--enable-google-ml-integration \
--edition=ENTERPRISE \
--root-password=$CLOUDSQL_PASSWORD
gcloud sql connect kullanarak örneğe bağlanın. İstendiğinde şifreyi girin:
gcloud sql connect my-cloudsql-instance --user=root
Beklenen çıktı:
$gcloud sql connect my-cloudsql-instance --user=root Allowlisting your IP for incoming connection for 5 minutes...done. Connecting to database with SQL user [root].Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 71 Server version: 8.4.4-google (Google) Copyright (c) 2000, 2025, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
Ctrl+D tuşlarına basarak veya exit girerek mysql oturumundan çıkın:
exit
Gemini Enterprise Agent Platform entegrasyonunu etkinleştirme
Gemini Enterprise Agent Platform entegrasyonunu etkinleştirmek için Cloud SQL hizmet hesabına gerekli IAM rolünü atayın.
Cloud SQL hizmet hesabı e-posta adresini alın ve ortam değişkeni olarak dışa aktarın:
SERVICE_ACCOUNT_EMAIL=$(gcloud sql instances describe my-cloudsql-instance --format="value(serviceAccountEmailAddress)")
echo $SERVICE_ACCOUNT_EMAIL
Cloud SQL hizmet hesabına roles/aiplatform.user rolünü verin:
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$SERVICE_ACCOUNT_EMAIL" \
--role="roles/aiplatform.user"
Örnek oluşturma ve yapılandırma hakkında daha fazla bilgiyi Cloud SQL belgelerinde burada bulabilirsiniz.
5. Veritabanını hazırlama
Veritabanı oluşturun ve vektör desteğini etkinleştirin.
Veritabanı oluşturma
quickstart_db adlı bir veritabanı oluşturun. Veritabanı istemcilerini (ör. mysql), Google Cloud CLI'yı veya Cloud SQL Studio'yu kullanarak veritabanları oluşturabilirsiniz. Bu adımda gcloud simgesini kullanın.
Veritabanını oluşturmak için Cloud Shell'de aşağıdaki komutu çalıştırın:
gcloud sql databases create quickstart_db --instance=my-cloudsql-instance
6. Verileri Yükle
Veritabanında tablolar oluşturun ve CSV biçiminde herkese açık bir Cloud Storage paketinde depolanan kurgusal Cymbal Store veri kümesi dosyalarını kullanarak verileri yükleyin.
Cloud Shell, bir veritabanına bağlanmak, tüm nesneleri oluşturmak ve verileri yüklemek için kullanacağınız ana ortamınız olacaktır.
Cloud Shell genel IP'nizi Cloud SQL örneğimizin yetkilendirilmiş ağlar listesine ekleyin.
Cloud Shell'de şunu çalıştırın:
gcloud sql instances patch my-cloudsql-instance --authorized-networks=$(curl ifconfig.me)
Oturumunuz kaybolursa, sıfırlanırsa veya başka bir araçtan çalışırsanız CLOUDSQL_PASSWORD değişkeninizi tekrar dışa aktarın:
export CLOUDSQL_PASSWORD=...your password defined for the instance...
Gerekli veritabanı nesnelerini oluşturun. Herkese açık kaynaktaki şemayı indirip uygulamak için mysql ile birlikte curl komutunu kullanın.
Cloud Shell'de şunu çalıştırın:
export INSTANCE_IP=$(gcloud sql instances describe my-cloudsql-instance --format="value(ipAddresses.ipAddress)")
curl -LJ https://raw.githubusercontent.com/GoogleCloudPlatform/devrel-demos/main/infrastructure/cymbal-store-embeddings/cymbal_mysql_schema.sql | mysql --host=$INSTANCE_IP --user=root --password=$CLOUDSQL_PASSWORD quickstart_db
Komut dökümü. Önceki adımda veritabanınıza bağlanmış ve tablolar, dizinler ve diziler oluşturmak için SQL komut dosyasını çalıştırmıştınız.
Ardından, cymbal_products ve mysql komutlarını çalıştırarak veritabanını curl verileriyle doldurun:
curl -LJ https://raw.githubusercontent.com/GoogleCloudPlatform/devrel-demos/main/infrastructure/cymbal-store-embeddings/cymbal_products.csv | mysql --enable-local-infile --host=$INSTANCE_IP --user=root --password=$CLOUDSQL_PASSWORD quickstart_db -e "LOAD DATA LOCAL INFILE '/dev/stdin' INTO TABLE cymbal_products FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\n' IGNORE 1 LINES;"
cymbal_stores ile devam edin.
curl -LJ https://raw.githubusercontent.com/GoogleCloudPlatform/devrel-demos/main/infrastructure/cymbal-store-embeddings/cymbal_stores.csv | mysql --enable-local-infile --host=$INSTANCE_IP --user=root --password=$CLOUDSQL_PASSWORD quickstart_db -e "LOAD DATA LOCAL INFILE '/dev/stdin' INTO TABLE cymbal_stores FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\n' IGNORE 1 LINES;"
Ayrıca, her mağazadaki her ürünün sayısını içeren cymbal_inventory ile tamamlayın.
curl -LJ https://raw.githubusercontent.com/GoogleCloudPlatform/devrel-demos/main/infrastructure/cymbal-store-embeddings/cymbal_inventory.csv | mysql --enable-local-infile --host=$INSTANCE_IP --user=root --password=$CLOUDSQL_PASSWORD quickstart_db -e "LOAD DATA LOCAL INFILE '/dev/stdin' INTO TABLE cymbal_inventory FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\n' IGNORE 1 LINES;"
İsteğe bağlı: Kendi örnek veri kümeniz varsa bunun yerine Google Cloud Console'daki içe aktarma aracını kullanarak uyumlu CSV dosyalarını içe aktarabilirsiniz.
7. Yerleştirilmiş Öğeler Oluşturma
Gemini Enterprise Agent Platform'daki text-embedding-005 modelini kullanarak ürün açıklamaları için yerleştirmeler oluşturun ve bunları vektör verileri olarak saklayın.
Vektör verilerini depolamak için Cloud SQL örneğinizde vektör işlevini etkinleştirmeniz gerekir.
Cloud Shell'de çalıştırın:
gcloud sql instances patch my-cloudsql-instance \
--database-flags=cloudsql_vector=on
Veritabanına bağlanın:
mysql --host=$INSTANCE_IP --user=root --password=$CLOUDSQL_PASSWORD quickstart_db
Yerleştirme işlevini kullanarak cymbal_products tablosunda yeni bir sütun embedding oluşturun. Bu yeni sütunda, product_description sütunundaki metne dayalı vektör yerleştirmeleri yer alır:
ALTER TABLE cymbal_products ADD COLUMN embedding vector(768) using varbinary;
UPDATE cymbal_products SET embedding = mysql.ml_embedding('text-embedding-005', product_description);
Not: 2.000 satır için yerleştirme oluşturma işlemi genellikle 5 dakikadan kısa sürer.
MySQL oturumundan çıkın:
exit
8. Benzerlik Arama'yı çalıştırma
Ürün açıklamaları için hesaplanan vektör yerleştirmelerini bir arama sorgusunun yerleştirmesiyle karşılaştırarak benzerlik araması yapın.
SQL sorgularını komut satırından veya Cloud SQL Studio'dan çalıştırabilirsiniz. Cloud SQL Studio, çıkışta birden fazla satır içeren uzun SQL ifadelerini düzenlemek ve yürütmek için daha uygun bir yol sunar.
Cloud SQL Studio için MySQL kullanıcısı oluşturma
Cloud SQL Studio'da kullanılabilecek yeni bir veritabanı kullanıcısına ihtiyacınız var. Kök kullanıcı için kullandığınız şifreyle student yerleşik türde bir kullanıcı oluşturun.
Cloud Shell'de şunu çalıştırın:
gcloud sql users create student --instance=my-cloudsql-instance --password=$CLOUDSQL_PASSWORD --host=%
Cloud SQL Studio'yu başlatma
- Google Cloud Console'da Cloud SQL örnekleri'ne gidin ve
my-cloudsql-instancesimgesini tıklayın.

- Gezinme menüsünde Cloud SQL Studio'yu tıklayın.

- Kimlik doğrulama iletişim kutusunda veritabanı adını ve kimlik bilgilerini girin:
- Veritabanı:
quickstart_db - Kullanıcı:
student - Şifre:
- Veritabanı:
- Kimlik doğrula'yı tıklayın.

- SQL düzenleyiciyi açmak için Untitled query (Adsız sorgu) sekmesini tıklayın.

Sorgu Çalıştır
Müşteri sorgusuyla en alakalı ilk 5 ürünü almak için bir sorgu çalıştırın: "Burada hangi meyve ağaçları iyi yetişir?"
KNN (tam) vektör araması için cosine_distance ile sorgu çalıştırma
cosine_distance işlevini kullanarak isteğimize en uygun ilk 5 öğeyi seçmek için çalıştırabileceğiniz sorgu aşağıda verilmiştir:
SELECT mysql.ML_EMBEDDING('text-embedding-005','What kind of fruit trees grow well here?') into @query_vector;
SELECT
cp.product_name,
left(cp.product_description,80) as description,
cp.sale_price,
cs.zip_code,
cosine_distance(cp.embedding ,@query_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 5;
Cloud SQL Studio'da sorguyu girip Run'ı (Çalıştır) tıklayın (veya sorguyu sql oturumunuzda çalıştırın):

Sorgu, kosinüs uzaklığına göre sıralanmış eşleşen ürünleri döndürür:
+-----------------+----------------------------------------------------------------------------------+------------+----------+---------------------+ | product_name | description | sale_price | zip_code | distance | +-----------------+----------------------------------------------------------------------------------+------------+----------+---------------------+ | Malus Domestica | Malus Domestica, the classic apple tree, brings beauty and delicious fruit to yo | 100.00 | 93230 | 0.37740096545831603 | | Cerasus | Cerasus: A beautiful cherry tree that brings delicious fruit and vibrant color t | 75.00 | 93230 | 0.405704177142419 | | Persica | Persica: Enjoy homegrown, delicious peaches with this beautiful peach tree. Reac | 150.00 | 93230 | 0.41031799106722877 | | Meyer Lemon | Grow your own juicy Meyer Lemons with this semi-dwarf tree, California's favorit | 34.00 | 93230 | 0.42823360959352186 | | Acer | Acer, the classic maple. Known for vibrant fall foliage in reds, oranges, and ye | 100.00 | 93230 | 0.42953897057301615 | +-----------------+----------------------------------------------------------------------------------+------------+----------+---------------------+ 5 rows in set (0.13 sec)
Sorgu yürütme süresi, cosine_distance işleviyle yaklaşık 0,13 saniyedir.
KNN (tam) vektör araması için approx_distance ile sorgu çalıştırma
approx_distance işlevini kullanarak KNN aramasıyla aynı sorguyu çalıştırın. Yerleştirmeleriniz için ANN dizininiz yoksa arka planda otomatik olarak tam arama kullanılır:
SELECT mysql.ML_EMBEDDING('text-embedding-005','What kind of fruit trees grow well here?') into @query_vector;
SELECT
cp.product_name,
left(cp.product_description,80) as description,
cp.sale_price,
cs.zip_code,
approx_distance(cp.embedding ,@query_vector, 'distance_measure=cosine') 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 5;
Aşağıda, sorgu tarafından döndürülen ürünlerin listesini bulabilirsiniz.
+-----------------+----------------------------------------------------------------------------------+------------+----------+---------------------+ | product_name | description | sale_price | zip_code | distance | +-----------------+----------------------------------------------------------------------------------+------------+----------+---------------------+ | Malus Domestica | Malus Domestica, the classic apple tree, brings beauty and delicious fruit to yo | 100.00 | 93230 | 0.37740096545831603 | | Cerasus | Cerasus: A beautiful cherry tree that brings delicious fruit and vibrant color t | 75.00 | 93230 | 0.405704177142419 | | Persica | Persica: Enjoy homegrown, delicious peaches with this beautiful peach tree. Reac | 150.00 | 93230 | 0.41031799106722877 | | Meyer Lemon | Grow your own juicy Meyer Lemons with this semi-dwarf tree, California's favorit | 34.00 | 93230 | 0.42823360959352186 | | Acer | Acer, the classic maple. Known for vibrant fall foliage in reds, oranges, and ye | 100.00 | 93230 | 0.42953897057301615 | +-----------------+----------------------------------------------------------------------------------+------------+----------+---------------------+ 5 rows in set, 1 warning (0.12 sec)
Sorgu yürütme işlemi yalnızca 0,12 saniye sürdü. KNN exact cosine_distance işleviyle aynı sonuçları aldık.
İşlev hakkında daha fazla bilgiyi MySQL İçin Cloud SQL belgelerinde bulabilirsiniz.
9. Alınan verileri kullanarak LLM yanıtını iyileştirme
Bir istemde sorgu sonuçlarını Gemini Enterprise Agent Platform temel dil modeline dayalı bağlam olarak ileterek istemci uygulamasına verilen üretken yapay zeka yanıtını iyileştirin.
Bunu yapabilmek için:
- Cloud SQL'deki vektör arama sonucundan bir JSON yükü oluşturun.
- İstemi Agent Platform Studio'da test edin.
google_mlentegrasyonunu kullanarak uçtan uca istemi doğrudan SQL'den yürütün.
JSON biçiminde çıkış oluşturma
Sonucu JSON olarak biçimlendirmek ve tek bir satır döndürmek için sorguyu değiştirin:
SELECT mysql.ML_EMBEDDING('text-embedding-005','What kind of fruit trees grow well here?') into @query_vector;
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
(approx_distance(cp.embedding ,@query_vector, 'distance_measure=cosine')) ASC
LIMIT 1)
SELECT json_arrayagg(json_object('product_name',product_name,'description',description,'sale_price',sale_price,'zip_code',zip_code,'product_id',product_id)) FROM trees;
Beklenen JSON çıkışı:
[{"zip_code": 93230, "product_id": "23e41a71d63d8bbc9bdfa1d118cfddc5", "sale_price": 100.00, "description": "Malus Domestica, the classic apple tree, brings beauty and delicious fruit to yo", "product_name": "Malus Domestica"}]
İstemi Agent Platform Studio'da çalıştırma
Oluşturulan JSON'u Agent Platform Studio'daki bir üretken modelin isteminde bağlam olarak sağlayın.
- Google Cloud Console'da Agent Platform Studio'yu açın.

- Agent Platform Studio'ya aşağıdaki istemi girin:

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, "produt_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.
yerine sorgunuzdan gelen JSON yanıtını girin:
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, "produt_id": "02056727942aeb714dc9a2313654e1b0"}
Here is the list of products:
{"zip_code": 93230, "product_id": "23e41a71d63d8bbc9bdfa1d118cfddc5", "sale_price": 100.00, "description": "Malus Domestica, the classic apple tree, brings beauty and delicious fruit to yo", "product_name": "Malus Domestica"}
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.

- İstemi çalıştırın.

Yanıtta, ağaç ve konumla ilgili bilgilere dayalı olarak modelin harici kaynaklardan aldığı fiyat, açıklama ve ek bilgiler yer alır.
İstemi SQL'de çalıştırma
Ayrıca, üretken modelden doğrudan SQL içinde yanıt almak için Gemini Enterprise Agent Platform ile Cloud SQL yapay zeka entegrasyonunu da kullanabilirsiniz.
Öncelikle modeli kaydedin.
- Yanıt oluşturmak için
gemini-3.5-flashmodelini kaydedin (yerine proje kimliğinizi yazın):
CALL
mysql.ml_create_model_registration(
'gemini-3.5-flash',
'https://aiplatform.googleapis.com/v1/projects/<PROJECT_ID>/locations/global/publishers/google/models/gemini-3.5-flash:generateContent',
'google',
'GENERIC',
NULL,
'auth_type_cloudsql_service_agent_iam',
NULL, NULL, NULL, NULL);
Ayrıca, doğrudan veritabanında SQL kullanarak üretken bir modelden benzer yanıt almak için Cloud SQL'in Gemini Enterprise Agent Platform ile yapay zeka entegrasyonunu da kullanabiliriz.
Artık SQL kullanarak üretken yapay zeka metin modeline istemin bir parçası olarak sağlamak için JSON sonuçlarıyla birlikte bir alt sorguda oluşturulanı kullanabiliriz.
Veritabanına yönelik mysql veya Cloud SQL Studio oturumunda sorguyu çalıştırın.
SELECT mysql.ML_EMBEDDING('text-embedding-005','What kind of fruit trees grow well here?') into @query_vector;
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
(approx_distance(cp.embedding ,@query_vector, 'distance_measure=cosine')) ASC
LIMIT 1),
prompt AS (
SELECT
CONCAT( '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_arrayagg(json_object('product_name',trees.product_name,'description',trees.description,'sale_price',trees.sale_price,'zip_code',trees.zip_code,'product_id',trees.product_id)) , '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
mysql.ML_PREDICT_ROW('gemini-3.5-flash',
json_object('contents',
json_object('role',
'user',
'parts',
json_array(
json_object('text',
prompt_text))))) AS resp
FROM
prompt)
SELECT
JSON_EXTRACT(resp, '$.candidates[0].content.parts[0].text')
FROM
response;
Örnek çıkış aşağıda verilmiştir. Çıkışınız, model sürümüne ve parametrelere bağlı olarak farklı olabilir:
"Hello there! I'd be happy to help you find the perfect fruit tree for your space. \n\nBased on your area, a wonderful option we currently have in stock is the **Malus Domestica** (the classic Apple Tree)!\n\nHere are the key details:\n\n* **Product Name:** Malus Domestica (Classic Apple Tree)\n* **Price:** $100.00\n\n### Why it's a great choice:\n* **Beautiful Seasonal Foliage:** It features vibrant green leaves during the summer that turn into gorgeous shades of red, orange, and yellow in the autumn. \n* **Shade & Size:** It grows to approximately 30 feet tall, making it a strong, durable tree that offers excellent shade for your yard alongside delicious fresh fruit.\n* **Growing Conditions:** It thrives best in cool, moist climates with well-draining, loamy soil and is ideal for USDA Hardiness Zones 4–8.\n\n### Supplemental Care Tips:\n* **Planting Location:** Choose a spot that gets full sunlight (at least 6 hours a day) to ensure maximum fruit production.\n* **Soil:** Make sure the soil is rich and loamy with good drainage so the roots stay healthy.\n* **Cross-Pollination:** Apple trees often produce a higher yield when planted near another compatible apple tree variety, so if you have extra space, adding a companion tree in the future can boost your harvest!\n\nLet me know if you have any questions about planting or care, or if you'd like help adding this to your cart!"
Çıkış, Markdown biçiminde sağlanır.
10. En yakın komşu dizini oluşturma
Milyonlarca vektör içeren büyük veri kümelerinde vektör araması önemli işlem kaynakları gerektirebilir. Sorgu performansını artırmak için vektör yerleştirmelerinde bir dizin oluşturun.
ScaNN dizini oluşturma
Testimizde ScaNN dizin türünü deneyeceğiz.
Yerleştirme sütununun dizinini oluşturmak için yerleştirme sütununda mesafe ölçümümüzü tanımlamanız gerekir. Parametreler hakkında ayrıntılı bilgiyi dokümanlarda bulabilirsiniz.
CREATE VECTOR INDEX cymbal_products_embedding_idx ON cymbal_products(embedding) USING SCANN DISTANCE_MEASURE=COSINE;
Yanıtı Karşılaştır
Vektör arama sorgusunu tekrar çalıştırın ve sonuçları inceleyin:
SELECT mysql.ML_EMBEDDING('text-embedding-005','What kind of fruit trees grow well here?') into @query_vector;
SELECT
cp.product_name,
left(cp.product_description,80) as description,
cp.sale_price,
cs.zip_code,
approx_distance(cp.embedding ,@query_vector, 'distance_measure=cosine') 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 5;
Beklenen çıktı:
+-----------------+----------------------------------------------------------------------------------+------------+----------+---------------------+ | product_name | description | sale_price | zip_code | distance | +-----------------+----------------------------------------------------------------------------------+------------+----------+---------------------+ | Malus Domestica | Malus Domestica, the classic apple tree, brings beauty and delicious fruit to yo | 100.00 | 93230 | 0.37740096545831603 | | Cerasus | Cerasus: A beautiful cherry tree that brings delicious fruit and vibrant color t | 75.00 | 93230 | 0.405704177142419 | | Persica | Persica: Enjoy homegrown, delicious peaches with this beautiful peach tree. Reac | 150.00 | 93230 | 0.41031799106722877 | | Meyer Lemon | Grow your own juicy Meyer Lemons with this semi-dwarf tree, California's favorit | 34.00 | 93230 | 0.42823360959352186 | | Acer | Acer, the classic maple. Known for vibrant fall foliage in reds, oranges, and ye | 100.00 | 93230 | 0.42953897057301615 | +-----------------+----------------------------------------------------------------------------------+------------+----------+---------------------+ 5 rows in set (0.08 sec)
Performanstaki iyileşmeler yalnızca biraz farklıdır ancak bu kadar küçük bir veri kümesi için bu durum beklenir. Bu durum, milyonlarca vektör içeren büyük veri kümelerinde çok daha belirgin olur.
EXPLAIN komutunu kullanarak yürütme planını kontrol edin:
SELECT mysql.ML_EMBEDDING('text-embedding-005','What kind of fruit trees grow well here?') into @query_vector;
EXPLAIN ANALYZE SELECT
cp.product_name,
left(cp.product_description,80) as description,
cp.sale_price,
cs.zip_code,
approx_distance(cp.embedding ,@query_vector, 'distance_measure=cosine') 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 5;
Yürütme planı (alıntı):
...
-> Nested loop inner join (cost=443 rows=5) (actual time=1.14..1.18 rows=5 loops=1)
-> Vector index scan on cp (cost=441 rows=5) (actual time=1.1..1.1 rows=5 loops=1)
-> Single-row index lookup on cp using PRIMARY (uniq_id=cp.uniq_id) (cost=0.25 rows=1) (actual time=0.0152..0.0152 rows=1 loops=5)
...
cp tablosunda(cymbal_products tablosunun diğer adı) vektör dizini taraması gösterilir.
Semantik aramanın MySQL'de nasıl çalıştığını görmek için kendi verilerinizle deneyin veya farklı arama sorgularını test edin.
11. Ortamı temizleme
Cloud SQL örneğini silme
Laboratuvarı tamamladığınızda Cloud SQL örneğini kaldırın.
Bağlantınız kesildiyse ve önceki tüm ayarlar kaybolduysa Cloud Shell'de proje ve ortam değişkenlerini tanımlayın:
export INSTANCE_NAME=my-cloudsql-instance
export PROJECT_ID=$(gcloud config get-value project)
Örneği silin:
gcloud sql instances delete $INSTANCE_NAME --project=$PROJECT_ID
Beklenen konsol çıkışı:
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].
12. Tebrikler
Codelab'i tamamladığınız için tebrik ederiz.
Google Cloud öğrenme rotası
Bu laboratuvar, Google Cloud ile Üretime Hazır Yapay Zeka öğrenme rotasının bir parçasıdır.
- Prototip aşamasından üretim aşamasına geçiş yapmak için tüm müfredatı inceleyin.
- İlerleme durumunuzu
#ProductionReadyAIhashtag'iyle paylaşın.
Kapsam dahilinde olanlar
- MySQL için Cloud SQL örneği dağıtma
- Veritabanı oluşturma ve Cloud SQL yapay zeka entegrasyonunu etkinleştirme
- Veritabanına veri yükleme
- Cloud SQL Studio'yu kullanma
- Cloud SQL'de Vertex AI yerleştirme modelini kullanma
- Agent Platform Studio'yu kullanma
- Gemini Enterprise Agent Platform modelini kullanarak sonucu zenginleştirme
- Vektör dizini kullanarak performansı artırma
AlloyDB için benzer bir codelab veya Postgres için Cloud SQL codelab'i deneyin.
Anket
Çıkış: