Cómo usar TOON con LLMs

LLM
Ingeniería de Prompts

Si alguna vez has pegado un gran array JSON en ChatGPT o Claude, probablemente hayas sentido el dolor de la ventana de contexto cerrándose. JSON es fantástico para APIs web, pero para Grandes Modelos de Lenguaje (LLMs), es increíblemente derrochador. Repetir nombres de campos como "id":, "nombre":, y "timestamp": para cada registro individual no es solo redundante; quema tokens que cuestan dinero real y valioso espacio de contexto.

Aquí es donde brilla TOON (Notación de Objetos de Tabla). No es solo un formato de datos; es una estrategia para optimizar las interacciones con LLM. Al eliminar el impuesto de sintaxis de JSON y agregar encabezados de estructura explícitos, TOON te permite pasar más datos a tus modelos y obtener salidas estructuradas más confiables a cambio.

La Economía de Tokens de TOON

¿Por qué molestarse en cambiar formatos? La matemática es simple. En un array estándar de objetos JSON, el esquema se repite para cada fila. Si tienes una lista de 50 usuarios, estás pagando por los nombres de los campos 50 veces.

TOON elimina esta redundancia declarando el esquema una vez en el encabezado. Los datos siguen en un formato denso y optimizado. En la práctica, esto típicamente resulta en una reducción del 30-60% en el uso de tokens para arrays uniformes en comparación con JSON formateado. Cuando tratas con ventanas de contexto masivas o llamadas a API de alto volumen, esa eficiencia se traduce directamente en facturas más bajas y menor latencia.

Enviando Datos: La Regla de "Mostrar, No Decir"

Cuando necesitas que un LLM analice datos, tu estrategia de prompt es crucial. Los principiantes a menudo escriben largos párrafos explicando el formato de los datos. Con TOON, no necesitas hacer eso.

Los LLM son motores de coincidencia de patrones. Entienden intuitivamente TOON porque parece un híbrido de YAML y CSV —formatos que han visto miles de millones de veces durante el entrenamiento.

Para enviar datos, simplemente envuélvelos en un bloque de código delimitado. Puedes etiquetarlo como toon, pero incluso si el resaltador de sintaxis del modelo no lo admite oficialmente, el modelo entiende la estructura inmediatamente.

Ejemplo de Entrada

En lugar de describir el esquema, solo proporciona el bloque:

El encabezado usuarios[3]{id,nombre,rol,ultimoAcceso} le dice al modelo todo lo que necesita saber: el tipo de entidad, el conteo (3 filas) y el orden de los campos. La indentación maneja la jerarquía. Esta naturaleza "autodocumentada" libera tu prompt para centrarse en la tarea lógica real en lugar de instrucciones de análisis de sintaxis.

Aquí está el registro de actividad de usuarios. Los datos están en formato TOON (indentación de 2 espacios, encabezados explícitos).

