Membangun aplikasi rekomendasi pakaian yang didukung AI dengan AlloyDB dan runtime serverless

1. Ringkasan

Bayangkan aplikasi mode yang tidak hanya membantu Anda menemukan pakaian yang sempurna, tetapi juga memberikan saran gaya real-time, semuanya berkat kecanggihan integrasi genAI! Dalam diskusi ini, kita akan mempelajari cara kami membangun aplikasi tersebut menggunakan kemampuan penelusuran vektor AlloyDB, yang dipadukan dengan indeks ScaNN Google, sehingga memungkinkan penelusuran yang sangat cepat untuk mencocokkan pakaian dan memberikan rekomendasi mode instan.

Kita juga akan mempelajari cara indeks ScaNN AlloyDB mengoptimalkan kueri kompleks untuk menghasilkan saran gaya yang dipersonalisasi. Kami juga akan menggunakan Gemini & Imagen, model AI generatif yang canggih, untuk memberikan inspirasi gaya kreatif dan bahkan memvisualisasikan tampilan yang dipersonalisasi untuk Anda. Seluruh aplikasi ini dibangun di atas arsitektur serverless, sehingga memastikan pengalaman yang lancar dan dapat diskalakan bagi pengguna.

Tantangan: Dengan menawarkan saran pakaian yang dipersonalisasi, aplikasi ini bertujuan untuk membantu orang-orang yang kesulitan menentukan pilihan pakaian. Hal ini juga membantu menghindari kelelahan pengambilan keputusan dari perencanaan pakaian.

Solusi: Aplikasi pemberi rekomendasi pakaian ini memecahkan masalah dalam memberikan pengalaman mode yang cerdas, dipersonalisasi, dan menarik bagi pengguna sekaligus menampilkan kemampuan AlloyDB, AI generatif, dan teknologi serverless.

Yang akan Anda build

Sebagai bagian dari lab ini, Anda akan:

  1. Membuat instance AlloyDB dan memuat Set Data E-commerce
  2. Mengaktifkan ekstensi model AI generatif dan pgvector di AlloyDB
  3. Membuat embedding dari deskripsi produk
  4. Men-deploy solusi di Cloud Run Functions serverless
  5. Mengupload gambar ke Gemini dan membuat perintah deskripsi gambar.
  6. Menghasilkan hasil penelusuran berdasarkan perintah yang dipadukan dengan embedding set data e-commerce.
  7. Tambahkan perintah lain untuk menyesuaikan perintah dan membuat rekomendasi gaya.
  8. Men-deploy solusi di Cloud Run Functions serverless

Persyaratan

  • Browser, seperti Chrome atau Firefox
  • Project Google Cloud yang mengaktifkan penagihan.

2. Arsitektur

Arsitektur tingkat tinggi aplikasi adalah sebagai berikut:

ce32f865dfe59142.png

Bagian berikut menyoroti alur kontekstual tutorial:

Penyerapan:

Langkah pertama kita adalah menyerap data Retail (inventaris, deskripsi produk, interaksi pelanggan) ke AlloyDB.

Mesin Analisis:

Kita akan menggunakan AlloyDB sebagai mesin analisis untuk melakukan hal berikut:

  1. Ekstraksi Konteks: Mesin menganalisis data yang disimpan dalam AlloyDB untuk memahami hubungan antara produk, kategori, perilaku pelanggan, dll. sebagaimana berlaku.
  2. Pembuatan Embedding: Embedding (representasi matematika dari teks) dibuat untuk kueri pengguna dan informasi yang disimpan di AlloyDB.
  3. Penelusuran Vektor: Mesin melakukan penelusuran kesamaan, membandingkan embedding kueri dengan embedding deskripsi produk, ulasan, dan data relevan lainnya. Hal ini mengidentifikasi 25 "tetangga terdekat" yang paling relevan.

Rekomendasi Gemini:

Array byte gambar diteruskan ke model Gemini melalui Vertex AI API, bersama dengan perintah yang meminta deskripsi tekstual tentang pakaian atas beserta saran rekomendasi pakaian bawah.

RAG dan penelusuran vektor AlloyDB:

Deskripsi pakaian atasan digunakan untuk membuat kueri database. Kueri mengonversi teks penelusuran (rekomendasi dari model Gemini untuk mencocokkan pakaian bawahan) menjadi embedding dan melakukan Penelusuran Vektor pada embedding yang disimpan dalam database untuk menemukan tetangga terdekat (hasil yang cocok). Embedding vektor dalam database AlloyDB diindeks menggunakan indeks ScaNN untuk perolehan yang lebih baik.

Pembuatan Gambar Respons:

Respons yang divalidasi disusun ke dalam array JSON dan seluruh mesin dikemas ke dalam Fungsi Cloud Run serverless yang dipanggil dari Agent Builder.

Pembuatan gambar Imagen:

