Comprendre la sortie structurée dans les LLM

Il n’y a pas longtemps, lorsque nous voulions ouvrir Openai pour renvoyer les données JSON, nous avons dû utiliser diverses techniques d’ingénierie rapides pour obtenir les données JSON souhaitées dans la sortie. Ensuite, nous avons dû analyser le texte de réponse AI et extraire généralement les données JSON qui ont été enfermées dans « ». C’était contraignant et sujet aux erreurs. Mais surtout, il n’y avait aucune certitude que les éléments JSON nécessaires seraient là.
Heureusement pour nous, OpenAI a introduit une fonctionnalité appelée «sortie structurée» qui offre deux avantages principaux:
La sortie JSON du modèle est cohérente avec un schéma JSON que nous fournissons lors de l’exécution
La sortie ne contient que JSON
Il y a quelques avantages clés:
Le traitement des résultats est plus facile et plus prévisible: nous pouvons désormais analyser les résultats par programme avec certitude, car le modèle n’inventera pas les propriétés JSON arbitraires.
La conception de l’invite est plus simple: il n’est plus nécessaire de faire du renforcement dans l’invite pour atteindre la sortie JSON souhaitée.
Dans ce blog, nous explorerons un exemple simple de la façon d’utiliser la sortie structurée. Nous implémenterons un traducteur texte simple de n’importe quelle langue à l’anglais et fournirons des commandes Curl pour exécuter la demande OpenAI dans une invite de commande (vous n’aurez qu’à spécifier votre clé API).
Commençons par un exemple simple où la sortie est en texte brut (non structuré – pas de réponse JSON). Cette demande a:
Invite du système: «Votre rôle est de se traduire en anglais.»
Invite de l’utilisateur (le texte à traduire): « Bonjour, commentaire CA VA! »
Voici une commande Curl:
curl https://api.openai.com/v1/chat/completions ^
-H "Content-Type: application/json" ^
-H "Authorization: Bearer YOUR API KEY HERE" ^
-d "{\"model\": \"gpt-4o-mini\", \"messages\": [{\"role\": \"system\",\"content\": \"Your role is to translate to English.\" },{\"role\": \"user\",\"content\": \"bonjour, comment ca va!\"}]}"
Réponse:
Nous recevrons le message de l’assistant suivant: «Contenu»: «Bonjour, comment vas-tu!»
Maintenant, demandons à Openai de renvoyer les données de manière structurée en utilisant JSON et en appliquant un schéma spécifique. Nous voulons que la réponse contienne les éléments suivants:
- Un champ avec le texte original qui doit être traduit
- Un champ avec le texte traduit dans la langue cible (anglais)
Voici le schéma JSON correspondant:
{
"type": "object",
"properties": {
"original_text": {
"type": "string",
"description": "The original text that needs to be translated."
},
"translated_text": {
"type": "string",
"description": "The translated text in the target language."
}
},
"required": [
"original_text",
"translated_text"
],
"additionalProperties": false
}
Le schéma JSON est inséré dans la demande OpenAI dans le fragment JSON suivant:
« Response_Format »: {« Type »: « JSON_SCHEMA », « JSON_SCHEMA »: « Insérez le schéma ici »}
Voici la commande complète Curl:
curl https://api.openai.com/v1/chat/completions ^
-H "Content-Type: application/json" ^
-H "Authorization: Bearer YOUR API KEY" ^
-d "{\"model\": \"gpt-4o-mini\",\"response_format\": {\"type\": \"json_schema\", \"json_schema\": {\"strict\": true, \"name\": \"example1\", \"schema\": {\"type\": \"object\",\"properties\": {\"original_text\": {\"type\": \"string\",\"description\": \"The original text that needs to be translated.\"},\"translated_text\": {\"type\": \"string\",\"description\": \"The translated text in the target language.\"}},\"required\": [\"original_text\",\"translated_text\"],\"additionalProperties\": false}} }, \"messages\": [{\"role\": \"system\",\"content\": \"Your role is to translate to English. Provide the original text as well as the translated text in the response.\" },{\"role\": \"user\",\"content\": \"json: bonjour, comment ca va!\"}]}"
Lorsque nous testons la même requête que nous l’avons fait plus tôt, nous obtenons le contenu suivant:
{
"original_text": "bonjour, comment ca va!",
"translated_text": "hello, how are you!"
}
C’est ça. Nous avons maintenant une réponse avec des données JSON pures qui peuvent être analysées par un programme de manière prévisible.
Mode JSON
Il existe un autre mode dans l’API OpenAI pour obtenir la sortie JSON. Cela s’appelle le mode JSON. Il faut l’invite pour inclure le mot-clé «JSON», mais dans ce mode, il n’y a aucune certitude que la sortie JSON suivra un schéma. Comme le
docLe met: «Le mode JSON est une version plus basique de la fonction de sorties structurées. Bien que le mode JSON garantit que la sortie du modèle est valide JSON, les sorties structurées correspondent de manière fiable à la sortie du modèle au schéma que vous spécifiez. Nous vous recommandons d’utiliser des sorties structurées si elle est prise en charge pour votre cas d’utilisation. Vous pouvez
En savoir plus à ce sujet sur la page Structured Sorties d’OpenAI.
Génération de schéma
D’après mon expérience, la détermination du fichier de schéma JSON approprié qui suit toutes les contraintes peut être difficile. Il est facile de manquer d’ajouter les champs de propriétés requis supplémentaires dans tous les emplacements nécessaires ou d’oublier d’ajouter un champ requis. Heureusement,
Utilisation de l’outil de générateur de schémaoffre un chemin plus facile. Vous fournissez une description de tout ce dont vous aurez besoin et l’outil générera un schéma de travail!
Conclusion
Initialement, les résultats OpenAI étaient destinés à être directement consommés par les utilisateurs en tant que texte ou autres supports, mais maintenant la sortie structurée fournit un mécanisme formel pour permettre aux logiciels d’utiliser les résultats de manière cohérente et prévisible. Ceci est non seulement utile lors de l’appel directement un LLM, mais c’est aussi la base du monde agentique.
Pour savoir comment les progrès permettent aux clients de développer, de déployer et de gérer des applications et des expériences numériques propulsées par l’IA,
Visitez notre page Solutions AI.
Source link