Puoi ridurre i costi operativi e migliorare la reattività delle query utilizzando funzioni AI ottimizzate in AlloyDB per PostgreSQL. Le funzioni AI ottimizzate riducono al minimo l'utilizzo di modelli linguistici di grandi dimensioni (LLM) per le attività di classificazione o filtro riga per riga elaborando la maggior parte delle query con un modello proxy più piccolo e veloce e ricorrendo a un LLM più grande solo quando necessario.
Le funzioni AI di AlloyDB come ai.if() possono avere una latenza elevata a causa delle chiamate remote agli LLM. Le funzioni ottimizzate risolvono questo problema di latenza utilizzando modelli proxy più piccoli, addestrati localmente (come i modelli di regressione logistica) per elaborare le query. Questi modelli vengono addestrati su un campione dei tuoi dati, utilizzando l'output dell'LLM come fonte attendibile.
Puoi configurare i controlli di accuratezza da eseguire in fase di runtime utilizzando il flag google_ml_integration.proxy_models_enable_accuracy_check, impostato su off per impostazione predefinita. I controlli di accuratezza valutano un campione di righe della query utilizzando l'LLM di base per garantire che l'accuratezza soddisfi la soglia definita dal flag google_ml_integration.proxy_models_f1_score_threshold. Se il controllo di accuratezza non va a buon fine, la query torna a utilizzare l'LLM (o genera un errore se il fallback è disattivato).
Workflow delle funzioni AI ottimizzato
Quando utilizzi una funzione AI ottimizzata e imposti il flag google_ml_integration.proxy_models_enable_accuracy_check su true, AlloyDB esegue le seguenti operazioni.
Pianifica l'addestramento: quando esegui una query contenente la funzione
ai.if()su una tabella, AlloyDB pianifica automaticamente l'addestramento di un modello proxy leggero in background.Utilizza l'LLM come riserva: mentre il modello proxy è in fase di addestramento o se non è disponibile un modello proxy, AlloyDB utilizza l'LLM remoto come riserva per valutare la query (a meno che il fallback non sia disattivato).
Esegue query ottimizzate: dopo l'addestramento del modello, AlloyDB utilizza il modello proxy addestrato per elaborare le query successive localmente, accelerando le prestazioni.
Il seguente diagramma mostra il flusso logico per l'elaborazione delle query con funzioni AI ottimizzate:
Prima di iniziare
Prima di utilizzare le funzioni AI ottimizzate, segui questi passaggi:
- Connettiti al database utilizzando psql. Puoi anche connetterti utilizzando AlloyDB Studio come utente
postgreso come utente con accesso alla tabella in cui si trovano i dati. Verifica che sia installata l'estensione
google_ml_integrationversione 1.6.3 o successive.SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';L'output è simile al seguente:
extversion ------------ 1.6.3 (1 row)Se l'estensione non è installata o è precedente alla versione 1.6.3, aggiornala:
CREATE EXTENSION IF NOT EXISTS google_ml_integration; ALTER EXTENSION google_ml_integration UPDATE;Configura AlloyDB per l'utilizzo con Gemini Enterprise Agent Platform. Per saperne di più, consulta Integrazione con Agent Platform.
Verifica che i seguenti flag di database a livello di istanza siano abilitati. Per saperne di più, consulta Flag di database supportati, Flag di database per le funzioni AI ottimizzate e Configura i flag di database di un'istanza.
Esamina i flag di database di convalida del fallback e dell'accuratezza, che puoi configurare a livello di sessione o di database utilizzando SQL (
SEToALTER DATABASE):google_ml_integration.proxy_models_enable_llm_fallback: Controlla se una query ricorre a un LLM remoto nel caso in cui un modello proxy non sia disponibile. Questo flag è impostato suonper impostazione predefinita. Se impostato suoff, il database genera un errore anziché eseguire il fallback all'LLM remoto.google_ml_integration.proxy_models_enable_accuracy_check: attiva i controlli di accuratezza in fase di runtime rispetto all'LLM di base. Questo flag è impostato suoffper impostazione predefinita.
Esamina i flag di database per l'addestramento periodico:
google_ml_integration.proxy_models_retraining_interval_minutes: controlla la frequenza del job di riaddestramento in background in minuti. Il valore predefinito è1440(24 ore). Se imposti questo parametro su0, l'addestramento periodico viene disattivato.google_ml_integration.proxy_models_retraining_batch_size: controlla il numero di modelli riaddestrati in una singola iterazione (il valore predefinito è1).
Per AlloyDB Omni, verifica che le seguenti estensioni siano caricate in
shared_preload_libraries:google_job_schedulergoogle_ml_integration
Genera gli embedding per la tabella su cui vuoi eseguire la query. Per saperne di più, consulta Genera e gestisci vector embedding automatici per tabelle di grandi dimensioni.
Tieni presente i seguenti requisiti:
- La colonna dei dati di origine deve essere di tipo
TEXToVARCHAR. - La colonna di embedding che fornisce l'input alla funzione AI ottimizzata
deve essere di tipo
REAL[]oVECTOR. - Le funzioni AI ottimizzate sono disponibili solo nelle regioni in cui sono disponibili i modelli generativi di Agent Platform. Per un elenco delle regioni disponibili, consulta Deployment ed endpoint.
- La colonna dei dati di origine deve essere di tipo
Esegui una query ottimizzata
Segui questo esempio per eseguire un'istruzione SELECT standard con la funzione ai.if():
Crea una tabella
restaurant_reviews. La colonnareviewche contiene i dati di origine è di tipoTEXT, mentre 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) );Genera vector embedding per i dati di origine utilizzando la procedura
ai.initialize_embeddings():CALL ai.initialize_embeddings( model_id => 'text-embedding-005', table_name => 'restaurant_reviews', content_column => 'review', embedding_column => 'review_embedding' );La generazione di embedding è necessaria perché le funzioni AI ottimizzate si basano su vector embedding come input delle caratteristiche per addestrare e valutare il modello proxy leggero. Anziché inviare testo non elaborato a un LLM remoto per ogni riga, il modello proxy esegue un'inferenza locale rapida direttamente sulle rappresentazioni vettoriali. Se gli embedding non vengono generati, AlloyDB non può addestrare il modello proxy e torna alla valutazione di tutte le righe con l'LLM remoto.
Tieni presente i seguenti requisiti di incorporamento:
- L'output
ai.if()restituisceNULLse la colonna di embedding contiene valoriNULL. Sia l'addestramento che l'inferenza del modello richiedono embedding validi. - La funzione
ai.if()genera un errore se le dimensioni di embedding della query non corrispondono a quelle memorizzate nel modello proxy addestrato.
Per saperne di più sulle opzioni di embedding e sugli aggiornamenti incrementali, consulta Genera e gestisci vector embedding automatici per tabelle di grandi dimensioni.
- L'output
Esegui un'istruzione
SELECTcon la funzioneai.if(). Questa query pianifica automaticamente l'addestramento di un modello proxy per le funzioni AI ottimizzate in background:SELECT r.name, r.city FROM restaurant_reviews r WHERE ai.if('Is the following a positive review? Review: ' || r.review, r.review_embedding, 'gemini-3.5-flash-lite') GROUP BY r.name, r.city HAVING COUNT(*) > 500;La prima esecuzione della query attiva l'addestramento in modo asincrono. Durante l'addestramento del modello proxy, se il flag
google_ml_integration.proxy_models_enable_llm_fallbackè impostato suon(valore predefinito), AlloyDB esegue il fallback alla valutazione della query con l'LLM remoto e restituisce un avviso che indica che la funzione AI ottimizzata non è ancora disponibile. Segoogle_ml_integration.proxy_models_enable_llm_fallbackè impostato suoff, la query restituisce un errore anziché eseguire il fallback.Le query successive che corrispondono alla stessa espressione di contenuto (
content_expr), alla colonna di embedding e alla tabella utilizzano il modello proxy addestrato per l'accelerazione. L'aggiornamento dei valori delle righe, l'eliminazione delle righe o l'aggiunta di dati alla tabella non comportano il ritorno di AlloyDB all'LLM. Il modello proxy continua a elaborare i dati localmente e la deviazione dei dati viene gestita tramite un riaddestramento periodico in background.I modelli proxy sono identificati in modo univoco dal tipo di funzione, dall'OID della tabella, dall'espressione dei contenuti e dalla colonna di embedding (
func_type,table_oid,content_expr,embedding_column). Con questa architettura, puoi condividere i modelli tra diverse query SQL, a condizione che gli input diai.if()rimangano invariati.AlloyDB non utilizza il modello proxy esistente, ma avvia l'addestramento in background per un nuovo modello proxy e utilizza l'LLM remoto (soggetto al flag
google_ml_integration.proxy_models_enable_llm_fallback) nei seguenti scenari:- L'espressione
CONTENTall'interno diai.if()cambia (ad esempio, la stringa del prompt o l'espressione della colonna concatenata viene modificata). - Il nome
EMBEDDING_COLUMNall'interno diai.if()cambia. - Il parametro
llm_model_idcambia. - Se i controlli di accuratezza in fase di runtime sono abilitati e il modello proxy non supera il controllo di accuratezza all'inizio della query.
- L'espressione
Addestramento online e blocco dell'esecuzione
AlloyDB supporta un flusso di lavoro di addestramento online per le funzioni ottimizzate, controllato dal flag di database google_ml_integration.proxy_models_enable_online_training. Per impostazione predefinita, questo flag è impostato su off.
Quando questo flag è abilitato e viene eseguita una funzione ai.if() non addestrata, la query attiva il processo di addestramento e utilizza l'esecuzione di blocco. La query iniziale blocca attivamente e attende il completamento dell'addestramento del modello proxy in background prima di procedere. In questo modo, la query utilizza immediatamente il modello proxy ottimizzato, evitando i costi di inferenza dell'LLM remoto durante l'esecuzione iniziale.
La durata massima del blocco della query e dell'attesa del completamento dell'addestramento online è controllata dal flag google_ml_integration.proxy_models_training_wait_timeout (in secondi, il valore predefinito è 60). Se l'addestramento non viene completato entro questo intervallo, la query scade o viene eseguito il fallback in base alle impostazioni di fallback.
Per attivare l'addestramento online:
-- Enable online training (blocking execution)
SET google_ml_integration.proxy_models_enable_online_training = on;
-- Set the maximum wait timeout in seconds (default is 60)
SET google_ml_integration.proxy_models_training_wait_timeout = 30;
Configura il fallback LLM remoto
Per impostazione predefinita, il fallback all'LLM remoto è abilitato. Se un modello proxy non è addestrato, è in fase di addestramento o non supera i controlli di accuratezza, la query esegue il fallback all'LLM remoto e comporta i costi standard dell'API Agent Platform.
Puoi configurare il comportamento di fallback utilizzando il flag di database google_ml_integration.proxy_models_enable_llm_fallback:
Quando il fallback è abilitato (
on, impostazione predefinita): se il modello proxy non è disponibile, AlloyDB valuta la query utilizzando l'LLM remoto e restituisce un avviso:WARNING: Optimized AI Function is unavailable. Expect reduced performance.Quando il fallback è disattivato (
off): se il modello proxy non è disponibile o non supera la convalida dell'accuratezza, la query genera immediatamente un errore anziché chiamare l'LLM remoto:ERROR: Optimized AI Function: Optimized model fallback to LLM prevented by GUC google_ml_integration.proxy_models_enable_llm_fallback
Per disattivare il fallback LLM per la sessione corrente:
SET google_ml_integration.proxy_models_enable_llm_fallback = off;
Per disattivare il fallback LLM per l'intero database:
ALTER DATABASE DATABASE_NAME SET google_ml_integration.proxy_models_enable_llm_fallback = off;
Sostituisci DATABASE_NAME con il nome del database.
Configura i controlli di accuratezza in fase di runtime
I controlli di accuratezza in fase di runtime valutano un campione di righe della query utilizzando l'LLM remoto per garantire che il modello proxy soddisfi i requisiti di accuratezza di base prima dell'esecuzione.
I controlli di accuratezza sono controllati dal flag di database google_ml_integration.proxy_models_enable_accuracy_check (disattivato per impostazione predefinita).
Per attivare i controlli di accuratezza per la sessione corrente:
SET google_ml_integration.proxy_models_enable_accuracy_check = on;
Per disattivare i controlli di accuratezza per la sessione corrente:
SET google_ml_integration.proxy_models_enable_accuracy_check = off;
Per attivare i controlli di accuratezza per l'intero database:
ALTER DATABASE DATABASE_NAME SET google_ml_integration.proxy_models_enable_accuracy_check = on;
Visualizza i modelli di proxy esistenti
Per ispezionare i modelli proxy esistenti, controllarne lo stato di addestramento ed esaminare i metadati del modello, esegui una query sulla vista google_ml.optimized_functions_view (o sul suo alias nello schema ai, ai.optimized_functions_view):
SELECT * FROM ai.optimized_functions_view;
Per le descrizioni delle colonne in questa visualizzazione, consulta Vista ai.optimized_functions_view.
Puoi filtrare questa visualizzazione in base a table_name o status per verificare se un modello ha completato l'addestramento (READY) o per identificare i valori esatti di content_expr e embedding_column necessari per l'addestramento manuale.
Riqualifica e gestisci i modelli proxy
I modelli proxy vengono addestrati sui dati presenti nella tabella al momento dell'addestramento iniziale. Se alla tabella vengono aggiunti dati più recenti o se le righe vengono modificate o eliminate, il modello proxy potrebbe diventare obsoleto nel tempo. Per mantenere l'accuratezza man mano che i dati cambiano, i modelli proxy possono essere riaddestrati automaticamente periodicamente in background o manualmente on demand.
Addestramento periodico in background
Sulle istanze con 32 o più vCPU con impostazioni di configurazione predefinite, AlloyDB può riaddestrare periodicamente i modelli proxy in background.
L'addestramento periodico è controllato dai seguenti flag di database:
google_ml_integration.proxy_models_retraining_interval_minutes: controlla la frequenza del job di riaddestramento in background in minuti. Il valore predefinito è1440(24 ore). Se imposti questo parametro su0, l'addestramento periodico viene disattivato.google_ml_integration.proxy_models_retraining_batch_size: controlla il numero di modelli riaddestrati in una singola iterazione (il valore predefinito è1).
Riqualificazione manuale
Puoi riaddestrare manualmente i modelli proxy utilizzando le funzioni nello schema ai (o i loro equivalenti nello schema google_ml).
Addestra nuovamente tutti i modelli per una tabella
Per riaddestrare tutti i modelli proxy associati a una tabella specifica o per riaddestrare un sottoinsieme filtrato di modelli per una tabella, chiama ai.retrain_optimized_models():
SELECT ai.retrain_optimized_models(
table_name => 'restaurant_reviews',
embedding_column => 'review_embedding', -- Optional
content_expr => '(''Is the following a positive review? Review: ''::text || review)', -- Optional
llm_model_id => 'LLM_MODEL_ID' -- Optional
);
Per le descrizioni dei parametri, consulta la funzione ai.retrain_optimized_models().
Addestra nuovamente un modello specifico in base all'ID modello
Per riaddestrare un modello proxy specifico utilizzando il suo identificatore univoco, chiama ai.retrain_optimized_model() con il parametro model_id:
SELECT ai.retrain_optimized_model(model_id => 'MODEL_ID');
Per le descrizioni dei parametri, consulta la funzione ai.retrain_optimized_model().
Riqualifica un modello specifico in base ai parametri di addestramento del modello
Per riaddestrare un modello proxy specifico utilizzando il nome della tabella, l'espressione dei contenuti e la colonna di embedding, chiama ai.retrain_optimized_model():
SELECT ai.retrain_optimized_model(
table_name => 'restaurant_reviews',
embedding_column => 'review_embedding',
content_expr => '(''Is the following a positive review? Review: ''::text || review)',
llm_model_id => 'LLM_MODEL_ID' -- Optional
);
Per le descrizioni dei parametri, consulta la funzione ai.retrain_optimized_model().
Elimina i modelli proxy
Puoi eliminare singoli modelli proxy o tutti i modelli utilizzando le seguenti funzioni. Queste operazioni devono essere eseguite da un utente con privilegi alloydbsuperuser o con autorizzazioni concesse da un amministratore.
Per trovare l'ID model_id interno necessario per eliminare un modello di proxy specifico, esegui una query sulla tabella google_ml.proxy_models_expr_mapping:
SELECT model_id, table_oid::regclass, content_expr
FROM google_ml.proxy_models_expr_mapping;
-- Delete a specific proxy model
SELECT ai.delete_optimized_model('com_if_12345_67890');
-- Delete all proxy models and stop the background automated retraining job
CALL ai.delete_all_optimized_models();
Monitoraggio
Puoi monitorare i job di addestramento dei worker in background e controllare lo stato di attività del modello.
Controlla lo stato e la cronologia di addestramento del modello
Per verificare se l'addestramento di un modello proxy è stato completato, non è riuscito o è in fase di riaddestramento, esegui una query su ai.optimized_functions_view:
SELECT table_name, content_expr, status, last_trained_at, training_duration
FROM ai.optimized_functions_view;
La colonna status indica lo stato di attività attuale del modello e fornisce i seguenti valori:
READY: l'addestramento del modello proxy è stato completato correttamente ed è pronto per accelerare le query in entrata.UNTRAINED: il modello è stato registrato o pianificato, ma l'addestramento in background non è ancora terminato. Se l'addestramento in background iniziale non va a buon fine, il modello rimane nello statoUNTRAINEDe le query vengono eseguite sull'LLM remoto (o generano un errore se il fallback è disattivato).RETRAINING_IN_PROGRESS: l'addestramento in background è in corso.RETRAINING_FAILED: l'esecuzione più recente dell'addestramento in background o manuale non è riuscita. Nella maggior parte degli scenari, se esistono pesi del modello pre-riaddestramento, AlloyDB continua a utilizzare i pesi del modello esistenti per l'inferenza. Se i pesi del modello esistente non sono disponibili (o se i controlli di accuratezza in fase di runtime non vanno a buon fine), AlloyDB torna a valutare le query utilizzando l'LLM remoto (soggetto agoogle_ml_integration.proxy_models_enable_llm_fallback) finché il modello non viene riaddestrato correttamente.
Per saperne di più su tutte le colonne disponibili in questa visualizzazione, consulta Visualizza i modelli proxy esistenti.
Limitazioni
- Le funzioni AI ottimizzate supportano solo la funzione
ai.if(). - L'addestramento automatico periodico in background dei modelli proxy non è supportato nelle istanze di database con meno di 32 vCPU.
- Sicurezza a livello di riga (RLS): i modelli addestrati su tabelle che utilizzano criteri di sicurezza a livello di riga (RLS) potrebbero divulgare informazioni sulla sicurezza se l'addestramento viene eseguito con le autorizzazioni di un utente specifico che ha avviato l'operazione. L'addestramento dei modelli proxy su tabelle con policy RLS è disabilitato.
- Modifiche all'input: se modifichi la colonna dei contenuti di origine, la colonna di embedding, la stringa del prompt o l'ID del modello LLM di base fornito a
ai.if(), il modello proxy esistente viene ignorato e viene avviata una nuova richiesta di addestramento in background per quella combinazione. - Limitazioni SQL:
- La query deve contenere una clausola
FROMvalida. - Tutti gli argomenti della funzione AI devono provenire dallo stesso alias della tabella.
- Includi le colonne nell'espressione
ai.if()come colonne di origine per l'embedding. - Non inserire la funzione
ai.if()all'interno di una sottoquery o di un'espressione di tabella comune (CTE).
- La query deve contenere una clausola