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


Использование моделей чата с поддержкой визуального зрения

Модели чата с поддержкой визуального распознавания — это большие многомодальные модели (LMM), разработанные OpenAI, которые могут анализировать изображения и предоставлять текстовые ответы на вопросы о них. Они включают как обработку естественного языка, так и визуальное понимание. Текущие модели с поддержкой визуализации — это модели рассуждения серии o, серии GPT-5, серии GPT-4.1, GPT-4.5, серии GPT-4o.

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

Подсказка

Чтобы использовать модели с поддержкой компьютерного зрения, вызовите API завершения чата для поддерживаемой вами развернутой модели. Если вы не знакомы с API завершения чата, ознакомьтесь с руководством по чату с поддержкой визуального распознавания.

Вызов API завершения чата

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

Отправка запроса POST на https://{RESOURCE_NAME}.openai.azure.com/openai/v1/chat/completions место

  • RESOURCE_NAME — это имя ресурса Azure OpenAI

Обязательные заголовки:

  • Content-Type: application/json
  • api-key: {API_KEY}

Текст: ниже приведен пример текста запроса. Формат совпадает с API завершения чата для GPT-4o, за исключением того, что содержимое сообщения может быть массивом, содержащим текст и изображения (допустимым общедоступным URL-адресом HTTP или HTTPS для изображения или изображением в кодировке 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: Неполный вывод модели из-за ограничения входного параметра или лимита токенов модели.
  • 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: Неполный вывод модели из-за ограничения входного параметра или лимита токенов модели.
  • content_filter: Контент пропущен из-за срабатывания наших фильтров.