Perintah gaya pengguna, rekomendasi yang dipilih pengguna, dan permintaan personalisasi digabungkan untuk memberikan perintah pada Imagen 3 dengan gambar yang ada. Gambar gaya dibuat berdasarkan perintah ini, menggunakan Vertex AI API.

3. Sebelum memulai

Membuat project

  1. Di Konsol Google Cloud, di halaman pemilih project, pilih atau buat project Google Cloud.
  2. Pastikan penagihan diaktifkan untuk project Cloud Anda. Pelajari cara memeriksa apakah penagihan telah diaktifkan pada suatu project .
  3. Anda akan menggunakan Cloud Shell, lingkungan command line yang berjalan di Google Cloud yang telah dilengkapi dengan bq. Klik Activate Cloud Shell ( f2ae85166a716c5c.png) di bagian atas Konsol Google Cloud.
  4. Setelah terhubung ke Cloud Shell, verifikasi bahwa Anda sudah diautentikasi dan project sudah ditetapkan ke project ID Anda menggunakan perintah berikut:
gcloud auth list
  1. Jalankan perintah berikut untuk mengonfirmasi bahwa perintah gcloud mendatang akan mengidentifikasi project Anda dengan benar.
gcloud config list project
  1. Jika project Anda belum ditetapkan, gunakan perintah berikut untuk menetapkannya secara eksplisit:
gcloud config set project <YOUR_PROJECT_ID>
  1. Mengaktifkan API yang diperlukan.

Ikuti link untuk mengaktifkan API.

Jika lupa mengaktifkan API, Anda dapat mengaktifkannya kapan saja selama penerapan.

Untuk mengetahui informasi selengkapnya tentang perintah dan penggunaan gcloud, lihat dokumentasi.

4. Penyiapan database

Di lab ini, kita akan menggunakan AlloyDB sebagai database untuk menyimpan set data e-commerce retail. Layanan ini menggunakan cluster untuk menyimpan semua resource, seperti database dan log. Setiap cluster memiliki instance utama yang menyediakan titik akses ke data. Tabel adalah resource sebenarnya yang menyimpan data.

Mari kita buat cluster, instance, dan tabel AlloyDB tempat set data e-commerce akan dimuat.

Membuat cluster dan instance

  1. Di Konsol Google Cloud, telusuri AlloyDB. Cara mudah untuk menemukan sebagian besar halaman di Konsol Cloud adalah dengan menelusurinya menggunakan kotak penelusuran konsol.
  2. Klik BUAT CLUSTER.

f76ff480c8c889aa.png

  1. Buat cluster dan instance dengan nilai berikut:
  • cluster id: "shopping-cluster"
  • sandi: "alloydb"
  • Kompatibel dengan PostgreSQL 15
  • Wilayah: "us-central1"
  • Jaringan: "default"

538dba58908162fb.png

  1. Di Jaringan, saat Anda memilih jaringan default, opsi berikut akan muncul. Klik SIAPKAN KONEKSI untuk menyiapkan jaringan default.
    7939bbb6802a91bf.png
  2. Pilih Use an automatically allocated IP range, lalu klik Continue. Setelah meninjau informasi, klik CREATE CONNECTION. 768ff5210e79676f.png

Tunggu hingga pembuatan jaringan default selesai.

  1. Di bagian Configure your primary instance, tetapkan Instance ID sebagai "shopping-instance".

2bddecf6b7c7407b.png

  1. Klik CREATE CLUSTER untuk menyelesaikan penyiapan cluster sebagai berikut:

24eec29fa5cfdb3e.png

5. Penyerapan data

Sekarang saatnya menambahkan tabel dengan data tentang toko. Tunggu hingga instance Anda selesai dibuat. Setelah dibuat, Anda dapat login ke AlloyDB menggunakan kredensial yang Anda tetapkan saat membuat cluster.

Melakukan autentikasi ke database AlloyDB

  1. Di Konsol Google Cloud, buka AlloyDB. Pilih cluster utama, lalu klik AlloyDB Studio di navigasi sebelah kiri:

847e35f1bf8a8bd8.png

  1. Masukkan detail berikut untuk melakukan autentikasi ke database AlloyDB:
  • Nama pengguna : "postgres"
  • Database : "postgres"
  • Sandi : "alloydb"

Setelah Anda berhasil diautentikasi ke AlloyDB Studio, perintah SQL dimasukkan di tab Editor. Anda dapat menambahkan beberapa jendela Editor menggunakan tanda plus di sebelah kanan tab Editor pertama.

91a86d9469d499c4.png

Anda akan memasukkan perintah untuk AlloyDB di jendela Editor, menggunakan opsi Jalankan, Format, dan Hapus sesuai kebutuhan.

Mengaktifkan Ekstensi

Untuk membangun aplikasi ini, kita akan menggunakan ekstensi "pgvector" dan "google_ml_integration".

  • Ekstensi pgvector memungkinkan Anda menyimpan dan menelusuri embedding vektor.
  • Ekstensi google_ml_integration menyediakan fungsi yang Anda gunakan untuk mengakses endpoint prediksi Vertex AI guna mendapatkan prediksi di SQL.
  1. Aktifkan ekstensi ini dengan menjalankan DDL berikut:
CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE;
CREATE EXTENSION IF NOT EXISTS vector;
  1. Verifikasi apakah ekstensi diinstal dengan menjalankan perintah SQL ini:
select extname, extversion from pg_extension;

Membuat tabel

  1. Buat tabel menggunakan pernyataan DDL berikut:
CREATE TABLE
 apparels ( id BIGINT,
   category VARCHAR(100),
   sub_category VARCHAR(50),
   uri VARCHAR(200),
   image VARCHAR(100),
   content VARCHAR(2000),
   pdt_desc VARCHAR(5000),
   embedding vector(768) );

Setelah berhasil menjalankan perintah di atas, Anda akan dapat melihat tabel di

database. Gambar berikut menampilkan contoh:

908e33bbff58a6d.png

Menyerap data

Untuk lab ini, kita memiliki data pengujian sekitar 200 rekaman dalam file SQL ini. Berisi id, category, sub_category, uri, image, dan content. Kolom lainnya akan diisi nanti di lab.

  1. Salin 20 baris/pernyataan penyisipan dari file SQL di tab Editor baru di AlloyDB Studio, lalu klik RUN.
  1. Luaskan bagian Explorer hingga Anda dapat melihat tabel bernama apparels.
  2. Klik ikon menu [] dan klik Kueri. Pernyataan SELECT akan terbuka di tab Editor baru.

b31ece70e670ab89.png

  1. Klik Jalankan untuk memverifikasi bahwa baris telah disisipkan.

Memberikan Izin kepada pengguna

Kita akan memberikan izin kepada pengguna postgres untuk membuat embedding dari dalam AlloyDB. Di AlloyDB Studio, jalankan pernyataan berikut untuk memberikan hak eksekusi pada fungsi embedding kepada pengguna postgres:

GRANT EXECUTE ON FUNCTION embedding TO postgres;

Memberikan PERAN Vertex AI User ke akun layanan AlloyDB

Kita akan menggunakan model embedding teks dari Vertex AI untuk membuat embedding yang memerlukan PERAN Pengguna Vertex AI ke akun layanan AlloyDB.

Di Konsol Google Cloud, klik ikon Cloud Shell terminal [ f2ae85166a716c5c.png] dan jalankan perintah berikut:

PROJECT_ID=$(gcloud config get-value project)

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:service-$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")@gcp-sa-alloydb.iam.gserviceaccount.com" \
--role="roles/aiplatform.user"

6. Konteks Build

Untuk membuat sematan, kita perlu memiliki context, yaitu semua informasi yang ingin kita sertakan dalam satu kolom. Kita akan melakukannya dengan membuat deskripsi produk yang akan disimpan di kolom pdt_desc dalam tabel apparels.

Dalam kasus ini, kita akan menggunakan semua informasi tentang setiap produk, tetapi saat Anda melakukannya dengan data Anda sendiri, jangan ragu untuk merekayasa data dengan cara apa pun yang Anda anggap bermakna bagi bisnis Anda.

Di tab Editor AlloyDB Studio, jalankan perintah berikut yang mengupdate kolom pdt_desc dengan data konteks:

UPDATE
 apparels
SET
 pdt_desc = CONCAT('This product category is: ', category, ' and sub_category is: ', sub_category, '. The description of the product is as follows: ', content, '. The product image is stored at: ', uri)
WHERE
 id IS NOT NULL;

DML ini membuat ringkasan konteks sederhana menggunakan informasi dari semua kolom yang tersedia dalam tabel dan dependensi lainnya (jika ada dalam kasus penggunaan Anda). Untuk pengelompokan informasi dan pembuatan konteks yang lebih tepat, Anda dapat merekayasa data dengan cara apa pun yang Anda anggap bermakna bagi bisnis Anda.

7. Membuat embedding untuk konteks

Komputer jauh lebih mudah memproses angka daripada memproses teks. Sistem penyematan mengonversi teks menjadi serangkaian angka floating point yang harus merepresentasikan teks, terlepas dari bagaimana teks tersebut disusun, bahasa yang digunakan, dll.

Pertimbangkan untuk mendeskripsikan lokasi di tepi laut. Istilah ini dapat disebut "on the water", "beachfront", "walk from your room to the ocean", "sur la mer", "на берегу океана", dll. Semua istilah ini terlihat berbeda, tetapi makna semantiknya atau dalam terminologi machine learning, embeddingnya harus sangat berdekatan satu sama lain.

Setelah data dan konteks siap, kita akan menjalankan SQL untuk menambahkan embedding kolom deskripsi produk(pdt_desc) ke tabel di kolom embedding. Ada berbagai model penyematan yang dapat Anda gunakan. Kita menggunakan text-embedding-005 dari Vertex AI.

  1. Di AlloyDB Studio, jalankan perintah berikut untuk membuat embedding, dan perbarui kolom pdt_desc dengan embedding untuk data yang disimpannya:
