![](https://www.developpez.com/images/logos/openai.png)
Connue pour son grand modèle de langage ChatGPT, OpenAI est une organisation de recherche en intelligence artificielle (IA). Elle s'est donnée pour mission de développer une intelligence générale artificielle "sûre et bénéfique", qu'elle définit comme "des systèmes hautement autonomes qui surpassent les humains dans la plupart des travaux économiquement utiles".
OpenAI vient d'introduire des sorties structurées dans son API pour garantir que les sorties du modèle adhèrent de manière fiable aux schémas JSON fournis par le développeur. Pour rappel, le JSON (JavaScript Object Notation) est un format de fichier standard ouvert couramment utilisé pour divers usages dans l'échange de données électroniques, y compris celui des applications web avec les serveurs.
OpenAI déclare pour cette annonce :
L'année dernière, lors du DevDay, nous avons introduit le mode JSON, un bloc de construction utile pour les développeurs qui cherchent à créer des applications fiables avec nos modèles. Bien que le mode JSON améliore la fiabilité du modèle en générant des sorties JSON valides, il ne garantit pas que la réponse du modèle sera conforme à un schéma particulier.
Aujourd'hui, nous introduisons les sorties structurées dans l'API, une nouvelle fonctionnalité conçue pour garantir que les sorties générées par le modèle correspondent exactement aux schémas JSON fournis par les développeurs.
La génération de données structurées à partir d'entrées non structurées est l'un des principaux cas d'utilisation de l'IA dans les applications d'aujourd'hui. Les développeurs utilisent l'API OpenAI pour créer de puissants assistants capables de récupérer des données et de répondre à des questions via l'appel de fonctions, d'extraire des données structurées pour la saisie de données et de créer des flux de travail agentiques en plusieurs étapes qui permettent aux LLM de prendre des mesures.
Les développeurs travaillent depuis longtemps à contourner les limites des LLM dans ce domaine par le biais d'outils open source, d'invites et de tentatives répétées de requêtes pour s'assurer que les sorties du modèle correspondent aux formats nécessaires pour interopérer avec leurs systèmes. Les sorties structurées résolvent ce problème en contraignant les modèles OpenAI à correspondre aux schémas fournis par les développeurs et en entraînant nos modèles à mieux comprendre les schémas compliqués.
Lors de nos évaluations de schémas JSON complexes, notre nouveau modèle gpt-4o-2024-08-06 avec sorties structurées obtient un score parfait de 100 %. En comparaison, le modèle gpt-4-0613 obtient un score inférieur à 40 %.
Présentation des sorties structurées dans l'API par OpenAI
Comment utiliser les sorties structurées ?
Les sorties structurées d'OpenAI se présentent sous deux formes dans l'API :
- Appel de fonction : Les sorties structurées via tools sont disponibles en définissant strict : true dans votre définition de fonction. Cette fonctionnalité fonctionne avec tous les modèles qui prennent en charge les outils, y compris tous les modèles gpt-4-0613 et gpt-3.5-turbo-0613 et ultérieurs. Lorsque les sorties structurées sont activées, les sorties du modèle correspondent à la définition de l'outil fourni.
- Une nouvelle option pour le paramètre response_format : les développeurs peuvent désormais fournir un schéma JSON via json_schema, une nouvelle option pour le paramètre response_format. Cette option est utile lorsque le modèle n'appelle pas un outil, mais répond plutôt à l'utilisateur de manière structurée. Cette fonctionnalité fonctionne avec les modèles GPT-4o les plus récents : gpt-4o-2024-08-06, et gpt-4o-mini-2024-07-18. Lorsqu'un response_format est fourni avec strict : true, les sorties du modèle correspondront au schéma fourni.
Sorties structurées sûres
OpenAI veut mettre la sécurité en une priorité absolue. La nouvelle fonctionnalité Sorties structurées respecterait les politiques de sécurité et permettrait toujours au modèle de refuser une requête non sécurisée.
Pour simplifier le développement, il existe une nouvelle valeur de chaîne refusal sur les réponses de l'API qui permet aux développeurs de détecter de manière programmatique si le modèle a généré un refus au lieu d'une sortie correspondant au schéma. Lorsque la réponse n'inclut pas de refus et que la réponse du modèle n'a pas été interrompue prématurément (indiqué par finish_reason), la réponse du modèle produira de manière fiable un JSON valide correspondant au schéma fourni.
Voici un exemple de sortie JSON montrant la nouvelle valeur refusal :
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 | { "id": "chatcmpl-9nYAG9LPNonX8DAyrkwYfemr3C8HC", "object": "chat.completion", "created": 1721596428, "model": "gpt-4o-2024-08-06", "choices": [ { "index": 0, "message": { "role": "assistant", "refusal": "I'm sorry, I cannot assist with that request." }, "logprobs": null, "finish_reason": "stop" } ], "usage": { "prompt_tokens": 81, "completion_tokens": 11, "total_tokens": 92 }, "system_fingerprint": "fp_3407719c7f" } |
Support SDK natif
OpenAI a mis à jour ses SDK Python et Node avec la prise en charge native des sorties structurées. Fournir un schéma pour les outils ou comme format de réponse serait aussi simple que de fournir un objet Pydantic ou Zod, et les SDK géreraient la conversion du type de données vers un schéma JSON pris en charge, la désérialisation de la réponse JSON dans la structure de données typée automatiquement, et l'analyse des refus s'ils survenaient.
La prise en charge native des sorties structurées est également disponible pour response_format.
Voici quelques exemples de rendu avec cette nouvelle fonctionnalité :
Limites et restrictions
OpenAI partage quelques limitations à garder à l'esprit lors de l'utilisation des sorties structurées :
- Les sorties structurées n'autorisent qu'un sous-ensemble de schémas JSON, détaillés dans notre documentation. Cela nous permet de garantir les meilleures performances possibles.
- La première réponse de l'API avec un nouveau schéma entraînera un temps de latence supplémentaire, mais les réponses suivantes seront rapides sans pénalité de latence. En effet, lors de la première demande, nous traitons le schéma, puis nous mettons en cache ces artefacts afin de pouvoir les réutiliser rapidement par la suite. Le traitement des schémas typiques prend moins de 10 secondes lors de la première demande, mais les schémas plus complexes peuvent prendre jusqu'à une minute.
- Le modèle peut ne pas suivre le schéma s'il choisit de refuser une requête non sécurisée. S'il choisit de refuser, le booléen refusal sera positionné à true dans le message de retour pour l'indiquer.
- Le modèle peut ne pas respecter le schéma si la génération atteint max_tokens ou une autre condition d'arrêt avant de se terminer.
- Les sorties structurées n'empêchent pas tous les types d'erreurs de modélisation. Par exemple, le modèle peut encore faire des erreurs dans les valeurs de l'objet JSON (par exemple, se tromper d'étape dans une équation mathématique). Si les développeurs trouvent des erreurs, nous recommandons de fournir des exemples dans les instructions du système ou de diviser les tâches en sous-tâches plus simples.
- Les sorties structurées ne sont pas compatibles avec les appels de fonctions parallèles. Lorsqu'un appel de fonction parallèle est généré, il peut ne pas correspondre aux schémas fournis. Définissez parallel_tool_calls : false pour désactiver les appels de fonctions parallèles.
- Les schémas JSON fournis avec les sorties structurées ne sont pas éligibles au Zero Data Retention (ZDR).
Source : "Introducing Structured Outputs in the API" (OpenAI)
Et vous ?
![:fleche:](https://www.developpez.net/forums/images/smilies/fleche.gif)
![:fleche:](https://www.developpez.net/forums/images/smilies/fleche.gif)
Voir aussi :
![:fleche:](https://www.developpez.net/forums/images/smilies/fleche.gif)
![:fleche:](https://www.developpez.net/forums/images/smilies/fleche.gif)
![:fleche:](https://www.developpez.net/forums/images/smilies/fleche.gif)