Estrai dati strutturati

La funzione ai.extract è uno strumento AI di AlloyDB integrato che estrae dettagli strutturati specificati da testo non strutturato in base a uno schema fornito. Incorporando questa funzionalità direttamente nel database, AlloyDB per PostgreSQL ti consente di elaborare dati non strutturati senza creare pipeline di estrazione, trasformazione e caricamento (ETL) complesse o integrazioni di servizi esterni.

La funzione di estrazione dati offre i seguenti vantaggi:

  • Scalabilità: supporta il batching smart per le funzioni AI, noto anche come accelerazione delle funzioni AI, che è una funzionalità di ottimizzazione automatica dell'esecuzione delle query in AlloyDB AI che raggruppa in modo trasparente le singole chiamate di funzioni AI scalari riga per riga in richieste di modelli in batch in background durante l'esecuzione delle query. Supporta anche l'elaborazione basata su array e cursori per elaborare in modo efficiente migliaia di righe.
  • Astrazione: fornisce un'astrazione di alto livello che gestisce automaticamente la chiamata del modello e la preparazione dei dati.

La funzione di estrazione dati di AlloyDB AI supporta diversi casi d'uso, tra cui:

  • Sanità: analizza le note mediche in formato libero in campi di formato strutturato come nomi dei pazienti, sintomi e farmaci.
  • Settore immobiliare: trasforma le descrizioni non strutturate delle proprietà in punti dati specifici, come il tipo di proprietà e il numero di camere da letto.
  • Tecnologia legale: identifica ed estrai automaticamente termini critici come legislazione vigente e limitazioni di responsabilità da documenti legali di lunga durata.
  • Operazioni finanziarie: elabora il testo delle fatture trascritte per estrarre con precisione i metadati e gli importi totali in un formato coerente.

Prima di iniziare

Prima di utilizzare la funzione ai.extract, assicurati di soddisfare i seguenti requisiti:

  • Versione PostgreSQL: la funzione ai.extract è supportata su PostgreSQL versione 18 e successive. Assicurati che nel cluster AlloyDB sia in esecuzione PostgreSQL 18 o versioni successive. Per ulteriori informazioni, consulta Versioni dei database supportate.
  • Versione dell'estensione: assicurati di avere installato l'ultima versione dell'estensione google_ml_integration (versione 1.6.1 o successive) con la funzionalità di anteprima abilitata.

Attiva l'estensione

Assicurati di aver installato l'ultima versione dell'estensione google_ml_integration (versione 1.6.1 o successive) con la funzionalità di anteprima attivata.

Per attivare i flag google_ml_integration.enable_ai_query_engine e google_ml_integration.enable_preview_ai_functions in AlloyDB, utilizza il comando SET. Questi flag controllano l'accesso al motore di query AI e alle funzioni AI in anteprima come ai.extract. Il valore predefinito di questi flag è off.

  1. Assicurati che l'estensione google_ml_integration sia della versione 1.6.1 o successiva. Controlla la versione eseguendo questo comando:

    SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';
    
  2. Per abilitare i flag per la sessione corrente, l'intero database o tutti i database di un'istanza, esegui una o più delle seguenti attività:

    • Per abilitare i flag per la sessione corrente, esegui questo comando:

      SET google_ml_integration.enable_ai_query_engine = 'on';
      SET google_ml_integration.enable_preview_ai_functions = 'on';
      

      Questa modifica non richiede il riavvio del database.

    • Per attivare i flag in modo permanente per un database specifico, esegui questo comando:

      ALTER DATABASE DATABASE_NAME SET google_ml_integration.enable_ai_query_engine = 'on';
      ALTER DATABASE DATABASE_NAME SET google_ml_integration.enable_preview_ai_functions = 'on';
      
    • Per abilitare i flag per tutti i database di un'istanza, imposta i flag di database google_ml_integration.enable_ai_query_engine e google_ml_integration.enable_preview_ai_functions su on utilizzando il comando gcloud alloydb instances update:

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

      Per saperne di più, consulta Configura i flag di database.

Attiva il raggruppamento intelligente per le funzioni AI

Per ottenere un tempo di esecuzione totale delle query più rapido quando esegui ai.extract scalari su più righe, attiva il batching smart per le funzioni AI impostando il flag di database google_ml_integration.enable_ai_function_acceleration su on:

SET google_ml_integration.enable_ai_function_acceleration = 'on';

Quando questo flag è abilitato, AlloyDB raggruppa automaticamente le singole chiamate ai.extract scalari in batch intelligenti in background.

Crea una tabella di esempio

Per seguire gli esempi di funzione EXTRACT in questo documento, crea una tabella e compila i seguenti dati campionati.

CREATE TABLE IF NOT EXISTS sales_leads (
    lead_id INT PRIMARY KEY,
    raw_transcript TEXT,
    lead_status VARCHAR(20)
);

INSERT INTO sales_leads (lead_id, raw_transcript, lead_status) VALUES
(1, 'Spoke with Alex R., Director of IT at Example Organization. They are looking to upgrade their cloud storage.', 'new'),
(2, 'Call with Kai L., Senior DevOps Engineer at Example Organization. They are currently using MySQL and Redis. Interested in automating enterprise database backups, cross-region replication, and automated scaling.', 'new'),
(3, 'Meeting with Taylor K., VP of Engineering at Example Organization. They need a scalable managed PostgreSQL database for their analytics platform. Budget is approved for Q3 launch.', 'new');

Estrai dati strutturati da una singola stringa

Per estrarre dettagli strutturati da un singolo input di testo, utilizza la versione scalare di ai.extract. Per saperne di più, consulta il riferimento ai.extract.

