Esempio di flusso di lavoro di incorporamento

Questa pagina fornisce un esempio di flusso di lavoro che dimostra il funzionamento della funzione embedding() con i dati archiviati nelle tabelle e la pgvector di query. 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.

Scenario di esempio di un flusso di lavoro di incorporamento

Immagina un database in esecuzione su Cloud SQL per PostgreSQL con i seguenti aspetti:

  • Il database contiene una tabella: items. Ogni riga di questa tabella descrive l'articolo venduto dalla tua attività.

  • La tabella items contiene una colonna: complaints. Questa colonna memorizza come testo normale i reclami degli acquirenti registrati per ogni articolo.

  • Il database si integra con Vertex AI Model Garden, che gli consente di accedere all'LLM textembedding-gecko.

Anche se questo database archivia i reclami sugli elementi, questi vengono archiviati come testo normale, rendendo difficile l'esecuzione di query. Ad esempio, se vuoi per scoprire quali articoli hanno il maggior numero di reclami da parte dei clienti che hanno ricevuto colore sbagliato, puoi eseguire delle normali query SQL per cercare varie corrispondenze delle parole chiave. Tuttavia, questo approccio corrisponde solo righe che contengono quelle esatte parole chiave.

Ad esempio, una query SQL di base come SELECT * FROM item WHERE complaints LIKE "%wrong color%" non restituisce una riga in cui il campo complaints contiene solo The picture shows a blue one, but the one I received was red.

Le query SQL che utilizzano incorporamenti basati su LLM possono aiutare a colmare questo divario. Di applicando gli incorporamenti, puoi eseguire una query nella tabella di questo esempio per elementi in reclami hanno una somiglianza semantica con un determinato prompt di testo, ad esempio "Era il colore sbagliato".

I passaggi riportati di seguito mostrano come attivare questa opzione nello scenario di esempio descritto in precedenza.

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);

In questo esempio viene specificato 768 come argomento perché questo è il numero di dimensioni supportate dall'LLM textembedding-gecko. Per ulteriori informazioni, consulta Generare un'evidenziazione.

Nell'esempio viene applicato il tipo di dati vector alla colonna per semplificare l'utilizzo di funzioni e operatori di pgvector con i valori della colonna.

Compila la nuova colonna

Utilizza la funzione embedding() per compilare questa nuova colonna con gli embedding in base al valore del testo di ogni riga visualizzato nella colonna complaints. In questo esempio, Cloud SQL genera gli embedding utilizzando l'LLM con ID textembedding-gecko, versione 001.

UPDATE items SET complaint_embedding = embedding('textembedding-gecko@001', complaints);

Questo esempio trasmette il valore restituito real[] di embedding() in un valore vector implicitamente per archiviare il valore nella colonna vector creata in Creare una colonna per archiviare gli incorporamenti.

Crea un indice

Per migliorare le prestazioni, aggiungi un indice alla tabella items. Questo indice utilizza tecniche di quantizzazione scalare mostrate in Creare un indice di vicino più vicino ottimizzato.

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 di vicino più prossimo approssimato, consulta Indicizzazione.

Esecuzione di query basate su LLM con il testo fornito

Ora puoi eseguire query semantiche del vicino più prossimo nella tabella items. La questa query utilizza l'operatore <-> fornito da pgvector per completare le azioni seguenti:

  • Ordina le righe della tabella in base alla vicinanza semantica al testo di It was the wrong color.
  • Restituisci 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
  <-> embedding('textembedding-gecko@001', 'It was the wrong color')::vector LIMIT 10;

Passaggi successivi