¿Qué es Snowflake Document AI?
Snowflake Document AI convierte documentos no estructurados en datos estructurados consultables mediante IA, procesando facturas, contratos y formularios directamente dentro de Snowflake. El servicio utiliza el modelo propietario Arctic-TILT para extraer texto, tablas y entidades de PDFs e imágenes con una precisión del 90% en el benchmark ANLS, superando a GPT-4. Arctic-TILT se ejecuta en una sola GPU, lo que se traduce en eficiencia de costos. Con precios desde aproximadamente $0.012–$0.018 por página en Standard Edition, Document AI aborda el hecho de que entre el 80% y el 90% de los datos empresariales no están estructurados. Puede extraer información de nuevos tipos de documentos sin entrenamiento previo (zero-shot) y también admite fine-tuning con apenas 5 a 20 ejemplos.
¿Cómo funciona Document AI?
Document AI convierte documentos no estructurados en datos estructurados consultables mediante un flujo de trabajo en dos fases: construcción del modelo e inferencia.
Fase 1: Construcción de los modelos de extracción
Los modelos se crean desde la UI de Snowsight, en AI & ML → Document AI. Vas a necesitar el rol de base de datos SNOWFLAKE.DOCUMENT_INTELLIGENCE_CREATOR:
USE ROLE ACCOUNTADMIN;
CREATE ROLE doc_ai_role;
GRANT DATABASE ROLE SNOWFLAKE.DOCUMENT_INTELLIGENCE_CREATOR TO ROLE doc_ai_role;
GRANT ROLE doc_ai_role TO USER your_username;
Sube entre 10 y 20 documentos de muestra que representen tus tipos de documento. Define qué quieres extraer con preguntas en lenguaje natural como "¿Cuál es el número de factura?", "¿Cuál es el nombre del proveedor?" o "¿Qué líneas de detalle aparecen?". Revisa los valores extraídos, corrige los errores, entrena el modelo (opcional, pero recomendado a partir de 20 documentos) y publícalo para uso en producción.
El modelo aprende los patrones de extracción a partir de tus correcciones. No hace falta experiencia en ML: basta con responder preguntas sobre dónde aparece cada dato en tus documentos.
Fase 2: Configuración de la infraestructura
Crea un warehouse, una base de datos, un schema y un stage para procesar los documentos:
CREATE WAREHOUSE doc_ai_wh
WAREHOUSE_SIZE = 'X-SMALL'
AUTO_SUSPEND = 600
AUTO_RESUME = TRUE;
CREATE DATABASE doc_ai_db;
CREATE SCHEMA doc_ai_db.doc_ai_schema;
-- CRÍTICO: Debe incluir el cifrado SNOWFLAKE_SSE
CREATE STAGE doc_ai_stage
DIRECTORY = (ENABLE = TRUE)
ENCRYPTION = (TYPE = 'SNOWFLAKE_SSE');
Sube los documentos al stage con comandos PUT o mediante integraciones de stages externos con S3, Azure Blob o GCS.
Fase 3: Ejecución de las consultas de extracción
Extrae los datos con el método model!PREDICT:
SELECT
RELATIVE_PATH as file_name,
invoice_model!PREDICT(GET_PRESIGNED_URL(@doc_ai_stage, RELATIVE_PATH), 1) as extracted_data
FROM DIRECTORY(@doc_ai_stage);
La salida devuelve un JSON con los valores extraídos y sus scores de confianza:
{
"invoice_number": [{"value": "INV-2024-001", "score": 0.95}],
"vendor_name": [{"value": "Acme Corp", "score": 0.92}],
"total_amount": [{"value": "1250.00", "score": 0.98}],
"__documentMetadata": {"ocrScore": 0.89}
}
Parsear los resultados en tablas estructuradas
Transforma la salida JSON en columnas listas para usar:
WITH extraction AS (
SELECT
RELATIVE_PATH as file_name,
invoice_model!PREDICT(GET_PRESIGNED_URL(@doc_ai_stage, RELATIVE_PATH), 1) as json
FROM DIRECTORY(@doc_ai_stage)
)
SELECT
file_name,
json:invoice_number[0]:value::STRING AS invoice_num,
json:invoice_number[0]:score::FLOAT AS invoice_confidence,
json:vendor_name[0]:value::STRING AS vendor,
json:total_amount[0]:value::STRING AS total,
json:__documentMetadata.ocrScore::FLOAT AS ocr_quality
FROM extraction;
Aquí se podría hacer mucho más, como aplanar los resultados en varias filas y automatizar el flujo con Streams y Tasks, pero queremos que la sección de ejemplos quede breve.
¿Cómo funcionan los Precios de Snowflake Document AI?
Snowflake cobra Document AI a través del cómputo de AI Services gestionado por Snowflake, que escala automáticamente según los workloads. Los créditos se consumen en función del tiempo de cómputo a razón de 8 créditos por hora (a septiembre de 2025), y el consumo depende del número de páginas, la densidad del documento y la cantidad de valores extraídos. Esto es totalmente distinto al esquema basado en tokens que se usa para otras funcionalidades de Cortex LLM.
Consumo de créditos por cada 1.000 páginas
Los costos escalan con la densidad del documento y la complejidad de la extracción. Estos son los rangos oficiales según la documentación de precios de Snowflake:
Documentos de baja densidad (facturas, diapositivas) - 100 documentos de 10 páginas cada uno:
- 10 valores extraídos: 4-7 créditos por cada 1.000 páginas
- 20 valores extraídos: 6-11 créditos por cada 1.000 páginas
- 40 valores extraídos: 10-24 créditos por cada 1.000 páginas
Documentos de alta densidad (papers de investigación, contratos legales):
- 10 valores extraídos: 7-10 créditos por cada 1.000 páginas
- 20 valores extraídos: 11-15 créditos por cada 1.000 páginas
- 40 valores extraídos: 21-35 créditos por cada 1.000 páginas
Extracción de tablas (funcionalidad en preview) - 1.000 documentos de 2 a 10 páginas cada uno:
- Tablas muy pequeñas (<10 celdas): 5-37 créditos
- Tablas pequeñas (11-25 celdas): 14-52 créditos
- Tablas medianas (26-50 celdas): 24-86 créditos
- Tablas grandes (51-400 celdas): 37-369 créditos
Ejemplo del mundo real:
Ejemplo de procesamiento de órdenes de compra:
Supongamos que procesas 10.000 órdenes de compra al año. Cada OC es de una sola página y de baja densidad (formato típico de OC). Quieres extraer Nombre del Cliente, Dirección del Cliente, Número de OC, Fecha de OC, Líneas de Detalle (tabla) y Monto Total. En total son 10.000 páginas con unos 10 valores extraídos por documento. Tomando la estimación de baja densidad para 1.000 documentos de 1 página cada uno, el consumo sería de 9 a 12 créditos por cada 1.000 páginas, lo que da entre 90 y 120 créditos al año.
A $3 por crédito, valor habitual en Enterprise Edition, el costo se ubica entre $270 y $360 al año. El costo real dependerá de la cantidad de cómputo utilizado.
Este ejemplo muestra cómo Document AI puede procesar miles de documentos al año por unos pocos cientos de dólares, lo que lo vuelve muy rentable para automatizar la captura manual de datos que de otra forma demandaría bastante tiempo del equipo.
Costos adicionales
Costo del Virtual Warehouse
Document AI requiere un Virtual Warehouse para arrancar el job de Document AI. La IA no se ejecuta en uno de tus Warehouses, pero el job que dispara el proceso sí. Recomendamos usar siempre uno x-small, ya que el tamaño del warehouse no influye en la velocidad a la que se completan las tareas de IA.
Costo de almacenamiento
El almacenamiento de los documentos en stages y de las tablas de resultados se factura a tu precio estándar de almacenamiento. Por ejemplo, $23 / TB / mes es lo habitual para clientes de Enterprise Edition.
Cómo monitorear los costos y el uso de Document AI
Snowflake ofrece vistas dedicadas en ACCOUNT_USAGE para hacer seguimiento del consumo de Document AI, con una latencia de aproximadamente 2 horas y 365 días de retención.
Vista principal de monitoreo
La vista DOCUMENT_AI_USAGE_HISTORY contiene el consumo de créditos por cada consulta:
SELECT
START_TIME,
END_TIME,
CREDITS_USED,
QUERY_ID,
OPERATION_NAME,
PAGE_COUNT,
DOCUMENT_COUNT,
FEATURE_COUNT
FROM SNOWFLAKE.ACCOUNT_USAGE.DOCUMENT_AI_USAGE_HISTORY
WHERE START_TIME >= DATEADD(day, -30, CURRENT_TIMESTAMP())
ORDER BY START_TIME DESC;
Consumo diario de créditos
Agrega el uso por día para entender las tendencias de gasto:
SELECT
DATE_TRUNC('DAY', START_TIME) AS usage_date,
COUNT(*) AS total_queries,
SUM(CREDITS_USED) AS total_credits,
SUM(PAGE_COUNT) AS total_pages,
SUM(DOCUMENT_COUNT) AS total_documents,
ROUND(SUM(CREDITS_USED) / NULLIF(SUM(PAGE_COUNT), 0), 4) AS credits_per_page,
ROUND(SUM(CREDITS_USED) / NULLIF(SUM(DOCUMENT_COUNT), 0), 4) AS credits_per_document
FROM SNOWFLAKE.ACCOUNT_USAGE.DOCUMENT_AI_USAGE_HISTORY
WHERE START_TIME >= DATEADD(day, -90, CURRENT_TIMESTAMP())
GROUP BY DATE_TRUNC('DAY', START_TIME)
ORDER BY usage_date DESC;
Costo por usuario y rol
Identifica qué usuarios y roles consumen créditos de Document AI:
SELECT
qh.USER_NAME,
qh.ROLE_NAME,
COUNT(DISTINCT dh.QUERY_ID) AS query_count,
SUM(dh.CREDITS_USED) AS total_credits,
SUM(dh.PAGE_COUNT) AS total_pages,
ROUND(SUM(dh.CREDITS_USED) / NULLIF(SUM(dh.PAGE_COUNT), 0), 4) AS credits_per_page
FROM SNOWFLAKE.ACCOUNT_USAGE.DOCUMENT_AI_USAGE_HISTORY dh
JOIN SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY qh
ON dh.QUERY_ID = qh.QUERY_ID
WHERE dh.START_TIME >= DATEADD(day, -30, CURRENT_TIMESTAMP())
GROUP BY qh.USER_NAME, qh.ROLE_NAME
ORDER BY total_credits DESC;
Costo por warehouse
Identifica qué warehouses procesan consultas de Document AI.
SELECT
qh.WAREHOUSE_NAME,
qh.WAREHOUSE_SIZE,
COUNT(DISTINCT dh.QUERY_ID) AS query_count,
SUM(dh.CREDITS_USED) AS docai_credits,
SUM(dh.PAGE_COUNT) AS total_pages,
SUM(dh.DOCUMENT_COUNT) AS total_documents
FROM SNOWFLAKE.ACCOUNT_USAGE.DOCUMENT_AI_USAGE_HISTORY dh
JOIN SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY qh
ON dh.QUERY_ID = qh.QUERY_ID
WHERE dh.START_TIME >= DATEADD(day, -30, CURRENT_TIMESTAMP())
AND qh.WAREHOUSE_NAME IS NOT NULL
GROUP BY qh.WAREHOUSE_NAME, qh.WAREHOUSE_SIZE
ORDER BY docai_credits DESC;
Conviene ajustar la consulta anterior para detectar warehouses que no sean x-small y disparar una notificación cuando esto ocurra.
Mejores prácticas y recomendaciones al usar Document AI
Configura alertas, no solo dashboards
Las consultas de monitoreo anteriores no sirven de nada si nadie las ejecuta. Para cualquier cosa que quieras monitorear en Snowflake, puedes envolver el SQL en una task programada con una Notification Integration y crear un monitor personalizado que envíe alertas a Slack o Teams. Si buscas una funcionalidad de monitoreo súper fácil de usar, revisa los monitors en SELECT.
Usa exclusivamente warehouses X-Small o Small
Document AI se ejecuta sobre cómputo serverless gestionado por Snowflake. Tu warehouse solo corre la consulta SQL que envuelve al método PREDICT. Los warehouses más grandes no aportan ninguna mejora de velocidad en el procesamiento de Document AI y solo encarecen la cuenta, pasando de 1 crédito/hora (X-Small) a más de 4 créditos/hora (Medium+).
Extrae solo los valores que realmente necesitas
Cada campo adicional que extraes suma tiempo de procesamiento y costo. Extraer 10 valores consume entre 4 y 7 créditos por cada 1.000 páginas (densidad media), mientras que extraer 40 valores consume entre 16 y 30 créditos (de 2 a 3 veces más).
Diseña los modelos de extracción enfocándote solo en los campos que requieren las aplicaciones downstream. No extraigas "todo lo que algún día podría servir". Extrae lo que necesitas hoy. Siempre puedes crear más adelante una nueva versión del modelo con campos adicionales.
Agrupa los documentos por tipo antes de procesarlos
La eficiencia de procesamiento mejora cuando los documentos se agrupan por tipo. Usa primero un modelo de clasificación para identificar los tipos de documento y después enrútalos a modelos de extracción especializados:
WITH classification AS (
SELECT
RELATIVE_PATH as file_name,
classifier!PREDICT(GET_PRESIGNED_URL(@doc_ai_stage, RELATIVE_PATH), 1) as doc_type_result
FROM DIRECTORY(@doc_ai_stage)
)
SELECT
file_name,
doc_type_result:document_type[0]:value::STRING as doc_type,
CASE
WHEN doc_type_result:document_type[0]:value::STRING = 'invoice'
THEN invoice_model!PREDICT(GET_PRESIGNED_URL(@doc_ai_stage, file_name), 1)
WHEN doc_type_result:document_type[0]:value::STRING = 'contract'
THEN contract_model!PREDICT(GET_PRESIGNED_URL(@doc_ai_stage, file_name), 1)
END as extraction
Expandir Código
Este enfoque también mejora la precisión, ya que cada modelo se especializa en un único formato de documento.
Implementa umbrales de confianza y flujos de revisión humana
Document AI entrega scores de confianza para cada valor extraído. No confíes ciegamente en todas las extracciones. Implementa controles de calidad:
-- Las extracciones de alta confianza van directo a producción
CREATE TABLE production_data AS
SELECT
file_name,
json:invoice_number[0]:value::STRING as invoice_number,
json:total_amount[0]:value::STRING as total_amount
FROM extraction_results
WHERE json:invoice_number[0]:score::FLOAT > 0.90
AND json:total_amount[0]:score::FLOAT > 0.90;
-- Las extracciones de baja confianza requieren revisión humana
CREATE TABLE manual_review_queue AS
SELECT
file_name,
json as full_extraction
Expandir Código
Define los umbrales según tu tolerancia al riesgo. Los datos financieros podrían exigir una confianza de 0.95 o más, mientras que los documentos internos pueden aceptar 0.75 o más. Prueba los umbrales con documentos de muestra para encontrar el equilibrio adecuado entre automatización y precisión.
Conclusión
Document AI hace que automatizar el procesamiento de documentos a escala sea económico, normalmente unos pocos centavos por documentos de baja densidad. La clave para controlar los costos está en entender qué los impulsa: el número de páginas, la densidad del documento y la cantidad de valores extraídos impactan directamente el tiempo de cómputo y el consumo de créditos. Usa warehouses pequeños (X-Small o Small) al ejecutar el método PREDICT, extrae solo los campos que realmente necesitas e implementa umbrales de confianza para el control de calidad. Y más importante aún: configura alertas sobre las consultas de monitoreo mencionadas para enterarte cuando los costos se disparen, en lugar de descubrirlo en la factura mensual. Empieza con un lote pequeño de documentos, monitorea de cerca tus patrones de consumo y escala a medida que vayas entendiendo tus costos reales.
¡Cuéntanos cómo estás usando Document AI! Nos encantaría conocer más historias reales sobre cómo lo están aprovechando los clientes y tu opinión sobre su efectividad general.
Jeff es Consultor de Datos y Analítica con más de 15 años de experiencia automatizando insights y usando datos para controlar procesos de negocio. En lo tecnológico, se especializa en Snowflake + dbt + Tableau. En lo sectorial, tiene experiencia en Servicios Públicos, Ensayos Clínicos, Publishing, CPG y Manufactura. Escríbele cuando quieras a [email protected].