SELECT ai.extract(
  input => 'TEXT_CONTENT',
  output_schema => 'OUTPUT_SCHEMA',
  model_id => 'MODEL_ID' -- Optional. The default value is gemini-3.5-flash-lite.
);

Estrai i dati da una tabella

L'esempio seguente estrae informazioni strutturate dalla colonna della tabella raw_transcript:

SELECT
  lead_id,
  ai.extract(
    input => raw_transcript,
    output_schema => '{"contact_name": {"type": "string"}, "company_name": {"type": "string"}, "job_title": {"type": "string"}}'
   ) AS extracted_info
FROM
  sales_leads
WHERE
  lead_status = 'new';

Estrai i campi in base allo schema JSON fornito

L'esempio seguente estrae campi specifici dal testo di input in base allo schema JSON fornito:

SELECT ai.extract(
  input => 'Spoke with Alex R., Director of IT at Example Organization. They are looking to upgrade their cloud storage.',
  output_schema => '{"contact_name": {"type": "string"}, "job_title": {"type": "string"}, "company_name": {"type": "string"}, "need": {"type": "string"}}'
);

Di seguito è riportato l'output di esempio:

{
  "contact_name": "Alex R.",
  "job_title": "Director of IT",
  "company_name": "Example Organization",
  "need": "upgrade cloud storage"
}

Estrai i campi in base a un prompt in linguaggio naturale

L'esempio seguente estrae i dettagli dei potenziali acquirenti utilizzando uno schema di testo descrittivo:

SELECT ai.extract(
  input => 'Meeting with Taylor K., VP of Engineering at Example Organization. They need a scalable managed PostgreSQL database for their analytics platform. Budget is approved for Q3 launch.',
  output_schema => 'Extract the following details as a clean, line-by-line list: Contact Name, Job Title, Company Name, Technical Requirement, Target Use Case, and Timeline.'
);

Di seguito è riportato l'output di esempio:

Contact Name: Taylor K.
Job Title: VP of Engineering
Company Name: Example Organization
Technical Requirement: Scalable managed PostgreSQL database
Target Use Case: Analytics platform
Timeline: Q3 launch

Estrai campi con array

L'esempio seguente estrae più valori in campi di array in base allo schema di output:

SELECT ai.extract(
  input => 'Call with Kai L., Senior DevOps Engineer at Example Organization. They are currently using MySQL and Redis. Interested in automating enterprise database backups, cross-region replication, and automated scaling.',
  output_schema => '{"contact_name": {"type": "string"}, "company_name": {"type": "string"}, "current_technologies": {"type": "array", "items": {"type": "string"}}, "interested_features": {"type": "array", "items": {"type": "string"}}}'
);

Di seguito è riportato l'output di esempio:

{
  "contact_name": "Kai L.",
  "company_name": "Example Organization",
  "current_technologies": ["MySQL", "Redis"],
  "interested_features": ["enterprise database backups", "cross-region replication", "automated scaling"]
}

Estrai dati strutturati in batch

Per ottenere un tempo di esecuzione totale delle query più rapido su set di dati più grandi, utilizza la versione della funzione basata su array per elaborare più input in una singola chiamata. Per saperne di più, consulta il riferimento ai.extract.

SELECT ai.extract(
  inputs => TEXT[],
  output_schema => TEXT,
  batch_size => INT, -- Optional. The default value is 10.
  model_id => VARCHAR(100) -- Optional. The default value is gemini-3.5-flash-lite.
);

L'esempio seguente estrae dettagli strutturati da più record:

SELECT
  ai.extract(
    inputs => array_agg(raw_transcript ORDER BY lead_id),
    output_schema => '{"contact_name": {"type": "string"}, "company_name": {"type": "string"}, "job_title": {"type": "string"}}',
    batch_size => 4
  )
FROM sales_leads;

Estrai dati strutturati utilizzando i cursori

La funzione basata su cursore è adatta per l'elaborazione di set di dati di grandi dimensioni, perché consente al sistema di trasmettere i dati tramite il modello di AI in batch gestibili senza richiedere il caricamento di tutti i dati in memoria contemporaneamente. Per saperne di più, consulta il riferimento ai.extract.

La firma della funzione per la versione basata su cursore di ai.extract è la seguente:

CREATE OR REPLACE FUNCTION ai.extract(
    input_cursor REFCURSOR,
    output_schema TEXT,
    batch_size INT DEFAULT NULL,
    model_id VARCHAR(100) DEFAULT NULL)
  RETURNS REFCURSOR

L'esempio seguente mostra come inserire i dati nella funzione ai.extract riga per riga utilizzando un cursore:

DO $$
DECLARE
    input_cur REFCURSOR;
    output_cur REFCURSOR;
    result_record RECORD;
BEGIN
    -- Open the input cursor with the data to process
    OPEN input_cur FOR
        SELECT raw_transcript
        FROM sales_leads
        WHERE lead_status = 'new';

    -- Call ai.extract passing the input cursor
    output_cur := ai.extract(
        input_cursor => input_cur,
        output_schema => '{"contact_name": "string", "company_name": "string", "job_title": "string"}',
        batch_size => 10
    );

    -- Loop through the output cursor (columns: input TEXT, output TEXT)
    LOOP
        FETCH output_cur INTO result_record;
        EXIT WHEN NOT FOUND;

        RAISE NOTICE 'Extracted Data: %', result_record.output;
    END LOOP;

    CLOSE input_cur;
    CLOSE output_cur;
END $$;

Passaggi successivi