UPDATE
 apparels
SET
 embedding = embedding( 'text-embedding-005',
   pdt_desc)
WHERE
 TRUE;
  1. Pastikan embedding dibuat dengan menjalankan perintah berikut:
SELECT
 id,
 category,
 sub_category,
 content,
 embedding
FROM
 Apparels
LIMIT 5;

Berikut adalah contoh vektor embedding, yang terlihat seperti array float, untuk contoh teks dalam kueri sebagai berikut:

c69c08d085389f74.png

8. Melakukan penelusuran Vektor

Setelah tabel, data, dan embedding siap, mari lakukan penelusuran vektor real time untuk teks penelusuran pengguna.

Asumsikan bahwa teks penelusuran pengguna adalah "pink color, casual, pure cotton tops for women"

Untuk menemukan kecocokan untuk kueri ini, jalankan kueri SQL berikut:

SELECT
id,
category,
sub_category,
content,
pdt_desc AS description
FROM
apparels
ORDER BY
embedding <=> embedding('text-embedding-005',
  'pink color, casual, pure cotton tops for women')::vector
LIMIT
5;

Mari kita lihat kueri ini secara mendetail:

Dalam kueri ini,

  1. Teks penelusuran pengguna adalah: "I want womens tops, pink casual only pure cotton."
  2. Kita mengonversi teks penelusuran ini menjadi embedding menggunakan metode embedding() bersama dengan model: text-embedding-005. Langkah ini akan terlihat familiar setelah langkah terakhir, saat kita menerapkan fungsi penyematan ke semua item dalam tabel.
  3. "<=>" menunjukkan penggunaan metode jarak COSINE SIMILARITY. Anda dapat menemukan semua ukuran kemiripan yang tersedia di dokumentasi pgvector.
  4. Kita mengonversi hasil metode embedding ke jenis data vektor agar kompatibel dengan vektor yang disimpan dalam database.
  5. LIMIT 5 menunjukkan bahwa kita ingin mengekstrak 5 tetangga terdekat untuk teks penelusuran.

Berikut menunjukkan contoh respons kueri SQL ini:

4193a68737400535.png

Seperti yang dapat Anda amati di hasil Anda, kecocokannya cukup dekat dengan teks penelusuran. Coba ubah warna untuk melihat perubahan hasilnya.

Indeks ScaNN AlloyDB untuk performa kueri

Sekarang, misalkan kita ingin meningkatkan performa (waktu kueri), efisiensi, dan perolehan hasil Penelusuran Vektor ini menggunakan indeks ScaNN.

Jika Anda ingin menggunakan indeks ScaNN, coba langkah-langkah berikut:

  1. Karena kita sudah membuat cluster, instance, konteks, dan embedding, kita hanya perlu menginstal ekstensi ScaNN menggunakan pernyataan berikut:
CREATE EXTENSION IF NOT EXISTS alloydb_scann;
  1. Buat indeks ScaNN:
CREATE INDEX apparel_index ON apparels
USING scann (embedding cosine)
WITH (num_leaves=54);

Dalam DDL di atas:

  • apparel_index adalah nama indeks.
  • apparels adalah nama tabel.
  • scann adalah metode indeks.
  • embedding adalah kolom dalam tabel yang ingin Anda indeks.
  • cosine adalah metode jarak yang ingin Anda gunakan dengan indeks.
  • 54 adalah jumlah partisi yang akan diterapkan ke indeks ini. Tetapkan ke nilai apa pun antara 1 hingga 1048576. Untuk mengetahui informasi selengkapnya tentang cara menentukan nilai ini, lihat Menyesuaikan indeks ScaNN.

Sesuai rekomendasi di repo ScaNN, kami telah menggunakan AKAR KUADRAT dari jumlah titik data. Saat membuat partisi, num_leaves harus berupa akar kuadrat dari jumlah titik data.

  1. Periksa apakah indeks dibuat menggunakan kueri:
SELECT * FROM pg_stat_ann_indexes;
  1. Lakukan Vector Search menggunakan kueri yang sama dengan yang kita gunakan tanpa indeks:
select * from apparels
   ORDER BY embedding <=> CAST(embedding('textembedding-gecko', 'white tops for girls without any print') as vector(768))
   LIMIT 20

Kueri di atas sama dengan kueri yang kita gunakan di lab pada langkah 8. Namun, kini kita telah mengindeks kolom menggunakan indeks ScaNN.

  1. Uji dengan kueri penelusuran sederhana dengan dan tanpa indeks. Untuk pengujian tanpa indeks, Anda harus menghapus indeks:

white tops for girls without any print

Teks penelusuran di atas dalam kueri Vector Search pada data embedding yang DIINDEX menghasilkan hasil penelusuran yang berkualitas dan efisien. Efisiensi sangat meningkat (dalam hal waktu eksekusi: 10,37 md tanpa ScaNN dan 0,87 md dengan ScaNN) dengan indeks. Untuk mengetahui informasi selengkapnya tentang topik ini, lihat blog ini.

