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.extractes 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ón1.6.1o 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.
Asegúrate de que la extensión
google_ml_integrationsea la versión1.6.1o una posterior. Para verificar la versión, ejecuta lo siguiente:SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';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_engineygoogle_ml_integration.enable_preview_ai_functionsenoncon el comandogcloud 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_IDPara 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 $$;