JSON modunu kullanmayı öğrenin

JSON modu, sohbet tamamlama işleminin bir parçası olarak geçerli bir JSON nesnesi döndürmek için modelin yanıt biçimini ayarlamanıza olanak tanır. Daha önce geçerli JSON oluşturmak mümkün olsa da, geçersiz JSON nesnelerinin oluşturulmasına neden olabilecek yanıt tutarlılığı sorunları olabilir.

JSON modu geçerli JSON çıkışını garanti eder, ancak çıkışın belirli bir şemayla eşleştiğinden emin değildir. Şema garantilerine ihtiyacınız varsa Yapılandırılmış Çıkışlar'ı kullanın.

Not

JSON modu hala destekleniyor olsa da, mümkün olduğunda yapılandırılmış çıkışları kullanmanızı öneririz. JSON modu yapılandırılmış çıkışlarının geçerli JSON oluşturması gibi, ancak eklenen avantajla modeli belirli bir JSON şemasını kullanacak şekilde kısıtlayabilirsiniz.

Not

Şu anda yapılandırılmış çıkışlar kendi verilerinizi getirme senaryosunda desteklenmemektedir.

JSON modu desteği

JSON modu şu anda yalnızca aşağıdaki modellerle desteklenmektedir:

API desteği

JSON modu desteği ilk olarak API sürümü 2023-12-01-preview eklendi

Örnek

Örnekleri çalıştırmadan önce:

  • YOUR-RESOURCE-NAME değerini Azure OpenAI kaynak adınızla değiştirin.
  • YOUR-MODEL_DEPLOYMENT_NAME öğesini model dağıtımınızın adıyla değiştirin.

Aşağıdaki örneklerde Python ve .NET SDK'larını kullanan JSON modu ve doğrudan REST etkileşimi için PowerShell gösterilmektedir.

import os
from openai import OpenAI

client = OpenAI(
  base_url="https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
  api_key=os.getenv("AZURE_OPENAI_API_KEY")
)

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)

Çıkış

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

JSON modunun başarıyla kullanılabilmesi için iki gereksinimin de karşılanması gerekir:

  • İsteğinizde yanıt biçimini olarak json_object ayarlayın. Python'da response_format={ "type": "json_object" } geçin; .NET'te ChatResponseFormat.CreateJsonObjectFormat() kullanın; PowerShell'de response_format = @{type = 'json_object'} ayarlayın.
  • İleti konuşmasında bir yere "JSON" sözcüğünü ekleyin (genellikle sistem iletisi).

İleti konuşmasının bir parçası olarak JSON üretmesi gereken modele yönelik yönergeler de gereklidir. Bu yönergeyi sistem iletisinin bir parçası olarak eklemenizi öneririz. OpenAI'ye göre, bu talimatın eklenmemesi, modelin "sonsuz boşluk karakterleri dizisi oluşturmasına neden olabilir ve istek, belirteç sınırına ulaşana kadar kesintisiz olarak çalışmaya devam edebilir."

"İletilere 'JSON' eklenmemesi şu hatayı döndürür:"

Çıkış

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

Dikkat edilmesi gereken diğer noktalar

Yanıtı ayrıştırmadan önce finish_reason'da length değerini denetlemelisiniz. Model kısmi JSON oluşturabilir. Bu, modelden gelen çıktının isteğe dahil edilen max_tokens limitinden daha büyük olduğu ya da konuşmanın kendisinin belirteç sınırını aştığı anlamına gelir.

JSON modu geçerli olan JSON üretir ve hatasız ayrıştırılır. Ancak, talep edilse bile çıkışın belirli bir şemayla eşleşmesi kesin değildir.

Sorun giderme

  • Eğer finish_reasonlength ise, max_tokens'yi artırın (veya istemin uzunluğunu azaltın) ve yeniden deneyin. JSON verisini kısmen ayrıştırmayın.
  • Şema garantilerine ihtiyacınız varsa Yapılandırılmış Çıkışlar'a geçin.