다음을 통해 공유


JSON 모드를 사용하는 방법 알아보기

JSON 모드를 사용하면 채팅 완료의 일부로 유효한 JSON 개체를 반환하도록 모델 응답 형식을 설정할 수 있습니다. 이전에는 유효한 JSON을 생성할 수 있기는 했지만 응답 일관성에 문제가 발생하여 잘못된 JSON 개체가 생성될 수 있었습니다.

JSON 모드 지원

JSON 모드는 현재 다음 모델에서만 지원됩니다.

지원되는 모델

  • gpt-35-turbo(1106)
  • gpt-35-turbo (0125)
  • gpt-4 (1106-미리 보기)
  • gpt-4 (0125-미리 보기)

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="gpt-4-0125-Preview", # Model = should match the deployment name you chose for your 0125-Preview 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을 생성하고 오류 없이 구문 분석합니다. 하지만 프롬프트에서 요청하더라도 출력이 특정 스키마와 일치한다는 보장은 없습니다.