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

Publié le 13 mai 2025

Les grands modèles de langage (LLM) sont réputés pour leurs réponses parfois longues. Même si vous demandez au modèle de répondre simplement par "vrai" ou "faux", il peut répondre par une sortie conviviale et plus que ce que vous avez demandé, par exemple : "Certainement, la réponse est: vrai."

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

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

Le schéma JSON est un vocabulaire qui permet de garantir 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, utilisée, 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. La sortie idéale peut ressembler au JSON suivant:

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

Le schéma JSON correspondant à cette forme d'objet de sortie demandée se présente alors 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 une structure pour 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 ne peut contenir au maximum que 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 un #.
      • [^\\s#]+ → suivi d'un ou de plusieurs caractères qui ne sont pas un espace (\s) ni un autre #.
      • $ → doit se terminer là.
  • "required": ["hashtags"]: l'objet doit contenir la propriété hashtags.

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

Pour obtenir une description complète des fonctionnalités du format, consultez la documentation Principes de base des schémas JSON.

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 êtes déjà à mi-chemin. Vous pouvez ensuite valider les objets JSON par rapport au schéma JSON généré à l'aide de l'un des outils de validation de schéma JSON, par exemple l'outil de validation de schéma JSON Newtonsoft en ligne.

Validation réussie d'un objet JSON par rapport à un schéma JSON dans un outil de validation 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 de schéma JSON très basique qui s'assure que le modèle répond avec true ou false pour déterminer si un message donné, comme ce post Mastodon, concerne 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  

Prendre en charge les sorties 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 à partir d'une réponse Markdown ou d'un autre post-traitement, les développeurs peuvent désormais supposer que la réponse du modèle est un JSON valide.

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