Questa pagina fornisce un esempio di flusso di lavoro che mostra come funziona la funzione
mysql.ml_embedding()
con i dati archiviati nelle tabelle e la
funzionalità di query mysql vector
. L'esempio
utilizza l'input di testo normale per recuperare un risultato da un database che si basa sull'analisi semantica del significato del testo basata su un modello linguistico di grandi dimensioni (LLM).
Scenario di esempio di un flusso di lavoro di incorporamento
Immagina un database in esecuzione su Cloud SQL per MySQL 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 memorizza i reclami degli acquirenti registrati per ogni articolo come testo normale.Il database si integra con Vertex AI Model Garden, che gli consente di accedere al LLM
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 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 gli embedding basati su LLM possono contribuire a colmare questo divario. Applicando gli incorporamenti, puoi eseguire query sulla tabella in questo esempio per gli elementi in cui i 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 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 incorporamenti in base ai tuoi dati
esistenti.
Crea una colonna per archiviare gli embedding
Aggiungi una colonna alla tabella per archiviare gli embedding.
sql
ALTER TABLE items ADD COLUMN complaint_embedding vector(768) using varbinary;
Questo esempio specifica 768
come argomento perché è il numero di dimensioni supportate dal modello LLM textembedding-gecko
. Per saperne di più, consulta
Generare un incorporamento.
L'esempio applica il tipo di dati vector
alla colonna per semplificare l'utilizzo di funzioni e operatori pgvector
con i valori della colonna.
Compila la nuova colonna
Utilizza la funzione mysql.ml_embedding()
per compilare questa nuova colonna con incorporamenti basati
sul valore del testo di ogni riga visualizzato nella colonna complaints
. In questo esempio,
Cloud SQL genera gli embedding utilizzando il LLM con l'ID
textembedding-gecko
, versione 004
.
UPDATE items SET complaint_embedding = mysql.ml_embedding('text-embedding-005', complaints);
mysql.ml_embedding()
in un valore vector
in modo implicito per memorizzare il valore nella colonna vector
che hai creato in Creare una colonna per memorizzare gli incorporamenti.
Crea un indice
Per migliorare il rendimento, aggiungi un indice alla tabella items
.
CREATE VECTOR INDEX complaint_embed_idx ON items(complaint_embedding)
USING SCANN DISTANCE_MEASURE=COSINE;
Per ulteriori informazioni sulla creazione di questo tipo di indice, consulta Creare un indice dei vicini più prossimi. Inoltre, per saperne di più sull'ottimizzazione dell'indice impostando i parametri, consulta Incorporamenti di query e indici.
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 la funzione approx_distance
per completare le seguenti azioni:
- Ordina le righe della tabella in base alla prossimità semantica al testo di
It was the wrong color
. - Restituisci le prime dieci segnalazioni.
La query mostra i valori id
e name
della prima riga ordinata.
SELECT mysql.ML_EMBEDDING('text-embedding-005', 'It was the wrong color') into @query_vector;
select id, name from items order by approx_distance(complaint_embedding , @query_vector,'distance_measure=cosine') limit 10;