Extrae datos estructurados

La función ai.extract es una herramienta de IA integrada de AlloyDB AI que extrae detalles estructurados especificados de texto no estructurado según un esquema proporcionado. Cuando incorporas esta capacidad directamente en la base de datos, AlloyDB para PostgreSQL te permite procesar datos no estructurados sin compilar canalizaciones complejas de extracción, transformación y carga (ETL) ni integraciones de servicios externos.

La función de extracción de datos proporciona los siguientes beneficios:

  • Escalabilidad: Admite la creación de lotes inteligente para funciones IA, también conocida como aceleración de funciones IA, que es una función de optimización de la ejecución de consultas automática en AlloyDB AI que agrupa de forma transparente las llamadas a funciones IA escalares individuales, fila por fila, en solicitudes de modelos por lotes en segundo plano durante la ejecución de la consulta. También admite el procesamiento basado en arrays y en cursores para procesar miles de filas de manera eficiente.
  • Abstracción: Proporciona una abstracción de alto nivel que administra la invocación del modelo y la preparación de datos de forma automática.

La función de extracción de datos de AlloyDB AI admite varios casos de uso, incluidos los siguientes:

  • Atención médica: Analiza notas médicas de texto libre en campos de formato estructurado, como nombres de pacientes, síntomas y medicamentos.
  • Bienes raíces: Transforma descripciones de propiedades no estructuradas en datos específicos, como el tipo de propiedad y la cantidad de dormitorios.
  • Tecnología legal: Identifica y extrae automáticamente términos críticos, como la ley aplicable y los límites de responsabilidad, de documentos legales extensos.
  • Operaciones financieras: procesa el texto de las facturas transcritas para extraer con precisión los metadatos y los importes totales en un formato coherente.

Antes de comenzar

Asegúrate de cumplir con los siguientes requisitos antes de usar la función ai.extract:

  • Versión de PostgreSQL: La función ai.extract es compatible con la versión 18 y posteriores de PostgreSQL. Asegúrate de que tu clúster de AlloyDB ejecute PostgreSQL 18 o una versión posterior. Para obtener más información, consulta las versiones de bases de datos compatibles.
  • Versión de la extensión: Asegúrate de tener instalada la versión más reciente de la extensión de google_ml_integration (versión 1.6.1 o posterior) con la funcionalidad de vista previa habilitada.

Habilita la extensión

Asegúrate de tener instalada la versión más reciente de la extensión google_ml_integration (versión 1.6.1 o posterior) con la funcionalidad de versión preliminar habilitada.

Para habilitar las marcas google_ml_integration.enable_ai_query_engine y google_ml_integration.enable_preview_ai_functions en AlloyDB, usa el comando SET. Estas marcas controlan el acceso al motor de consultas de IA y a las funciones IA en versión preliminar, como ai.extract. El valor predeterminado de estas marcas es off.

  1. Asegúrate de que la extensión google_ml_integration sea la versión 1.6.1 o una posterior. Para verificar la versión, ejecuta lo siguiente:

    SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';
    
  2. Para habilitar las marcas de tu sesión actual, toda la base de datos o todas las bases de datos de una instancia, realiza una o más de las siguientes tareas:

    • Para habilitar las marcas en tu sesión actual, ejecuta lo siguiente:

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

      Este cambio no requiere que se reinicie la base de datos.

    • Para habilitar las marcas de forma persistente en una base de datos específica, ejecuta lo siguiente:

      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';
      
    • Para habilitar las marcas de todas las bases de datos de una instancia, establece las marcas de base de datos google_ml_integration.enable_ai_query_engine y google_ml_integration.enable_preview_ai_functions en on con el 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

      Para obtener más información, consulta Configura marcas de base de datos.

Habilita la solicitud por lotes inteligente para las funciones IA

Para lograr un tiempo de ejecución total de la consulta más rápido cuando ejecutas ai.extract escalar en varias filas, habilita el procesamiento por lotes inteligente para las funciones de IA configurando la marca de base de datos google_ml_integration.enable_ai_function_acceleration en on:

SET google_ml_integration.enable_ai_function_acceleration = 'on';

Cuando se habilita esta marca, AlloyDB agrupa automáticamente las llamadas ai.extract escalares individuales en lotes inteligentes en segundo plano.

Crea una tabla de ejemplo

Para seguir los ejemplos de la función de extracción de este documento, crea una tabla y complétala con la siguiente muestra de datos.

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');

Extrae datos estructurados de una sola cadena

Para extraer detalles estructurados de una sola entrada de texto, usa la versión escalar de ai.extract. Para obtener más información, consulta la referencia de 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.
);

Extrae datos de una tabla

En el siguiente ejemplo, se extrae información estructurada de la columna de la tabla 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';

Extrae campos según el esquema JSON proporcionado

En el siguiente ejemplo, se extraen campos específicos del texto de entrada según el esquema JSON proporcionado:

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"}}'
);

El siguiente es el resultado de ejemplo:

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

Extrae campos según una instrucción en lenguaje natural

En el siguiente ejemplo, se extraen los detalles de los leads comerciales con un esquema de texto descriptivo:

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.'
);

El siguiente es el resultado de ejemplo:

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

Extrae campos con arrays

En el siguiente ejemplo, se extraen varios valores en campos de array según el esquema de salida:

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"}}}'
);

El siguiente es el resultado de ejemplo:

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

Extrae datos estructurados por lotes

Para lograr un tiempo de ejecución total de la consulta más rápido en conjuntos de datos más grandes, usa la versión basada en arrays de la función para procesar varias entradas en una sola llamada. Para obtener más información, consulta la referencia de 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.
);

En el siguiente ejemplo, se extraen detalles estructurados de varios registros:

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;

Extrae datos estructurados con cursores

La función basada en cursores es ideal para procesar conjuntos de datos grandes, ya que permite que el sistema transmita datos a través del modelo de IA en lotes manejables sin necesidad de cargar todos los datos en la memoria a la vez. Para obtener más información, consulta la referencia de ai.extract.

La firma de la función para la versión basada en cursores de ai.extract es la siguiente:

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

En el siguiente ejemplo, se muestra cómo ingresar datos en la función ai.extract fila por fila con un cursor:

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 $$;

¿Qué sigue?