9. Validasi Kecocokan dengan LLM

Sebelum melanjutkan dan membuat layanan untuk menampilkan kecocokan terbaik ke aplikasi, mari kita gunakan model AI generatif untuk memvalidasi apakah potensi respons ini benar-benar relevan dan aman untuk dibagikan kepada pengguna.

Memastikan instance disiapkan untuk Gemini

  1. Pastikan google_ml_integration sudah diaktifkan untuk Cluster dan Instance Anda. Di AlloyDB Studio, jalankan perintah berikut:
show google_ml_integration.enable_model_support;

Jika nilai ditampilkan sebagai "aktif", Anda dapat melewati 2 langkah berikutnya dan langsung melanjutkan ke penyiapan

integrasi Model AlloyDB dan Vertex AI.

  1. Buka instance utama cluster AlloyDB Anda, lalu klik EDIT PRIMARY INSTANCE.

456ffdf292d3c0e0.png

  1. Di Advanced configuration options, luaskan bagian New database flag, dan pastikan google_ml_integration.enable_model_support flag disetel ke "on" sebagai berikut:

6a59351fcd2a9d35.png 3. Jika tidak disetel ke "on", setel ke "on", lalu klik UPDATE INSTANCE.

Langkah ini akan memakan waktu beberapa menit.

Integrasi Model AlloyDB dan Vertex AI

Sekarang Anda dapat terhubung ke AlloyDB Studio dan menjalankan pernyataan DML berikut untuk menyiapkan akses model Gemini dari AlloyDB, menggunakan project ID Anda di tempat yang ditunjukkan. Anda mungkin diperingatkan tentang error sintaksis sebelum menjalankan perintah, tetapi perintah tersebut akan berjalan dengan baik.

  1. Di Konsol Google Cloud, buka AlloyDB. Pilih cluster utama, lalu klik AlloyDB Studio di navigasi sebelah kiri.
  2. Kita akan menggunakan gemini-1.5-pro:generateContent yang tersedia secara default dengan ekstensi google_ml_integration. cdb5af753a625777.png
  3. Anda dapat memeriksa model yang dikonfigurasi untuk akses melalui perintah berikut di AlloyDB Studio:
select model_id,model_type from google_ml.model_info_view;        
  1. Berikan izin kepada pengguna database untuk menjalankan fungsi ml_predict_row guna menjalankan prediksi menggunakan model Google Vertex AI dengan menjalankan perintah berikut:
GRANT EXECUTE ON FUNCTION ml_predict_row to postgres;

Mengevaluasi respons

Meskipun kita akan menggunakan satu kueri besar untuk bagian berikutnya saat kita benar-benar menjalankan aplikasi ke Cloud Run, untuk memastikan respons dari kueri tersebut wajar, kueri tersebut mungkin sulit dipahami.

Kita akan melihat setiap bagian yang membentuk kueri yang lebih besar yang akhirnya kita gunakan.

  1. Pertama, kita akan mengirim permintaan ke database untuk mendapatkan 5 kecocokan terdekat dengan kueri pengguna. Kita akan meng-hardcode kueri agar tetap sederhana, tetapi jangan khawatir, kita akan menginterpolasinya ke dalam kueri nanti.

Kami menyertakan deskripsi produk dari tabel apparels dan menambahkan dua kolom baru–satu yang menggabungkan deskripsi dengan indeks dan satu lagi dengan permintaan asli. Data ini disimpan dalam tabel bernama xyz, yang merupakan nama tabel sementara.

CREATE TABLE
 xyz AS
SELECT
 id || ' - ' || pdt_desc AS literature,
 pdt_desc AS content,
 'I want womens tops, pink casual only pure cotton.' AS  user_text
FROM
 apparels
ORDER BY
 embedding <=> embedding('text-embedding-005',
   'I want womens tops, pink casual only pure cotton.')::vector
LIMIT
 5;

