비전 지원 채팅 모델은 이미지를 분석하고 이미지에 대한 질문에 대한 텍스트 응답을 제공할 수 있는 OpenAI에서 개발한 LMM(대형 다중 모드 모델)입니다. 이는 자연어 처리와 시각적 이해를 모두 통합합니다. 현재 비전 지원 모델은 O 시리즈 추론 모델, GPT-5 시리즈, GPT-4.1 시리즈, GPT-4.5, GPT-4o 시리즈입니다.
비전 지원 모델은 업로드한 이미지에 무엇이 있는지에 대한 일반적인 질문에 대답할 수 있습니다.
팁 (조언)
비전 지원 모델을 사용하려면 배포한 지원되는 모델에서 채팅 완료 API를 호출합니다. 채팅 완료 API에 익숙하지 않은 경우, 비전 지원 채팅 사용 방법 가이드를 참조하세요.
채팅 완료 API 호출
다음 명령은 코드를 사용하여 비전 지원 채팅 모델을 사용하는 가장 기본적인 방법을 보여 줍니다. 이러한 모델을 프로그래밍 방식으로 처음 사용하는 경우 이미지로 채팅 빠른 시작부터 시작하는 것이 좋습니다.
https://{RESOURCE_NAME}.openai.azure.com/openai/v1/chat/completions에 POST 요청을 보냅니다.
- RESOURCE_NAME은 Azure OpenAI 리소스의 이름입니다.
필수 헤더:
-
Content-Type: application/json -
api-key: {API_KEY}
본문: 다음은 샘플 요청 본문입니다. 형식은 GPT-4o에 대한 채팅 완료 API와 동일합니다. 메시지 콘텐츠는 텍스트 및 이미지를 포함하는 배열(이미지에 대한 유효한 공개적으로 액세스할 수 있는 HTTP 또는 HTTPS URL 또는 base-64로 인코딩된 이미지)일 수 있다는 점을 제외합니다.
중요합니다
"max_tokens" 값을 설정하거나 max_completion_tokens 값을 설정하지 않으면 반환 결과가 중단됩니다.
중요합니다
이미지를 업로드할 때 채팅 요청당 10개의 이미지로 제한됩니다.
{
"model": "MODEL-DEPLOYMENT-NAME",
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": [
{
"type": "text",
"text": "Describe this picture:"
},
{
"type": "image_url",
"image_url": {
"url": "<image URL>"
}
}
]
}
],
"max_tokens": 100,
"stream": false
}
팁 (조언)
로컬 이미지 사용
로컬 이미지를 사용하려면 다음 Python 코드를 사용하여 이를 base64로 변환하여 API에 전달할 수 있습니다. 대체 파일 변환 도구는 온라인에서 사용할 수 있습니다.
import base64
from mimetypes import guess_type
# Function to encode a local image into data URL
def local_image_to_data_url(image_path):
# Guess the MIME type of the image based on the file extension
mime_type, _ = guess_type(image_path)
if mime_type is None:
mime_type = 'application/octet-stream' # Default MIME type if none is found
# Read and encode the image file
with open(image_path, "rb") as image_file:
base64_encoded_data = base64.b64encode(image_file.read()).decode('utf-8')
# Construct the data URL
return f"data:{mime_type};base64,{base64_encoded_data}"
# Example usage
image_path = '<path_to_image>'
data_url = local_image_to_data_url(image_path)
print("Data URL:", data_url)
base64 이미지 데이터가 준비되면 다음과 같이 요청 본문의 API에 전달할 수 있습니다.
...
"type": "image_url",
"image_url": {
"url": "data:image/jpeg;base64,<your_image_data>"
}
...
세부 매개 변수 설정
필요에 따라 "detail" 필드에서 "image_url" 매개 변수를 정의할 수 있습니다. 세 값 lowhigh중 하나를 선택하거나 auto모델이 이미지를 해석하고 처리하는 방식을 조정합니다.
-
auto설정: 기본 설정입니다. 모델은 이미지 입력 크기에 따라 낮음 또는 높음 중에서 결정합니다. -
low설정: 모델은 "고해상도" 모드를 활성화하지 않고 대신 저해상도 512x512 버전을 처리하므로 세밀한 세부 사항이 중요하지 않은 시나리오에 대해 응답 속도가 빨라지고 토큰 사용량이 줄어듭니다. -
high설정: 모델이 "고해상도" 모드를 활성화합니다. 여기서 모델은 처음에 저해상도 이미지를 본 다음 입력 이미지에서 상세한 512x512 세그먼트를 생성합니다. 각 세그먼트는 토큰 예산의 두 배를 사용하여 이미지에 대한 보다 자세한 해석을 허용합니다.
이 예제에 표시된 형식을 사용하여 값을 설정합니다.
{
"type": "image_url",
"image_url": {
"url": "<image URL>",
"detail": "high"
}
}
이미지 매개 변수가 사용된 토큰 및 가격 책정에 어떤 영향을 미치는지 자세히 알아보려면 Azure OpenAI란? 이미지 토큰
출력
API 응답은 다음과 같아야 합니다.
{
"id": "chatcmpl-8VAVx58veW9RCm5K1ttmxU6Cm4XDX",
"object": "chat.completion",
"created": 1702439277,
"model": "gpt-4o",
"prompt_filter_results": [
{
"prompt_index": 0,
"content_filter_results": {
"hate": {
"filtered": false,
"severity": "safe"
},
"self_harm": {
"filtered": false,
"severity": "safe"
},
"sexual": {
"filtered": false,
"severity": "safe"
},
"violence": {
"filtered": false,
"severity": "safe"
}
}
}
],
"choices": [
{
"finish_reason":"stop",
"index": 0,
"message": {
"role": "assistant",
"content": "The picture shows an individual dressed in formal attire, which includes a black tuxedo with a black bow tie. There is an American flag on the left lapel of the individual's jacket. The background is predominantly blue with white text that reads \"THE KENNEDY PROFILE IN COURAGE AWARD\" and there are also visible elements of the flag of the United States placed behind the individual."
},
"content_filter_results": {
"hate": {
"filtered": false,
"severity": "safe"
},
"self_harm": {
"filtered": false,
"severity": "safe"
},
"sexual": {
"filtered": false,
"severity": "safe"
},
"violence": {
"filtered": false,
"severity": "safe"
}
}
}
],
"usage": {
"prompt_tokens": 1156,
"completion_tokens": 80,
"total_tokens": 1236
}
}
모든 응답에는 "finish_reason" 필드가 포함됩니다. 가능한 값은 다음과 같습니다.
-
stop: API가 전체 모델 출력을 반환했습니다. -
length:max_tokens입력 매개 변수 또는 모델의 토큰 제한으로 인해 모델 출력이 불완전합니다. -
content_filter: 콘텐츠 필터의 플래그로 인해 콘텐츠가 생략되었습니다.
출력
이제 모델로부터 받는 채팅 응답에는 개체 레이블, 경계 상자, OCR 결과 등 이미지에 대한 향상된 정보가 포함됩니다. API 응답은 다음과 같아야 합니다.
{
"id": "chatcmpl-8UyuhLfzwTj34zpevT3tWlVIgCpPg",
"object": "chat.completion",
"created": 1702394683,
"model": "gpt-4o",
"choices":
[
{
"finish_reason": {
"type": "stop",
"stop": "<|fim_suffix|>"
},
"index": 0,
"message":
{
"role": "assistant",
"content": "The image shows a close-up of an individual with dark hair and what appears to be a short haircut. The person has visible ears and a bit of their neckline. The background is a neutral light color, providing a contrast to the dark hair."
}
}
],
"usage":
{
"prompt_tokens": 816,
"completion_tokens": 49,
"total_tokens": 865
}
}
모든 응답에는 "finish_reason" 필드가 포함됩니다. 가능한 값은 다음과 같습니다.
-
stop: API가 전체 모델 출력을 반환했습니다. -
length:max_tokens입력 매개 변수 또는 모델의 토큰 제한으로 인해 모델 출력이 불완전합니다. -
content_filter: 콘텐츠 필터의 플래그로 인해 콘텐츠가 생략되었습니다.