La función ai.classify es una herramienta de IA integrada de AlloyDB AI que clasifica las entradas de texto en un conjunto de clases o etiquetas que definas. Incorporando
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 clasificación de texto ofrece los siguientes beneficios:
- Clasificación en tiempo real: Lleva el conocimiento del mundo de Gemini a los datos empresariales con SQL.
- Escalabilidad: Admite procesamiento por lotes inteligente para funciones de IA, también conocido como aceleración de funciones de 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 llamadas a funciones de 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 cursores para controlar miles de filas de manera eficiente.
- Simplicidad: Proporciona una abstracción de alto nivel que administra la invocación del modelo y la preparación de los datos de forma automática.
La función de clasificación de texto de AlloyDB AI admite varios casos de uso, incluidos los siguientes:
- Clasificación de temas: asigna temas predefinidos (como deportes, tecnología o finanzas) a documentos o artículos.
- Detección de spam: Identifica los correos electrónicos, comentarios o mensajes entrantes como spam.
- Reconocimiento de intents: Determina el objetivo del usuario detrás de una consulta, como reservar un vuelo, consultar el clima o pedir comida.
Antes de comenzar
Asegúrate de cumplir con los siguientes requisitos antes de usar la
función ai.classify:
- Versión de PostgreSQL: La función
ai.classifyes 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.classify.
Asegúrate de que la extensión
google_ml_integrationsea la versión1.6.1o una posterior. Para verificar la versión, ejecuta el siguiente comando:SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';Habilita las marcas para la sesión actual o para toda la base de datos. 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. El valor predeterminado de estas marcas es
off.
Crea una tabla de ejemplo
Para seguir los ejemplos de la función de clasificación de este documento, crea una tabla y compleméntala con las siguientes opiniones sobre productos de ejemplo.
CREATE TABLE IF NOT EXISTS product_reviews (
id INT PRIMARY KEY,
review TEXT
);
INSERT INTO product_reviews (id, review) VALUES
(1, 'Fantastic, would buy again!'),
(2, 'Broken on arrival.'),
(3, 'Mediocre, not worth the price.');
Clasifica una sola cadena
Para categorizar una sola entrada de texto, usa la versión escalar de ai.classify. Para
obtener documentación detallada de la API, consulta la
referencia de ai.classify.
SELECT ai.classify(
input => 'TEXT_CONTENT',
categories => ARRAY['CATEGORY1', 'CATEGORY2', 'CATEGORY3'],
examples => 'EXAMPLES', -- Optional
output_mode => 'OUTPUT_MODE', -- Optional. Can be 'single' or 'multi'.
model_id => 'MODEL_ID' -- Optional. The default value is gemini-3.5-flash-lite.
);
Clasificar texto en categorías mutuamente excluyentes
En el siguiente ejemplo, se muestra un caso de uso básico para clasificar un solo fragmento de texto en una de varias categorías mutuamente excluyentes:
SELECT ai.classify(
input => 'This is a sales report for Q1.',
categories => ARRAY['Report', 'Invoice', 'Memo']
);
El siguiente es el resultado de ejemplo:
Report
Clasifica temas con varias etiquetas
En el siguiente ejemplo, se clasifica un titular de noticias en varios temas estableciendo output_mode en 'multi' y proporcionando descripciones de categorías:
SELECT ai.classify(
input => 'The government announced new regulations on AI development, citing both economic opportunities and potential security risks.',
categories => ARRAY[
ARRAY['politics', 'Questions about politics'],
ARRAY['technology', 'Questions about technology'],
ARRAY['security', 'Questions about security']
],
output_mode => 'multi'
);
El siguiente es el resultado de ejemplo:
politics,technology,security
Usa categorías con descripciones
En el siguiente ejemplo, se muestra la forma preferida de proporcionar categorías con un formato de array en 2D con etiquetas y descripciones para mayor claridad:
SELECT ai.classify(
input => 'The patient reported mild fever and headache.',
categories => ARRAY[
ARRAY['urgent', 'Requires immediate medical attention'],
ARRAY['non-urgent', 'Routine check-up or minor symptoms'],
ARRAY['query', 'A question about services or appointments']
]
);
El siguiente es el resultado de ejemplo:
non-urgent
Proporciona ejemplos con pocos intentos
En el siguiente ejemplo, se muestra cómo guiar la clasificación del modelo proporcionando ejemplos de entradas y sus resultados esperados:
SELECT ai.classify(
input => 'Is this item returnable after 90 days?',
categories => ARRAY[
ARRAY['policy', 'Questions about return, warranty, or other policies'],
ARRAY['shipping', 'Questions about order shipment and delivery'],
ARRAY['payment', 'Questions about payment methods or issues'],
ARRAY['other', 'Any other type of question']
],
examples => '[
{"input": "When will my order arrive?", "output": "shipping"},
{"input": "What is the warranty on this?", "output": "policy"},
{"input": "My discount code isn''t working.", "output": "payment"}
]'
);
El siguiente es el resultado de ejemplo:
policy
Usa un ID de modelo específico
En el siguiente ejemplo, se muestra cómo usar una versión o un tipo de modelo específicos haciendo referencia a su ID:
SELECT ai.classify(
input => 'This new song is a banger!',
categories => ARRAY[
ARRAY['positive', 'Expresses approval or enjoyment'],
ARRAY['negative', 'Expresses disapproval or dislike']
],
model_id => 'MODEL_ID'
);
El siguiente es el resultado de ejemplo:
positive
Reemplaza MODEL_ID por el ID de un modelo compatible con registro previo o un modelo personalizado
que hayas registrado. Para obtener una lista de los modelos registrados previamente compatibles, consulta
Modelos de IA compatibles. Para
obtener instrucciones sobre cómo registrar otros extremos de modelos, consulta
Registra y llama a modelos de IA remotos con la administración de extremos de modelos.
Clasifica en lotes
Cuando clasificas conjuntos de datos grandes en varias filas, puedes optimizar el rendimiento con la creación de lotes inteligente para las funciones IA o la versión basada en arrays de ai.classify.
Procesamiento por lotes inteligente
Para acelerar las consultas que ejecutan ai.classify escalares en varias filas sin escribir consultas complejas de agregación de arrays, habilita el procesamiento por lotes inteligente para las funciones 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.classify escalares individuales en lotes inteligentes en
segundo plano.
SELECT
id,
ai.classify(
input => review,
categories => ARRAY['positive', 'neutral', 'negative']
) AS sentiment
FROM product_reviews
ORDER BY id;
Procesamiento por lotes basado en arrays
Para tener un control explícito sobre el procesamiento por lotes en conjuntos de datos más grandes, usa la
versión basada en arrays de ai.classify para procesar varias entradas a la vez
pasando un array de entradas de SQL. Para obtener documentación detallada de la API, consulta la
referencia de ai.classify.
SELECT ai.classify(
inputs => TEXT[],
categories => TEXT[][],
examples => TEXT, -- Optional.
output_mode => VARCHAR, -- Optional. The default value is single.
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 clasifican varias opiniones a la vez:
SELECT unnest(
ai.classify(
inputs => ARRAY(SELECT review FROM product_reviews ORDER BY id),
categories => ARRAY[
ARRAY['positive', 'Good sentiment'],
ARRAY['neutral', 'Neither good nor bad sentiment'],
ARRAY['negative', 'Bad sentiment']
],
batch_size => 5
)
) AS sentiment;
El siguiente es el resultado de ejemplo:
sentiment
-----------
positive
negative
negative
Clasifica con cursores
La función basada en cursores procesa grandes conjuntos de datos de manera eficiente, 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.classify.
La firma de la función para la versión basada en cursores de ai.classify es
la siguiente:
CREATE OR REPLACE FUNCTION ai.classify(
input_cursor REFCURSOR,
categories TEXT[][],
examples TEXT DEFAULT NULL,
output_mode VARCHAR DEFAULT NULL,
batch_size INT DEFAULT NULL,
model_id VARCHAR(100) DEFAULT NULL)
RETURNS REFCURSOR
En el siguiente ejemplo, se muestra cómo usar un cursor para proporcionar entradas a
ai.classify:
DO $$
DECLARE
cur REFCURSOR;
result_cur REFCURSOR;
input_val TEXT;
sentiment TEXT;
BEGIN
OPEN cur FOR SELECT review FROM product_reviews ORDER BY id;
result_cur := ai.classify(
input_cursor => cur,
categories => ARRAY[
ARRAY['positive', 'Good sentiment'],
ARRAY['neutral', 'Neither good nor bad sentiment'],
ARRAY['negative', 'Bad sentiment']
],
batch_size => 20
);
LOOP
FETCH result_cur INTO input_val, sentiment;
EXIT WHEN NOT FOUND;
RAISE NOTICE 'Sentiment: %', sentiment;
END LOOP;
CLOSE result_cur;
CLOSE cur;
END $$;