Questa pagina fornisce un flusso di lavoro di esempio che mostra come la funzione embedding()
funziona insieme ai dati archiviati nella tabella e alla funzionalità pgvector
. L'esempio
utilizza un input in testo normale per recuperare un risultato da un database che si affida all'analisi semantica del significato del testo basata su un modello linguistico di grandi dimensioni (LLM).
Scenario di esempio
Immagina un database in esecuzione su AlloyDB con i seguenti aspetti:
Il database contiene una tabella,
items
. Ogni riga di questa tabella descrive un articolo venduto dalla tua attività.La tabella
items
contiene una colonna,complaints
. Questa colonnaTEXT
memorizza i reclami degli acquirenti registrati per ogni articolo.Il database si integra con Model Garden di Vertex AI, consentendogli di accedere ai modelli in inglese.
text-embedding
Anche se questo database memorizza i reclami relativi agli articoli, questi vengono memorizzati come testo normale, il che rende difficile eseguire query. Ad esempio, se vuoi vedere quali articoli hanno ricevuto il maggior numero di reclami da clienti che hanno ricevuto un colore errato della merce, puoi eseguire query SQL ordinarie sulla tabella, cercando varie corrispondenze di parole chiave. Tuttavia, questo approccio corrisponde solo alle righe che contengono queste parole chiave esatte.
Ad esempio, una query SQL di base come SELECT * FROM item WHERE complaints LIKE
"%wrong color%"
non restituisce una riga il cui campo complaints
contiene solo
The picture shows a blue one, but the one I received was red
.
Le query SQL che utilizzano gli embedding basati su LLM possono contribuire a colmare questo divario. Applicando gli incorporamenti, puoi eseguire query sulla tabella in questo esempio per gli articoli i cui reclami hanno una somiglianza semantica con un prompt di testo specifico, ad esempio "Il colore non era quello giusto".
I seguenti passaggi mostrano come abilitare questa opzione nella configurazione di esempio descritta in precedenza.
Prima di iniziare
Assicurati di soddisfare i seguenti requisiti.
Estensione del database richiesta
Assicurati che le seguenti estensioni siano installate nel tuo database AlloyDB.
google_ml_integration
estensioneEstensione
vector
, versione0.5.0.google-1
o successive
Per ulteriori informazioni sull'installazione e la gestione delle estensioni, consulta Configurare le estensioni del database.
- Imposta il flag di database
google_ml_integration.enable_model_support
suoff
.
Configurare l'accesso al modello
Prima di poter generare embedding da un database AlloyDB, devi configurare AlloyDB per funzionare con un modello di embedding di testo.
Per utilizzare il modello text-embedding-005
basato sul cloud, devi
integrare il tuo database con
con Vertex AI.
Prepara la tabella
Prima di eseguire query basate su LLM sui contenuti della tabella items
, devi
preparare la tabella per archiviare e indicizzare gli incorporamenti in base ai tuoi dati esistenti.
Crea una colonna per archiviare gli embedding
Aggiungi una colonna alla tabella per archiviare gli embedding.
ALTER TABLE items ADD COLUMN complaint_embedding vector(768);
Questo esempio specifica 768
come argomento, perché è il numero di dimensioni supportate dai modelli in inglese text-embedding-005
. Per saperne di più, consulta
Generare un incorporamento.
L'esempio applica il tipo di dati vector
alla colonna per facilitare l'utilizzo di
funzioni e operatori pgvector
con i relativi valori.
Compila la nuova colonna
Se hai già incorporamenti in formato CSV, segui i passaggi descritti in Archivia gli incorporamenti vettoriali per archiviarli.
(Facoltativo) Utilizza la funzione embedding()
per compilare questa nuova colonna con
incorporamenti nel caso in cui tu abbia testo memorizzato nella colonnacomplaints
. In questa
configurazione di esempio,
AlloyDB genera gli incorporamenti utilizzando il
modello text-embedding
, versione 005
.
UPDATE items SET complaint_embedding = embedding('text-embedding-005', complaints);
Questo esempio esegue il cast implicito del valore restituito real[]
di embedding()
in un valore vector
,
per memorizzare il valore nella colonna vector
creata in precedenza.
Crea un indice
Per migliorare il rendimento, aggiungi un indice a items
che utilizza le
tecniche di quantizzazione scalare.
CREATE INDEX complaint_embed_idx ON items
USING scann (complaint_embedding l2)
WITH (num_leaves=20);
Per saperne di più sulla creazione di un indice ScaNN, consulta Crea indici e vettori di query.
Esegui query basate su LLM con il testo fornito
Ora puoi eseguire query semantiche dei vicini più prossimi sulla tabella items
. La
query seguente utilizza l'operatore <->
fornito da pgvector
per ordinare le
righe della tabella in base alla prossimità semantica al testo It was the wrong color
e restituire i primi dieci reclami. La
query mostra i valori id
e name
della prima riga ordinata.
SELECT id, name FROM items
ORDER BY complaint_embedding::vector
<-> embedding('text-embedding-005', 'It was the wrong color') LIMIT 10;
Passaggi successivi
- Per un altro flusso di lavoro di esempio che coinvolge AlloyDB e
pgvector
, vedi Creazione di app basate sull'IA su database Google Cloud utilizzando pgvector, LLM e LangChain.