```toon
usuarios[3]{id,nombre,rol,ultimoAcceso}:
  1,Alice,admin,2025-01-15T10:30:00Z
  2,Bob,user,2025-01-14T15:22:00Z
  3,Charlie,user,2025-01-13T09:45:00Z

Tarea: Analiza los registros e identifica qué usuarios no han iniciado sesión en las últimas 24 horas.

Generando Salida Confiable

Hacer que un LLM lea datos es fácil; hacer que genere datos estructurados válidos es la parte difícil. A los modelos les encanta alucinar, truncar JSON u olvidar las llaves de cierre.

TOON agrega una capa de seguridad a través de su sintaxis de encabezado, específicamente el conteo [N]. Cuando le pides a un modelo que genere TOON, le estás pidiendo que se comprometa con una estructura antes de generar los datos.

Prompts para Generación

Para obtener los mejores resultados, proporciona el formato de encabezado que esperas e instruye al modelo para llenar las filas.

Al pedirle al modelo que calcule [N], fuerzas un proceso de "cadena de pensamiento" donde el modelo debe planificar el tamaño de la salida. Esta restricción aparentemente pequeña reduce significativamente la probabilidad de que el modelo se corte a la mitad de una lista.

Tarea: Devuelve una lista de usuarios activos con el rol "user".
Formato: Usa TOON. Establece el valor [N] en el encabezado para que coincida con el número exacto de filas que generes.

Formato esperado:
usuarios[N]{id,nombre,rol,ultimoAcceso}:

Validando con Modo Estricto

Cuando recibes la respuesta del LLM, no deberías confiar simplemente en ella. Aquí es donde el modo estricto de la biblioteca TOON se convierte en un superpoder para aplicaciones de producción.

Si estás usando la biblioteca TypeScript, decodificar con modo estricto valida que las filas generadas coincidan con el conteo del encabezado:

Esto te permite capturar programáticamente salidas de modelos "perezosos" o truncamientos de red de inmediato, en lugar de descubrir datos erróneos aguas abajo en tu aplicación.

import { decode } from '@toon-format/toon';

try {
  // Si el modelo dice [5] pero proporciona 4 filas, esto lanza un error.
  const data = decode(modelOutput, { strict: true });
  console.log('Datos válidos recibidos:', data);
} catch (error) {
  console.error('Alucinación del modelo o truncamiento detectado:', error.message);
}

Optimización Avanzada: El Truco del Tabulador

Si estás obsesionado con la optimización (y en el mundo de los LLM, probablemente deberías estarlo), puedes exprimir aún más eficiencia eligiendo tus delimitadores sabiamente.

Las comas son estándar, pero los tabuladores (\t) a menudo se representan como un solo token en muchos vocabularios de tokenizadores. Además, los tabuladores rara vez aparecen dentro de campos de texto natural, lo que reduce la necesidad de caracteres de escape (como envolver cadenas en comillas).

Puedes codificar tus datos usando tabuladores antes de enviarlos al modelo:

Solo recuerda informar al modelo en el prompt: "Los datos son TOON separados por tabuladores." Esto crea una representación hipercompacta que es increíblemente fácil de analizar y generar para el modelo.

const toonPrompt = encode(data, { delimiter: '\t' });

Un Ejemplo de Flujo de Trabajo Completo

Veamos un escenario del mundo real: filtrado de registros del sistema. Quieres enviar registros sin procesar al modelo y obtener una lista estructurada de errores.

El Prompt:

La Salida del Modelo:

Registros del sistema en formato TOON (separados por tabuladores):

```toon
eventos[4	]{id	nivel	mensaje	timestamp}:
  1	error	Tiempo de espera agotado	2025-01-15T10:00:00Z
  2,warn,Consulta lenta,2025-01-15T10:05:00Z
  3	info	Inicio de sesión	2025-01-15T10:10:00Z
  4	error	Error de base de datos	2025-01-15T10:15:00Z

Tarea: Extrae todos los eventos con nivel 'error'. Devuelve el resultado como TOON válido con un conteo de encabezado actualizado.

El Resultado:

eventos[2	]{id	nivel	mensaje	timestamp}:
  1	error	Tiempo de espera agotado	2025-01-15T10:00:00Z
  4	error	Error de base de datos	2025-01-15T10:15:00Z

El modelo filtró correctamente la lista y, crucialmente, actualizó el encabezado a eventos[2]. Al decodificar esta respuesta, obtienes un array limpio y seguro en tipos, listo para la lógica de tu aplicación.

Resumen

TOON cierra la brecha entre la legibilidad humana y la eficiencia de la máquina. Respeta las restricciones de costos de los LLM mientras proporciona la estructura requerida para un desarrollo de software robusto.

  1. Mantenlo pequeño: Usa 2-5 filas en tus ejemplos; el modelo generalizará.
  1. Sé explícito: Define los encabezados claramente para que el modelo conozca el esquema.
  1. Valida estrictamente: Usa los metadatos del formato para capturar errores de generación.

Al alejarte de JSON para tus cargas de prompts, no solo estás ahorrando tokens: estás construyendo un flujo de IA más confiable.