Snowflake

Guía completa de las funciones AISQL de Snowflake (IA en SQL)

41 min lectura José Miguel

Introducción a Snowflake AISQL

Snowflake ha incorporado funciones nativas de IA en SQL (AISQL) que permiten realizar tareas de inteligencia artificial directamente dentro de consultas SQL estándar. En lugar de requerir pipelines externos o servicios separados, ahora es posible invocar modelos de lenguaje y otras capacidades de IA con la misma sencillez con que se concatenan cadenas o se formatean datos en Snowflake. Estas funciones, introducidas bajo la iniciativa Snowflake Cortex AI, abarcan análisis de texto, generación de lenguaje natural, embeddings vectoriales, procesamiento de imágenes, audio y más, todo ello in-database y de forma escalable.

¿Qué es Snowflake AISQL? En resumen, es un conjunto de funciones SQL con tecnología de IA y machine learning que trabajan sobre datos multimodales (texto, imágenes, audio, documentos) directamente en Snowflake. Por ejemplo, con AISQL puedes: analizar el sentimiento en reseñas de clientes, clasificar imágenes, generar resúmenes de documentos, buscar similitudes semánticas entre textos, filtrar contenidos por relevancia, e incluso transcribir audio – todo usando simples llamadas a funciones en una consulta SQL. Estas funciones están disponibles para todas las cuentas Snowflake en versión preliminar pública (Public Preview), y algunas ya alcanzando Disponibilidad General (GA) a medida que maduran.

Antes de profundizar en cada función, es importante destacar que muchas de ellas son versiones mejoradas de funciones previas de Snowflake Cortex. Por ejemplo, AI_COMPLETE es la versión actualizada de la antigua función SNOWFLAKE.CORTEX.COMPLETE, AI_CLASSIFY reemplaza a CLASSIFY_TEXT, AI_EMBED unifica las funciones de embedding EMBED_TEXT_768/1024, y así sucesivamente. Snowflake recomienda usar las nuevas funciones prefix-less (sin el prefijo SNOWFLAKE.CORTEX.) para aprovechar todas las mejoras y funcionalidades más recientes. No obstante, mencionaremos también las funciones originales de Cortex que aún no tienen un reemplazo directo en AISQL (como TRANSLATE o PARSE_DOCUMENT), ya que siguen disponibles en vista previa pública.

A continuación, presentamos todas las funciones de Snowflake AISQL (en Public Preview o GA a la fecha), organizadas por tipo, con descripción de su utilidad, casos de uso típicos y ejemplos en SQL estándar para ilustrar su sintaxis y resultados.

Funciones escalares de IA en Snowflake (AISQL)

Las funciones escalares AISQL operan sobre uno o varios valores de entrada (por ejemplo, una columna de texto o imagen) y devuelven un resultado generado mediante un modelo de IA. Estas funciones permiten integrar directamente capacidades de machine learning y NLP en consultas SELECT. A continuación, se detallan las principales funciones escalares de AISQL:

AI_COMPLETE – Generación de texto o respuesta con IA

AI_COMPLETE genera una respuesta o continuación de texto a partir de un prompt proporcionado, usando un modelo de lenguaje (LLM) seleccionado. Es la función genérica de generación de lenguaje natural, útil para casos como: creación de texto descriptivo, diálogo con un modelo estilo ChatGPT, generación de código o respuestas a preguntas abiertas. Esta función es la versión actualizada de la antigua SNOWFLAKE.CORTEX.COMPLETE y se recomienda usar AI_COMPLETE para acceder a la funcionalidad más reciente.

AI_COMPLETE puede trabajar con diferentes tipos de entrada, por ejemplo:

  • Texto: proporcionar un prompt en texto plano para obtener una continuación o respuesta del modelo.
  • Imagen + texto: proporcionar una imagen (archivo) junto con un prompt de texto, para que el modelo genere una respuesta teniendo en cuenta la imagen (por ejemplo, describir la imagen o responder preguntas sobre ella).
  • Objeto de prompt (prompt object): una estructura avanzada que puede incluir múltiples mensajes (ej. rol usuario/sistema) e incluso varias imágenes, simulando interacciones más complejas antes de pedir la respuesta.

Esta flexibilidad permite usar AI_COMPLETE en tareas desde chats conversacionales hasta generación de texto condicionada a contenido visual. Internamente, la función invoca un modelo de lenguaje (por defecto uno proporcionado por Snowflake o el especificado en los parámetros) y devuelve la respuesta generada como texto (tipo STRING o VARIANT dependiendo del formato solicitado).

Ejemplo de uso: Imaginemos que queremos generar una breve recomendación de producto basada en la descripción de un artículo. Podemos usar AI_COMPLETE así:

SELECT AI_COMPLETE(
    'text-davinci-003',
    'Escribe una breve reseña positiva para el siguiente producto: ' || descripcion
) AS reseña_generada
FROM productos;

En este ejemplo, se especifica un modelo (text-davinci-003 de OpenAI) y un prompt en español solicitando una reseña. La función retornaría un texto generado por el modelo como reseña_generada. Nótese que también podríamos referenciar modelos de Snowflake (ej. llama2-70b-chat) u otros disponibles, siempre y cuando el modelo esté permitido y disponible en la cuenta. Snowflake permite controlar el acceso a modelos mediante roles (CORTEX_USER) y allowlists a nivel de cuenta, de forma que solo usuarios autorizados puedan invocar ciertos modelos.

AI_COMPLETE soporta parámetros opcionales para ajustar el comportamiento del modelo, tales como temperatura, máximos tokens de salida, formato de respuesta, etc. En la sintaxis renovada, estos parámetros se pasan mediante argumentos nombrados en la llamada SQL, lo que mejora la legibilidad. Por ejemplo, se puede especificar model_parameters => {'temperature': 0.7} para controlar la aleatoriedad, o response_format => {'type':'json','schema':{...}} para que el modelo devuelva JSON con un esquema definido. Esto último (formato estructurado) es muy útil para obtener respuestas parseables directamente en tablas, reduciendo la necesidad de posprocesamiento. AI_COMPLETE también ofrece la opción show_details para incluir o excluir metadatos de la respuesta (conteo de tokens usados, etc.) según se necesite.

Casos de uso: generación de respuestas en chatbots, creación de resúmenes o descripciones automáticas, elaboración de texto creativo (ej. historias, eslóganes), respuestas a preguntas de lenguaje natural a partir de datos, conversión de lenguaje (por ejemplo, reformular una frase). Al usar AI_COMPLETE, es importante considerar el costo en tokens (entrada + salida) según el modelo escogido, así como aplicar guardrails de seguridad si se generan contenidos libres. Snowflake ofrece Cortex Guard como filtro opcional para evitar respuestas indebidas (contenido violento, de odio, etc.), que se activa mediante parámetros en AI_COMPLETE y filtra automáticamente outputs considerados no seguros.

