Compatibilidad con salidas estructuradas para la API de Prompt

Fecha de publicación: 13 de mayo de 2025

Los modelos de lenguaje grandes (LLM) son conocidos por sus respuestas largas ocasionales. Incluso si le dices al modelo que responda solo con "verdadero" o "falso", es posible que el modelo responda con un resultado amigable y más de lo que solicitaste, 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 resultado estructurado está disponible a partir de la versión 137 de Chrome.

Qué es el esquema JSON

El esquema JSON es un vocabulario que permite la coherencia, la validez y la interoperabilidad de los datos JSON a gran escala. Cuando se trata del intercambio de datos, el esquema JSON se destaca como un estándar potente para definir la estructura y las reglas de los datos JSON. Usa un conjunto de palabras clave para definir las propiedades de tus datos.

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

Por ejemplo, le pides al modelo que asigne, como máximo, tres hashtags a 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 determinado: ^#[^\\s#]+$:
      • ^# → debe comenzar con un #.
      • [^\\s#]+ → seguido de uno o más caracteres que no sean 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 sobre los 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 objeto JSON de ejemplo válido, y ya tienes la mitad del camino recorrido. Luego, puedes validar los objetos JSON en función del esquema de JSON generado con uno de los validadores de esquemas de JSON, por ejemplo, el validador de esquemas de JSON de Newtonsoft en línea.

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

Pasa 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 un argumento al objeto de opciones de los métodos prompt() o promptStreaming() como el valor de un campo responseConstraint.

Este es un ejemplo muy básico de esquema JSON que se asegura de que el modelo responda con true o false para clasificar 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 resultado 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 IA local del cliente.