Las AI Functions de Cortex
Snowflake ofrece funciones de IA listas para usar, sin configuración adicional:
| Función | Qué hace |
|---|---|
COMPLETE | Genera texto con un LLM |
AI_EXTRACT | Extrae campos estructurados de texto |
AI_CLASSIFY | Clasifica texto en categorías |
AI_SENTIMENT | Análisis de sentimiento (-1 a 1) |
AI_TRANSLATE | Traduce texto a otro idioma |
AI_SUMMARIZE_AGG | Resumir múltiples textos |
AI_FILTER | Filtra 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
- Usa modelos más pequeños para tareas simples (clasificación, sentimiento) — son más rápidos y baratos
- Batchea las llamadas — procesa miles de filas en un solo
SELECT - Cachea los resultados en una tabla cuando el texto no cambia
- Valida outputs con una muestra antes de escalar a producción