1 Un esempio di workflow di embedding Seleziona una versione della documentazione:

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 colonna TEXT 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.textembedding-gecko

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 estensione

    • Estensione vector, versione 0.5.0.google-1 o successive

Per ulteriori informazioni sull'installazione e la gestione delle estensioni, vedi Configurare le estensioni del database.

  • Imposta il flag di database google_ml_integration.enable_model_support su off.

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 textembeddings-gecko 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 textembedding-gecko. 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 textembedding-gecko, versione 003.

UPDATE items SET complaint_embedding = embedding('textembedding-gecko@003', 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 ivf (complaint_embedding vector_l2_ops)
  WITH (lists = 20, quantizer = 'SQ8');

Per saperne di più sulla creazione di indici di ricerca approssimata del vicino più prossimo, consulta la sezione Indicizzazione.

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('textembedding-gecko@003', 'It was the wrong color') LIMIT 10;

Passaggi successivi