AI_CLASSIFY – Clasificación de texto o imágenes en categorías

AI_CLASSIFY realiza clasificación de textos o imágenes en categorías definidas por el usuario. Es decir, determina a qué categoría(s) pertenece un contenido dado, entre un conjunto predefinido de clases. Esta función reemplaza y amplía la funcionalidad de la previa SNOWFLAKE.CORTEX.CLASSIFY_TEXT, añadiendo soporte para imágenes y para clasificación multi-etiqueta (es decir, asignar más de una categoría si corresponde).

La sintaxis básica es: AI_CLASSIFY( <input> , <lista_categorías> [, <config_object>] ). El input puede ser un texto (STRING) o un archivo de imagen (FILE), y la lista_categorías es un array de cadenas con las clases posibles. Opcionalmente, se puede proveer un objeto de configuración para ajustar parámetros, por ejemplo: output_mode: 'multi' para permitir múltiples etiquetas (multi-label), proporcionar descripciones de las etiquetas que ayuden al modelo a diferenciarlas, incluir ejemplos de clasificación (few-shot examples) para mejorar la precisión, o dar una instrucción de tarea más detallada sobre cómo clasificar. Todos estos elementos adicionales pueden aumentar la calidad de la clasificación, aunque cada ejemplo o descripción agregado incrementa el conteo de tokens de entrada y por tanto el costo.

Ejemplo básico: Clasificar una frase corta en dos categorías («viajes» vs «cocina»):

SELECT AI_CLASSIFY(
    'Me encanta viajar a Italia y probar su gastronomía',
    ['viajes', 'cocina']
) AS clasificacion;

El resultado sería un objeto JSON indicando la etiqueta asignada, por ejemplo: {«labels»: [«viajes»]} si la frase se considera relacionada a viajes. En modo multi-etiqueta, la función retornaría un array con todas las categorías relevantes. Por ejemplo, usando output_mode: ‘multi’ en el ejemplo anterior, la salida podría ser {«labels»: [«viajes», «cocina»]} dado que la frase toca ambos temas.

Ejemplo con imágenes: Supongamos que tenemos imágenes de comida y queremos clasificarlas en postre, bebida, plato fuerte o guarnición. Podemos cargar las imágenes desde un stage y usar AI_CLASSIFY:

WITH food_pictures AS (
    SELECT
        TO_FILE(file_url) AS img
    FROM DIRECTORY(@food_stage)
)
SELECT
    *,
    AI_CLASSIFY(img, ['postre', 'bebida', 'plato fuerte', 'guarnición']):labels AS categoria
FROM food_pictures;

En este caso, cada imagen (img) es clasificada en una de las cuatro categorías y la etiqueta resultante aparece en la columna categoria. Si se quisieran mejorar los resultados, podríamos incluir en el prompt una indicación al modelo, por ejemplo envolviendo la imagen en un objeto PROMPT('Clasifica el tipo de comida en esta imagen: {0}', img), lo cual puede proporcionar contexto adicional al modelo en casos complejos.

Casos de uso: AI_CLASSIFY es útil para etiquetado automático de contenidos. En texto: categorización de comentarios o reviews (por tema, intención, emoción), clasificación de tickets de soporte por tipo de incidencia, detección de spam vs no spam, etc. En imágenes: clasificar productos en fotos, moderación de imágenes (detectar contenido prohibido), identificación de tipo de documento a partir de una foto/scan, etc. Gracias al soporte de ejemplos de entrenamiento directo en la llamada (few-shot), el usuario puede guiar al modelo con casos conocidos, obteniendo clasificaciones más precisas para dominios específicos. Conviene recordar que AI_CLASSIFY, al igual que otras funciones generativas, implica costos según tokens procesados (los prompts, descripciones y ejemplos se tokenizan para cada fila procesada), por lo que se debe equilibrar la mejora en calidad con el incremento de tokens.

AI_FILTER – Filtrado booleano mediante preguntas de sí/no

AI_FILTER realiza un juicio binario (TRUE/FALSE) respondiendo a una pregunta cerrada formulada en lenguaje natural sobre un texto o imagen. En otras palabras, sirve para filtrar filas en SQL basándose en si cumplen cierta condición semántica. Es una función novedosa que toma una pregunta que espera sí o no (o Verdadero/Falso) y devuelve TRUE si el contenido proporciona una respuesta afirmativa a la pregunta, o FALSE en caso contrario.

A primera vista AI_FILTER puede parecer similar a una simple comparación, pero su poder radica en que el criterio puede ser implícito o subjetivo. Por ejemplo, “¿Este texto expresa una opinión positiva?”, o “¿La imagen es de un perro?” son cuestiones que requieren comprensión semántica o visual que un filtro tradicional no podría hacer directamente.

Ejemplos rápidos:

Filtrado simple de texto:

SELECT texto_reseña,
       AI_FILTER(
           '¿Esta reseña es positiva? ' || texto_reseña
       ) AS es_positiva
FROM reseñas;

Aquí concatenamos la pregunta «¿Esta reseña es positiva?» con el texto de cada reseña, y AI_FILTER devolverá TRUE para reseñas cuyo sentimiento general sea positivo y FALSE para las negativas. Es una forma de marcar comentarios positivos sin necesitar un modelo de sentimiento dedicado (internamente, AI_FILTER está resolviendo la tarea con un modelo generativo evaluando la respuesta “yes” or “no”).

Filtrado de imágenes:

WITH pictures AS (
    SELECT
        TO_FILE(file_url) AS archivo_imagen
    FROM DIRECTORY(@image_stage)
)
SELECT
    FL_GET_RELATIVE_PATH(archivo_imagen) AS file_path
FROM pictures
WHERE AI_FILTER('¿Esta imagen contiene un perro?', archivo_imagen);

Si archivo_imagen es de tipo FILE (por ejemplo obtenido con TO_FILE() desde un stage), AI_FILTER procesará cada imagen con la pregunta dada. El resultado es_perro será TRUE solo para aquellas imágenes donde claramente aparece un perro. Esto ilustra un uso en moderación o clasificación visual básica.

Filtrado en cláusula WHERE: Otra forma poderosa es usar AI_FILTER directamente en la condición de filtrado de una consulta. Por ejemplo:

SELECT c.nombre, o.puesto
FROM candidatos c
JOIN ofertas_empleo o
  ON AI_FILTER(PROMPT('Evalúa si este CV {0} encaja con esta descripción de puesto {1}', c.cv, o.requisitos));

