Suivi d’OpenAI

Que sont les Structured Outputs de l’API d’OpenAI, et pourquoi intéressent-ils les développeurs?

· Par Robert Scales · 5 min de lecture

Réponse courte

Les Structured Outputs (sorties structurées) sont une fonction qu’OpenAI a ajoutée à son API le 6 août 2024 et qui fait correspondre la réponse d’un modèle à un JSON Schema fourni par le développeur, à chaque fois, et non plus seulement la plupart du temps. Elle fonctionne en limitant les jetons que le modèle a le droit d’écrire ensuite, si bien que les programmes peuvent lire les réponses de l’IA sans devoir les vérifier ni redemander.

Hier, le 6 août 2024, OpenAI a lancé les Structured Outputs (sorties structurées) dans son API. La promesse est simple : quand un développeur décrit exactement la forme que doit avoir une réponse, la réponse du modèle aura cette forme. Pas la plupart du temps, mais de façon fiable. OpenAI affirme que c’est la fonction la plus demandée par les développeurs, et Sam Altman a écrit qu’elle arrivait « à la très forte demande générale ».

Si vous ne faites que clavarder avec ChatGPT, cela paraît technique. Cela vous concerne pourtant, parce que bien des applications que vous utilisez transmettent en coulisse les réponses de l’IA à d’autres logiciels, et cela ne fonctionne que si la réponse arrive dans un format prévisible.

Le problème qu’elle règle

Les logiciels ne lisent pas de la prose. Une application de réservation qui demande à un modèle de tirer des détails d’un courriel a besoin de la réponse dans un format fixe, comme celui-ci :

{"name": "Ana Silva", "date": "2024-08-15", "guests": 4}

Ce format, c’est le JSON, une façon courante d’écrire des données sous forme de champs étiquetés que les personnes comme les programmes peuvent lire. Un JSON Schema est le règlement d’un morceau de JSON en particulier : quels champs doivent apparaître, de quel type est chacun (texte, nombre, vrai ou faux) et quelles valeurs sont permises.

Les modèles de langage sont bons pour produire du JSON, mais pas parfaits. Ils omettent parfois un champ obligatoire, en ajoutent un de trop ou inventent une valeur qui ne figure pas dans la liste permise. Les développeurs contournaient le problème avec des outils supplémentaires, des prompts soignés et des requêtes répétées jusqu’à ce que la sortie passe leurs vérifications.

L’an dernier, au DevDay, OpenAI a ajouté le mode JSON, qui garantit un JSON valide, mais pas qu’il respecte votre schéma. Les Structured Outputs comblent cet écart. Le résumé d’OpenAI lui-même : « Si les deux garantissent la production d’un JSON valide, seuls les Structured Outputs garantissent le respect du schéma. »

Ce qu’OpenAI a lancé

La fonction se présente sous deux formes :

FormeComment l’activerQuels modèles
Appel de fonctionsAjouter strict: true à la définition d’une fonctionTous les modèles qui prennent en charge les outils, à partir de gpt-3.5-turbo-0613 et gpt-4-0613, y compris GPT-4o et GPT-4o mini
Format de réponsePasser votre schéma comme json_schema dans response_format, avec strict: trueLes nouveaux gpt-4o-2024-08-06 et gpt-4o-mini

L’appel de fonctions (function calling), c’est quand le modèle demande à votre application d’exécuter une tâche, comme « chercher la commande 1234 », en remplissant les données d’entrée qu’attend votre fonction. L’option de format de réponse sert quand le modèle répond directement à l’utilisateur, mais selon une structure établie.

OpenAI a aussi lancé ce nouvel instantané de GPT-4o, gpt-4o-2024-08-06. Il coûte 2,50 $ US par million de jetons d’entrée et 10,00 $ US par million de jetons de sortie, soit la moitié du prix d’entrée et un tiers de moins en sortie par rapport à la version de mai. Les bibliothèques Python et Node.js d’OpenAI peuvent maintenant accepter un schéma écrit sous forme d’objet Pydantic ou Zod, deux façons populaires de décrire des données dans le code, et le convertir pour vous.

Comment ça fonctionne

OpenAI a procédé en deux étapes. D’abord, l’entreprise a entraîné le nouveau modèle à mieux comprendre les schémas compliqués; à son test de schémas complexes, le modèle seul a obtenu 93 %. C’est bien, mais un programme qui échoue sept fois sur cent n’est pas assez bon.

