¿Por qué las aplicaciones de IA necesitan resultados estructurados?
Las aplicaciones de IA necesitan resultados estructurados porque el software no puede interpretar de forma fiable un párrafo de tono cordial; necesita siempre los mismos campos, con los mismos nombres y tipos. Una frase adicional o un campo ausente pueden hacer que falle el siguiente paso de su aplicación.
Imagine una empresa emergente ficticia de logística con 12 personas, Parcelwise. Su desarrolladora, Sana, está creando una herramienta que lee los correos de los clientes y completa un formulario de cambio de entrega: referencia del pedido, fecha solicitada, nueva dirección y si el cliente pide un reembolso. Un correo típico dice: 'Hola, pedido PW-88213, no estaré el jueves, ¿pueden traerlo el sábado? O dejarlo en el n.º 14. Si no, cancelen y reembolsen, por favor.' Su primera versión pide al modelo que 'responda en JSON'. La mayoría de las respuestas se pueden procesar, pero algunas empiezan con 'Claro, aquí está el JSON', otras llaman al campo 'fecha' en lugar de 'requested_date' y una devuelve la fecha como 'sábado'.
¿Qué es un esquema JSON y por qué resulta útil?
Un esquema JSON es una descripción formal de los datos que espera recibir: qué campos existen, cuáles son obligatorios, de qué tipo es cada uno y qué valores se permiten. Dar un esquema al modelo convierte 'por favor, responda en JSON' en un contrato que su código puede verificar.
Para Sana, el esquema indica lo siguiente: order_reference es una cadena de texto obligatoria; requested_date es una cadena de texto obligatoria con formato de fecha, o null si no se proporcionó una fecha; new_address es una cadena de texto o null; refund_requested es un valor booleano obligatorio; y no se permite ningún otro campo. Esta última regla impide que el modelo añada campos con comentarios.
¿Cómo permiten las API de los modelos obtener respuestas estructuradas?
Las interfaces de programación de los principales modelos permiten enviar un esquema JSON junto con la solicitud, y la respuesta del modelo se restringe para que se ajuste a él.
OpenAI
La función de salidas estructuradas de OpenAI restringe las respuestas al esquema JSON proporcionado cuando el modo estricto está activado. Su documentación la distingue del modo JSON anterior, que solo garantiza un JSON válido, no el cumplimiento de su esquema, y recomienda usar las salidas estructuradas cuando estén disponibles.
Anthropic
La API de Claude ofrece resultados en JSON que se ajustan a un esquema proporcionado por usted, además de una opción estricta en las definiciones de herramientas para validar los datos de entrada conforme al esquema de cada herramienta. Su documentación indica qué características de los esquemas se admiten y cuáles generan un error.
La API de Gemini acepta un esquema JSON para las respuestas y admite un subconjunto definido de palabras clave del esquema. Su documentación indica que, aunque la salida es JSON sintácticamente correcto, aun así debe validar los valores en su aplicación.
¿Por qué siguen siendo necesarios la validación y los reintentos?
La validación sigue siendo necesaria porque un esquema controla la estructura de los datos, no si los valores son correctos. Una respuesta con una estructura perfecta puede contener una fecha incorrecta, una referencia de pedido inventada o una marca de reembolso que el cliente nunca solicitó.
Valide en dos niveles. Primero, compruebe la estructura con una biblioteca de esquemas, como Pydantic en Python o Zod en JavaScript, que aparecen en ejemplos de la documentación de OpenAI, Anthropic y Google. Después, compruebe las reglas de negocio: ¿la referencia del pedido sigue el patrón y existe en el sistema, la fecha es futura y corresponde a un día de reparto, y la dirección está en una zona de reparto? Gestione también los casos que documentan los proveedores: una negativa, que puede no seguir su esquema, y una respuesta interrumpida por el límite máximo de tokens, que deja un JSON incompleto.
Reintente con cuidado. Si falla una comprobación, haga un reintento que incluya el error específico, como 'requested_date debe ser una fecha; el correo dice sábado y la fecha del pedido es el 14 de octubre'. Limite los reintentos a uno o dos y después derive el correo a una persona.
¿Cómo se comparan una salida estructurada deficiente y una robusta?
Versión deficiente: la instrucción dice 'Extraiga los detalles y responda en JSON.' La aplicación lee cualquier respuesta que reciba. Para el correo anterior, recibe campos llamados order y date, una fecha con el valor 'sábado' y un valor de reembolso de true, porque el modelo interpretó 'si no, simplemente cancele' como una solicitud firme. El formulario se rellena incorrectamente y el cliente recibe un reembolso que no quería.
Versión robusta: la solicitud incluye el esquema de Sana con el modo estricto activado, y la instrucción explica cada campo, incluido 'refund_requested solo es verdadero si el cliente pide un reembolso sin condiciones'. El modelo devuelve order_reference con el valor PW-88213, requested_date con la fecha del próximo sábado, new_address con el valor null, refund_requested con el valor false y conditional_request, un campo que Sana añadió al esquema precisamente para este caso, con el valor 'reembolso si no es posible entregar el sábado o a un vecino'. La validación confirma que el pedido existe y que el sábado es un día de entrega. Como el correo contiene una solicitud condicional, las reglas lo derivan a una persona para que tome la decisión final.
¿Cuáles son los errores habituales con las salidas estructuradas?
El error más común es confiar en que un JSON válido contiene datos correctos. Otros: depender solo de las instrucciones cuando la API permite exigir el cumplimiento de un esquema, utilizar nombres de campo vagos sin descripciones, forzar un valor cuando la respuesta honesta es null, ignorar las negativas y las respuestas truncadas y volver a intentarlo sin indicar al modelo qué estaba mal.
¿Dónde encajan las respuestas estructuradas en el catálogo de Tosheo.ai?
Resultados estructurados es una lección de la modalidad de programación del curso de creación de aplicaciones de IA, dentro de la categoría Creación de aplicaciones de IA. La versión práctica completa con código, en la que define un esquema, llama a una API, valida las respuestas y añade un reintento, está disponible en la modalidad de programación después de registrarse, con comentarios basados en una guía de evaluación en cada paso.