JSON 모드를 사용하는 방법 알아보기
JSON 모드를 사용하면 채팅 완료의 일부로 유효한 JSON 개체를 반환하도록 모델 응답 형식을 설정할 수 있습니다. 이전에는 유효한 JSON을 생성할 수 있기는 했지만 응답 일관성에 문제가 발생하여 잘못된 JSON 개체가 생성될 수 있었습니다.
참고 항목
JSON 모드는 계속 지원되지만 가능하면 구조화된 출력을 사용하는 것이 좋습니다. JSON 모드와 마찬가지로 구조화된 출력은 유효한 JSON을 생성하지만 특정 JSON 스키마를 사용하도록 모델을 제한할 수 있는 추가적인 이점을 제공합니다.
참고 항목
현재 구조화된 출력은 BYOD(사용자 데이터 가져오기) 시나리오에서 지원되지 않습니다.
JSON 모드 지원
JSON 모드는 현재 다음 모델에서만 지원됩니다.
지원되는 모델
gpt-35-turbo
(1106)gpt-35-turbo
(0125)gpt-4
(1106-미리 보기)gpt-4
(0125-미리 보기)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을 생성하고 오류 없이 구문 분석합니다. 하지만 프롬프트에서 요청하더라도 출력이 특정 스키마와 일치한다는 보장은 없습니다.