Árbol de conocimiento
AI
Seguridad ofensiva
Shells
Transferencia de archivos
Salidas estructuradas
Un JSON válido puede ser inútil para la aplicación. {"file":"src/app.ts","line":"12"} se puede parsear, pero line no es un entero. Hay varias formas de pedir y comprobar la estructura de una respuesta:
Cuatro mecanismos distintos
| Mecanismo | JSON válido | Ajuste al schema | Cuándo aparece el error |
|---|---|---|---|
| Pedir JSON en el prompt | No garantizado | No garantizado | Al parsear o validar |
| JSON mode | Para una respuesta completa aceptada por la API | No | Al validar el objeto |
| Generación restringida por schema | Para una respuesta completa aceptada, dentro del subset soportado | Sí, para ese subset | Antes o durante la generación si el schema no se admite |
| Validación posterior | Solo si el parser la acepta | Solo si el validador la acepta | Después de generar |
El prompt actúa como instrucción. JSON mode y la generación restringida son controles de la API. Un validador posterior corre en la aplicación y también puede usarse después de cualquiera de los otros mecanismos. Ninguno evita que haya que manejar respuestas incompletas, negativas del modelo o errores de transporte.
Generación y validación
La generación restringida por schema puede limitar los tokens disponibles en cada paso para mantener la respuesta dentro de una gramática permitida. La validación posterior comprueba una respuesta ya generada. Un proveedor puede soportar solo un subset de JSON Schema durante la generación, aunque un validador general acepte más restricciones.
Cuando llega un valor, la aplicación debe parsearlo y validarlo en su propia frontera. Si falla, puede rechazarlo o reintentarlo con un error preciso. Tratar un objeto incompleto como correcto oculta el fallo.
Estructura y significado
Supongamos que el modelo devuelve {"file":"src/app.ts","line":12}. Puede cumplir el schema aunque la línea 12 no exista, contenga código irrelevante o quede fuera del alcance. La estructura se comprueba con el schema. El significado se contrasta con el fichero y la tarea. Son distinciones prácticas, no nombres de garantías universales.
Si ese valor acaba provocando una acción, hay más pasos:
- ¿Se puede parsear el valor?
- ¿Cumple el schema?
- ¿Se refiere a algo real y pertinente?
- ¿Está permitido y autorizado usarlo así?
- ¿Se ha ejecutado correctamente?
Un enum o un patrón pueden acotar valores, pero no demuestran la intención del usuario ni conceden permisos. La aplicación necesita datos y políticas propios para decidir si una acción está autorizada.
Argumentos de tools
Las tool calls aplican la misma idea con otro destino. El modelo puede generar argumentos estructurados para read_file(path="src/app.ts"). La aplicación valida los argumentos y decide si ejecuta la tool. Algunas APIs permiten exigir el schema de los argumentos de una tool por separado del formato de la respuesta final.
El schema facilita interpretar la llamada. La aplicación todavía debe comprobar el path, el alcance y la autorización antes de ejecutarla.