Informazioni su questo codelab
1. Panoramica
Immagina un'app di moda che non solo ti aiuta a trovare l'outfit perfetto, ma ti fornisce anche consigli di stile in tempo reale, il tutto grazie alla potenza dell'integrazione dell'IA generativa all'avanguardia. In questo intervento, scopriremo come abbiamo creato un'app di questo tipo utilizzando le funzionalità di ricerca vettoriale di AlloyDB, insieme all'indice ScaNN di Google, per consentire ricerche ultraveloci di abbinamenti e fornire consigli di moda istantanei.
Inoltre, esamineremo in che modo l'indice ScaNN di AlloyDB ottimizza le query complesse per generare suggerimenti di stile personalizzati. Utilizzeremo anche Gemini e Imagen, potenti modelli di AI generativa, per fornire ispirazione per stili creativi e persino visualizzare i tuoi look personalizzati. L'intera applicazione è basata su un'architettura serverless, che garantisce un'esperienza fluida e scalabile per gli utenti.
La sfida: offrendo suggerimenti di outfit personalizzati, l'app intende aiutare le persone che hanno difficoltà a scegliere cosa indossare. Inoltre, aiuta a evitare la perdita di interesse causata dall'indecisione nella scelta dell'outfit.
La soluzione: l'app di consigli sugli outfit risolve il problema di offrire agli utenti un'esperienza di moda intelligente, personalizzata e coinvolgente, mostrando al contempo le funzionalità di AlloyDB, dell'IA generativa e delle tecnologie serverless.
Cosa creerai
In questo lab imparerai a:
- Crea un'istanza AlloyDB e carica il set di dati di e-commerce
- Attiva le estensioni dei modelli di IA generativa e pgvector in AlloyDB
- Genera embedding dalla descrizione del prodotto
- Esegui il deployment della soluzione in Cloud Run Functions serverless
- Carica un'immagine su Gemini e genera un prompt per la descrizione dell'immagine.
- Genera risultati di ricerca basati su prompt combinati con gli embedding del set di dati di e-commerce.
- Aggiungi altri prompt per personalizzare il prompt e generare consigli sullo stile.
- Esegui il deployment della soluzione in Cloud Run Functions serverless
Requisiti
2. Architettura
L'architettura di alto livello dell'app è la seguente:
Le sezioni seguenti mettono in evidenza il flusso contestuale del tutorial:
Importazione:
Il primo passaggio consiste nell'importare i dati di vendita al dettaglio (inventario, descrizioni dei prodotti, interazioni con i clienti) in AlloyDB.
Motore di analisi:
Utilizzeremo AlloyDB come motore di analisi per eseguire le seguenti operazioni:
- Estrazione del contesto:il motore analizza i dati archiviati in AlloyDB per comprendere le relazioni tra prodotti, categorie, comportamento dei clienti e così via, a seconda dei casi.
- Creazione di incorporamenti:gli incorporamenti (rappresentazioni matematiche del testo) vengono generati sia per la query dell'utente sia per le informazioni memorizzate in AlloyDB.
- Ricerca vettoriale:il motore esegue una ricerca di somiglianza, confrontando l'embedding della query con gli embedding delle descrizioni dei prodotti, delle recensioni e di altri dati pertinenti. In questo modo vengono identificati i 25 "vicini più prossimi" più pertinenti.
Consiglio di Gemini:
L'array di byte dell'immagine viene passato al modello Gemini tramite l'API Vertex AI, insieme al prompt che richiede una descrizione testuale dell'abbigliamento superiore e ai suggerimenti di abbigliamento inferiore.
Ricerca di vettori e RAG di AlloyDB:
La descrizione dell'abbigliamento viene utilizzata per eseguire query sul database. La query converte il testo di ricerca (consiglio del modello Gemini per la corrispondenza dell'usura del fondo) in embedding ed esegue una ricerca vettoriale sugli embedding archiviati nel database per trovare i vicini più prossimi (risultati corrispondenti). Gli incorporamenti vettoriali nel database AlloyDB vengono indicizzati utilizzando l'indice ScaNN per un recupero migliore.
Generazione di immagini di risposta:
Le risposte convalidate sono strutturate in un array JSON e l'intero motore è pacchettizzato in una funzione Cloud Run serverless invocata da Agent Builder.
Generazione di immagini Imagen:
Il prompt di stile dell'utente, un consiglio selezionato dall'utente e eventuali richieste di personalizzazione vengono combinati per mostrare a Imagen 3 un'immagine esistente. L'immagine di stile viene generata in base a questo prompt utilizzando l'API Vertex AI.
3. Prima di iniziare
Crea un progetto
- Nella console Google Cloud, nella pagina di selezione del progetto, seleziona o crea un progetto Google Cloud.
- Verifica che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è attivata in un progetto .
- Utilizzerai Cloud Shell, un ambiente a riga di comando in esecuzione in Google Cloud precaricato con bq. Fai clic su Attiva Cloud Shell (
) nella parte superiore della console Google Cloud.
- Una volta connesso a Cloud Shell, verifica di aver già eseguito l'autenticazione e che il progetto sia impostato sul tuo ID progetto utilizzando il seguente comando:
gcloud auth list
- Esegui il comando seguente per verificare che i futuri comandi gcloud identifichino correttamente il tuo progetto.
gcloud config list project
- Se il progetto non è impostato, utilizza il seguente comando per impostarlo esplicitamente:
gcloud config set project <YOUR_PROJECT_ID>
- Abilita le API richieste.
Segui il link per abilitare le API.
Se non riesci ad attivare un'API, puoi farlo in qualsiasi momento durante l'implementazione.
Per ulteriori informazioni sui comandi e sull'utilizzo di gcloud, consulta la documentazione.
4. Configurazione del database
In questo lab utilizzeremo AlloyDB come database per archiviare il set di dati di e-commerce per la vendita al dettaglio. Utilizza i cluster per archiviare tutte le risorse, come database e log. Ogni cluster ha un'istanza principale che fornisce un punto di accesso ai dati. Le tabelle sono la risorsa effettiva che archivia i dati.
Creiamo un cluster, un'istanza e una tabella AlloyDB in cui verrà caricato il set di dati di e-commerce.
Crea un cluster e un'istanza
- Nella console Google Cloud, cerca AlloyDB. Un modo semplice per trovare la maggior parte delle pagine in Cloud Console è cercarle utilizzando la barra di ricerca della console.
- Fai clic su CREA CLUSTER.
- Crea un cluster e un'istanza con i seguenti valori:
- cluster id: "
shopping-cluster
" - password: "
alloydb
" - Compatibile con PostgreSQL 15
- Regione: "
us-central1
" - Networking: "
default
"
- In Rete, quando selezioni la rete predefinita, viene visualizzata la seguente opzione. Fai clic su CONFIGURA CONNESSIONE per configurare una rete predefinita.
- Seleziona Utilizza un intervallo IP allocato automaticamente e fai clic su Continua. Dopo aver esaminato le informazioni, fai clic su CREA CONNESSIONE.
Attendi il completamento della creazione della rete predefinita.
- In Configura l'istanza principale, imposta l'ID istanza su "
shopping-instance"
.
- Fai clic su CREA CLUSTER per completare la configurazione del cluster nel seguente modo:
5. Importazione dati
Ora è il momento di aggiungere una tabella con i dati del negozio. Attendi il completamento della creazione dell'istanza. Una volta creato, puoi accedere ad AlloyDB utilizzando le credenziali impostate durante la creazione del cluster.
Esegui l'autenticazione al database AlloyDB
- Nella console Google Cloud, vai a AlloyDB. Seleziona il cluster principale, quindi fai clic su AlloyDB Studio nel menu di navigazione a sinistra:
- Inserisci i seguenti dettagli per autenticarti al database AlloyDB:
- Nome utente : "
postgres
" - Database : "
postgres
" - Password : "
alloydb
"
Una volta eseguita l'autenticazione in AlloyDB Studio, i comandi SQL vengono inseriti nelle schede Editor. Puoi aggiungere più finestre di Editor utilizzando il segno Più a destra della prima scheda di Editor.
Inserisci i comandi per AlloyDB nelle finestre dell'editor, utilizzando le opzioni Esegui, Formatta e Cancella in base alle tue esigenze.
Attivare le estensioni
Per creare questa app, utilizzeremo le estensioni "pgvector"
" e "google_ml_integration"
".
- L'estensione pgvector ti consente di archiviare e cercare gli incorporamenti vettoriali.
- L'estensione google_ml_integration fornisce le funzioni che utilizzi per accedere agli endpoint di previsione di Vertex AI per ottenere le previsioni in SQL.
- Attiva queste estensioni eseguendo i seguenti DDL:
CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE;
CREATE EXTENSION IF NOT EXISTS vector;
- Verifica se le estensioni sono installate eseguendo questo comando SQL:
select extname, extversion from pg_extension;
Creare una tabella
- Crea una tabella utilizzando la seguente istruzione DDL:
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) );
Se l'esecuzione del comando riportato sopra ha esito positivo, dovresti essere in grado di visualizzare la tabella in
Nomentana. L'immagine seguente mostra un esempio:
Importa i dati
Per questo lab, abbiamo dati di test di circa 200 record in questo file SQL. Contiene id, category, sub_category, uri, image
e content
. Gli altri campi verranno compilati più avanti nel lab.
- Copia le 20 righe/istruzioni INSERT dal file SQL in una nuova scheda Editor in AlloyDB Studio e fai clic su Esegui.
- Espandi la sezione Esplora finché non vedi la tabella denominata
apparels
. - Fai clic sull'icona del menu [⋮] e poi su Query. In una nuova scheda dell'editor si aprirà un'istruzione SELECT.
- Fai clic su Esegui per verificare che le righe siano inserite.
Concedi autorizzazione all'utente
Concederemo all'utente postgres
l'autorizzazione per generare embedding da AlloyDB.
. In AlloyDB Studio, esegui la seguente istruzione per concedere all'utente postgres
i diritti di esecuzione sulla funzione embedding
:
GRANT EXECUTE ON FUNCTION embedding TO postgres;
Concedi il RUOLO Utente Vertex AI all'account di servizio AlloyDB
Utilizzeremo i modelli di embedding di testo di Vertex AI per generare embedding per il quale il RUOLO utente Vertex AI è associato all'account di servizio AlloyDB.
Nella console Google Cloud, fai clic sull'icona del terminale Cloud Shell [ ] ed esegui il seguente comando:
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. Contesto build
Per creare un'evidenziazione, dobbiamo avere un context
, ovvero tutte le informazioni che vogliamo includere in un unico campo. A tal fine, creeremo una descrizione del prodotto che verrà memorizzata nella colonna pdt_desc
della tabella apparels
.
Nel nostro caso, utilizzeremo tutte le informazioni su ciascun prodotto, ma quando esegui questa operazione con i tuoi dati, sentiti libero di progettarli nel modo che ritieni più utile per la tua attività.
Nella scheda Editor di AlloyDB Studio, esegui il seguente comando che aggiorna il campo pdt_desc
con i dati di contesto:
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;
Questa DML crea un semplice riepilogo del contesto utilizzando le informazioni di tutti i campi disponibili nella tabella e altre dipendenze (se presenti nel caso d'uso). Per un assortimento più preciso di informazioni e creazione di contesto, non esitare a progettare i dati nel modo più utile per la tua attività.
7. Crea gli incorporamenti per il contesto
Per i computer è molto più facile elaborare numeri che testo. Un sistema di embedding converte il testo in una serie di numeri in virgola mobile che dovrebbero rappresentare il testo, indipendentemente dalla formulazione, dalla lingua utilizzata e così via.
Prova a descrivere una località sul mare. Potrebbe essere chiamato "on the water
", "beachfront
", "walk from your room to the ocean
", "sur la mer
", "на берегу океана
" e così via. Questi termini sembrano tutti diversi, ma il loro significato semantico o, nella terminologia del machine learning, i loro embedding dovrebbero essere molto vicini tra loro.
Ora che i dati e il contesto sono pronti, eseguiremo il codice SQL per aggiungere gli embedding della colonna descrizione prodotto(pdt_desc
alla tabella nel campo embedding
. Esistono diversi modelli di embedding che puoi utilizzare. Utilizziamo text-embedding-005
di Vertex AI.
- In AlloyDB Studio, esegui il seguente comando per generare gli embedding e aggiorna la colonna
pdt_desc
con gli embedding per i dati memorizzati:
UPDATE
apparels
SET
embedding = embedding( 'text-embedding-005',
pdt_desc)
WHERE
TRUE;
- Verifica che gli embedding vengano generati eseguendo il seguente comando:
SELECT
id,
category,
sub_category,
content,
embedding
FROM
Apparels
LIMIT 5;
Di seguito è riportato un esempio di vettore di embedding, che ha l'aspetto di un array di valori float, per il testo di esempio nella query:
8. Eseguire una ricerca vettoriale
Ora che la tabella, i dati e gli embedding sono pronti, eseguiamo la ricerca di vettori in tempo reale per il testo di ricerca dell'utente.
Supponiamo che il testo di ricerca dell'utente sia "pink color, casual, pure cotton tops for women
"
Per trovare corrispondenze per questa query, esegui la seguente query SQL:
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;
Esaminiamo questa query in dettaglio:
In questa query,
- Il testo di ricerca dell'utente è: "
I want womens tops, pink casual only pure cotton.
" - Stiamo convertendo questo testo di ricerca in embedding utilizzando il metodo
embedding()
e il modellotext-embedding-005
. Questo passaggio dovrebbe essere simile all'ultimo, in cui abbiamo applicato la funzione di incorporamento a tutti gli elementi della tabella. - "
<=>
" indica l'utilizzo del metodo di distanza COSINE SIMILARITY. Puoi trovare tutte le misure di somiglianza disponibili nella documentazione di pgvector. - Stiamo convertendo il risultato del metodo di embedding in un tipo di dati vettore per renderlo compatibile con i vettori archiviati nel database.
- LIMIT 5 indica che vogliamo estrarre 5 vicini più prossimi per il testo di ricerca.
Di seguito è riportato un esempio di risposta di questa query SQL:
Come puoi notare nei risultati, le corrispondenze sono molto simili al testo di ricerca. Prova a cambiare il colore per vedere come cambiano i risultati.
Indice ScaNN di AlloyDB per le prestazioni delle query
Supponiamo ora di voler aumentare il rendimento (tempo di query), l'efficienza e il richiamo di questo risultato di ricerca vettoriale utilizzando l'indice ScaNN.
Se vuoi utilizzare l'indice ScaNN, prova a svolgere i seguenti passaggi:
- Poiché abbiamo già creato il cluster, l'istanza, il contesto e gli embedding, dobbiamo solo installare l'estensione ScaNN utilizzando la seguente dichiarazione:
CREATE EXTENSION IF NOT EXISTS alloydb_scann;
- Crea l'indice ScaNN:
CREATE INDEX apparel_index ON apparels
USING scann (embedding cosine)
WITH (num_leaves=54);
Nel DDL riportato sopra:
apparel_index
è il nome dell'indice.apparels
è il nome della tabella.scann
è il metodo di indice.embedding
è la colonna della tabella che vuoi indicizzare.cosine
è il metodo di distanza che vuoi utilizzare con l'indice.54
è il numero di partizioni da applicare a questo indice. Imposta un valore compreso tra 1 e 1048576. Per ulteriori informazioni su come decidere questo valore, consulta Ottimizzare un indice ScaNN.
In base al consiglio nel repo di ScaNN, abbiamo utilizzato la RADICE QUADRATA del numero di punti dati. Durante la suddivisione, num_leaves
deve essere approssimativamente la radice quadrata del numero di punti dati.
- Verifica se l'indice viene creato utilizzando la query:
SELECT * FROM pg_stat_ann_indexes;
- Esegui la ricerca vettoriale utilizzando la stessa query utilizzata senza l'indice:
select * from apparels
ORDER BY embedding <=> CAST(embedding('textembedding-gecko', 'white tops for girls without any print') as vector(768))
LIMIT 20
La query riportata sopra è la stessa utilizzata nel laboratorio nel passaggio 8. Tuttavia, ora il campo è indicizzato utilizzando l'indice ScaNN.
- Esegui il test con una semplice query di ricerca con e senza l'indice. Per eseguire il test senza indice, devi eliminare l'indice:
white tops for girls without any print
Il testo di ricerca riportato sopra nella query di ricerca vettoriale sui dati degli incorporamenti INDEXED genera risultati di ricerca di qualità ed efficienza. L'efficienza è notevolmente migliorata (in termini di tempo di esecuzione: 10,37 ms senza ScaNN e 0,87 ms con ScaNN) con l'indice. Per ulteriori informazioni su questo argomento, consulta questo post del blog.
9. Convalida della corrispondenza con l'LLM
Prima di procedere e creare un servizio per restituire le corrispondenze migliori a un'applicazione, utilizziamo un modello di IA generativa per verificare se queste potenziali risposte sono davvero pertinenti e sicure da condividere con l'utente.
Verificare che l'istanza sia configurata per Gemini
- Verifica che
google_ml_integration
sia già abilitato per il cluster e l'istanza. In AlloyDB Studio, esegui il seguente comando:
show google_ml_integration.enable_model_support;
Se il valore visualizzato è "on", puoi saltare i due passaggi successivi e andare direttamente alla configurazione.
l'integrazione del modello AlloyDB e Vertex AI.
- Vai all'istanza principale del tuo cluster AlloyDB e fai clic su MODIFICA INTENDITA PRINCIPALE.
- In Opzioni di configurazione avanzata, espandi la sezione Nuovo flag di database e assicurati che
google_ml_integration.enable_model_support flag
sia impostato su "on
" come segue:
3. Se non è impostato su "
on
", impostalo su "on
" e poi fai clic su AGGIORNA INSTANCE.
Questo passaggio richiederà alcuni minuti.
Integrazione di AlloyDB e del modello Vertex AI
Ora puoi connetterti ad AlloyDB Studio ed eseguire il seguente statement DML per configurare l'accesso al modello Gemini da AlloyDB, utilizzando l'ID progetto dove indicato. Prima di eseguire il comando, potresti ricevere un avviso di errore di sintassi, ma l'esecuzione dovrebbe essere corretta.
- Nella console Google Cloud, vai a AlloyDB. Seleziona il cluster principale e poi fai clic su AlloyDB Studio nel riquadro di navigazione a sinistra.
- Utilizzeremo il
gemini-1.5-pro:generateContent
disponibile per impostazione predefinita con l'estensionegoogle_ml_integration
. - Puoi controllare i modelli configurati per l'accesso tramite il seguente comando in AlloyDB Studio:
select model_id,model_type from google_ml.model_info_view;
- Concedi agli utenti del database l'autorizzazione per eseguire la funzione ml_predict_row per eseguire previsioni utilizzando i modelli Google Vertex AI eseguendo il seguente comando:
GRANT EXECUTE ON FUNCTION ml_predict_row to postgres;
Valutazione delle risposte
Sebbene alla fine utilizzeremo una singola query di grandi dimensioni per la sezione successiva in cui trasferiamo effettivamente l'applicazione in Cloud Run, per garantire che le risposte della query siano ragionevoli, la query può essere difficile da comprendere.
Esamineremo le singole sezioni che contribuiscono a creare la query più grande che utilizziamo.
- Innanzitutto invieremo una richiesta al database per ottenere le 5 corrispondenze più vicine a una query dell'utente. Stiamo hardcoding la query per semplificare, ma non preoccuparti, la interpoleremo nella query in un secondo momento.
Stiamo includendo la descrizione del prodotto dalla tabella apparels
e aggiungendo due nuovi campi: uno che combina la descrizione con l'indice e un altro con la richiesta originale. Questi dati vengono salvati in una tabella denominata xyz
, che è un nome tabella temporaneo.
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;
L'output di questa query sarà costituito dalle 5 righe più simili relative alla query dell'utente. Le
la nuova tabella xyz
conterrà 5 righe, ognuna delle quali avrà le seguenti colonne:
literature
content
user_text
- Per determinare la validità delle risposte, utilizzeremo una query complessa in cui spiegheremo come valutarle. Utilizza
user_text
econtent
nella tabellaxyz
come parte della query.
"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."
- Utilizzando questa query, esamineremo la "bontà" delle risposte nella tabella
xyz
. Quando parliamo di "bontà", intendiamo quanto le risposte generate siano accurate rispetto a quelle che ci aspettiamo.
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
restituisce il risultato in formato JSON. Il codice "-> 'candidates' -> 0 -> 'content' -> 'parts' -> 0 -> 'text'"
viene utilizzato per estrarre il testo effettivo dal JSON. Per visualizzare il JSON effettivo restituito, puoi rimuovere questo codice.- Infine, per ottenere il campo LLM, devi solo estrarlo dalla tabella x:
SELECT
LLM_RESPONSE
FROM
x;
- Questi dati possono essere combinati in un'unica query come segue:
Avviso: se hai eseguito le query precedenti per controllare i risultati intermedi,
assicurati di eliminare/rimuovere le tabelle xyz
e x
dal database AlloyDB prima di eseguire questa query.
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;
La query più grande è una combinazione di tutte le query eseguite nei passaggi precedenti. I risultati indicano se esiste o meno una corrispondenza, la percentuale di corrispondenza e una spiegazione della valutazione.
Tieni presente che lo streaming è attivato per impostazione predefinita nel modello Gemini, pertanto la risposta effettiva è suddivisa su più righe:
10. Trasferisci l'applicazione sul web
Ora ospiteremo questa applicazione in modo che sia accessibile da internet.
Crea la funzione Cloud Run
- Nella console Google Cloud, vai a Funzioni Cloud Run utilizzando il seguente link:
https://console.cloud.google.com/run/create?deploymentType=function
- In Configura, imposta il nome della funzione su "retail-engine" e seleziona la regione "us-central1".
- In URL endpoint, seleziona il runtime come Java 17.
- In Autenticazione, seleziona Consenti chiamate non autenticate.
- Espandi Container, volumi, networking, sicurezza e fai clic sulla scheda Networking.
- Seleziona Connettiti a un VPC per il traffico in uscita e poi fai clic su Utilizza connettori di accesso VPC serverless.
- In Rete, fai clic su Aggiungi nuovo connettore VPC. Abilita l'API Accesso VPC serverless, se non è già abilitata.
- In Crea connettore, imposta il nome su
alloydb-test-conn
. - Imposta la regione su
us-central
. - Lascia il valore della rete su predefinito e imposta Subnet su Intervallo IP personalizzato con l'intervallo IP 10.8.0.0 o un valore simile disponibile.
- Espandi le impostazioni Mostra scalabilità e imposta Istanze minime su 2 e Istanze massime su 3.
- Seleziona il tipo di istanza f1-micro. Di seguito sono riportate le opzioni per creare un connettore:
- Fai clic su Crea per creare il connettore.
- In Routing del traffico, seleziona Instrada tutto il traffico al VPC.
- Fai clic su Crea per creare la funzione.
Esegui il deployment dell'applicazione
Dopo aver creato la funzione, aggiorna il codice sorgente ed esegui nuovamente il deployment dell'applicazione.
- In Cloud Run, fai clic sulla scheda Servizi e poi sulla funzione retail-engine.
- Fai clic sulla scheda Origine. Lascia il punto di ingresso della funzione predefinito impostato su "
gcfv2.HelloHttpFunction
". - Sostituisci i contenuti del file HelloHttpFunction.java con i contenuti di questo file Java.
- Aggiorna i dettagli di AlloyDbJdbcConnector nel file in base ai dettagli dell'istanza e del cluster AlloyDB. Sostituisci
$PROJECT_ID
con l'ID progetto del cluster e dell'istanza AlloyDB.
- Sostituisci i contenuti del file pom.xml con i contenuti di questo file XML.
- Fai clic su Salva ed esegui nuovamente il deployment per eseguire il deployment della funzione.
11. Testa l'applicazione del motore di vendita al dettaglio
Una volta eseguito il deployment della funzione Cloud aggiornata, dovresti vedere l'endpoint nel seguente formato:
https://retail-engine-PROJECT_NUMBER.us-central1.run.app
Puoi testarlo dal terminale Cloud Shell eseguendo il seguente comando:
gcloud functions call retail-engine --region=us-central1 --gen2 --data '{"search": "I want some kids clothes themed on Disney"}'
In alternativa, puoi testare la funzione Cloud Run nel seguente modo:
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 .
E il risultato:
Ora che abbiamo eseguito la ricerca di vettori di somiglianza utilizzando il modello di embedding sui dati di AlloyDB, possiamo procedere alla creazione dell'applicazione che utilizza questi embedding insieme all'immagine e ai prompt per generare suggerimenti di stile
12. Informazioni sul flusso di consigli sugli outfit
L'app di consigli sugli outfit è un'applicazione di avvio rapido configurata per funzionare con gli embedding che abbiamo creato nell'applicazione del motore di vendita al dettaglio AlloyDB insieme a Gemini e Imagen per generare opzioni di stile per gli outfit visivi. Inoltre, ti consente di aggiungere prompt personalizzati e di improvvisare il consiglio.
Pensaci in questo modo: carichi in questa app un'immagine di un top rosa acceso nel tuo guardaroba. Quando fai clic su Mostra, in base al prompt impostato nel codice dell'applicazione e agli incorporamenti nel database AlloyDB, l'applicazione genera più opzioni corrispondenti all'immagine originale. Ora ti chiedi come potrebbero apparire le opzioni suggerite con una collana blu, quindi aggiungi un prompt su queste righe e fai clic su Stile. Viene generata l'immagine finale che combina la potente combinazione dell'immagine originale e dei consigli per creare un outfit abbinato.
Per iniziare a creare l'app di consigli sugli abbinamenti, segui questi passaggi:
- In Cloud Run, apri l'app retail-engine e prendi nota dell'URL dell'applicazione. Questo è il repository di embedding che utilizzeremo per generare suggerimenti simili.
- Nell'IDE, clona il repository https://github.com/AbiramiSukumaran/outfit-recommender/. Per questo esercizio, i passaggi mostrati vengono eseguiti nell'IDE Visual Studio Code.
git clone https://github.com/AbiramiSukumaran/outfit-recommender/
Di seguito sono riportati alcuni dei file importanti nella directory dell'app:
src/main
: directory di origine in cui si trovano i file dell'applicazione e HTML:HelloWorldApplication.java
: entry point principale per l'applicazione Spring Boot.HelloWorldController.java
: controller REST Spring Boot che gestisce le richieste HTTP relative a un'applicazione di consigli sugli outfit. Questo file gestisce le richieste GET e POST, elabora le richieste dell'utente, analizza le immagini, interagisce con gli embedding di AlloyDB e restituisce la risposta finale all'interfaccia utente. Questo controller chiama la classe GenerateImageSample.GenerateImageSample.java
: contiene la classe di generazione di immagini che si connette a Vertex AI, formatta il prompt dell'utente, effettua chiamate API al modello Imagen e restituisce l'immagine prevista alla classe di controllo.Resources
: questa directory contiene le immagini e i file HTML necessari per generare l'interfaccia utente dell'applicazione.Pom.xml
: definisce le dipendenze e le configurazioni del progetto.
- In Visual Studio Code, apri
HelloWorldController.java
e aggiorna le istanze dell'ID progetto e della posizione in base alla posizione in cui viene creata l'istanza AlloyDB.
- Aggiorna
endpoint
con l'URL dell'app retail-engine che hai ospitato in precedenza.
- Apri
GenerateImageSample.java
e aggiorna l'ID progetto e la posizione in base a dove viene creata l'istanza AlloyDB.
- Salva tutti i file.
Ora eseguiremo il deployment di questa applicazione nel runtime serverless Cloud Run.
13. Pubblicare l'applicazione sul web
Ora che abbiamo aggiunto i dettagli pertinenti del progetto, della località e dell'app del motore di vendita al dettaglio all'applicazione Spring Boot di consiglio di abbigliamento, possiamo eseguire il deployment dell'applicazione in Cloud Run.
Utilizzeremo il comando gcloud run deploy
nel terminale di Visual Studio Code per eseguire il deployment dell'applicazione. Per Visual Studio Code, puoi installare l'estensione Google Cloud Code per iniziare a utilizzare l'interfaccia a riga di comando gcloud.
Per eseguire il deployment dell'applicazione:
- Nell'IDE, apri la directory clonata e avvia il terminale. Per Visual Code Studio, fai clic su Terminale > Nuovo terminale.
- Segui le istruzioni in questo documento per installare gcloud CLI.
- Se utilizzi Visual Studio Code, fai clic su Estensioni, cerca Google Cloud Code e installa l'estensione.
- Nel terminale dell'IDE, autentica il tuo Account Google eseguendo il seguente comando:
gcloud auth application-default login
- Imposta l'ID progetto sullo stesso progetto in cui si trova l'istanza AlloyDB.
gcloud config set project PROJECT_ID
- Avvia la procedura di deployment.
gcloud run deploy
- In
Source code location
, premi Invio per selezionare la directory GitHub clonata. - In
Service name
, inserisci un nome per il servizio, ad esempio outfit-recommender, e premi Invio. - In
Please specify a region
, inserisci la posizione in cui sono ospitate l'istanza AlloyDB e l'applicazione retail-engine, ad esempio 32 per us-central1, e premi Invio.
- In
Allow unauthenticated invocations to [..]
, inserisci Y e premi Invio.
L'immagine seguente mostra lo stato di avanzamento del deployment dell'applicazione:
14. Testare l'applicazione di consigli sugli abiti
Dopo aver eseguito il deployment dell'applicazione in Cloud Run, puoi visualizzare il servizio nella console Google Cloud come segue:
- Nella console Google Cloud, vai a Cloud Run.
- In Servizi, fai clic sul servizio di consigli sugli abiti di cui hai eseguito il deployment. Dovresti vedere sia il servizio retail-engine sia il servizio outfit-recommender come segue:
- Fai clic sull'URL dell'applicazione per aprire l'interfaccia utente dell'app del recommender.
The following is a sample URL that you will use:
https://outfit-recommender-22905290964.us-central1.run.app/style
L'applicazione di cui è stato eseguito il deployment può essere visualizzata come segue:
Utilizzo dell'applicazione
Per iniziare a utilizzare l'applicazione:
- Fai clic su Carica e carica un'immagine di un capo di abbigliamento.
- Dopo aver caricato l'immagine, fai clic su Stile. L'applicazione utilizza l'immagine come prompt e genera le opzioni inferiori in base al prompt dell'app del motore di vendita al dettaglio che include gli embedding per il set di dati di vendita al dettaglio.
L'app genera suggerimenti di immagini insieme a un prompt basato sull'immagine con consigli sullo stile. Ad esempio, A white semi-sheer button up blouse with pink floral patterns on it, with balloon sleeves.
- Puoi passare ulteriori prompt a questo consiglio di stile generato automaticamente. Ad esempio,
STYLE RECOMMENDATION: Cute brown skirt on a curly updo. Make it photo realistic. Accessorize with cherry earrings and burgundy plastic case sling bag.
- Fai clic su Mostra per visualizzare lo stile finale.
15. Esegui la pulizia
Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo post, segui questi passaggi:
- Nella console Google Cloud, vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
- Nella finestra di dialogo, digita l'ID progetto, quindi fai clic su Chiudi per eliminare il progetto.
16. Complimenti
Complimenti! Hai eseguito correttamente una ricerca di similarità utilizzando AlloyDB, pgvector e la ricerca vettoriale, combinando il risultato di ricerca con il potente modello Imagen per generare consigli di stile.