Esta consulta hipotética une candidatos con ofertas de empleo únicamente cuando la función AI_FILTER considera que el CV del candidato sí responde a los requisitos del puesto. En este caso, AI_FILTER evalúa dinámicamente par por par si hay correspondencia, actuando como un matching semántico binario. (Uso con precaución: Este tipo de JOIN basado en IA puede ser muy costoso y debe usarse en conjuntos acotados de datos).

Casos de uso: AI_FILTER se presta a implementar reglas de negocio que antes requerían procesamiento manual o algoritmos complejos. Por ejemplo: filtrar textos por relevancia o criterios subjetivos(«¿menciona X este párrafo?»), moderar contenido («¿Este mensaje contiene lenguaje ofensivo?»), refinar resultados de búsqueda semántica (tomar resultados de Cortex Search y descartar los irrelevantes con una última pasada de IA), validación de datos no estructurados («¿Este registro de chat indica satisfacción del cliente con el servicio?») e incluso lógicas condicionales complejas en workflows (p. ej., decidir si desencadenar una alerta a partir del análisis de texto libre). Dado que AI_FILTER devuelve un booleano puro, se integra fácilmente en WHERE, JOIN, HAVING, etc., lo que abre muchas posibilidades para incorporar decisiones de IA en las consultas. Se recomienda, sin embargo, usarlo en pasos finales o conjuntos reducidos de datos, ya que invocar un LLM fila por fila puede ser intensivo; para procesamiento masivo, a veces es preferible usar primero filtros tradicionales o vectores antes de aplicar AI_FILTER como refinamiento final.

AI_SENTIMENT – Análisis de sentimiento general y por aspecto

AI_SENTIMENT extrae el sentimiento expresado en un texto, proporcionando tanto una polaridad general como, opcionalmente, el sentimiento asociado a categorías específicas dentro del texto. Es la evolución de las antiguas funciones de sentimiento (SENTIMENT y ENTITY_SENTIMENT de Snowflake Cortex), combinando sus capacidades en una sola función mejorada. Con AI_SENTIMENT podemos determinar si un texto es globalmente positivo, negativo, neutral o mixto, y además desglosar la opinión respecto a distintos temas mencionados (por ejemplo, en una reseña de restaurante, la comida podría ser «excelente» pero el servicio «pobre»).

La sintaxis es sencilla: AI_SENTIMENT(texto [, categorias]). Si se proporciona un array de categorías, la función buscará explícitamente sentimientos asociados a esas dimensiones; si no, solo devolverá el sentimiento general del texto. Las categorías pueden entenderse como aspectos o entidades de interés (por ejemplo, ['precio','calidad','servicio'] en el caso de una reseña de restaurante). AI_SENTIMENT devuelve un objeto JSON con un campo categories que contiene un registro para cada categoría especificada más un registro especial «overall» que siempre representa el sentimiento global. Cada registro de categoría incluye el nombre y el sentimiento detectado (positive, negative, neutral o mixed, además de unknown si ese aspecto no aparece en el texto).

Ejemplos:

Sentimiento global:

SELECT AI_SENTIMENT('¡Me encanta este producto, es fantástico!') AS sentimiento;

Resultado (posible): {«categories»:[{«name»:»overall»,»sentiment»:»positive»}]}. Aquí no pasamos categorías específicas, por lo que solo obtenemos la categoría «overall» indicando que el texto es positivo en general.

Sentimiento por aspectos:

SELECT
    AI_SENTIMENT(
        'La comida estaba deliciosa pero el servicio fue muy lento y descortés.',
        ['comida', 'servicio']
    ) AS sentimiento_aspectos;

Salida posible:

{
  "categories": [
    { "name": "overall",  "sentiment": "mixed" },
    { "name": "comida",   "sentiment": "positive" },
    { "name": "servicio", "sentiment": "negative" }
  ]
}

En este ejemplo, la función identifica sentimientos opuestos: positivo respecto a la comida, negativo respecto al servicio, resultando en un sentimiento general mixto. Esto muestra la utilidad de AI_SENTIMENT para análisis de opiniones más granular que el simple positivo/negativo global.

Casos de uso: AI_SENTIMENT es valioso para minería de opiniones (opinion mining) en diversos ámbitos: analizar reseñas de clientes por aspecto (producto, precio, atención), evaluar comentarios de usuarios sobre diferentes características de un software, medir sentimiento en redes sociales hacia distintas facetas de una marca, etc. Anteriormente, Snowflake ofrecía SENTIMENT (que devolvía un score numérico de -1 a 1 de polaridad general) y ENTITY_SENTIMENT (sentimiento por entidad), pero AI_SENTIMENT unifica estas capacidades y las presenta en un formato estructurado y fácil de consultar. Al filtrar por categorías de máximo interés, las empresas pueden obtener indicadores accionables (por ejemplo, “80% de las reseñas mencionan positivamente la calidad del producto pero 60% mencionan negativamente el precio”). Si no se especifican categorías, el modelo internamente puede inferir algunos aspectos clave, pero lo más confiable es solicitar las categorías explícitamente para garantizar que se cubran las dimensiones deseadas.

AI_SIMILARITY – Cálculo de similitud semántica entre textos o imágenes

AI_SIMILARITY calcula una medida de similitud entre dos entradas, que pueden ser textos o imágenes, basada en la comparación de sus embeddings vectoriales. En esencia, es una función que combina en un solo paso la generación de embeddings y el cómputo de la similitud (coseno) entre ellos. Devuelve típicamente un score numérico (por ejemplo un valor entre 0 y 1, donde 1 indicaría identicidad o máxima similitud).

Ventaja principal: Antes de AI_SIMILARITY, para comparar similitud textual en Snowflake había que obtener los vectores usando funciones como SNOWFLAKE.CORTEX.EMBED_TEXT_1024 y luego aplicar manualmente una función de similitud (ej. VECTOR_COSINE_SIMILARITY). Esto requería varios pasos y que los textos ya estuvieran embebidos. Con AI_SIMILARITY, en cambio, no hace falta pre-generar los embeddings: la función internamente se encarga tanto de embeber cada entrada (usando un modelo por defecto o especificado) como de computar la similitud resultante. Incluso soporta imágenes como entradas, cosa que antes no era posible con las funciones de similitud de vectores tradicionales.

Sintaxis: AI_SIMILARITY(input1, input2 [, config]). Los inputs pueden ser strings de texto o archivos de tipo IMAGE (pero no se puede mezclar texto con imagen en la misma llamada). Opcionalmente, config permite indicar el modelo de embedding a utilizar, entre otros parámetros (por defecto Snowflake usa un modelo llamado snowflake-arctic-embed-l-v2 para texto, que es un embedding general de lenguaje). Si no se indica un modelo, los defaults son razonables para casos generales.

