Tentang codelab ini
1. Ringkasan
Bayangkan aplikasi mode yang tidak hanya membantu Anda menemukan pakaian yang sempurna, tetapi juga memberikan saran gaya secara real time, semuanya berkat kecanggihan integrasi genAI. Dalam presentasi ini, kita akan mempelajari cara membuat aplikasi tersebut menggunakan kemampuan penelusuran vektor AlloyDB, yang digabungkan dengan indeks ScaNN Google, sehingga memungkinkan penelusuran yang sangat cepat untuk menemukan pakaian yang cocok 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 Anda yang dipersonalisasi. Seluruh aplikasi ini dibuat berdasarkan arsitektur serverless, sehingga memastikan pengalaman yang lancar dan skalabel bagi pengguna.
Tantangan: Dengan menawarkan saran pakaian yang dipersonalisasi, aplikasi ini ingin membantu orang-orang yang kesulitan menentukan pilihan mode. Hal ini juga membantu menghindari kejenuhan dalam membuat keputusan terkait perencanaan pakaian.
Solusi: Aplikasi rekomendasi pakaian memecahkan masalah dalam memberikan pengalaman mode yang cerdas, dipersonalisasi, dan menarik kepada pengguna sekaligus menunjukkan kemampuan AlloyDB, AI generatif, dan teknologi serverless.
Yang akan Anda build
Sebagai bagian dari lab ini, Anda akan:
- Membuat instance AlloyDB dan memuat Set Data E-commerce
- Mengaktifkan ekstensi model AI generatif dan pgvector di AlloyDB
- Membuat penyematan dari deskripsi produk
- Men-deploy solusi di Cloud Run Functions serverless
- Upload gambar ke Gemini dan buat perintah deskripsi gambar.
- Buat hasil penelusuran berdasarkan perintah yang dikombinasikan dengan penyematan set data e-commerce.
- Tambahkan perintah tambahan untuk menyesuaikan perintah dan membuat rekomendasi gaya.
- Men-deploy solusi di Cloud Run Functions serverless
Persyaratan
2. Arsitektur
Arsitektur tingkat tinggi aplikasi adalah sebagai berikut:
Bagian berikut menyoroti alur tutorial kontekstual:
Proses transfer:
Langkah pertama kita adalah menyerap data Retail (inventaris, deskripsi produk, interaksi pelanggan) ke AlloyDB.
Mesin Analytics:
Kita akan menggunakan AlloyDB sebagai mesin analisis untuk melakukan hal berikut:
- Ekstraksi Konteks: Mesin ini menganalisis data yang disimpan dalam AlloyDB untuk memahami hubungan antara produk, kategori, perilaku pelanggan, dll. sebagaimana berlaku.
- Pembuatan Embedding: Embedding (representasi matematika teks) dibuat untuk kueri pengguna dan informasi yang disimpan di AlloyDB.
- Penelusuran Vektor: Mesin ini melakukan penelusuran kesamaan, yang membandingkan penyematan kueri dengan penyematan 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 pakaian atas beserta saran rekomendasi pakaian bawah.
RAG dan penelusuran vektor AlloyDB:
Deskripsi pakaian atas digunakan untuk membuat kueri database. Kueri mengonversi teks penelusuran (rekomendasi dari model Gemini untuk mencocokkan pakaian bawah) menjadi embedding dan melakukan Vector Search pada embedding yang disimpan dalam database untuk menemukan tetangga terdekat (hasil yang cocok). Penyematan vektor di database AlloyDB diindeks menggunakan indeks ScaNN untuk recall 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 Builder Agen.
Pembuatan gambar Imagen:
Perintah gaya pengguna, rekomendasi yang dipilih pengguna, dan permintaan personalisasi apa pun digabungkan untuk meminta Imagen 3 dengan gambar yang ada. Gambar gaya dibuat berdasarkan perintah ini, menggunakan Vertex AI API.
3. Sebelum memulai
Membuat project
- Di Konsol Google Cloud, di halaman pemilih project, pilih atau buat project Google Cloud.
- Pastikan penagihan diaktifkan untuk project Cloud Anda. Pelajari cara memeriksa apakah penagihan telah diaktifkan pada suatu project .
- Anda akan menggunakan Cloud Shell, lingkungan command line yang berjalan di Google Cloud yang telah dilengkapi dengan bq. Klik Activate Cloud Shell (
) di bagian atas konsol Google Cloud.
- Setelah terhubung ke Cloud Shell, pastikan Anda sudah diautentikasi dan project ditetapkan ke project ID Anda menggunakan perintah berikut:
gcloud auth list
- Jalankan perintah berikut untuk mengonfirmasi bahwa perintah gcloud mendatang akan mengidentifikasi project Anda dengan benar.
gcloud config list project
- Jika project Anda belum ditetapkan, gunakan perintah berikut untuk menetapkannya secara eksplisit:
gcloud config set project <YOUR_PROJECT_ID>
- Mengaktifkan API yang diperlukan.
Ikuti link untuk mengaktifkan API.
Jika Anda melewatkan pengaktifan API, Anda dapat mengaktifkannya kapan saja selama penerapan.
Untuk 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
- Di Konsol Google Cloud, telusuri AlloyDB. Cara mudah untuk menemukan sebagian besar halaman di Cloud Console adalah dengan menelusurinya menggunakan kotak penelusuran konsol.
- Klik BUAT CLUSTER.
- Buat cluster dan instance dengan nilai berikut:
- id cluster: "
shopping-cluster
" - sandi: "
alloydb
" - Kompatibel dengan PostgreSQL 15
- Region: "
us-central1
" - Jaringan: "
default
"
- Di Jaringan, saat Anda memilih jaringan default, opsi berikut akan muncul. Klik SIAPAKAN KONEKSI untuk menyiapkan jaringan default.
- Pilih Use an automatically allocated IP range, lalu klik Continue. Setelah meninjau informasi, klik CREATE CONNECTION.
Tunggu hingga pembuatan jaringan default selesai.
- Di Konfigurasi instance utama, tetapkan ID Instance sebagai "
shopping-instance"
.
- Klik CREATE CLUSTER untuk menyelesaikan penyiapan cluster sebagai berikut:
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
- Di Konsol Google Cloud, buka AlloyDB. Pilih cluster utama, lalu klik AlloyDB Studio di navigasi sebelah kiri:
- Masukkan detail berikut untuk melakukan autentikasi ke database AlloyDB:
- Nama pengguna : "
postgres
" - Database : "
postgres
" - Sandi : "
alloydb
"
Setelah Anda berhasil melakukan autentikasi ke AlloyDB Studio, perintah SQL dimasukkan di tab Editor. Anda dapat menambahkan beberapa jendela Editor menggunakan tanda plus di sebelah kanan tab Editor pertama.
Anda akan memasukkan perintah untuk AlloyDB di jendela Editor, menggunakan opsi Run, Format, dan Clear sesuai kebutuhan.
Mengaktifkan Ekstensi
Untuk mem-build 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.
- Aktifkan ekstensi ini dengan menjalankan DDL berikut:
CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE;
CREATE EXTENSION IF NOT EXISTS vector;
- Pastikan ekstensi telah diinstal dengan menjalankan perintah SQL ini:
select extname, extversion from pg_extension;
Membuat tabel
- 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:
Menyerap data
Untuk lab ini, kita memiliki data pengujian sekitar 200 data dalam file SQL ini. Berisi id, category, sub_category, uri, image
, dan content
. Kolom lainnya akan diisi nanti di lab.
- Salin 20 baris/pernyataan penyisipan dari file SQL di tab Editor baru di AlloyDB Studio, lalu klik RUN.
- Luaskan bagian Penjelajah hingga Anda dapat melihat tabel bernama
apparels
. - Klik ikon menu [⋮] dan klik Kueri. Pernyataan SELECT akan terbuka di tab Editor baru.
- Klik Run untuk memverifikasi bahwa baris disisipkan.
Memberikan Izin kepada pengguna
Kita akan memberikan izin kepada pengguna postgres
untuk membuat penyematan 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 Pengguna Vertex AI ke akun layanan AlloyDB
Kita akan menggunakan model penyematan teks dari Vertex AI untuk membuat penyematan yang PERAN Pengguna Vertex AI-nya ke akun layanan AlloyDB.
Di Konsol Google Cloud, klik ikon terminal Cloud Shell [ ] 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 penyematan, kita harus memiliki context
, yaitu semua informasi yang ingin disertakan dalam satu kolom. Kita akan melakukannya dengan membuat deskripsi produk yang akan disimpan di kolom pdt_desc
dalam tabel apparels
.
Dalam kasus ini, kami 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 menurut Anda bermakna bagi bisnis Anda.
Di tab Editor AlloyDB Studio, jalankan perintah berikut yang memperbarui 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 mendapatkan berbagai informasi dan pembuatan konteks yang lebih akurat, jangan ragu untuk merekayasa data dengan cara apa pun yang menurut Anda bermakna bagi bisnis Anda.
7. Membuat penyematan untuk konteks
Komputer jauh lebih mudah memproses angka daripada memproses teks. Sistem penyematan mengonversi teks menjadi serangkaian bilangan floating point yang harus mewakili teks, terlepas dari bagaimana susunan kata-katanya, bahasa yang digunakan, dll.
Pertimbangkan untuk mendeskripsikan lokasi tepi pantai. Istilah ini mungkin 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, penyematan harus sangat mirip satu sama lain.
Setelah data dan konteks siap, kita akan menjalankan SQL untuk menambahkan penyematan 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.
- Di AlloyDB Studio, jalankan perintah berikut untuk membuat penyematan, dan perbarui kolom
pdt_desc
dengan penyematan untuk data yang disimpannya:
UPDATE
apparels
SET
embedding = embedding( 'text-embedding-005',
pdt_desc)
WHERE
TRUE;
- Pastikan penyematan dibuat dengan menjalankan perintah berikut:
SELECT
id,
category,
sub_category,
content,
embedding
FROM
Apparels
LIMIT 5;
Berikut adalah contoh vektor penyematan, yang terlihat seperti array float, untuk contoh teks dalam kueri sebagai berikut:
8. Melakukan penelusuran Vektor
Setelah tabel, data, dan penyematan siap, mari kita 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 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,
- Teks penelusuran pengguna adalah: "
I want womens tops, pink casual only pure cotton.
" - Kita mengonversi teks penelusuran ini menjadi penyematan menggunakan metode
embedding()
beserta model:text-embedding-005
. Langkah ini akan terlihat familier setelah langkah terakhir, saat kita menerapkan fungsi penyematan ke semua item dalam tabel. - "
<=>
" mewakili penggunaan metode jarak COSINE SIMILARITY. Anda dapat menemukan semua ukuran kesamaan yang tersedia di dokumentasi pgvector. - Kita mengonversi hasil metode penyematan ke jenis data vektor agar kompatibel dengan vektor yang disimpan dalam database.
- LIMIT 5 menunjukkan bahwa kita ingin mengekstrak 5 tetangga terdekat untuk teks penelusuran.
Berikut adalah contoh respons kueri SQL ini:
Seperti yang dapat Anda amati dalam hasil, kecocokan 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 recall hasil Penelusuran Vektor ini menggunakan indeks ScaNN.
Jika Anda ingin menggunakan indeks ScaNN, coba langkah-langkah berikut:
- Karena kita sudah memiliki cluster, instance, konteks, dan penyematan yang dibuat, kita hanya perlu menginstal ekstensi ScaNN menggunakan pernyataan berikut:
CREATE EXTENSION IF NOT EXISTS alloydb_scann;
- 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 dengan rekomendasi di repo ScaNN, kami telah menggunakan AKAR KUADRAT dari jumlah titik data. Saat melakukan partisi, num_leaves
harus kira-kira sama dengan akar kuadrat dari jumlah titik data.
- Periksa apakah indeks dibuat menggunakan kueri:
SELECT * FROM pg_stat_ann_indexes;
- 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 yang kita gunakan di lab pada langkah 8. Namun, sekarang kita memiliki kolom yang diindeks menggunakan indeks ScaNN.
- 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 Penelusuran Vektor pada data penyematan yang DI-INDEKS menghasilkan hasil penelusuran yang berkualitas dan efisien. Efisiensi meningkat secara signifikan (dalam hal waktu untuk eksekusi: 10,37 md tanpa ScaNN dan 0,87 md dengan ScaNN) dengan indeks. Untuk 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
- 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 menyiapkan
integrasi Model AlloyDB dan Vertex AI.
- Buka instance utama cluster AlloyDB, lalu klik EDIT PRIMARY INSTANCE.
- Di Advanced configuration options, luaskan bagian database flag Baru, dan pastikan
google_ml_integration.enable_model_support flag
disetel ke "on
" sebagai berikut:
3. Jika tidak disetel ke "
on
", tetapkan ke "on
", lalu klik UPDATE INSTANCE.
Langkah ini akan memerlukan waktu beberapa menit.
Integrasi AlloyDB dan Model 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 jika ditunjukkan. Anda mungkin akan mendapatkan peringatan tentang error sintaksis sebelum menjalankan perintah, tetapi perintah tersebut akan berjalan dengan baik.
- Di Konsol Google Cloud, buka AlloyDB. Pilih cluster utama, lalu klik AlloyDB Studio di navigasi sebelah kiri.
- Kita akan menggunakan
gemini-1.5-pro:generateContent
yang tersedia secara default dengan ekstensigoogle_ml_integration
. - 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;
- 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 tempat kita benar-benar memindahkan aplikasi ke Cloud Run, untuk memastikan respons dari kueri tersebut wajar, kueri tersebut mungkin sulit dipahami.
Kita akan melihat setiap bagian yang digunakan untuk membuat kueri yang lebih besar yang akhirnya kita gunakan.
- Pertama, kita akan mengirim permintaan ke database untuk mendapatkan 5 kecocokan terdekat dengan kueri pengguna. Kita akan melakukan hard code pada kueri agar tetap sederhana, tetapi jangan khawatir, kita akan melakukan interpolasi ke dalam kueri nanti.
Kita 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 akan berupa 5 baris yang paling mirip terkait kueri pengguna. [Panduan
tabel baru xyz
akan berisi 5 baris dengan setiap baris memiliki kolom berikut:
literature
content
user_text
- Untuk menentukan validitas respons, kita akan menggunakan kueri rumit yang menjelaskan cara mengevaluasi respons. Fungsi ini menggunakan
user_text
dancontent
dalam tabelxyz
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."
- Dengan menggunakan kueri tersebut, kita akan meninjau "kebaikan" respons dalam tabel
xyz
. Saat kami mengatakan kualitas, kami maksudkan seberapa akurat respons yang dihasilkan dengan 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;
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.- Terakhir, untuk mendapatkan kolom LLM, Anda hanya perlu mengekstraknya dari tabel x:
SELECT
LLM_RESPONSE
FROM
x;
- Hal ini dapat digabungkan menjadi satu kueri sebagai berikut:
Peringatan: Jika Anda telah menjalankan kueri di atas untuk memeriksa hasil perantara,
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 di langkah-langkah sebelumnya. Hasilnya akan menunjukkan apakah ada kecocokan atau tidak, persentase kecocokan, dan beberapa penjelasan tentang rating.
Perhatikan bahwa model Gemini memiliki streaming aktif secara default, sehingga respons sebenarnya tersebar di beberapa baris:
10. Mentransfer aplikasi ke web
Sekarang kita akan menghosting aplikasi ini agar dapat diakses dari internet.
Membuat Fungsi Cloud Run
- Di Konsol Google Cloud, buka Cloud Run Functions menggunakan link berikut:
https://console.cloud.google.com/run/create?deploymentType=function
- Di Configure, tetapkan Function Name sebagai "retail-engine" dan pilih region sebagai "us-central1".
- Di URL Endpoint, pilih runtime sebagai Java 17.
- Di Authentication, pilih Allow unauthenticated invocations.
- Luaskan Container(s), Volumes, Networking, Security, lalu klik tab Networking.
- Pilih Hubungkan ke VPC untuk traffic keluar, lalu klik Gunakan konektor Akses VPC Serverless.
- Di Jaringan, klik Tambahkan Konektor VPC Baru. Aktifkan Serverless VPC Access API, jika belum diaktifkan.
- Di Buat konektor, tetapkan nama ke
alloydb-test-conn
. - Tetapkan region ke
us-central
. - Biarkan nilai Jaringan sebagai default dan tetapkan Subnet sebagai Rentang IP Kustom dengan rentang IP 10.8.0.0 atau yang serupa yang tersedia.
- Luaskan setelan Tampilkan penskalaan, lalu tetapkan Instance minimum ke 2 dan Instance maksimum ke 3.
- Pilih Instance type sebagai f1-micro. Berikut ini opsi Buat konektor:
- Klik Buat untuk membuat konektor.
- Di Pemilihan rute traffic, pilih Rutekan semua traffic ke VPC.
- Klik Create untuk membuat fungsi.
Men-deploy aplikasi
Setelah fungsi dibuat, update sumber dan deploy ulang aplikasi.
- Di Cloud Run, klik tab Services, lalu klik fungsi retail-engine.
- Klik tab Sumber. Biarkan Titik entri fungsi default ditetapkan ke "
gcfv2.HelloHttpFunction
". - Ganti konten file HelloHttpFunction.java dengan konten dari file Java ini.
- Perbarui detail AlloyDbJdbcConnector dalam file sesuai dengan detail instance dan cluster AlloyDB Anda. Ganti
$PROJECT_ID
dengan project ID cluster dan instance AlloyDB Anda.
- Ganti konten file pom.xml dengan konten file XML ini.
- Klik Save and redeploy untuk men-deploy fungsi.
11. Menguji aplikasi mesin retail
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:
Setelah menjalankan penelusuran vektor kemiripan menggunakan model penyematan pada data AlloyDB, kita dapat beralih untuk membuat aplikasi yang menggunakan penyematan ini bersama dengan gambar Anda, dan meminta untuk membuat saran gaya
12. Memahami alur rekomendasi pakaian
Aplikasi rekomendasi pakaian adalah aplikasi boot sprint yang dikonfigurasi agar berfungsi dengan penyematan yang kita buat di aplikasi mesin retail AlloyDB bersama dengan Gemini dan Imagen untuk menghasilkan opsi gaya pakaian visual. Anda juga dapat menambahkan perintah kustom dan melakukan improvisasi pada rekomendasi.
Anggaplah seperti ini, Anda mengupload gambar atasan berwarna merah muda terang di lemari pakaian Anda ke aplikasi ini. Saat Anda mengklik Tampilkan, berdasarkan perintah yang ditetapkan dalam kode aplikasi dan penyematan di database AlloyDB, aplikasi akan menghasilkan beberapa opsi yang cocok dengan gambar asli. Sekarang Anda ingin tahu seperti apa opsi yang disarankan dengan kalung biru, jadi Anda menambahkan perintah pada baris tersebut, lalu mengklik Gaya. Gambar akhir akan dibuat yang menggabungkan kombinasi kuat antara gambar asli dan rekomendasi untuk membuat pakaian yang cocok.
Untuk mulai membuat aplikasi rekomendasi pakaian, ikuti langkah-langkah berikut:
- Di Cloud Run, buka aplikasi retail-engine, dan catat URL aplikasi Anda. Ini adalah repositori penyematan yang akan kita gunakan untuk menghasilkan saran serupa.
- Di IDE, 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 yang terkait dengan aplikasi perekomendasikan pakaian. File ini menangani permintaan GET dan POST, memproses perintah pengguna, menganalisis gambar, berinteraksi dengan penyematan 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 gambar dan file HTML yang diperlukan untuk membuat UI aplikasi.Pom.xml
: Menentukan dependensi dan konfigurasi project.
- Dalam kode Visual Studio, buka
HelloWorldController.java
dan perbarui instance ID dan lokasi project sesuai dengan tempat instance AlloyDB Anda dibuat.
- Perbarui
endpoint
ke URL aplikasi mesin retail yang Anda hosting sebelumnya.
- Buka
GenerateImageSample.java
, lalu perbarui project ID dan lokasi sesuai tempat instance AlloyDB Anda dibuat.
- Simpan semua file.
Sekarang kita akan men-deploy aplikasi ini ke runtime serverless Cloud Run.
13. Mentransfer aplikasi ke web
Setelah menambahkan project, lokasi, dan detail aplikasi retail-engine yang relevan ke aplikasi spring boot outfit recommender, 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:
- Di IDE, buka direktori yang di-clone dan mulai terminal. Untuk Visual Code Studio, klik Terminal > New Terminal.
- Ikuti petunjuk dalam dokumen ini untuk menginstal gcloud CLI.
- Jika Anda menggunakan Visual Code Studio, klik Extensions, telusuri Google Cloud Code, lalu instal ekstensi.
- Di terminal IDE, autentikasi akun Google Anda dengan menjalankan perintah berikut:
gcloud auth application-default login
- Tetapkan project ID Anda ke project yang sama dengan tempat instance AlloyDB Anda berada.
gcloud config set project PROJECT_ID
- Mulai proses deployment.
gcloud run deploy
- Di
Source code location
, tekan Enter untuk memilih direktori GitHub yang di-clone. - Di
Service name
, masukkan nama untuk layanan, seperti outfit-recommender, lalu tekan Enter. - Di
Please specify a region
, masukkan lokasi tempat instance AlloyDB dan aplikasi retail-engine dihosting, seperti 32 untuk us-central1, lalu tekan Enter.
- Di
Allow unauthenticated invocations to [..]
, masukkan Y, lalu tekan Enter.
Gambar berikut menunjukkan progres deployment aplikasi Anda:
14. Menguji aplikasi rekomendasi pakaian
Setelah aplikasi berhasil di-deploy ke Cloud Run, Anda dapat melihat layanan di Konsol Google Cloud sebagai berikut:
- Di Konsol Google Cloud, buka Cloud Run.
- Di Layanan, klik layanan outfit recommender yang Anda deploy. Anda akan melihat layanan retail-engine dan outfit-recommender sebagai berikut:
- Klik URL aplikasi untuk membuka UI aplikasi perekomendasikan.
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:
Menggunakan aplikasi
Untuk mulai menggunakan aplikasi, ikuti langkah-langkah berikut:
- Klik Upload, lalu upload gambar item pakaian.
- Setelah gambar diupload, klik Gaya. Aplikasi menggunakan gambar sebagai perintah dan menghasilkan opsi bawah berdasarkan perintah dari aplikasi mesin retail yang menyertakan penyematan untuk set data retail.
Aplikasi ini menghasilkan saran gambar beserta perintah berdasarkan gambar dengan rekomendasi gaya visual. Contoh, A white semi-sheer button up blouse with pink floral patterns on it, with balloon sleeves.
- 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.
- Klik Tampilkan untuk melihat gaya akhir.
15. Pembersihan
Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam postingan ini, ikuti langkah-langkah berikut:
- Di konsol Google Cloud, buka halaman Manage resources.
- Dalam daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
- 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 Vector Search bersama dengan menggunakan hasil penelusuran dengan model Imagen yang canggih untuk menghasilkan rekomendasi gaya visual.