Output kueri ini adalah 5 baris paling mirip yang berkaitan dengan kueri pengguna. [Panduan

Tabel baru xyz akan berisi 5 baris dengan setiap baris memiliki kolom berikut:

  • literature
  • content
  • user_text
  1. Untuk menentukan seberapa valid respons, kita akan menggunakan kueri rumit yang menjelaskan cara mengevaluasi respons. Kueri ini menggunakan user_text dan content dalam tabel xyz sebagai bagian dari kueri.
"Read this user search text: ', user_text, 
' Compare it against the product inventory data set: ', content, 
' Return a response with 3 values: 1) MATCH: if the 2 contexts are at least 85% matching or not: YES or NO 2) PERCENTAGE: percentage of match, make sure that this percentage is accurate 3) DIFFERENCE: A clear short easy description of the difference between the 2 products. Remember if the user search text says that some attribute should not be there, and the record has it, it should be a NO match."
  1. Dengan menggunakan kueri tersebut, kita akan meninjau "kualitas" respons dalam tabel xyz. Saat kami mengatakan kualitas, kami memaksudkan seberapa akurat respons yang dihasilkan dengan apa yang kami harapkan.
CREATE TABLE
  x AS
SELECT
  json_array_elements( google_ml.predict_row( model_id => 'gemini-1.5',
      request_body => CONCAT('{
 "contents": [ 
        { "role": "user", 
          "parts": 
             [ { "text": "Read this user search text: ', user_text, ' Compare it against the product inventory data set: ', content, ' Return a response with 3 values: 1) MATCH: if the 2 contexts are at least 85% matching or not: YES or NO 2) PERCENTAGE: percentage of match, make sure that this percentage is accurate 3) DIFFERENCE: A clear short easy description of the difference between the 2 products. Remember if the user search text says that some attribute should not be there, and the record has it, it should be a NO match." 
             } ]
         } 
] }'
)::json))-> 'candidates' -> 0 -> 'content' -> 'parts' -> 0 -> 'text'
AS LLM_RESPONSE
FROM
    xyz;
  1. predict_row menampilkan hasilnya dalam format JSON. Kode "-> 'candidates' -> 0 -> 'content' -> 'parts' -> 0 -> 'text'" digunakan untuk mengekstrak teks sebenarnya dari JSON tersebut. Untuk melihat JSON sebenarnya yang ditampilkan, Anda dapat menghapus kode ini.
  2. Terakhir, untuk mendapatkan kolom LLM, Anda hanya perlu mengekstraknya dari tabel x:
SELECT 
LLM_RESPONSE 
FROM 
        x;
  1. Hal ini dapat digabungkan menjadi satu kueri sebagai berikut:

Peringatan: Jika Anda telah menjalankan kueri di atas untuk memeriksa hasil sementara,

pastikan Anda menghapus tabel xyz dan x dari database AlloyDB sebelum menjalankan kueri ini,

SELECT
 LLM_RESPONSE
FROM (
 SELECT
 json_array_elements( google_ml.predict_row( model_id => 'gemini-1.5',
     request_body => CONCAT('{
     "contents": [
       { "role": "user",
         "parts":
            [ { "text": "Read this user search text: ', user_text, ' Compare it against the product inventory data set: ', content, ' Return a response with 3 values: 1) MATCH: if the 2 contexts are at least 85% matching or not: YES or NO 2) PERCENTAGE: percentage of match, make sure that this percentage is accurate 3) DIFFERENCE: A clear short easy description of the difference between the 2 products. Remember if the user search text says that some attribute should not be there, and the record has it, it should be a NO match."
            } ]
        }
] }'
)::json))-> 'candidates' -> 0 -> 'content' -> 'parts' -> 0 -> 'text'
AS LLM_RESPONSE
   FROM (
         SELECT
           id || ' - ' || pdt_desc AS literature,
           pdt_desc AS content,
         'I want womens tops, pink casual only pure cotton.' user_text
         FROM
           apparels
         ORDER BY
             embedding <=> embedding('text-embedding-005',
             'I want womens tops, pink casual only pure cotton.')::vector
         LIMIT
           5 ) AS xyz ) AS X;

Kueri yang lebih besar adalah kombinasi dari semua kueri yang kita jalankan pada langkah-langkah sebelumnya. Hasilnya menunjukkan apakah ada kecocokan atau tidak, berapa persentase kecocokan, dan beberapa penjelasan tentang rating.

Perhatikan bahwa model Gemini memiliki streaming yang aktif secara default, sehingga respons sebenarnya tersebar di beberapa baris: 14e74d71293b7b9.png

10. Membawa aplikasi ke web

Sekarang kita akan menghosting aplikasi ini agar dapat diakses dari internet.

Buat Cloud Run Function

  1. Di Konsol Google Cloud, buka Cloud Run Functions menggunakan link berikut:

https://console.cloud.google.com/run/create?deploymentType=function

  1. Di Configure, tetapkan Function Name sebagai "retail-engine" dan pilih region sebagai "us-central1".
  2. Di Endpoint URL, pilih runtime sebagai Java 17.
  3. Di bagian Autentikasi, pilih Izinkan pemanggilan tanpa autentikasi.
  4. Luaskan Container(s), Volumes, Networking, Security, lalu klik tab Networking.
  5. Pilih Hubungkan ke VPC untuk traffic keluar, lalu klik Gunakan konektor Akses VPC Serverless.
  6. Di Network, klik Add New VPC Connector. Aktifkan Serverless VPC Access API, jika belum diaktifkan.
  7. Di Create connector, tetapkan nama ke alloydb-test-conn.
  8. Tetapkan region ke us-central.
  9. Biarkan nilai Jaringan sebagai default dan tetapkan Subnet sebagai Rentang IP Kustom dengan rentang IP 10.8.0.0 atau yang serupa yang tersedia.
  10. Perluas setelan Show scaling, lalu tetapkan Minimum instances ke 2 dan Maximum instances ke 3.
  11. Pilih Jenis instance sebagai f1-micro. Berikut adalah opsi Buat konektor:

