Compatibilidad con salidas estructuradas para la API de Prompt

Publicado el 13 de mayo de 2025

Los modelos de lenguaje grandes (LLM) son conocidos por sus respuestas ocasionalmente extensas. Incluso si le indicas al modelo que responda solo con "verdadero" o "falso", es posible que responda con un resultado amigable y más de lo que le pediste, como "Por supuesto, la respuesta es: verdadero".

Para abordar este desafío, la API de Prompt te permite especificar un formato de salida JSON de la respuesta del modelo pasando un esquema JSON a los métodos LanguageModel.prompt() y LanguageModel.promptStreaming(). La compatibilidad con el formato de salida estructurado está disponible a partir de la versión 137 de Chrome.

¿Qué es el esquema JSON?

JSON Schema es un vocabulario que permite la coherencia, la validez y la interoperabilidad de los datos JSON a gran escala. En lo que respecta al intercambio de datos, JSON Schema se destaca como un estándar potente para definir la estructura y las reglas de los datos JSON. Utiliza un conjunto de palabras clave para definir las propiedades de tus datos.

JSON Schema es el estándar de la industria para garantizar un resultado estructurado, que utilizan, entre otros, la API de OpenAI y la API de Gemini.

Por ejemplo, le indicas al modelo que asigne como máximo tres hashtags para una publicación en una red social en línea, como Mastodon. El resultado ideal podría ser similar al siguiente JSON:

{
  "hashtags": [
    "#pottery",
    "#dyi"
  ] 
}

El esquema JSON correspondiente para esta forma de objeto de salida solicitada se vería de la siguiente manera:

{
  "type": "object",
  "properties": {
    "hashtags": {
      "type": "array",
      "maxItems": 3,
      "items": {
        "type": "string",
        "pattern": "^#[^\\s#]+$"
      }
    }
  },
  "required": ["hashtags"],
  "additionalProperties": false
}

Este esquema JSON define una estructura para un objeto que debe contener un campo hashtags con las siguientes restricciones:

  • "type": "object": El valor raíz debe ser un objeto JSON.
  • "properties": { "hashtags": ... }: El objeto puede (y, en este caso, debe) tener una propiedad llamada hashtags.
  • "hashtags":

    • "type": "array": El valor debe ser un array.
    • "maxItems": 3: El array puede contener como máximo 3 elementos.
    • "items": { "type": "string", "pattern": "^#[^\\s#]+$" }: Cada elemento del array debe ser una cadena que coincida con el patrón de expresión regular proporcionado: ^#[^\\s#]+$:
      • ^# → Debe comenzar con un #.
      • [^\\s#]+ → seguido de uno o más caracteres que no son un espacio (\s) ni otro #.
      • $ → debe terminar allí.
  • "required": ["hashtags"]: El objeto debe contener la propiedad hashtags.

  • "additionalProperties": false: No se permiten otras propiedades que no sean hashtags.

Lee la documentación de Conceptos básicos del esquema en JSON para obtener una descripción completa de las capacidades del formato.

De hecho, los LLM son muy buenos para crear esquemas JSON. Describe las restricciones en lenguaje natural en tu instrucción y proporciona un ejemplo válido de objeto JSON. Ya estás a mitad de camino. Luego, puedes validar objetos JSON con el esquema JSON generado con uno de los validadores de esquemas JSON, por ejemplo, el validador de esquemas JSON de Newtonsoft en línea.

Validar correctamente un objeto JSON en un esquema JSON en un validador de esquemas JSON

Cómo pasar un esquema JSON a la API de Prompt

Para asegurarte de que el modelo respete un esquema JSON solicitado, debes pasar el esquema JSON como argumento al objeto de opciones de los métodos prompt() o promptStreaming() como el valor de un campo responseConstraint.

A continuación, se muestra un ejemplo muy básico de esquema JSON que garantiza que el modelo responda con true o false cuando clasifica si un mensaje determinado, como esta publicación de Mastodon, trata sobre cerámica.

const session = await LanguageModel.create();

const schema = {
  "type": "boolean"
};

const post = "Mugs and ramen bowls, both a bit smaller than intended- but that's
how it goes with reclaim. Glaze crawled the first time around, but pretty happy
with it after refiring.";

const result = await session.prompt(  
  `Is this post about pottery?\n\n${post}`,
  {  
    responseConstraint: schema,
  }
);
console.log(JSON.parse(result));
// true

Admite resultados predecibles

La compatibilidad con el formato de salida estructurado de la API de Prompt hace que las respuestas del LLM sean mucho más predecibles. En lugar de extraer un objeto de una respuesta de Markdown o de otro procesamiento posterior, los desarrolladores ahora pueden suponer que la respuesta del modelo es un JSON válido.

Esto acerca la IA integrada un paso más a las APIs basadas en la nube, con todos los beneficios de ejecutar la IA local del cliente.