Ejemplos:

Similitud de frases:

SELECT AI_SIMILARITY(
    'Me encanta la comida italiana',
    'La pasta es mi plato favorito'
) AS score_similitud;

Aquí AI_SIMILARITY embedirá ambas frases en vectores y calculará la similitud coseno. Dado que ambas expresan ideas relacionadas (amor por la comida italiana y gusto por la pasta), esperaríamos un score alto, cercano a 1. En comparación, si la segunda frase fuera «Odio la música fuerte», la similitud con la primera sería mucho más baja.

Similitud de imágenes:

WITH pictures AS (
    SELECT
        relative_path,
        TO_FILE(@image_stage, relative_path) AS img
    FROM DIRECTORY(@image_stage)
)
SELECT relative_path
FROM pictures
WHERE AI_SIMILARITY(img, TO_FILE('@image_stage', 'producto_referencia.jpg')) >= 0.5;

Donde img1, img2,…,imgN son columnas FILE de imágenes. La función podría usarse, por ejemplo, para encontrar imágenes duplicadas o muy parecidas en un conjunto (score alto) o al contrario para validar que dos imágenes no se parecen (score bajo). Un caso concreto es comparar la foto de un producto con fotos en un catálogo para encontrar coincidencias.

Casos de uso: AI_SIMILARITY resulta ideal para búsqueda semántica y deduplicación. Por ejemplo, en lugar de realizar una búsqueda exacta por palabras clave, podemos comparar la similitud entre una consulta y textos candidatos (descripciones de artículos, documentos, etc.) y filtrar aquellos con score mayor a cierto umbral, implementando búsqueda por significado. También sirve para detección de plagio o contenido similar, agrupación de textos por tema, recomendación de items similares (tomando descripciones de productos, por ejemplo), o para compaginar registros de distintas fuentes que describen lo mismo con palabras distintas. En el caso de imágenes, permite montar soluciones de content-based image retrieval(recuperar imágenes similares a una de ejemplo) sin entrenar modelos personalizados. Todo esto sin salir de Snowflake, aprovechando la potencia de su motor vectorial y sin gestionar infraestructura de ML aparte. Conviene mencionar que para grandes volúmenes de datos podría ser más eficiente usar Snowflake Cortex Search (que combina vectores e índices tradicionales), pero AI_SIMILARITY es perfecto para comparaciones ad-hoc o cuando se necesita el valor de similitud explícitamente en las consultas.

AI_EMBED – Generación de vectores embedding desde texto o imágenes

AI_EMBED crea un vector de embedding numérico a partir de un texto o imagen de entrada. Un embedding es una representación vectorial de baja dimensión que captura las características semánticas del dato original. Estos vectores permiten luego comparaciones matemáticas (distancias, similitudes) entre textos o imágenes de forma eficiente. AI_EMBED es la función de Snowflake que encapsula esta tarea: dado un texto (ej. una frase, un documento) o una imagen, devuelve su representación vectorial en forma de un tipo de dato especial (tipo VECTOR en Snowflake, o a veces VARIANT/ARRAY).

Esta función es la sucesora de SNOWFLAKE.CORTEX.EMBED_TEXT_768 y EMBED_TEXT_1024 (que generaban vectores de 768 o 1024 dimensiones respectivamente). En lugar de tener múltiples funciones separadas por tamaño de vector, AI_EMBED elige automáticamente el mejor modelo y dimensionalidad según el caso, y se actualiza con las mejoras más recientes en embeddings. Por ejemplo, usa modelos Arctic de Snowflake optimizados que suelen generar vectores de 1024 dimensiones para texto, a menos que se especifique lo contrario.

Uso típico:

Embedding de texto:

SELECT AI_EMBED('snowflake-arctic-embed-l-v2.0', 'Snowflake es una plataforma de datos en la nube') AS vector_embedding;

Esto devuelve un vector (imaginemos de 1024 elementos) que representa el significado de la frase. No es interpretable directamente por humanos, pero dos frases similares tendrán vectores cercanos en el espacio vectorial.

Embedding de imagen:

SELECT AI_EMBED('voyage-multimodal-3', TO_FILE('@image_stage', 'coche.jpg')) AS vector_imagen;

Produce un vector que representa visualmente la imagen del coche. Este vector podría compararse con los de otras imágenes para encontrar las más parecidas.

El verdadero poder de AI_EMBED se manifiesta cuando almacenamos estos vectores y los utilizamos para búsquedas vectoriales o matching. Snowflake soporta índices y funciones vectoriales (búsqueda de vecinos más cercanos, etc.) sobre columnas VECTOR, lo que habilita casos de AI Inside como construir un buscador semántico de documentos o un sistema de recomendación en base a similitud de contenido. Es frecuente usar AI_EMBED junto a AI_SIMILARITY: primero se embece un conjunto de textos, y luego se compara la similitud de un nuevo texto con todos ellos para encontrar los más afines.

Casos de uso: Todos aquellos en los que necesitamos pasar de datos no estructurados a representaciones numéricas comparables. Por ejemplo: indexar un gran número de documentos, descripciones o artículos científicos en Snowflake generando sus embeddings; luego, dado un texto de consulta, embeberlo también y buscar los documentos cuyo vector esté más cerca (lo que indica mayor relevancia semántica). Lo mismo con imágenes: AI_EMBED permitiría, por ejemplo, almacenar vectores de fotos de productos, y luego dado uno nuevo, recuperar los productos visualmente similares. También es útil en clustering (agrupamiento) – al convertir textos a vectores, se pueden usar técnicas de clustering directamente en Snowflake para descubrir grupos temáticos – o para alimentar modelos más avanzados (por ejemplo, usar los vectores resultantes en algoritmos de clasificación/tracking fuera de Snowflake). En definitiva, AI_EMBED es una función fundamental para preparar datos de texto e imagen para cualquier tarea de machine learning subsiguiente, y su disponibilidad in situ en la base de datos elimina la necesidad de extraer datos para procesarlos en otro entorno.

Nota: Las funciones AI_SIMILARITY y AI_EMBED manejan internamente gran parte del trabajo pesado; solo cuentan tokens de entrada, no de salida, puesto que no generan texto sino vectores. Esto significa que el costo se asocia principalmente al tamaño del contenido de entrada y al modelo de embedding utilizado, pero no a ningún prompt extenso de salida.

AI_TRANSCRIBE – Transcripción de audio a texto (Speech-to-Text)

