Dela via


Lär dig hur du använder JSON-läge

Med JSON-läge kan du ange modellsvarsformatet för att returnera ett giltigt JSON-objekt som en del av en chatt. Det gick att generera giltig JSON tidigare, men det kan finnas problem med svarskonsekvens som skulle leda till att ogiltiga JSON-objekt genereras.

Kommentar

JSON-läget stöds fortfarande, men när det är möjligt rekommenderar vi att du använder strukturerade utdata. Precis som strukturerade JSON-lägesutdata genererar giltiga JSON, men med den extra fördelen att du kan begränsa modellen till att använda ett specifikt JSON-schema.

Kommentar

För närvarande stöds inte strukturerade utdata i bring your own data scenario.

Stöd för JSON-läge

JSON-läget stöds endast för närvarande med följande modeller:

Modeller som stöds

  • gpt-35-turbo (1106)
  • gpt-35-turbo (0125)
  • gpt-4 (1106-förhandsversion)
  • gpt-4 (0125-Preview)
  • gpt-4o
  • gpt-4o-mini

API-stöd

Stöd för JSON-läge lades först till i API-version 2023-12-01-preview

Exempel

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="YOUR-MODEL_DEPLOYMENT_NAME", # Model = should match the deployment name you chose for your 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)

Output

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

Det finns två viktiga faktorer som måste finnas för att kunna använda JSON-läge:

  • response_format={ "type": "json_object" }
  • Vi sa till modellen att mata ut JSON som en del av systemmeddelandet.

Det krävs vägledning för modellen som ska producera JSON som en del av konversationen med meddelanden. Vi rekommenderar att du lägger till instruktioner som en del av systemmeddelandet. Enligt OpenAI-misslyckandet med att lägga till den här instruktionen kan modellen "generera en avaktiveringsström med blanksteg och begäran kan köras kontinuerligt tills den når tokengränsen".

Det gick inte att inkludera "JSON" i meddelandena returnerar:

Output

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

Övriga beaktanden

Du bör söka efter finish_reason värdet length innan du parsar svaret. Modellen kan generera partiell JSON. Det innebär att utdata från modellen var större än de tillgängliga max_tokens som angavs som en del av begäran, eller att själva konversationen överskred tokengränsen.

JSON-läge genererar JSON som är giltigt och parsar utan fel. Det finns dock ingen garanti för att utdata matchar ett visst schema, även om det begärs i prompten.