Prise en charge des sorties structurées pour l'API Prompt

Publié le 13 mai 2025

Les grands modèles de langage (LLM) sont connus pour leurs réponses parfois longues. Même si vous demandez au modèle de répondre par "vrai" ou "faux", il peut vous donner une réponse plus complète et plus conviviale, par exemple : "Bien sûr, la réponse est : vrai."

Pour relever ce défi, l'API Prompt vous permet de spécifier un format de sortie JSON pour la réponse du modèle en transmettant un schéma JSON aux méthodes LanguageModel.prompt() et LanguageModel.promptStreaming(). La prise en charge des sorties structurées est disponible à partir de la version 137 de Chrome.

Qu'est-ce qu'un schéma JSON ?

JSON Schema est un vocabulaire qui permet d'assurer la cohérence, la validité et l'interopérabilité des données JSON à grande échelle. En matière d'échange de données, le schéma JSON se distingue comme une norme puissante pour définir la structure et les règles des données JSON. Il utilise un ensemble de mots clés pour définir les propriétés de vos données.

Le schéma JSON est la norme du secteur pour garantir une sortie structurée. Il est utilisé, entre autres, par l'API OpenAI et l'API Gemini.

Par exemple, vous demandez au modèle d'attribuer au maximum trois hashtags à un post sur un réseau social en ligne, tel que Mastodon. Le résultat idéal pourrait ressembler au code JSON suivant :

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

Le schéma JSON correspondant à cette forme d'objet de sortie demandée se présenterait comme suit :

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

Ce schéma JSON définit la structure d'un objet qui doit contenir un champ hashtags avec les contraintes suivantes :

  • "type": "object" : la valeur racine doit être un objet JSON.
  • "properties": { "hashtags": ... } : l'objet peut (et dans ce cas, doit) avoir une propriété appelée hashtags.
  • "hashtags":

    • "type": "array" : la valeur doit être un tableau.
    • "maxItems": 3 : le tableau peut contenir au maximum trois éléments.
    • "items": { "type": "string", "pattern": "^#[^\\s#]+$" } : chaque élément du tableau doit être une chaîne correspondant au modèle d'expression régulière donné : ^#[^\\s#]+$ :
      • ^# : doit commencer par #.
      • [^\\s#]+ → suivi d'un ou de plusieurs caractères qui ne sont pas un espace (\s) ni un autre #.
      • $ → doit se terminer par ce caractère.
  • "required": ["hashtags"] : l'objet doit contenir la propriété hashtags.

  • "additionalProperties": false : Aucune autre propriété que les hashtags n'est autorisée.

Consultez la documentation Principes de base du schéma JSON pour obtenir une description complète des fonctionnalités du format.

En fait, les LLM sont très efficaces pour créer des schémas JSON. Décrivez les contraintes en langage naturel dans votre requête et fournissez un exemple d'objet JSON valide. Vous aurez alors fait la moitié du chemin. Vous pouvez ensuite valider les objets JSON par rapport au schéma JSON généré à l'aide de l'un des validateurs de schéma JSON, par exemple le validateur de schéma JSON Newtonsoft en ligne.

Validation réussie d'un objet JSON par rapport à un schéma JSON dans un validateur de schéma JSON.

Transmettre un schéma JSON à l'API Prompt

Pour vous assurer que le modèle respecte un schéma JSON demandé, vous devez transmettre le schéma JSON en tant qu'argument à l'objet d'options des méthodes prompt() ou promptStreaming() en tant que valeur d'un champ responseConstraint.

Voici un exemple très simple de schéma JSON qui permet de s'assurer que le modèle répond par true ou false pour classer un message donné comme ce post Mastodon sur la poterie.

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

Fournir des résultats prévisibles

La prise en charge des sorties structurées pour l'API Prompt rend les réponses du LLM beaucoup plus prévisibles. Plutôt que d'extraire un objet d'une réponse Markdown ou d'effectuer un autre post-traitement, les développeurs peuvent désormais supposer que la réponse du modèle est un code JSON valide.

L'IA intégrée se rapproche ainsi des API basées sur le cloud, avec tous les avantages de l'exécution de l'IA locale côté client.