Le funzioni ottimizzate ti consentono di utilizzare un modello proxy più piccolo e veloce per elaborare la maggior parte delle query e di ricorrere a un LLM più grande solo quando necessario. Questo approccio riduce i costi operativi e migliora la reattività delle query. Le funzioni ottimizzate riducono al minimo l'utilizzo di LLM per le attività di classificazione o filtro riga per riga, che possono essere gestite meglio dal modello proxy.
Le funzioni di AlloyDB AI come ai.if() possono avere una latenza elevata a causa delle chiamate remote ai modelli linguistici di grandi dimensioni (LLM). Le funzioni ottimizzate risolvono questo problema di latenza utilizzando modelli proxy più piccoli e addestrati localmente per elaborare le query. Questi modelli vengono addestrati su un campione dei tuoi dati, utilizzando l'output dell'LLM come fonte attendibile.
I controlli di accuratezza vengono eseguiti in fase di runtime su un campione di righe utilizzando l'LLM. Per eseguire questo controllo, AlloyDB utilizza l'LLM per generare etichette per le righe di esempio e le confronta con le previsioni del modello proxy per verificarne l'accuratezza. Se il controllo di accuratezza non va a buon fine, la query torna a utilizzare l'LLM.
Quando utilizzi una funzione ottimizzata, AlloyDB esegue le seguenti operazioni:
- Addestra un modello proxy: AlloyDB addestra un modello proxy leggero su un campione dei tuoi dati. Questa operazione viene eseguita in background quando utilizzi l'istruzione
PREPAREcon la funzioneai.if()per addestrare il modello per le query ottimizzate. - Esegue la query: quando utilizzi l'istruzione
EXECUTE, AlloyDB utilizza il modello proxy addestrato per elaborare la query localmente. - Torna all'LLM: se l'accuratezza del modello è bassa o se AlloyDB non riesce a trovare un modello, AlloyDB torna automaticamente a utilizzare l'LLM.

Prima di iniziare
Prima di utilizzare le funzioni ottimizzate:
- Connettiti al database utilizzando psql o
AlloyDB Studio come utente
postgreso come utente che ha accesso alla tabella in cui risiedono i dati. Verifica che l'estensione
google_ml_integrationsia installata e disponibile nella versione 1.5.8 o successive.SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration'; extversion ------------ 1.5.8 (1 row)Configura AlloyDB per l'utilizzo con Vertex AI. Per ulteriori informazioni, consulta Integrare il database con Vertex AI.
Assicurati che i seguenti flag di database siano abilitati. Per ulteriori informazioni, consulta Configurare i flag di database di un'istanza.
google_ml_integration.enable_model_supportgoogle_ml_integration.enable_ai_query_enginegoogle_ml_integration.enable_cost_optimized_ai_functions
Genera incorporamenti per la tabella su cui vuoi eseguire query. Per ulteriori informazioni, consulta Generare e gestire gli incorporamenti automatici per le tabelle.
Considera quanto segue:
- La colonna dei dati di origine deve essere di tipo
TEXToVARCHAR. - La colonna di incorporamento che fornisce l'input alla funzione AI ottimizzata deve essere di tipo
REAL[]oVECTOR. - Le funzioni ottimizzate sono disponibili solo nelle regioni in cui sono disponibili i modelli generativi di Vertex AI. Per un elenco delle regioni disponibili, consulta Località dell'AI generativa.
- La colonna dei dati di origine deve essere di tipo
Utilizzare le funzioni ottimizzate
Per utilizzare una funzione ottimizzata, utilizza le istruzioni PREPARE e EXECUTE con la funzione ai.if(). Di seguito è riportato un esempio di come utilizzare una funzione ottimizzata:
Crea una tabella
restaurant_reviews. La colonnareviewche contiene i dati di origine è di tipoTEXTe la colonnareview_embeddingutilizzata per le query è di tipoVECTOR(768).CREATE TABLE restaurant_reviews ( id SERIAL, name VARCHAR(64), city VARCHAR(64), review TEXT, review_embedding VECTOR(768) );Utilizza un'istruzione
PREPAREcon la funzioneai.if()per indicare che la query deve utilizzare una funzione ottimizzata. Questa istruzione attiva l'addestramento asincrono del modello in background.Il modello viene addestrato solo nelle seguenti condizioni:
- Nella query è presente esattamente una funzione
ai.if(). ai.if()non si trova all'interno di una sottoquery.
PREPARE positive_reviews_query AS SELECT r.name, r.city FROM restaurant_reviews r WHERE ai.if('Is the following a positive review? Review: ' || r.review, r.review_embedding) GROUP BY r.name, r.city HAVING COUNT(*) > 500;- Nella query è presente esattamente una funzione
Esegui la query utilizzando l'istruzione
EXECUTE. Poiché l'istruzionePREPAREè specifica per la sessione corrente, devi eseguire l'istruzioneEXECUTEsulla stessa connessione:EXECUTE positive_reviews_query;conn2=> SELECT r.name, r.city FROM restaurant_reviews r WHERE ai.if('Is the following a positive review? Review: ' || r.review, r.review_embedding) GROUP BY r.name, r.city HAVING COUNT(*) > 500;Il modello proxy addestrato non viene utilizzato se si verifica una delle seguenti condizioni:
- La colonna di contenuti o di incorporamento a cui fa riferimento
ai.if()cambia. Entrambe le colonne devono appartenere alla stessa tabella. - Il prompt fornito alla colonna dei contenuti cambia.
- La struttura della query cambia, generando un
query_iddiverso. - La query non soddisfa la soglia di controllo dell'accuratezza all'inizio della query.
In questi casi, la query torna a utilizzare l'LLM e AlloyDB restituisce un avviso.
- La colonna di contenuti o di incorporamento a cui fa riferimento
(Facoltativo) Per disattivare il controllo di convalida dell'accuratezza per l'intero ambiente di database, necessario perché i controlli di accuratezza vengono eseguiti anche durante l'addestramento del modello, esegui il seguente comando.
ALTER DATABASE DATABASE_NAME SET google_ml_integration.runtime_accuracy_check = off;Sostituisci
DATABASE_NAMEcon il nome del tuo database.
Riaddestrare un modello proxy
Se i dati della tabella sottostante cambiano in modo significativo, puoi riaddestrare il modello proxy eseguendo di nuovo l'istruzione PREPARE. La ripreparazione di una query sostituisce il modello proxy esistente avviando una nuova richiesta di addestramento.
Limitazioni
Se modifichi la colonna dei contenuti di origine, la colonna di incorporamento o il prompt fornito alla funzione ai.if(), devi emettere una nuova istruzione PREPARE.
AlloyDB addestra la funzione ottimizzata per approssimare il comportamento di una combinazione univoca di prompt e dati di input.