AI_TRANSCRIBE convierte contenido de audio en texto escrito, es decir, transcribe archivos de audio (ej. formatos WAV, MP3) utilizando modelos de reconocimiento de voz integrados. Esta función amplía las capacidades multimodales de Snowflake al ámbito de audio, permitiendo obtener transcripciones directamente desde SQL. Es especialmente útil para analytics de centros de llamadas, análisis de reuniones grabadas, generación de subtítulos, etc., todo sin salir del entorno Snowflake.

La sintaxis es: AI_TRANSCRIBE( <audio_file> [ , <opciones> ] ). El primer argumento es un objeto FILE que apunte al archivo de audio en un stage (se obtiene mediante TO_FILE() sobre un archivo previamente cargado). El segundo argumento opcional es un objeto que permite especificar configuraciones como: timestamp_granularity (granularidad de marca de tiempo) y speaker_labels (si queremos distinguir diferentes hablantes). Snowflake soporta actualmente tres niveles de granularidad de transcripción:

  • Default (por defecto): devuelve la transcripción completa del audio como un solo bloque de texto (sin timestamps).
  • «word»: devuelve la transcripción con marca de tiempo para cada palabra, útil para subtitulado preciso.
  • «speaker»: intenta identificar cambios de locutor, indicando quién habla y en qué momento, con un timestamp en cada cambio de hablante. Esto es muy útil en diálogos o reuniones con múltiples participantes.

Ejemplo: Supongamos un archivo de audio reunion.mp3 almacenado en @audio_stage. Queremos transcribirlo con identificación de hablantes:

SELECT AI_TRANSCRIBE(
    TO_FILE('@audio_stage', 'reunion.mp3'),
    {'timestamp_granularity': 'speaker'}
) AS transcripcion;

El resultado será un texto (probablemente en formato JSON estructurado) con el diálogo transcrito, incluyendo anotaciones de qué hablante interviene y a qué hora. Por ejemplo, un fragmento podría lucir así (formato ilustrativo):

{
    "audio_duration": 208.66,
    "segments": [
        {
            "end": 3.076,
            "speaker_label": "SPEAKER_00",
            "start": 0.031,
            "text": "Good afternoon, this is Aaliyah Johnson from Secure Financial Services."
        },
        {
            "end": 4.297,
            "speaker_label": "SPEAKER_02",
            "start": 3.196,
            "text": "How can I help you today?"
        },
        {
            "end": 7.182,
            "speaker_label": "SPEAKER_02",
            "start": 5.139,
            "text": "Hola, necesito ayuda con mis inversiones."
        },
        ...
    ],
    "text": "Good afternoon, this is Aaliyah Johnson from Secure Financial Services.
    How can I help you today? Hola, necesito ayuda con mis inversiones. ..."
}

AI_TRANSCRIBE soporta múltiples idiomas de entrada (no solo inglés; por ejemplo, podría transcribir español, francés, etc.) y es capaz de manejar audios con varios idiomas presentes. Internamente, utiliza modelos robustos de speech-to-text (posiblemente similares a Whisper o equivalentes) para lograr una transcripción precisa.

Casos de uso: La transcripción automática habilita análisis antes impracticables: análisis de sentimientos en llamadas (transcribir con AI_TRANSCRIBE y luego pasar el texto a AI_SENTIMENT), búsqueda en audio (transcribir audios de reuniones y luego usar AISQL para buscar palabras clave o resumir con AI_SUMMARIZE_AGG), automatización de documentos (convertir mensajes de voz o audio de webinars en texto legible). Un ejemplo concreto es en contact centers: transcribir todas las llamadas y luego usar AI_FILTER o AI_CLASSIFY para categorizar las llamadas (e.j. «¿el cliente estaba molesto?») o extraer el tema principal. Al mantener este procesamiento dentro de Snowflake, se garantiza seguridad y escalabilidad – no hace falta subir los audios a servicios externos, todo se procesa en la infraestructura controlada de Snowflake. Es importante tener en cuenta la disponibilidad regional: al ser pesado en cómputo, AI_TRANSCRIBE inicialmente está disponible solo en ciertas regiones de Snowflake, por lo que se debe verificar que la cuenta esté en una región soportada para audio.

Funciones de agregación AISQL (resumen y agrupación con IA)

A diferencia de las funciones escalares (que procesan fila a fila), Snowflake ofrece funciones de agregación con IA que operan sobre conjuntos de filas completas para producir un resultado único. Estas funciones agregadas son especialmente útiles para resumir grandes cantidades de texto o combinar múltiples entradas de forma inteligente, superando las limitaciones de contexto de un modelo individual. Actualmente, existen dos funciones agregadas clave en AISQL:

AI_SUMMARIZE_AGG – Resumir múltiples textos en uno solo

AI_SUMMARIZE_AGG toma una columna de texto (varias filas) y devuelve un resumen consolidado de todo ese conjunto. Básicamente, lee todos los textos aportados, los concatena inteligentemente y genera un resumen en lenguaje natural. Su objetivo es dar una visión general o insight de un listado potencialmente largo de entradas, sin estar limitado por la ventana de contexto de un modelo LLM estándar, ya que Snowflake se encarga de alimentarle los datos por partes si es necesario.

La sintaxis es simple: AI_SUMMARIZE_AGG(expr) donde expr es la expresión (generalmente columna) de texto a resumir. Podemos usarla como cualquier otra función de agregación en SQL, por ejemplo junto con GROUP BY para obtener resúmenes por categoría.

Ejemplo: Supongamos que tenemos una tabla de feedback de clientes con una columna comentario. Si queremos obtener un resumen global de todos los comentarios:

SELECT AI_SUMMARIZE_AGG(comentario) AS resumen_global
FROM feedback_clientes;

El resultado sería un párrafo o conjunto de párrafos que sintetizan los temas principales que mencionan los clientes en sus comentarios. Por ejemplo, podría mencionar que la mayoría elogian el producto pero sugieren mejorar el soporte, etc., dependiendo del contenido real

Podemos también agrupar, por ejemplo, resumen por región:

SELECT region,
       AI_SUMMARIZE_AGG(comentario) AS resumen_region
FROM feedback_clientes
GROUP BY region;

Así cada región tendría su propio resumen de lo que dicen sus clientes.

Ventaja: A diferencia de la antigua función SUMMARIZE de Snowflake Cortex que solo operaba sobre un texto individual, AI_SUMMARIZE_AGG puede resumir miles de filas de texto juntas, ya que internamente itera sobre ellas. Como indica la documentación, no está sujeta a las limitaciones de ventana de contexto del modelo. Snowflake alimenta al LLM trozos del conjunto de datos progresivamente y combina los resultados, devolviendo un resumen final coherente de todo.

