Esegui query SQL intelligenti utilizzando le funzioni AI

Questa pagina descrive come eseguire query utilizzando gli operatori SQL basati sull'AI forniti dalle funzioni di AI. Puoi utilizzare gli operatori ai.if per i filtri, ai.rank e ai.generate per combinare il linguaggio naturale con le query SQL.

Per utilizzare le istruzioni riportate in questa pagina, devi avere una conoscenza di AlloyDB e familiarità con i concetti di AI generativa.

AlloyDB AI riserva e crea lo schema ai.

Prima di iniziare

Prima di utilizzare il linguaggio naturale negli operatori SQL, segui questi passaggi:

Integrare Vertex AI e installare l'estensione

  1. Configura l'accesso degli utenti ai modelli Vertex AI.
  2. Verifica che sia installata l'ultima versione di google_ml_integration.
    1. Per controllare la versione installata, esegui questo comando:

              SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';
              extversion 
              ------------
              1.5.2
              (1 row)
            
    2. Se l'estensione non è installata o se la versione installata è precedente alla 1.5.2, aggiornala.

              CREATE EXTENSION IF NOT EXISTS google_ml_integration;
              ALTER EXTENSION google_ml_integration UPDATE;
            

      Se riscontri problemi durante l'esecuzione dei comandi precedenti o se l'estensione non viene aggiornata alla versione 1.5.2 dopo l'esecuzione dei comandi precedenti, contatta l'Google Cloud assistenza.

  3. Per utilizzare la funzionalità del motore di query AlloyDB AI, imposta il flag google_ml_integration.enable_ai_query_engine su true.

    SQL

    1. Attiva il motore di query AI per la sessione corrente.
                    SET google_ml_integration.enable_ai_query_engine = true;
                    
    2. Attiva le funzionalità per un database specifico tra le sessioni.
                    ALTER DATABASE DATABASE_NAME SET google_ml_integration.enable_ai_query_engine = 'on';
                    
    3. Attiva il motore di query AI per un utente specifico in sessioni e database.
                    ALTER ROLE postgres SET google_ml_integration.enable_ai_query_engine = 'on';
                  

    Console

    Per modificare il valore del flag google_ml_integration.enable_ai_query_engine, segui i passaggi descritti in Configurare i flag di database di un'istanza.

    gcloud

    Per utilizzare gcloud CLI, puoi installare e inizializzare Google Cloud CLI oppure puoi utilizzare Cloud Shell.

    Puoi modificare il valore del flag google_ml_integration.enable_ai_query_engine. Per saperne di più, consulta Configurare i flag di database di un'istanza.

                 gcloud alloydb instances update INSTANCE_ID \
                   --database-flags google_ml_integration.enable_ai_query_engine=on \
                   --region=REGION_ID \
                   --cluster=CLUSTER_ID \
                   --project=PROJECT_ID
                

Utilizzare un modello Gemini supportato nella tua regione

Se il tuo cluster AlloyDB per PostgreSQL si trova in una regione in cui gemini-2.0-flash non è supportato, puoi utilizzare uno degli altri modelli Gemini disponibili nella tua regione utilizzando model_id parameter.

In alternativa, puoi registrare un endpoint del modello Gemini e fornire l'ID modello agli operatori AI. Per saperne di più, consulta Registra e chiama modelli di AI remoti utilizzando la gestione degli endpoint del modello.

