Salida Estructurada
La salida estructurada es una función que obliga a un LLM a devolver respuestas que se ajustan a un esquema especificado, normalmente un esquema JSON. En lugar de esperar que el modelo produzca JSON analizable, el motor de inferencia restringe el muestreo de tokens para que se garantice que la salida valide.
La salida estructurada es una función que obliga a un LLM a devolver respuestas que se ajustan a un esquema especificado, normalmente un esquema JSON. En lugar de esperar que el modelo produzca JSON analizable, el motor de inferencia restringe el muestreo de tokens para que se garantice que la salida valide.
Por qué es importante
Los LLM que devuelven texto de formato libre son difíciles de consumir de forma programática. Incluso cuando se les indica "devuelve JSON", los modelos a veces añaden prosa, omiten campos o alucinan tipos. Esto rompe el código posterior y obliga a un análisis defensivo. La salida estructurada resuelve el problema en la capa de decodificación: obtienes JSON válido el 100 % de las veces, no el 95 %. OpenAI, Anthropic, Google y motores de código abierto como vLLM y Outlines ahora la admiten de forma nativa, lo que la convierte en la forma por defecto de construir pipelines de LLM fiables.
Cómo funciona
Decodificación restringida: En cada paso de generación, el modelo solo puede muestrear tokens que mantengan la salida compatible con el esquema. Los tokens que violarían el esquema se enmascaran a probabilidad cero.
Especificación del esquema: Proporcionas un esquema JSON (o un modelo de Pydantic, un esquema de Zod, un tipo de TypeScript) que describe los campos obligatorios, los tipos y las enumeraciones.
Análisis sin validación: Quien hace la llamada puede ejecutar JSON.parse sobre el resultado sin un try/catch alrededor de una salida malformada.
Modo JSON vs salida estructurada
| Aspecto | Modo JSON | Salida estructurada |
|---|---|---|
| Garantía | Sintaxis JSON válida | JSON válido que coincide con tu esquema |
| Cumplimiento del esquema | Ninguno | Completo |
| Presencia de campos | No garantizada | Garantizada |
| Campos alucinados | Posibles | Imposibles |
| Sobrecarga de latencia | ~0 | Pequeña (compilación de la restricción) |
El modo JSON solo asegura que la salida se analice. La salida estructurada asegura que se analice y coincida con la forma exacta que necesitas. Para los sistemas de producción, usa siempre la salida estructurada cuando esté disponible.
Cuándo usarla
Extraer datos de texto: Obtener nombres, fechas y direcciones de una entrada no estructurada.
Construir agentes que llaman a herramientas: Los argumentos de la llamada a la herramienta deben coincidir exactamente con el esquema de parámetros de la herramienta.
Clasificar en enumeraciones: Obliga al modelo a elegir uno de un conjunto fijo de etiquetas.
Generar respuestas de varios campos: Títulos, resúmenes, etiquetas y puntuaciones en un solo pase.
En cualquier lugar donde actualmente analices con regex la salida del modelo: Eso es un error a la espera de ocurrir.
Compensaciones
Ligera sobrecarga de latencia: El decodificador tiene que rastrear el estado de la gramática. Suele ser insignificante.
Creatividad reducida: Las restricciones de esquema fuertes pueden hacer que la generación se sienta mecánica. Para la escritura creativa, prefiere el formato libre.
El diseño del esquema importa: Los esquemas demasiado estrictos (obligatorios: los 20 campos) obligan al modelo a alucinar valores. Haz opcional lo que es genuinamente opcional.
No todos los modelos la admiten: Los modelos más antiguos y algunos de código abierto todavía carecen de soporte nativo. Outlines y bibliotecas similares pueden añadirla.
Ejemplo
Esquema:
{
"type": "object",
"properties": {
"title": { "type": "string" },
"tags": { "type": "array", "items": { "type": "string" } },
"sentiment": { "enum": ["positive", "negative", "neutral"] }
},
"required": ["title", "tags", "sentiment"]
}
Salida garantizada:
{ "title": "Launch recap", "tags": ["product", "Q2"], "sentiment": "positive" }
Sin errores de análisis. Sin campos faltantes. Sin valores de enumeración inventados.
Sources: