1. Panoramica
Nel panorama del retail attuale in rapida evoluzione, è fondamentale offrire un servizio clienti eccezionale e allo stesso tempo consentire esperienze di acquisto personalizzate. Ti guideremo in un percorso tecnico attraverso la creazione di un'applicazione di chat basata sulla conoscenza progettata per rispondere alle domande dei clienti, guidare la scoperta dei prodotti e personalizzare i risultati di ricerca. Questa soluzione innovativa combina la potenza di AlloyDB per l'archiviazione dei dati, un motore di analisi interno per la comprensione contestuale, Gemini (Large Language Model) per la convalida della pertinenza e Agent Builder di Google per l'avvio rapido di un assistente conversazionale intelligente.
La sfida: i clienti dei negozi di vendita al dettaglio moderni si aspettano risposte immediate e consigli sui prodotti in linea con le loro preferenze specifiche. I metodi di ricerca tradizionali spesso non forniscono questo livello di personalizzazione.
La soluzione: la nostra applicazione di chat basata sulle conoscenze affronta questa sfida a testa alta. Sfrutta una ricca knowledge base ricavata dai tuoi dati di vendita al dettaglio per comprendere le intenzioni dei clienti, rispondere in modo intelligente e fornire risultati estremamente pertinenti.
Cosa creerai
Nell'ambito di questo lab (Parte 1), dovrai:
- 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 una ricerca di similarità di Cosine in tempo reale per il testo di ricerca dell'utente
- Esegui il deployment della soluzione in Cloud Run Functions serverless
La seconda parte del lab illustra i passaggi di Agent Builder.
Requisiti
2. Architettura
Flusso di dati: diamo un'occhiata più da vicino a come i dati si spostano nel nostro sistema:
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 similarità 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.
Convalida Gemini:
Queste potenziali risposte vengono inviate a Gemini per la valutazione. Gemini determina se sono davvero pertinenti e sicuri da condividere con l'utente.
Generazione di risposte:
Le risposte convalidate sono strutturate in un array JSON e l'intero motore è pacchettizzato in una funzione Cloud Run serverless invocata da Agent Builder.
Interazione di conversazione:
Agent Builder presenta le risposte all'utente in un formato di linguaggio naturale, facilitando un dialogo continuo. Questa parte verrà trattata in un lab successivo.
3. Prima di iniziare
Creare 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 per 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 seguente comando in Cloud Shell per verificare che il comando gcloud conosca il tuo progetto.
gcloud config list project
- Se il progetto non è impostato, utilizza il seguente comando per impostarlo:
gcloud config set project <YOUR_PROJECT_ID>
- Abilita le API richieste.
gcloud services enable alloydb.googleapis.com \
compute.googleapis.com \
cloudresourcemanager.googleapis.com \
servicenetworking.googleapis.com \
run.googleapis.com \
cloudbuild.googleapis.com \
cloudfunctions.googleapis.com \
aiplatform.googleapis.com
L'alternativa al comando gcloud è tramite la console cercando ciascun prodotto o utilizzando questo link.
Se manca un'API, puoi sempre attivarla durante l'implementazione.
Consulta la documentazione per i comandi e l'utilizzo di gcloud.
4. Configurazione del database
In questo lab utilizzeremo AlloyDB come database per memorizzare i dati di vendita al dettaglio. Utilizza i clusters per contenere tutte le risorse, come database e log. Ogni cluster ha un'istanza principale che fornisce un punto di accesso ai dati. Le tabelle conterranno i dati effettivi.
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
- Esplora la pagina AlloyDB nella console Cloud. Un modo semplice per trovare la maggior parte delle pagine in Cloud Console è cercarle utilizzando la barra di ricerca della console.
- Seleziona CREA CLUSTER da questa pagina:
- Viene visualizzata una schermata come quella riportata di seguito. 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
"
- Quando selezioni la rete predefinita, viene visualizzata una schermata come quella riportata di seguito. Seleziona CONFIGURA CONNESSIONE.
- Da qui, seleziona "Utilizza un intervallo IP allocato automaticamente" e Continua. Dopo aver esaminato le informazioni, seleziona CREA CONNESSIONE.
- Una volta configurata la rete, puoi continuare a creare il cluster. Fai clic su CREA CLUSTER per completare la configurazione del cluster come mostrato di seguito:
Assicurati di modificare l'ID istanza in "shopping-instance"
".
Tieni presente che la creazione del cluster richiederà circa 10 minuti. Al termine dell'operazione, dovresti visualizzare una schermata simile a questa:
5. Importazione dati
Ora è il momento di aggiungere una tabella con i dati del negozio. Vai ad AlloyDB, seleziona il cluster principale e poi AlloyDB Studio:
Potresti dover attendere il completamento della creazione dell'istanza. Una volta completata la procedura, accedi ad AlloyDB utilizzando le credenziali che hai creato durante la creazione del cluster. Utilizza i seguenti dati per l'autenticazione in PostgreSQL:
- Nome utente : "
postgres
" - Database : "
postgres
" - Password : "
alloydb
"
Una volta autenticati in AlloyDB Studio, i comandi SQL vengono inseriti nell'editor. Puoi aggiungere più finestre di Editor utilizzando il segno Più a destra dell'ultima finestra.
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;
Se vuoi controllare le estensioni che sono state attivate nel tuo database, esegui questo comando SQL:
select extname, extversion from pg_extension;
Creare una tabella
Crea una tabella utilizzando l'istruzione DDL riportata di seguito:
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 precedente è andata a buon fine, dovresti essere in grado di visualizzare la tabella nel database. Di seguito è riportato uno screenshot di 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 da lì, poi incollale in una scheda dell'editor vuota e seleziona Esegui.
Per visualizzare i contenuti della tabella, espandi la sezione Esplora fino a visualizzare la tabella denominata abbigliamento. Seleziona i tre puntini (⋮) per visualizzare l'opzione Esegui query sulla tabella. In una nuova scheda dell'editor si aprirà un'istruzione SELECT.
Concedi autorizzazione
Esegui l'istruzione riportata di seguito 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
Vai al 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
Torna alla pagina Instanza AlloyDB.
Per creare un'evidenziazione, dobbiamo avere un context
, ovvero tutte le informazioni che vogliamo includere in un unico campo. Per farlo, creeremo una descrizione del prodotto (che chiameremo pdt_desc
). 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à.
Esegui la seguente istruzione da AlloyDB Studio della tua istanza appena creata. Il campo pdt_desc verrà aggiornato 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 relativi 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 descrizione del prodotto alla tabella nel campo embedding
. Esistono diversi modelli di embedding che puoi utilizzare. Utilizziamo text-embedding-004
di Vertex AI. Assicurati di utilizzare lo stesso modello di embedding in tutto il progetto.
Nota: se utilizzi un progetto Google Cloud esistente creato un po' di tempo fa, potresti dover continuare a utilizzare versioni precedenti del modello di embedding del testo, come textembedding-gecko.
UPDATE
apparels
SET
embedding = embedding( 'text-embedding-004',
pdt_desc)
WHERE
TRUE;
Esamina di nuovo la tabella apparels
per vedere alcuni embedding. Assicurati di eseguire di nuovo l'istruzione SELECT per visualizzare le modifiche.
SELECT
id,
category,
sub_category,
content,
embedding
FROM
apparels;
Dovrebbe restituire il vettore di incorporamenti, che ha la forma di un array di valori float, per il testo di esempio nella query, come mostrato di seguito:
Nota:i progetti Google Cloud appena creati nel livello senza costi potrebbero riscontrare problemi di quota per quanto riguarda il numero di richieste di incorporamento consentite al secondo per i modelli di incorporamento. Ti consigliamo di utilizzare una query di filtro per l'ID e di scegliere in modo selettivo 1-5 record e così via, durante la generazione dell'embedding.
8. Eseguire la 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 l'utente chieda:
"Voglio top da donna, casual rosa solo in puro cotone."
Puoi trovare corrispondenze per questo eseguendo la query riportata di seguito:
SELECT
id,
category,
sub_category,
content,
pdt_desc AS description
FROM
apparels
ORDER BY
embedding <=> embedding('text-embedding-004',
'I want womens tops, pink casual only pure cotton.')::vector
LIMIT
5;
Esaminiamo questa query in dettaglio:
In questa query,
- Il testo di ricerca dell'utente è: "Voglio top da donna, rosa casual solo puro cotone".
- Lo stiamo convertendo in embedding nel metodo
embedding()
utilizzando il modello:text-embedding-004
. 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 tipo di 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.
Il risultato sarà simile al seguente:
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.
Nota importante:
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. Leggi i passaggi descritti in questo post del blog per confrontare la differenza del risultato con e senza l'indice. Per comodità, di seguito sono elencati i passaggi per la creazione dell'indice:
- 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;
- A questo punto creeremo 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" è la mia tabella
"scann" è il metodo di indicizzazione
"embedding" è la colonna della tabella che voglio indicizzare
"cosine" è il metodo di distanza che voglio 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.
Ho utilizzato la RADICE QUADRATA del numero di punti dati, come consigliato nel repo ScaNN (durante la partizione, num_leaves deve essere approssimativamente la radice quadrata del numero di punti dati).
- Controlla 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.
- Esegui il test con una semplice query di ricerca con e senza l'indice (rimuovendo l'indice):
white tops for girls
without any print
Il testo di ricerca riportato sopra nella query di ricerca vettoriale sui dati degli incorporamenti INDICATI 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
Innanzitutto, controlla se l'integrazione di Google ML è già attivata per il cluster e l'istanza. In AlloyDB Studio, dai 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 dell'integrazione del modello AlloyDB e Vertex AI.
- Vai all'istanza principale del cluster AlloyDB e fai clic su MODIFICA ISTANZA PRINCIPALE.
- Vai alla sezione Indicatori nelle Opzioni di configurazione avanzata. e assicurati che
google_ml_integration.enable_model_support flag
sia impostato su "on
", come mostrato di seguito:
Se non è impostato su "on", impostalo su "on" e poi fai clic sul pulsante AGGIORNA INSTANCE. Questo passaggio richiederà alcuni minuti.
Integrazione del modello AlloyDB e 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.
Innanzitutto, creiamo la connessione del modello Gemini 1.5 come mostrato di seguito. Ricorda di sostituire $PROJECT_ID
nel comando seguente con il tuo ID progetto Google Cloud.
CALL
google_ml.create_model( model_id => 'gemini-1.5',
model_request_url => 'https://us-central1-aiplatform.googleapis.com/v1/projects/$PROJECT_ID/locations/us-central1/publishers/google/models/gemini-1.5-pro:streamGenerateContent',
model_provider => 'google',
model_auth_type => 'alloydb_service_agent_iam');
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;
Infine, dobbiamo concedere agli utenti del database l'autorizzazione per eseguire la funzione ml_predict_row per eseguire le previsioni tramite i modelli Google Vertex AI. Esegui questo comando:
GRANT EXECUTE ON FUNCTION ml_predict_row to postgres;
Nota: se utilizzi un progetto Google Cloud esistente e un cluster/un'istanza di AlloyDB esistenti creati un po' di tempo fa, potresti dover eliminare i vecchi riferimenti al modello gemini-1.5 e ricrearli con l'istruzione CALL riportata sopra ed eseguire di nuovo grant execute on function ml_predict_row nel caso in cui riscontri problemi nelle prossime invocazioni di gemini-1.5.
Valutazione delle risposte
Anche se nella sezione successiva utilizzeremo una grande query per assicurarci che le risposte siano ragionevoli, la query può essere difficile da comprendere. Ora esamineremo i componenti e vedremo come si combinano tra loro in pochi minuti.
- 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. Tutto viene salvato in una tabella denominataxyz
(solo un nome temporaneo della tabella).
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-004',
'I want womens tops, pink casual only pure cotton.')::vector
LIMIT
5;
L'output di questa query sarà costituito dalle cinque righe più simili relative alla query dell'utente. 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
.
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;
- Questa query può essere combinata in un'unica query successiva come segue.
Prima di eseguire questo comando, devi eliminare/rimuovere le tabelle xyz e x dal database AlloyDB se hai eseguito le query precedenti per controllare i risultati intermedi.
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-004',
'I want womens tops, pink casual only pure cotton.')::vector
LIMIT
5 ) AS xyz ) AS X;
Anche se la procedura può sembrare scoraggiante, speriamo che tu possa capirla meglio. I risultati indicano se esiste o meno una corrispondenza, la percentuale di corrispondenza e una spiegazione della valutazione.
Tieni presente che lo streaming è attivo per impostazione predefinita nel modello Gemini, pertanto la risposta effettiva è distribuita su più righe:
10. Trasferisci l'applicazione sul web
Vuoi portare questa app sul web? Per rendere questo Knowledge Engine serverless con le funzioni Cloud Run:
- Vai a Cloud Run Functions nella console Google Cloud per CREARE una nuova funzione Cloud Run o utilizza il link: https://console.cloud.google.com/functions/add.
- Seleziona l'ambiente come "Funzione Cloud Run". Fornisci il nome della funzione "retail-engine" e scegli la regione "us-central1". Imposta Autenticazione su "Consenti chiamate non autenticate" e fai clic su AVANTI. Scegli Java 17 come runtime e Editor incorporato per il codice sorgente.
- Per impostazione predefinita, il punto di ingresso viene impostato su "
gcfv2.HelloHttpFunction
". Sostituisci il codice segnaposto inHelloHttpFunction.java
epom.xml
della funzione Cloud Run con il codice del file Java e del XML, rispettivamente. - Ricorda di sostituire il segnaposto $PROJECT_ID e le credenziali di connessione AlloyDB con i tuoi valori nel file Java. Le credenziali AlloyDB sono quelle che abbiamo utilizzato all'inizio di questo codelab. Se hai utilizzato valori diversi, modificali nel file Java.
- Fai clic su Esegui il deployment.
Una volta eseguito il deployment, per consentire alla funzione Cloud di accedere all'istanza del database AlloyDB, creeremo il connettore VPC.
PASSAGGIO IMPORTANTE:
Una volta avviato il deployment, dovresti essere in grado di vedere le funzioni nella console Cloud Run Functions di Google. Cerca la funzione appena creata (retail-engine
), fai clic su di essa, poi su MODIFICA e modifica quanto segue:
- Vai a Impostazioni di runtime, build, connessioni e sicurezza
- Aumenta il timeout a 180 secondi
- Vai alla scheda COLLEGAMENTI:
- Nelle impostazioni In entrata, assicurati che sia selezionata l'opzione "Consenti tutto il traffico".
- Nelle impostazioni di uscita, fai clic sul menu a discesa Rete e seleziona l'opzione "Aggiungi nuovo connettore VPC", quindi segui le istruzioni visualizzate nella finestra di dialogo visualizzata:
- Fornisci un nome per il connettore VPC e assicurati che la regione corrisponda a quella dell'istanza. Lascia il valore della rete predefinito e imposta la subnet come intervallo IP personalizzato con l'intervallo IP 10.8.0.0 o un valore simile disponibile.
- Espandi IMPOSTAZIONI DI SCALING DEL DISPLAY e assicurati che la configurazione sia impostata esattamente come segue:
- Fai clic su CREA e questo connettore dovrebbe essere elencato nelle impostazioni di uscita.
- Seleziona il connettore appena creato
- Scegli di instradare tutto il traffico attraverso questo connettore VPC.
- Fai clic su AVANTI e poi su ESEGUI IL DEPLOY.
11. testa l'applicazione
Una volta eseguito il deployment della funzione Cloud aggiornata, dovresti vedere l'endpoint nel seguente formato:
https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/retail-engine
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 come segue:
PROJECT_ID=$(gcloud config get-value project)
curl -X POST https://us-central1-$PROJECT_ID.cloudfunctions.net/retail-engine \
-H 'Content-Type: application/json' \
-d '{"search":"I want some kids clothes themed on Disney"}' \
| jq .
E il risultato:
È tutto. È così semplice eseguire la ricerca vettoriale di similarità utilizzando il modello di embedding sui dati di AlloyDB.
Creazione dell'agente conversazionale
L'agente viene creato nella parte 2 di questo lab.
12. Esegui la pulizia
Se prevedi di completare la Parte 2 di questo lab, salta questo passaggio perché verrà eliminato il progetto corrente.
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.
13. Complimenti
Complimenti! Hai eseguito correttamente una ricerca di similarità utilizzando AlloyDB, pgvector e Vector Search. Combinando le funzionalità di AlloyDB, Vertex AI e Vector Search, abbiamo fatto un enorme passo avanti nel rendere le ricerche contestuali e vettoriali accessibili, efficienti e basate sul significato. La parte successiva di questo lab illustra i passaggi per la creazione dell'agente.