Intermedio 2 min de lectura

AI Functions: COMPLETE, EXTRACT, SENTIMENT y más

Domina las funciones de IA de Snowflake para generar texto, extraer información, clasificar contenido, detectar sentimiento y traducir directamente en SQL.

Las AI Functions de Cortex

Snowflake ofrece funciones de IA listas para usar, sin configuración adicional:

FunciónQué hace
COMPLETEGenera texto con un LLM
AI_EXTRACTExtrae campos estructurados de texto
AI_CLASSIFYClasifica texto en categorías
AI_SENTIMENTAnálisis de sentimiento (-1 a 1)
AI_TRANSLATETraduce texto a otro idioma
AI_SUMMARIZE_AGGResumir múltiples textos
AI_FILTERFiltra filas según una condición en lenguaje natural

COMPLETE — Generación de texto

-- Prompt simple
SELECT SNOWFLAKE.CORTEX.COMPLETE(
    'llama3.3-70b',
    'Escribe un resumen ejecutivo en 3 bullets de esta reunión: ' || notas_reunion
) AS resumen
FROM reuniones
WHERE fecha = CURRENT_DATE();

-- Con mensajes de sistema (mejor control)
SELECT SNOWFLAKE.CORTEX.COMPLETE(
    'mistral-large2',
    [
        {'role': 'system', 'content': 'Eres un asistente de ventas. Responde solo sobre el producto.'},
        {'role': 'user', 'content': pregunta_cliente}
    ]
) AS respuesta
FROM tickets_soporte;

AI_EXTRACT — Extracción estructurada

-- Extraer campos de texto libre
SELECT AI_EXTRACT(
    descripcion_incidente,
    {
        'tipo_incidente': 'string',
        'sistemas_afectados': 'array of strings',
        'severidad': 'string (P1/P2/P3/P4)',
        'duracion_minutos': 'number'
    }
) AS info_extraida
FROM incidentes_produccion;

-- El resultado es un objeto JSON
SELECT
    info_extraida:tipo_incidente::STRING AS tipo,
    info_extraida:severidad::STRING AS severidad,
    info_extraida:duracion_minutos::NUMBER AS duracion
FROM (
    SELECT AI_EXTRACT(descripcion, {'tipo_incidente': 'string', 'severidad': 'string', 'duracion_minutos': 'number'}) AS info_extraida
    FROM incidentes_produccion
);

AI_CLASSIFY — Clasificación

-- Clasificar tickets de soporte en categorías
SELECT
    ticket_id,
    descripcion,
    AI_CLASSIFY(
        descripcion,
        ['Facturación', 'Soporte técnico', 'Consulta de producto', 'Queja', 'Cancelación']
    ):label::STRING AS categoria
FROM tickets_soporte;

AI_SENTIMENT — Análisis de sentimiento

-- Sentimiento en reseñas de productos
SELECT
    producto_id,
    reseña,
    AI_SENTIMENT(reseña) AS score_sentimiento,
    CASE
        WHEN AI_SENTIMENT(reseña) > 0.3 THEN 'Positivo'
        WHEN AI_SENTIMENT(reseña) < -0.3 THEN 'Negativo'
        ELSE 'Neutral'
    END AS sentimiento
FROM resenas_productos;

-- Agregar sentimiento promedio por producto
SELECT
    producto_id,
    COUNT(*) AS num_resenas,
    ROUND(AVG(AI_SENTIMENT(reseña)), 2) AS sentimiento_promedio
FROM resenas_productos
GROUP BY 1
ORDER BY sentimiento_promedio DESC;

AI_FILTER — Filtrado semántico

-- Encontrar emails que mencionan urgencia sin regex
SELECT *
FROM emails_cliente
WHERE AI_FILTER(cuerpo_email, 'Este email menciona una situación urgente o crítica');

AI_SUMMARIZE_AGG — Resumir múltiples textos

-- Resumir todos los comentarios de un ticket
SELECT
    ticket_id,
    AI_SUMMARIZE_AGG(comentario ORDER BY fecha_comentario) AS resumen_hilo
FROM comentarios_ticket
GROUP BY ticket_id;

Buenas prácticas

  1. Usa modelos más pequeños para tareas simples (clasificación, sentimiento) — son más rápidos y baratos
  2. Batchea las llamadas — procesa miles de filas en un solo SELECT
  3. Cachea los resultados en una tabla cuando el texto no cambia
  4. Valida outputs con una muestra antes de escalar a producción
#cortex #ai-functions #complete #extract #sentiment #classify