La deuxième étape relève donc de l’ingénierie. Un modèle écrit sa réponse un jeton (un mot ou un morceau de mot) à la fois, et à chaque étape, il pourrait en principe choisir n’importe quel jeton de son vocabulaire, y compris un jeton qui brise le format. Avec les Structured Outputs, le système transforme d’abord votre schéma en grammaire hors contexte, un ensemble précis de règles sur ce qui peut venir ensuite. Puis, après chaque jeton, il calcule quels jetons suivants respecteraient encore les règles et bloque tous les autres. Cette approche s’appelle le décodage contraint.

Pensez à un formulaire papier avec des cases. Une lettre libre peut dire n’importe quoi; un formulaire n’accepte qu’une date dans la case de la date. Le décodage contraint donne le formulaire au modèle. Avec lui, OpenAI rapporte un score parfait de 100 % à son test de schémas, contre moins de 40 % pour l’ancien gpt-4-0613.

Il y a des limites à connaître :

  • La première requête avec un nouveau schéma prend plus de temps, en général moins de 10 secondes et jusqu’à une minute pour les schémas complexes, le temps de construire la grammaire. Ensuite, elle est mise en cache.
  • Seule une partie de la norme JSON Schema est prise en charge.
  • Le modèle peut encore refuser une demande dangereuse. Quand il le fait, la réponse comprend un champ refusal pour que votre application le sache.
  • C’est la structure qui est garantie, pas les faits. Un champ peut être rempli avec une valeur fausse.
  • Cela ne fonctionne pas avec les appels de fonctions en parallèle.

Pourquoi c’est important cette semaine

Pour les personnes qui créent des applications, cela élimine toute une catégorie de code fragile : les vérifications, les nouvelles tentatives et les étapes de réparation autour de chaque appel à l’IA. Il devient plus pratique d’utiliser des modèles pour la saisie de données, l’extraction de détails dans des documents, le remplissage de formulaires ou la création d’éléments d’interface à partir d’une demande. OpenAI salue le travail de projets à code source ouvert comme Outlines, Jsonformer, Instructor, Guidance et Lark, qui ont ouvert la voie.

À essayer : notez sur papier les trois à cinq champs que vous voudriez tirer d’un courriel typique de votre boîte de réception (par exemple l’expéditeur, la demande, l’échéance). Cette liste est le début d’un JSON Schema, et la première étape pour automatiser cette tâche.

Comment commencer à utiliser les Structured Outputs dans votre propre projet?

Commencez par un petit schéma. Décidez des champs, de leurs types et de ceux qui sont obligatoires, puis passez-le comme json_schema dans response_format avec strict: true, en utilisant gpt-4o-2024-08-06 ou gpt-4o-mini. Si vous utilisez déjà l’appel de fonctions, ajouter strict: true à vos définitions existantes est le gain le plus rapide.

Gardez vos consignes claires, même si le format est imposé. Un prompt comme celui-ci se marie bien avec un schéma qui comporte les champs sender, request et deadline :

Prompt
Extrais l’expéditeur, la demande principale et l’échéance du courriel ci-dessous. Si aucune échéance n’est indiquée, utilise null. Ne devine pas.

[colle le courriel ici]

Testez ensuite avec de vrais exemples, désordonnés. Vérifiez les valeurs, pas seulement la forme, puisque le schéma garantit la structure, mais pas l’exactitude. Gérez le cas refusal dans votre code, et attendez-vous à un court délai la première fois que chaque nouveau schéma est utilisé.

Sources

  1. Introducing Structured Outputs in the API — OpenAI, 6 août 2024
  2. OpenAI has finally released the No. 1 feature developers have been desperate for — VentureBeat (Taryn Plumb), 6 août 2024

Recevez gratuitement le Guide de l’intelligence artificielle

Abonnez-vous à l’infolettre hebdomadaire et recevez le guide gratuit : ce qui a changé en IA cette semaine, une leçon, un prompt à essayer. Désabonnement en un clic.

Ce que nous faisons de votre adresse

Retour en haut

Affichage

Vos choix sont enregistrés dans ce navigateur seulement. Aucune donnée n’est transmise.

Taille du texte
100 %
Couleurs
Lecture
Autres réglages
Déclaration d’accessibilité