El resumen generado es de propósito general. Si se necesita un tipo de salida más específico o con formato particular, Snowflake recomienda usar AI_AGG (descrito abajo) donde le damos instrucciones detalladas al modelo. AI_SUMMARIZE_AGG, en cambio, busca producir un buen resumen genérico por sí mismo.

Casos de uso: Esta función es extremadamente útil para síntesis de grandes volúmenes de texto: resumen de comentarios de encuestas, de reseñas de productos, de transcripciones largas, de logs de incidencias, etc. Por ejemplo, imagine resumir todas las reviews de un hotel para extraer qué es lo más valorado y qué las principales quejas – AI_SUMMARIZE_AGG lo hace en una sola consulta. También puede servir para obtener la «esencia» de documentos largos almacenados en Snowflake (cargados como filas por párrafo, por ejemplo). Con AI_SUMMARIZE_AGG se logra rápidamente un párrafo resumen que se puede mostrar en reportes o usar como base para análisis posteriores. Todo esto con la comodidad de una agregación SQL: es declarativa y se integra con filtros (WHERE) y agrupaciones (GROUP BY). Debe mencionarse que, aunque se supere la longitud manejable por un único modelo, internamente siguen aplicando modelos LLM, por lo que el costo escalará con la cantidad total de texto (en tokens) analizado; sin embargo, sigue siendo más eficiente y práctico que intentar resumir manualmente fragmento a fragmento.

AI_AGG – Agregación por instrucciones (resúmenes guiados o tareas complejas)

AI_AGG es una función de agregación más general y poderosa que permite aplicar una instrucción en lenguaje natural sobre un conjunto de textos para producir un resultado. En cierta forma, hace lo mismo que AI_SUMMARIZE_AGG (combinar muchas filas de texto en una salida), pero permite que el usuario especifique con detalle qué debe hacer el modelo con esos datos. Por eso a veces se le describe como un «extensión» o versión personalizada de summarization.

Sintaxis: AI_AGG(expr, instruction). El primer parámetro es la columna o conjunto de textos a procesar (igual que en AI_SUMMARIZE_AGG) y el segundo es una cadena de texto que describe la tarea o formato deseado del resultado. Esa instrucción puede ser tan sencilla o compleja como queramos: desde «Resume los datos» hasta un listado de pasos o preguntas a responder con los datos.

Ejemplo: Imaginemos una tabla reviews de reseñas de clientes que incluyen una calificación numérica y un comentario. Podemos pedirle al modelo que agrupe y resuma opiniones según la calificación:

SELECT AI_AGG(
    'Calificación: ' || calificacion || '\nComentario: ' || comentario,
    'Agrupa las reseñas en tres categorías según su puntuación: bajas (1-2), medias (3), altas (4-5). Para cada grupo, resume los puntos principales mencionados por los clientes y destaca tendencias comunes.'
) AS informe_reseñas
FROM reviews;

En este ejemplo (inspirado en documentación), la instrucción en español le indica al modelo exactamente cómo deseamos que procese las reseñas: agrupadas por puntuaciones y con cierto formato de salida. AI_AGG alimentará todas las reseñas al modelo gradualmente y generará el texto solicitado, por ejemplo un informe con secciones «Reseñas bajas: …», «Reseñas medias: …», «Reseñas altas: …», con los puntos destacados de cada grupo. Esto va mucho más allá de un simple resumen, es como darle una consigna compleja a un analista de datos, pero ejecutada automáticamente por el modelo.

Otro ejemplo podría ser: tenemos cientos de reportes de errores de software y le pasamos al AI_AGG una instrucción tipo «Mapea mentalmente los errores con soluciones conocidas y genera una tabla de error -> solución si encuentras correspondencia» – el modelo podría producir algo cercano a un FAQ o troubleshooting guide uniendo todas las entradas (asumiendo que en los datos hay patrones que el modelo puede reconocer). De hecho, Rajiv Gupta menciona un caso donde usando AI_SUMMARIZE junto con EXTRACT_ANSWER, se logró mapear automáticamente descripciones de errores a sus soluciones en una tabla de referencia, demostrando el potencial de estas funciones en soporte técnico.

Casos de uso: AI_AGG es excelente para informes automatizados, análisis exploratorio guiado y extracción de insights. Siempre que puedas describir la tarea en lenguaje natural, puedes intentar que AI_AGG la realice sobre tus datos. Ejemplos: generar un informe de sentimientos separado por segmento de cliente, listar las principales razones de churn mencionadas en notas de cancelación, extraer palabras clave comunes en un conjunto de documentos (dándole la instrucción «Encuentra las 5 palabras o temas más repetidos y explica su contexto»), combinar logs de varios servidores y resumir un incidente(instrucción: «Analiza estos logs de error y resume la secuencia de eventos y la causa raíz probable»).

Al igual que AI_SUMMARIZE_AGG, esta función rompe la limitación del contexto permitiendo procesar datasets más grandes que los típicamente manejables de una sola vez por un LLM. Pero su punto fuerte es la dirección precisa: obtenemos resultados alineados a necesidades específicas. Cabe señalar que formular correctamente la instrucción es clave – es un prompt engineering de nivel agregado. Y se debe vigilar que la instrucción sea clara para evitar que el modelo «alucine» o se desvíe. Snowflake indica que si la instrucción es poco clara o los datos no contienen lo pedido, el modelo podría indicar que no encontró respuesta. Por tanto, se recomienda ser explícito en lo esperado. Por último, hay que considerar los costos: AI_AGG procesará todos los tokens de entrada (sumando las longitudes de todas las filas) más los tokens de la instrucción, por lo que tareas sobre millones de filas muy largas podrían ser costosas. Aun así, sigue siendo más eficiente que sacar los datos y procesarlos externamente, y aprovecha la paralelización de Snowflake en la agregación.

Funciones auxiliares (helper) de Snowflake AISQL

