Delen via


Meer informatie over het gebruik van de JSON-modus

Met de JSON-modus kunt u de antwoordindeling van modellen instellen om een geldig JSON-object te retourneren als onderdeel van een chatvoltooiing. Tijdens het genereren van geldige JSON was eerder mogelijk, kunnen er problemen zijn met reactieconsistentie die zou leiden tot ongeldige JSON-objecten die worden gegenereerd.

Ondersteuning voor JSON-modus

De JSON-modus wordt momenteel alleen ondersteund met de volgende modellen:

Ondersteunde modellen

  • gpt-35-turbo (1106)
  • gpt-35-turbo (0125)
  • gpt-4 (1106-preview)
  • gpt-4 (0125-preview)

API-ondersteuning

Ondersteuning voor de JSON-modus is voor het eerst toegevoegd in API-versie 2023-12-01-preview

Opmerking

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)

Uitvoer

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

Er zijn twee belangrijke factoren die aanwezig moeten zijn om de JSON-modus te kunnen gebruiken:

  • response_format={ "type": "json_object" }
  • We hebben het model verteld JSON uit te voeren als onderdeel van het systeembericht.

Het opnemen van richtlijnen voor het model dat het JSON moet produceren als onderdeel van het berichtengesprek is vereist. U wordt aangeraden instructies toe te voegen als onderdeel van het systeembericht. Volgens de OpenAI-fout om deze instructie toe te voegen, kan het model ertoe leiden dat 'een niet-gecodeerde stroom van witruimte genereert en de aanvraag voortdurend kan worden uitgevoerd totdat de tokenlimiet is bereikt'.

Als u 'JSON' niet opneemt in de berichten, wordt het volgende geretourneerd:

Uitvoer

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}}

Andere overwegingen

finish_reason Controleer de waarde length voordat u het antwoord parseert. Het model kan gedeeltelijke JSON genereren. Dit betekent dat de uitvoer van het model groter is dan de beschikbare max_tokens die zijn ingesteld als onderdeel van de aanvraag, of dat het gesprek zelf de tokenlimiet heeft overschreden.

De JSON-modus produceert JSON die geldig is en zonder fouten parseert. Er is echter geen garantie dat de uitvoer overeenkomt met een specifiek schema, zelfs als dit wordt aangevraagd in de prompt.