IA y LLMs
Los modelos de lenguaje generan Markdown con facilidad: es el formato más presente en sus datos de entrenamiento. Sin embargo, un Markdown "válido" no garantiza nada: cualquier salida pasa, incluidos campos inventados, secciones que faltan y metadatos incorrectos.
STXT es un formato adecuado para documentos generados por IA:
tan fácil de escribir como Markdown, y verificable.
Por qué un LLM escribe bien STXT
STXT no aparece en los datos de entrenamiento de los modelos, pero con un ejemplo y una plantilla en el contexto, seguir un formato regular es una tarea que los modelos resuelven con fiabilidad.
STXT es más regular que Markdown:
- Cada línea es
Nombre:,Nombre >>o texto indentado. - No hay sintaxis alternativas para un mismo elemento.
- La estructura es lineal: se genera de arriba abajo, sin referencias hacia atrás.
Los errores posibles son pocos y conocidos:
- Deriva de indentación en documentos muy largos.
- Omitir la indentación de una línea dentro de un bloque
>>.
Ambos se detectan al validar.
La diferencia: verificable
Cuando un LLM genera Markdown, no hay nada contra lo que comprobar el resultado. Cuando genera STXT con una plantilla:
- El parser valida la salida inmediatamente.
- El modelo de contenido cerrado rechaza los nombres de nodo no declarados.
- Los
ENUMy las cardinalidades rechazan los valores inventados. - Los tipos (
DATE,EMAIL,NUMBER...) rechazan los formatos incorrectos.
Un documento STXT válido significa que la estructura es correcta. Un Markdown válido no significa nada.
El bucle: generar, validar, corregir
La validación convierte la generación en un proceso iterativo:
- El LLM genera el documento STXT.
- El parser lo valida contra la plantilla.
- Si hay errores, se devuelven al modelo.
- El modelo corrige y se repite.
Cada iteración reduce los errores a los que el validador señala; el proceso termina cuando el documento valida. Este bucle no existe para Markdown: no hay nada contra qué validar.
El paso 2 es stxt validate -: la CLI lee el documento por la entrada estándar, lo
valida contra las gramáticas del directorio actual y emite cada hallazgo como
<stdin>:línea: [CÓDIGO] mensaje, con código de salida 1 si hay errores. Está
pensada para pipes y CI, de modo que la salida del modelo se valida sin pasar por un
fichero. Ver La CLI.
Ejemplo de plantilla incluida en el prompt:
Template (@stxt.template): com.acme.informes
Structure >>
Informe (com.acme.informes):
Título: (1)
Fecha: (1) DATE
Estado: (1) ENUM [Borrador, Final]
Resumen: (1) TEXT
Sección: (*)
Título: (1) @Título
Contenido: (1) TEXT
Salida generada con errores típicos de un LLM, todos detectados:
Informe (com.acme.informes):
Título: Análisis de mercado
# ERROR: DATE requiere YYYY-MM-DD
Fecha: mañana
# ERROR: no es un valor del ENUM
Estado: Pendiente
# ERROR: hijo no declarado (modelo cerrado)
Subtítulo: Versión corta
# ERROR: falta Resumen, que es obligatorio
Un ejemplo ejecutable
El bucle completo está en
examples/llm/
del repositorio de la especificación: un programa de Node de unas ochenta líneas
que convierte unas notas de reunión en texto libre en un Report (com.acme.reports)
válido. Lo acompañan la plantilla en .stxt/, un documento de ejemplo correcto, el
prompt con las reglas del formato y las notas de partida.
- Genera: el prompt lleva las reglas de STXT en diez líneas, la plantilla entera, el ejemplo válido y el texto a convertir; pide el documento y nada más.
- Valida:
UnifiedSchemaProvidercarga la plantilla yParserconSchemaValidatordevuelve los errores con línea y código, como haríastxt validate -. - Corrige: los errores vuelven al modelo tal cual, a continuación de su propia respuesta, y se repite hasta que el documento valida o se agotan los intentos.
$ node generate.mjs > report.stxt
--- attempt 1: 3 error(s)
line 3: [INVALID_VALUE] Date: Invalid date (12 March 2026) (schema)
line 5: [INVALID_VALUE] The value 'draft' not allowed. Only: Draft, Final (schema)
line 1: [TOO_FEW_CHILDREN] 0 nodes of 'com.acme.reports:summary' and min is 1 (schema)
--- attempt 2: valid
El documento sale por la salida estándar y el diálogo por la de error, con código
de salida 0 solo si la última versión valida: es un paso de pipeline más. El
ejemplo usa la API de Anthropic, pero nada del bucle depende del proveedor; la
llamada al modelo es una función que devuelve texto. El README del directorio
resume qué error del modelo produce qué código.
Sin escapado: prosa larga dentro de estructura
El punto débil de los LLMs al generar JSON es el escapado:
comillas, \n, saltos de línea dentro de strings.
{"resumen": "Línea 1\nLínea 2 con \"comillas\" y más texto..."}
En STXT, los bloques >> son texto literal: el modelo solo
tiene que indentar.
Para documentos con texto libre extenso, STXT es una superficie de salida más fiable que JSON o YAML.
La normalización absorbe la varianza
El nombre canónico de los nodos absorbe las variaciones habituales
de un LLM: TITLE:, Title: y title: son el mismo nodo.
Donde otros formatos reportarían "campo desconocido", STXT
identifica el mismo elemento.
La validación estricta se reserva para donde importa:
los valores ENUM distinguen mayúsculas y son exactos.
Prácticas de prompting
- Incluir en el prompt la plantilla completa del namespace: es compacta y declara qué campos existen, sus cardinalidades y sus valores permitidos antes de generar.
- Añadir un documento de ejemplo completo y correcto.
- Pedir indentación consistente (tabuladores, o 4 espacios por nivel).
- Validar siempre la salida con el parser, no por inspección visual.
- Asegurar que los mensajes de error del validador incluyen línea, qué se esperaba y qué se encontró: es lo que el modelo necesita para corregir en la siguiente iteración.
Casos de uso
- CMS con contenido asistido por IA: el build rechaza las páginas generadas incompletas o incoherentes antes de publicarlas.
- Extracción de datos: convertir texto libre (emails, informes, actas) en documentos STXT validables contra una plantilla.
- Informes y documentación generada: estructura validada,
prosa libre dentro de los bloques
>>. - Agentes y pipelines: STXT como formato de intercambio entre pasos, con validación en cada frontera.
Resumen
- Con plantilla y ejemplo en contexto, un LLM genera STXT con fiabilidad.
- La validación detecta campos no declarados, valores inventados y formatos incorrectos.
- El bucle generar → validar → corregir produce un resultado verificable, a diferencia de Markdown, que no tiene contra qué validarse.
- Los bloques literales eliminan el escapado, el punto débil de JSON.
- Estructura verificable y texto libre: los dos requisitos del contenido generado por IA.