bed4b2af6795a8ba.png

  1. Klik Buat untuk membuat konektor.
  2. Di Perutean traffic, pilih Rutekan semua traffic ke VPC.
  3. Klik Create untuk membuat fungsi.

Men-deploy aplikasi

Setelah fungsi dibuat, perbarui sumber dan deploy ulang aplikasi.

  1. Di Cloud Run, klik tab Services, lalu klik fungsi retail-engine.
  2. Klik tab Sumber. Biarkan Function entry point default ditetapkan ke "gcfv2.HelloHttpFunction".
  3. Ganti konten file HelloHttpFunction.java dengan konten dari file Java ini.
  4. Perbarui detail AlloyDbJdbcConnector dalam file sesuai dengan detail instance dan cluster AlloyDB Anda. Ganti $PROJECT_ID dengan project ID cluster dan instance AlloyDB Anda.

a89dc5af3580fbcf.png

  1. Ganti konten file pom.xml dengan konten file XML ini.
  2. Klik Save and redeploy untuk men-deploy fungsi.

11. Menguji aplikasi retail-engine

Setelah Cloud Function yang diperbarui di-deploy, Anda akan melihat endpoint dalam format berikut:

https://retail-engine-PROJECT_NUMBER.us-central1.run.app

Anda dapat mengujinya dari Terminal Cloud Shell dengan menjalankan perintah berikut:

gcloud functions call retail-engine --region=us-central1 --gen2 --data '{"search": "I want some kids clothes themed on Disney"}'

Atau, Anda dapat menguji Cloud Run Function sebagai berikut:

PROJECT_ID=$(gcloud config get-value project)

curl -X POST https://retail-engine-$PROJECT_NUMBER.us-central1.run.app \
  -H 'Content-Type: application/json' \
  -d '{"search":"I want some kids clothes themed on Disney"}' \
  | jq .

Dan hasilnya:

88bc1ddfb5644a28.png

Setelah menjalankan penelusuran vektor kemiripan menggunakan model embedding pada data AlloyDB, kita dapat melanjutkan dengan membuat aplikasi yang menggunakan embedding ini bersama dengan gambar dan perintah Anda untuk membuat saran gaya

12. Memahami alur rekomendasi pakaian

Aplikasi rekomendasi pakaian adalah aplikasi boot sprint yang dikonfigurasi untuk bekerja dengan sematan yang kami buat di aplikasi retail-engine AlloyDB bersama dengan Gemini dan Imagen untuk menghasilkan opsi gaya pakaian visual. Fitur ini juga memungkinkan Anda menambahkan perintah kustom dan mengimprovisasi rekomendasi.

Bayangkan seperti ini, Anda mengupload gambar atasan berwarna merah muda cerah di lemari pakaian Anda ke aplikasi ini. Saat Anda mengklik Tampilkan, berdasarkan perintah yang ditetapkan dalam kode aplikasi dan sematan dalam database AlloyDB, aplikasi akan menghasilkan beberapa opsi yang cocok dengan gambar asli. Sekarang Anda ingin tahu bagaimana tampilan opsi yang disarankan dengan kalung biru, jadi Anda menambahkan perintah pada garis tersebut, lalu mengklik Gaya. Gambar akhir yang dihasilkan menggabungkan kombinasi kuat dari gambar asli dan rekomendasi untuk membuat pakaian yang cocok.

Untuk mulai membuat aplikasi rekomendasi pakaian, ikuti langkah-langkah berikut:

  1. Di Cloud Run, buka aplikasi retail-engine, lalu catat URL aplikasi Anda. Ini adalah repositori embedding yang akan kita gunakan untuk membuat saran serupa.
  2. Di IDE Anda, buat clone repositori https://github.com/AbiramiSukumaran/outfit-recommender/. Untuk latihan ini, langkah-langkah yang ditampilkan dilakukan di IDE Visual Studio Code.
git clone https://github.com/AbiramiSukumaran/outfit-recommender/

Berikut adalah beberapa file penting dalam direktori aplikasi:

  • src/main: Direktori sumber tempat file aplikasi dan HTML berada:
  • HelloWorldApplication.java: Titik entri utama untuk aplikasi Spring Boot.
  • HelloWorldController.java: Pengontrol REST Spring Boot yang menangani permintaan HTTP terkait aplikasi pemberi rekomendasi pakaian. File ini menangani permintaan GET dan POST, memproses perintah pengguna, menganalisis gambar, berinteraksi dengan embedding AlloyDB, dan menampilkan respons akhir ke UI. Pengontrol ini memanggil class GenerateImageSample.
  • GenerateImageSample.java: Berisi class pembuatan gambar yang terhubung ke Vertex AI, memformat perintah pengguna, melakukan panggilan API ke model Imagen, menampilkan gambar yang diprediksi ke class pengontrol.
  • Resources: Direktori ini berisi file gambar dan HTML yang diperlukan untuk membuat UI aplikasi.
  • Pom.xml: Menentukan dependensi dan konfigurasi project.
  1. Di Visual Studio Code, buka HelloWorldController.java dan perbarui instance ID project dan lokasi sesuai dengan tempat instance AlloyDB Anda dibuat.

