Поделиться через


Узнайте, как использовать режим JSON

Режим JSON позволяет задать формат отклика моделей для возврата допустимого объекта JSON в рамках завершения чата. При создании допустимого JSON было возможно ранее, могут возникнуть проблемы с согласованность ответов, что приведет к созданию недопустимых объектов JSON.

Примечание.

Хотя режим JSON по-прежнему поддерживается, по возможности рекомендуется использовать структурированные выходные данные. Как и структурированные выходные данные в режиме JSON, создают допустимые json, но с добавленным преимуществом, которое можно ограничить моделью для использования определенной схемы JSON.

Примечание.

В настоящее время структурированные выходные данные не поддерживаются при переносе собственного сценария данных .

Поддержка режима JSON

В настоящее время режим JSON поддерживается только в следующих моделях:

Поддерживаемые модели

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

поддержка API

Поддержка режима JSON была добавлена в версию API 2023-12-01-preview

Пример

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)

Выходные данные

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

Существует два ключевых фактора, которые должны присутствовать для успешного использования режима JSON:

  • response_format={ "type": "json_object" }
  • Мы сказали модели выводить JSON в составе системного сообщения.

В том числе руководство по модели, которая должна создавать JSON в рамках беседы с сообщениями, требуется. Рекомендуется добавить инструкцию в составе системного сообщения. В соответствии с ошибкой OpenAI для добавления этой инструкции модель может привести к "созданию непрерывного потока пробелов и запрос может выполняться постоянно, пока он не достигнет предела маркера".

Не указать json в сообщениях возвращается следующее:

Выходные данные

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

Другие вопросы

Перед анализом ответа необходимо проверить finish_reason значение length . Модель может создать частичный JSON. Это означает, что выходные данные модели были больше доступных max_tokens, которые были заданы как часть запроса, или сам разговор превысил ограничение маркера.

В режиме JSON создается недопустимый код JSON и синтаксический анализ без ошибок. Однако выходные данные не будут соответствовать определенной схеме, даже если они запрошены в запросе.