Accelerare le query utilizzando funzioni ottimizzate

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:

  1. 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 PREPARE con la funzione ai.if() per addestrare il modello per le query ottimizzate.
  2. Esegue la query: quando utilizzi l'istruzione EXECUTE, AlloyDB utilizza il modello proxy addestrato per elaborare la query localmente.
  3. 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.

Diagramma di flusso delle funzioni ottimizzate

Prima di iniziare

Prima di utilizzare le funzioni ottimizzate:

  • Connettiti al database utilizzando psql o AlloyDB Studio come utente postgres o come utente che ha accesso alla tabella in cui risiedono i dati.
  • Verifica che l'estensione google_ml_integration sia 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_support
    • google_ml_integration.enable_ai_query_engine
    • google_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 TEXT o VARCHAR.
    • La colonna di incorporamento che fornisce l'input alla funzione AI ottimizzata deve essere di tipo REAL[] o VECTOR.
    • 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.

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:

  1. Crea una tabella restaurant_reviews. La colonna review che contiene i dati di origine è di tipo TEXT e la colonna review_embedding utilizzata per le query è di tipo VECTOR(768).

    CREATE TABLE restaurant_reviews (
        id SERIAL,
        name VARCHAR(64),
        city VARCHAR(64),
        review TEXT,
        review_embedding VECTOR(768)
    );
    
  2. Utilizza un'istruzione PREPARE con la funzione ai.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;
    
  3. Esegui la query utilizzando l'istruzione EXECUTE. Poiché l'istruzione PREPARE è specifica per la sessione corrente, devi eseguire l'istruzione EXECUTE sulla 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_id diverso.
    • 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.

  4. (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_NAME con 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.

Passaggi successivi