L'esempio seguente mostra come registrare un altro endpoint Gemini. In questo esempio, il secondo endpoint Gemini è l'endpoint globale per gemini-2.0-flash. Puoi utilizzare questo modello registrato con gli operatori AI passando model_id =>gemini-2.0-flash-global` come argomento aggiuntivo.

CALL
  google_ml.create_model(
    model_id => 'gemini-2.0-flash-global',
    model_type => 'llm',
    model_provider => 'google',
    model_qualified_name => 'gemini-2.0-flash',
    model_request_url =>  'https://aiplatform.googleapis.com/v1/projects/<project_id>/locations/global/publishers/google/models/gemini-2.0-flash:generateContent',
    model_auth_type => 'alloydb_service_agent_iam'
);

Utilizzare i filtri nelle query

AlloyDB AI offre diverse funzioni SQL basate sull'AI che ti consentono di utilizzare l'elaborazione del linguaggio naturale e i LLM direttamente all'interno delle query del database, inclusi gli operatori ai.if e ai.rank.

Filtri

Per valutare se una condizione espressa in linguaggio naturale è soddisfatta, utilizza l'operatore ai.if/google_ml.if. La funzione restituisce il valore booleano true o false e false se l'output non viene rilevato chiaramente.

- Function signature
FUNCTION ai.if(prompt TEXT, model_id VARCHAR(100) DEFAULT NULL) RETURNS bool

L'esempio seguente mostra l'utilizzo dell'operatore ai.if come filtro per trovare ristoranti con più di 500 recensioni positive situati in città con una popolazione superiore a 100.000 abitanti. L'esempio utilizza restaurant_reviews e contiene dati come recensioni e posizione della città. L'operatore ai.if ti aiuta a comprendere il sentiment delle recensioni e a combinare le località del database con le conoscenze generali di Gemini sulla popolazione di queste località.

SELECT r.name, r.location_city
FROM restaurant_reviews r
WHERE
  AI.IF(r.location_city || ' has a population OF more than 100,000 AND the following is a positive review; Review: ' || r.review)
GROUP BY r.name, r.location_city
HAVING COUNT(*) > 500;

Di seguito viene mostrato lo stesso esempio utilizzando il modello che hai registrato in Utilizzare un modello Gemini supportato nella tua regione.

SELECT r.name, r.location_city
FROM restaurant_reviews r
WHERE
  AI.IF(r.location_city || ' has a population of more than 100,000 AND the following is a positive review; Review: ' || r.review, model_id => 'gemini-2.0-flash-global')
GROUP BY r.name, r.location_city
HAVING COUNT(*) > 500;

Esegui un'unione su una query che utilizza l'operatore if

Per eseguire un'operazione di join, utilizza l'operatore ai.if/google_ml.if con join. La seguente query di esempio trova il numero di recensioni che menzionano ogni voce del menu del ristorante.

    SELECT item_name, COUNT(*)
    FROM menu_items JOIN user_reviews
      ON ai.if(
        prompt => 'Does the following user review talk about the menu item mentioned ? review: ' || user_reviews.review_text || ' menu item: ' || item_name)
    GROUP BY item_name;

Generazione e riepilogo di testo

La funzione ai.generate produce testo combinando i dati forniti con il prompt dell'utente.

-- Function Signature
FUNCTION ai.generate(prompt TEXT, model_id VARCHAR(100) DEFAULT NULL) RETURNS TEXT

Ad esempio, puoi utilizzare la seguente query per generare un riepilogo conciso di ogni recensione utente.

SELECT
  ai.generate(
    prompt => 'Summarize the review in 20 words or less. Review: ' || review) AS review_summary
FROM user_reviews

Assegnare un punteggio ai risultati della query

Se devi ordinare i risultati della query utilizzando istruzioni personalizzate in linguaggio naturale, utilizza l'operatore ai.rank. Questa funzione ti consente di fornire un prompt che descrive i criteri di ranking e restituisce un punteggio per ogni elemento.

-- Function signature
FUNCTION ai.rank(prompt TEXT, model_id VARCHAR(100) DEFAULT NULL) RETURNS real

Ad esempio, la seguente query recupera le 20 recensioni di ristoranti più positive, utilizzando i punteggi di un LLM.

SELECT review AS top20
FROM user_reviews
ORDER BY ai.rank(
  'Score the following review according to these rules:
  (1) Score OF 8 to 10 IF the review says the food IS excellent.
  (2) 4 to 7 IF the review says the food is ok.
  (3) 1 to 3 IF the review says the food is not good. Here is the review:' || review) DESC
LIMIT 20;

Passaggi successivi