Naučte se používat režim JSON.
Režim JSON umožňuje nastavit formát odpovědí modelů tak, aby v rámci dokončování chatu vrátil platný objekt JSON. I když bylo možné vygenerovat platný JSON dříve, mohlo dojít k problémům s konzistencí odpovědí, které by mohly vést k vygenerování neplatných objektů JSON.
Poznámka:
I když je režim JSON stále podporovaný, pokud je to možné, doporučujeme používat strukturované výstupy. Stejně jako strukturované výstupy v režimu JSON se generují platné JSON, ale s přidanou výhodou, kterou můžete model omezit na použití konkrétního schématu JSON.
Poznámka:
V současné době se strukturované výstupy nepodporují při používání vlastního scénáře dat .
Podpora režimu JSON
Režim JSON se v současné době podporuje pouze s následujícími modely:
Podporované modely
gpt-35-turbo
(1106)gpt-35-turbo
(0125)gpt-4
(1106-Preview)gpt-4
(0125-Preview)gpt-4o
gpt-4o-mini
Podpora rozhraní API
Podpora režimu JSON byla poprvé přidána ve verzi rozhraní API. 2023-12-01-preview
Příklad
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)
Výstup
{
"winner": "Los Angeles Dodgers",
"event": "World Series",
"year": 2020
}
Aby bylo možné úspěšně používat režim JSON, musí existovat dva klíčové faktory:
response_format={ "type": "json_object" }
- Model jsme řekli, aby v rámci systémové zprávy vypíše JSON.
Včetně pokynů k modelu, který by měl vytvořit JSON v rámci konverzace zpráv, je potřeba. Doporučujeme přidat instrukce jako součást systémové zprávy. Podle chyby OpenAI může přidání této instrukce způsobit, že model "vygeneruje neuskutečňovaný datový proud prázdných znaků a požadavek může běžet nepřetržitě, dokud nedosáhne limitu tokenu".
Selhání zahrnutí "JSON" do zpráv vrátí:
Výstup
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}}
Ostatní úvahy
Před parsováním odpovědi byste měli zkontrolovat finish_reason
hodnotu length
. Model může generovat částečný kód JSON. To znamená, že výstup z modelu byl větší než dostupný max_tokens, které byly nastaveny jako součást požadavku, nebo samotná konverzace překročila limit tokenu.
Režim JSON vytvoří json, který je platný a parsuje bez chyby. Neexistuje však žádná záruka, že výstup odpovídá určitému schématu, i když se vyžaduje v příkazovém řádku.