Questa pagina fornisce un flusso di lavoro di esempio che mostra come la embedding()
funzione funziona insieme
ai dati archiviati nella tabella e alla pgvector
funzionalità. 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 modello linguistico di grandi dimensioni (LLM).
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 articolo venduto dalla tua attività.La tabella
itemscontiene una colonna,complaints. Questa colonnaTEXTmemorizza i reclami degli acquirenti registrati su ogni articolo.Il database si integra con Vertex AI Model Garden, che gli consente di accedere ai modelli in inglese
text-embedding.
Anche se questo database memorizza i reclami sugli articoli, questi vengono memorizzati come testo normale, il che rende difficile l'esecuzione di query. Ad esempio, se vuoi vedere quali articoli hanno il maggior numero di reclami da parte dei clienti che hanno ricevuto il colore sbagliato della merce, puoi eseguire query SQL normali sulla tabella, cercando varie corrispondenze di parole chiave. Tuttavia, questo approccio corrisponde solo alle righe che contengono esattamente queste parole chiave.
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 questa lacuna. Applicando gli embedding, puoi eseguire query sulla tabella in questo esempio per gli articoli i cui reclami hanno una somiglianza semantica con una determinata richiesta di testo, ad esempio "Era il colore sbagliato".
I passaggi seguenti mostrano come abilitare questa funzionalità 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 database AlloyDB.
Estensione
google_ml_integrationEstensione
vector, versione0.5.0.google-1o successive
Per ulteriori informazioni sull'installazione e la gestione delle estensioni, consulta Configurare le estensioni del database.
- Imposta il flag del database
google_ml_integration.enable_model_supportsuoff.
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 di testo.
Per utilizzare il modello text-embedding-005 basato sul cloud, devi
integrare il database con Vertex AI.
Preparare 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.
Creare 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 ulteriori informazioni, consulta
Generare un embedding.
L'esempio applica il tipo di dati vector alla colonna per facilitare l'utilizzo di
pgvector funzioni e operatori con i relativi valori.
Compilare la nuova colonna
Se hai già gli embedding in formato CSV, segui i passaggi descritti in Archiviare gli embedding vettoriali per archiviarli.
Facoltativamente, utilizza la funzione embedding() per compilare questa nuova colonna con gli embedding nel caso in cui tu abbia del testo memorizzato nella colonna complaints. In questa configurazione di esempio, AlloyDB genera gli embedding utilizzando il modello text-embedding, versione 005.
UPDATE items SET complaint_embedding = embedding('text-embedding-005', complaints);
Questo esempio esegue implicitamente il cast del valore restituito real[] di embedding() in un valore vector, per archiviare 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 scann (complaint_embedding l2)
WITH (num_leaves=20);
Per ulteriori informazioni sulla creazione di un indice ScaNN, consulta Creare indici ed eseguire query sui vettori.
Eseguire query basate su LLM con il testo fornito
Ora puoi eseguire query semantiche sui risultati più simili nella 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, consulta Creare app basate sull'AI sui Google Cloud database utilizzando pgvector, LLM e LangChain.