Partager via


Découvrez comment utiliser le mode JSON

Le mode JSON vous permet de définir le format de réponse des modèles de façon à ce qu’ils retournent un objet JSON valide dans le cadre d’une complétion de conversation. La génération au format JSON était déjà possible auparavant, mais il pouvait y avoir des problèmes de cohérence de la réponse qui entraînaient la génération d’objets JSON non valides.

Prise en charge du mode JSON

Le mode JSON est pris en charge seulement avec les modèles suivants :

Modèles pris en charge

  • gpt-35-turbo (1106)
  • gpt-35-turbo (0125)
  • gpt-4 (1106-Preview)
  • gpt-4 (préversion 0125)

Prise en charge des API

La prise en charge du mode JSON a été ajoutée pour la première fois dans la version de l’API 2023-12-01-preview

Exemple

import os
from openai import AzureOpenAI

client = AzureOpenAI(
  azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"), 
  api_key=os.getenv("AZURE_OPENAI_API_KEY"),  
  api_version="2024-03-01-preview"
)

response = client.chat.completions.create(
  model="gpt-4-0125-Preview", # Model = should match the deployment name you chose for your 0125-Preview model deployment
  response_format={ "type": "json_object" },
  messages=[
    {"role": "system", "content": "You are a helpful assistant designed to output JSON."},
    {"role": "user", "content": "Who won the world series in 2020?"}
  ]
)
print(response.choices[0].message.content)

Sortie

{
  "winner": "Los Angeles Dodgers",
  "event": "World Series",
  "year": 2020
}

Deux facteurs clés qui doivent être présents pour utiliser correctement le mode JSON :

  • response_format={ "type": "json_object" }
  • Nous avons indiqué au modèle de générer du JSON dans le cadre du message système.

Il est impératif d’indiquer au modèle qu’il doit produire du JSON dans le cadre de la conversation par messages. Nous vous recommandons d’ajouter des instructions dans le cadre du message système. Selon OpenAI, si cette instruction n’est pas ajoutée, le modèle peut « générer un flux ininterrompu d’espaces vides et la requête pourrait s’exécuter en continu jusqu’à ce qu’elle atteigne la limite de jetons ».

L’échec de l’ajout de « JSON » dans les messages retourne :

Sortie

BadRequestError: Error code: 400 - {'error': {'message': "'messages' must contain the word 'json' in some form, to use 'response_format' of type 'json_object'.", 'type': 'invalid_request_error', 'param': 'messages', 'code': None}}

Autres considérations

Vous devez vérifier si finish_reason a la valeur length avant d’analyser la réponse. Le modèle peut générer un JSON partiel. Cela signifie que la sortie du modèle était plus grande que les max_tokens disponibles qui ont été définies dans le cadre de la demande ou que la conversation elle-même a dépassé la limite de jetons.

Le mode JSON produit un JSON valide et analysé sans erreur. Toutefois, il n’existe aucune garantie que la sortie corresponde à un schéma spécifique, même si elle est demandée dans l’invite.