Udostępnij za pośrednictwem


Dowiedz się, jak używać trybu JSON

Tryb JSON umożliwia ustawienie formatu odpowiedzi modeli w celu zwrócenia prawidłowego obiektu JSON w ramach uzupełniania czatu. Podczas generowania prawidłowego kodu JSON było możliwe wcześniej, mogą wystąpić problemy ze spójnością odpowiedzi, co doprowadziłoby do wygenerowania nieprawidłowych obiektów JSON.

Uwaga

Mimo że tryb JSON jest nadal obsługiwany, jeśli jest to możliwe, zalecamy używanie danych wyjściowych ze strukturą. Podobnie jak w przypadku danych wyjściowych ze strukturą trybu JSON generuje prawidłowy kod JSON, ale z dodatkową korzyścią, którą można ograniczyć do używania określonego schematu JSON.

Uwaga

Obecnie dane wyjściowe ze strukturą nie są obsługiwane w scenariuszu "przynieś własne dane ".

Obsługa trybu JSON

Tryb JSON jest obecnie obsługiwany tylko w przypadku następujących modeli:

Obsługiwane modele

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

Obsługa interfejsu API

Obsługa trybu JSON została po raz pierwszy dodana w wersji interfejsu API 2023-12-01-preview

Przykład

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)

Wyjście

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

Istnieją dwa kluczowe czynniki, które muszą być obecne, aby pomyślnie użyć trybu JSON:

  • response_format={ "type": "json_object" }
  • Poinformowaliśmy model o danych wyjściowych JSON w ramach komunikatu systemowego.

Dołączanie wskazówek do modelu, które powinno zawierać dane JSON w ramach konwersacji komunikatów, jest wymagane. Zalecamy dodanie instrukcji w ramach komunikatu systemowego. Zgodnie z błędem openAI dodania tej instrukcji może spowodować, że model "wygeneruje niekończący się strumień białych znaków, a żądanie może być uruchamiane stale, dopóki nie osiągnie limitu tokenu".

Nie można uwzględnić ciągu "JSON" w komunikatach zwraca następujące elementy:

Wyjście

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

Inne uwagi

Przed przeanalizowanie odpowiedzi należy sprawdzić finish_reason wartość length . Model może wygenerować częściowy kod JSON. Oznacza to, że dane wyjściowe z modelu były większe niż dostępne max_tokens ustawione jako część żądania lub sama konwersacja przekroczyła limit tokenu.

Tryb JSON generuje prawidłowy kod JSON i analizuje bez błędu. Nie ma jednak gwarancji, że dane wyjściowe pasują do określonego schematu, nawet jeśli zostanie wyświetlony monit.