Questa pagina fornisce un esempio di flusso di lavoro che mostra come la funzione embedding()
interagisce con i dati archiviati in tabella e con la funzionalità pgvector
. L'esempio
utilizza un input in testo normale per recuperare un risultato da un database che si basa sulla parsing semantica basata su modelli linguistici di grandi dimensioni (LLM) del significato del testo.
Uno 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 elemento 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 Vertex AI Model Garden, dandogli accesso ai modelli in
textembedding-gecko
inglese.
Anche se questo database memorizza i reclami relativi agli articoli, questi reclami sono 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 parte dei clienti che hanno ricevuto la merce nel colore sbagliato, puoi eseguire normali query SQL sulla tabella cercando varie corrispondenze delle 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 embedding basati su LLM possono contribuire a colmare questo divario. Applicando gli embedding, puoi eseguire query sulla tabella in questo esempio per gli articoli i cui reclami hanno una somiglianza semantica a un determinato prompt di testo, ad esempio "Il colore era sbagliato".
I passaggi riportati di seguito mostrano come attivare questa opzione nella configurazione di esempio descritta in precedenza.
Prima di iniziare
Assicurati di soddisfare i seguenti requisiti:
Estensione del database obbligatoria
Assicurati che le seguenti estensioni siano installate sul database AlloyDB.
google_ml_integration
estensioneEstensione
vector
, versione0.5.0.google-1
o successive
Per ulteriori informazioni sull'installazione e sulla gestione delle estensioni, vedi 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 in modo che funzioni con un modello di embedding del testo.
Per utilizzare il modello textembeddings-gecko
basato su 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 embedding in base ai 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 textembedding-gecko
. Per ulteriori informazioni, consulta
Generare un'evidenziazione.
L'esempio applica il tipo di dati vector
alla colonna per facilitare l'utilizzo
delle funzioni e degli operatori pgvector
con i relativi valori.
Compila la nuova colonna
Se hai già incorporamenti in formato CSV
, segui la procedura descritta in Archiviare gli incorporamenti vettoriali per archiviarli.
Se vuoi, utilizza la funzione embedding()
per compilare questa nuova colonna con gli embedding nel caso in cui tu abbia del testo archiviato nella colonna complaints
. In questa configurazione di esempio, AlloyDB genera gli embedding utilizzando il modello textembedding-gecko
, versione 003
.
UPDATE items SET complaint_embedding = embedding('textembedding-gecko@003', complaints);
Questo esempio esegue il casting implicito del valore restituito real[]
di embedding()
in un valore vector
,
per memorizzare il valore nella colonna vector
creata in precedenza.
Creare un indice
Per migliorare il rendimento, aggiungi un indice a items
che utilizzi le tecniche di quantizzazione scalare.
CREATE INDEX complaint_embed_idx ON items
USING ivf (complaint_embedding vector_l2_ops)
WITH (lists = 20, quantizer = 'SQ8');
Per ulteriori informazioni sulla creazione di indici approssimativi del vicino più vicino, consulta Indicizzazione.
Esegui query basate su LLM con il testo fornito
Ora puoi eseguire query sui vicini semantici più prossimi nella tabella items
. La
seguente query utilizza l'operatore <->
fornito da pgvector
per ordinare le
righe della tabella in base alla vicinanza semantica al testo It was the wrong color
e restituire i dieci reclami principali. La query mostra i valori id
e name
della prima riga ordinata.
SELECT id, name FROM items
ORDER BY complaint_embedding::vector
<-> embedding('textembedding-gecko@003', 'It was the wrong color') LIMIT 10;
Passaggi successivi
- Per un altro esempio di flusso di lavoro che coinvolge AlloyDB e
pgvector
, consulta Creare app basate sull'IA su Google Cloud utilizzando pgvector, LLM e LangChain.