9fff8f5cbb62567.png

  1. Perbarui endpoint ke URL aplikasi retail-engine yang Anda hosting sebelumnya.

ae6227e88eec5485.png

  1. Buka GenerateImageSample.java, lalu perbarui project ID dan lokasi sesuai dengan tempat instance AlloyDB Anda dibuat.

db1f81a6f51d80de.png

  1. Simpan semua file.

Sekarang kita akan men-deploy aplikasi ini ke runtime serverless Cloud Run.

13. Membawa aplikasi ke web

Setelah menambahkan project, lokasi, dan detail aplikasi retail-engine yang relevan ke aplikasi Spring Boot rekomendasi pakaian, kita dapat men-deploy aplikasi ke Cloud Run.

Kita akan menggunakan perintah gcloud run deploy di terminal Visual Code Studio untuk men-deploy aplikasi. Untuk Visual Studio Code, Anda dapat menginstal ekstensi Google Cloud Code untuk mulai menggunakan gcloud CLI.

Untuk men-deploy aplikasi, ikuti langkah-langkah berikut:

  1. Di IDE Anda, buka direktori yang di-clone dan mulai terminal. Untuk Visual Code Studio, klik Terminal > New Terminal.
  2. Ikuti petunjuk dalam dokumen ini untuk menginstal gcloud CLI.
  3. Jika Anda menggunakan Visual Code Studio, klik Extensions, telusuri Google Cloud Code, lalu instal ekstensi.
  4. Di terminal IDE, autentikasi Akun Google Anda dengan menjalankan perintah berikut:
gcloud auth application-default login
  1. Tetapkan project ID Anda ke project yang sama dengan tempat instance AlloyDB Anda berada.
gcloud config set project PROJECT_ID
  1. Mulai proses deployment.
gcloud run deploy
  1. Di Source code location, tekan Enter untuk memilih direktori GitHub yang di-clone.
  2. Di Service name, masukkan nama untuk layanan, seperti outfit-recommender, lalu tekan Enter.
  3. Di Please specify a region, masukkan lokasi tempat instance AlloyDB dan aplikasi retail-engine dihosting, seperti 32 untuk us-central1, lalu tekan Enter.

12c0de4248660d4d.png

  1. Di Allow unauthenticated invocations to [..], masukkan Y, lalu tekan Enter.

Gambar berikut menunjukkan progres deployment aplikasi Anda:

1babbb82faa31fce.png

14. Menguji aplikasi pemberi rekomendasi pakaian

Setelah aplikasi berhasil di-deploy ke Cloud Run, Anda dapat melihat layanan di Konsol Google Cloud sebagai berikut:

  1. Di Konsol Google Cloud, buka Cloud Run.
  2. Di Services, klik layanan outfit recommender yang Anda deploy. Anda akan melihat layanan retail-engine dan outfit-recommender sebagai berikut:

24dd0aebe224059e.png

  1. Klik URL aplikasi untuk membuka UI aplikasi pemberi rekomendasi.

cdc9c1625b1648d2.png

    The following is a sample URL that you will use:

https://outfit-recommender-22905290964.us-central1.run.app/style

Aplikasi yang di-deploy dapat dilihat sebagai berikut:

76245d1a6152d313.png

Menggunakan aplikasi

Untuk mulai menggunakan aplikasi, ikuti langkah-langkah berikut:

  1. Klik Upload, lalu upload foto item pakaian.
  2. Setelah gambar diupload, klik Gaya. Aplikasi menggunakan gambar sebagai perintah dan membuat opsi bawah berdasarkan perintah dari aplikasi retail-engine yang menyertakan embedding untuk set data retail.

Aplikasi ini membuat saran gambar beserta perintah berdasarkan gambar dengan rekomendasi gaya. Contoh, A white semi-sheer button up blouse with pink floral patterns on it, with balloon sleeves.

  1. Anda dapat meneruskan perintah tambahan ke rekomendasi gaya yang dibuat otomatis ini. Contoh, STYLE RECOMMENDATION: Cute brown skirt on a curly updo. Make it photo realistic. Accessorize with cherry earrings and burgundy plastic case sling bag.
  2. Klik Tampilkan untuk melihat gaya akhir.

38d6d08e9a0a44c0.png

15. Pembersihan

Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam posting ini, ikuti langkah-langkah berikut:

  1. Di konsol Google Cloud, buka halaman Manage resources.
  2. Dalam daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.

16. Selamat

Selamat! Anda telah berhasil melakukan penelusuran kemiripan menggunakan AlloyDB, pgvector, dan Penelusuran vektor yang dipadukan dengan penggunaan hasil penelusuran dengan model Imagen yang canggih untuk membuat rekomendasi gaya.