Además de las funciones generativas y de análisis mencionadas, Snowflake proporciona funciones de utilidad para apoyar el uso de AISQL en casos prácticos. Estas helper functions no invocan modelos complejos por sí mismas, sino que ayudan a preparar o manejar datos para las funciones de IA. Las principales funciones auxiliares disponibles son:

  • COUNT_TOKENS (SNOWFLAKE.CORTEX) – Cuenta la cantidad de tokens (sub-unidades de texto) en una entrada de texto según el modelo o función de IA especificada. Es útil para estimar el costo de una operación de AISQL antes de ejecutarla, o para trocear entradas grandes de modo que no excedan el máximo de contexto de un modelo. Por ejemplo: SELECT COUNT_TOKENS(descripcion, 'AI_COMPLETE') FROM productos; nos diría cuántos tokens de entrada consumiría aproximadamente pasar esa descripción a la función AI_COMPLETE (usando el tokenizer del modelo por defecto de complete). Dado que muchos LLM tienen límites de tokens de contexto (ej. 2048, 8192, etc.), esta función permite adaptar prompts y evitar errores por longitud. Nota: COUNT_TOKENS en sí solo consume computación mínima y no incurre en costo de modelo, pues no llama a un LLM, simplemente aplica el tokenizador correspondiente.
  • TRY_COMPLETE (SNOWFLAKE.CORTEX) – Funciona igual que AI_COMPLETE/COMPLETE, pero en lugar de lanzar error si el modelo falla o excede límite, devuelve NULL. Es un envoltorio seguro para ejecuciones masivas: si por alguna razón un prompt causa error (demasiado largo, modelo no disponible, etc.), la consulta no se cae entera sino que esa fila en particular simplemente tendrá resultado nulo. Esto facilita procesar miles de filas con generative AI sin abortar por una excepción en una de ellas.
  • SNOWFLAKE.CORTEX.SEARCH_PREVIEW – Permite previsualizar resultados de un servicio de búsqueda Cortex desde SQL. Snowflake Cortex Search es un motor de búsqueda semántica (tipo RAG, Retrieval Augmented Generation) que se configura aparte; con SEARCH_PREVIEW se pueden probar consultas contra ese servicio y obtener los resultados (normalmente un JSON con documentos relevantes) directamente en una query. Por ejemplo: SELECT PARSE_JSON(SNOWFLAKE.CORTEX.SEARCH_PREVIEW('mi_search_service', '{ "query": "errores de factura en Europa", "topK": 5}')). Esto devolvería los 5 documentos más relevantes encontrados por el servicio de búsqueda para la consulta «errores de factura en Europa». Es una manera de integrar en SQL los resultados de la búsqueda antes de quizá pasarlos a un LLM para generar una respuesta final (promptcompuesto). En suma, es útil para implementar flujos de Pregunta-Respuesta con contexto: primero usar SEARCH_PREVIEW para obtener párrafos relevantes de tu base documental, luego filtrar/refinar con AI_FILTER si se desea, y finalmente alimentar esos textos a AI_COMPLETE o AI_AGG para responder con fundamento.
  • SPLIT_TEXT_MARKDOWN_HEADER (SNOWFLAKE.CORTEX) – Esta función divide un documento Markdown en secciones basadas en sus encabezados (niveles #, ##, etc.), devolviendo las partes estructuradas en un array. Sirve para separar por capítulos o secciones un texto largo de forma lógica. Por ejemplo, un artículo en Markdown podría dividirse por titulares antes de enviarlo a AI_SUMMARIZE_AGG para resumir cada sección por separado. Devuelve un ARRAY de VARIANT donde cada elemento es un fragmento con una etiqueta del encabezado correspondiente.
  • SPLIT_TEXT_RECURSIVE_CHARACTER (SNOWFLAKE.CORTEX) – Esta función fragmenta un texto en trozos de tamaño fijo, con cierto solapamiento entre ellos. Es útil para segmentar textos muy extensos en pedazos manejables por un modelo. Según documentación, por defecto corta en bloques de ~15 caracteres con overlap de 10, pero posiblemente admite parámetros. En la práctica, uno podría aplicar recursivamente la fragmentación hasta lograr partes de, digamos, 2000 tokens cada una para luego procesar cada parte con AI_COMPLETE. Es una herramienta de preprocesamiento para datos extremadamente largos donde se necesita evitar perder contexto (de ahí el solapamiento).
  • PROMPT (SNOWFLAKE.CORTEX) – Nota: Aunque no estaba listada antes, cabe mencionar PROMPT() como función auxiliar. Esta permite construir objetos de prompt complejos con placeholders, útil para cuando se pasan varios campos a una función de IA. Por ejemplo: PROMPT('Pregunta: {0} Contexto: {1}', pregunta, contexto) genera un solo prompt combinando parámetros. La hemos visto en uso en ejemplos de AI_FILTER y AI_CLASSIFY con imágenes. No es una función de IA en sí, pero es muy práctica para formatear entradas.

En general, las funciones auxiliares enriquecen el ecosistema AISQL proporcionando control y seguridad adicionales: podemos checar longitudes con COUNT_TOKENS, manejar errores con TRY_COMPLETE, chunkear documentos con SPLIT_TEXT*, probar búsquedas semánticas, etc. Esto refleja que Snowflake busca no solo dar las funciones de IA, sino también las herramientas para integrarlas de forma robusta en pipelines de datos reales.

Otras funciones de Snowflake Cortex AISQL (traducción, documentos, respuestas)

Por completitud, mencionamos otras funciones de IA que Snowflake ofrece (generalmente bajo el esquema SNOWFLAKE.CORTEX) y que forman parte del ecosistema AISQL, aunque no tienen aún una versión AI_ actualizada. Estas funciones están en Public Preview y son propias de Snowflake, y pueden utilizarse según convenga:

  • TRANSLATE (SNOWFLAKE.CORTEX) – Traduce texto de un idioma a otro. Permite detectar el idioma de origen automáticamente y traducir al idioma destino especificado. Su eficacia es mayor cuando al menos la fuente o el destino es inglés (ejemplo: inglés a español o viceversa suele dar mejores resultados que, digamos, chino a alemán directamente). Es útil para internacionalización de contenidos dentro de Snowflake. Por ejemplo: SELECT SNOWFLAKE.CORTEX.TRANSLATE('Hola mundo', 'en') produciría «Hello world». Tip: Se puede combinar con AI_COMPLETE si necesitamos una traducción contextual más elaborada, pero para traducciones directas esta función dedicada es más eficiente.
  • PARSE_DOCUMENT (SNOWFLAKE.CORTEX) – Extrae texto y metadatos de documentos no estructurados (PDFs, imágenes escaneadas, etc.). Esta función actúa como un OCR/analizador: devuelve el texto contenido en el documento y a veces estructura (por ejemplo, JSON con títulos, párrafos). Es muy útil para ingerir documentos al ecosistema Snowflake AI. Por ejemplo, para un PDF en un stage: SELECT SNOWFLAKE.CORTEX.PARSE_DOCUMENT( TO_FILE(@docs_cv/resume.pdf) ) podría devolver el texto legible del CV para luego pasarlo a AI_FILTER o AI_CLASSIFY. Caso de uso:procesamiento masivo de documentos escaneados, extracción de texto para hacerlos buscables vía AISQL. Nota: Esta función confluye con los nuevos Snowflake Document AI capabilities, pero al ser parte de Cortex AISQL la incluimos.
  • EXTRACT_ANSWER (SNOWFLAKE.CORTEX) – Realiza Question Answering: dada una pregunta en lenguaje natural y un bloque de texto (no estructurado), extrae la respuesta concreta del texto si existe. Es decir, busca dentro del texto la respuesta a la pregunta formulada. Por ejemplo, dado un artículo o manual almacenado en una tabla, uno podría hacer: SELECT SNOWFLAKE.CORTEX.EXTRACT_ANSWER(documento_texto, '¿Cuál es la capital de Francia?'). Si el texto contiene la información («… la capital de Francia, París, …»), la función devolverá «París». Caso de uso: extraer automáticamente datos puntuales de documentos, FAQ bots donde primero localizas el párrafo con Cortex Search y luego sacas la respuesta precisa de ese párrafo. Nota técnica: EXTRACT_ANSWER cuenta tokens sumando tanto la pregunta como el texto de referencia, y conceptualmente puede considerarse un sub-tipo de AI_COMPLETE enfocado a Q&A cerrada.
  • CLASSIFY_TEXT, SUMMARIZE, SENTIMENT (SNOWFLAKE.CORTEX) – Son las funciones originales para clasificación, resumen y sentimiento simple. Actualmente Snowflake indica usar sus contrapartes actualizadas (AI_CLASSIFY, AI_SUMMARIZE_AGG/AI_AGG, AI_SENTIMENT) para mayor capacidad y precisión. No obstante, siguen disponibles. Por ejemplo, SUMMARIZE(texto) devolvía un resumen breve de un solo texto (limitado por contexto), y SENTIMENT(texto) devuelve un valor numérico entre -1 (muy negativo) y 1 (muy positivo) indicando la polaridad. Estas pueden ser útiles por simplicidad o si solo se necesita procesar individualmente sin la complejidad de las nuevas, pero carecen de las mejoras de los modelos más recientes.
  • ENTITY_SENTIMENT (SNOWFLAKE.CORTEX) – Similar a AI_SENTIMENT con categorías, esta función original extraía sentimiento por entidad mencionada en texto (por ejemplo, detectaba entidades nombradas como empresas o productos en un comentario y asignaba sentimiento a cada una). Ahora AI_SENTIMENT permite definir manualmente las categorías, haciéndolo más controlable, por lo que ENTITY_SENTIMENT queda en desuso salvo para usos muy automágicos.
  • FINETUNE (SNOWFLAKE.CORTEX) – A diferencia de todas las anteriores, esta no es de inferencia sino de entrenamiento. La función FINETUNE permite lanzar tareas de fine-tuning de modelos de lenguaje directamente en Snowflake. Con ella, se pueden crear versiones especializadas de modelos (p. ej., afinar un modelo base con tus propios datos).

En resumen, Snowflake AISQL abarca desde la ingestión de datos no estructurados (parse_document), traducción y búsqueda, hasta análisis de texto e imágenes (sentimiento, clasificación, similitud), generación de lenguaje (completado, resumen) e incluso entrenamiento de modelos personalizados. Todo ello con funciones familiares de SQL, integrándose de forma transparente con las demás operaciones de la base de datos.

Consideraciones finales de uso y mejores prácticas

Al trabajar con funciones AISQL conviene tener en cuenta algunas mejores prácticas:

  • Roles y permisos: Por defecto Snowflake habilita el rol SNOWFLAKE.CORTEX_USER a todos los usuarios (Public) para que puedan usar estas funciones. Si se desea restringir su uso, un administrador puede revocar ese acceso y concederlo solo a roles específicos. Además, a nivel de modelos específicos, se pueden crear objetos modelo en SNOWFLAKE.MODELS y aplicar RBAC granular, para controlar qué roles pueden invocar qué modelos (por ejemplo, quizás permitir usar modelos open source pero no uno propietario de OpenAI, etc.).
  • Costos y monitoreo: Las funciones AISQL consumen créditos de cómputo y potencialmente adicionales por uso de modelo (si aplica). Snowflake cobra según número de tokens procesados (entrada y salida) y tipo de modelo. Es recomendable monitorear el consumo usando Snowflake Monitoring & Observability (hay vistas del account usage que reportan el uso de funciones AI). Para presupuestar, COUNT_TOKENS y los reportes de Snowflake pueden ayudar a anticipar costos, y CORTEX_MODELS_ALLOWLIST puede fijar qué modelos (quizá más económicos) se permiten usar en la cuenta.
  • Manejo de errores y límites: Utilizar TRY_COMPLETE en cargas masivas para evitar que errores aislados detengan la ejecución. Dividir tareas muy grandes, usar SPLIT_TEXT si un solo texto excede los límites de contexto. Recordar que algunas funciones (AI_TRANSCRIBE en particular) pueden estar limitadas por región o en preview regional; en esos casos, se puede considerar alternativas temporales (por ejemplo, transcribir fuera hasta que esté en GA global, si es crítico).
  • Estrategias RAG (Retrieval Augmented Generation): Snowflake AISQL se integra perfectamente en flujos RAG: usar Cortex Search para obtener candidatos, filtrar con AI_FILTER, extraer datos clave con EXTRACT_ANSWER, y finalmente generar respuestas con AI_COMPLETE o resúmenes con AI_AGG. Esta secuencia mejora la calidad de las respuestas y evita alucinaciones, ya que el modelo trabaja con datos concretos recuperados.
  • Actualizaciones frecuentes: Dado que AISQL está en rápida evolución (Snowflake añadió varias funciones nuevas en 2025 y continúa incorporando modelos), es importante revisar periódicamente la documentación oficial. Por ejemplo, funciones como AI_EMBED o AI_TRANSCRIBE se han agregado recientemente. También nuevos modelos más eficientes pueden volverse disponibles (Snowflake suele actualizar su catálogo de modelos base y sus versiones – p. ej. modelos Mistral, Llama nuevos, etc.). Usar siempre las versiones AI_ prefix-less garantiza acceder a las últimas mejoras sin cambiar la sintaxis.

Con estas herramientas, los desarrolladores de datos pueden implementar soluciones avanzadas de IA directamente en sus pipelines SQL, aprovechando la escalabilidad y seguridad de Snowflake. Desde generación de lenguaje hasta visión por computadora básica y análisis de sentimientos, Snowflake AISQL acerca el poder de los LLM y modelos de IA a la cómoda familiaridad del lenguaje SQL.

José Miguel Moya Curbelo
José Miguel Moya Curbelo
Senior Data Engineer & Big Data Instructor

MSc Applied Mathematics · AWS Cloud Practitioner · SCRUM Master. Especializado en arquitecturas de datos de alto rendimiento con Apache Spark, Snowflake, Python y Scala.

Conectar en LinkedIn

Artículos Relacionados

Deja un comentario

Tu dirección de correo electrónico no será publicada.