Бөлісу құралы:


Использование GPT-4 Turbo с vision

GPT-4 Turbo с Vision — это большая многомодальная модель (LMM), разработанная OpenAI, которая может анализировать изображения и предоставлять текстовые ответы на вопросы о них. Он включает как обработку естественного языка, так и визуальное понимание.

GPT-4 Turbo с моделью визуального зрения отвечает на общие вопросы о том, что присутствует в изображениях.

Совет

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

Обновление модели GPT-4 Turbo

Последний выпуск GPT-4 Turbo:

  • gpt-4Версия: turbo-2024-04-09

Это замена для следующих моделей предварительной версии:

  • gpt-4Версия: 1106-Preview
  • gpt-4Версия: 0125-Preview
  • gpt-4Версия: vision-preview

Различия между моделями OpenAI и Azure OpenAI GPT-4 Turbo GA

  • Версия OpenAI последней 0409 модели turbo поддерживает режим JSON и функцию, вызывая для всех запросов вывода.
  • Версия Azure OpenAI последней turbo-2024-04-09 в настоящее время не поддерживает использование режима JSON и вызова функций при выполнении запросов вывода с входными данными изображения (визуального зрения). Текстовые входные запросы (запросы без image_url встроенных изображений) поддерживают режим JSON и вызов функции.

Различия от gpt-4 vision-preview

  • Интеграция СИИ с GPT-4 Turbo с Vision не поддерживается для gpt-4 версии: turbo-2024-04-09 К ним относятся оптическое распознавание символов (OCR), заземление объектов, запросы видео и улучшенная обработка данных с помощью изображений.

GPT-4 Turbo подготовленная управляемая доступность

  • gpt-4Версия: turbo-2024-04-09 доступен как для стандартных, так и подготовленных развертываний. В настоящее время подготовленная версия этой модели не поддерживает запросы на вывод изображений и визуального зрения. Подготовленные развертывания этой модели принимают только текстовые входные данные. Развертывания стандартной модели принимают как текстовые, так и запросы вывода изображений и визуального распознавания.

Развертывание GPT-4 Turbo с помощью общедоступной версии vision

Чтобы развернуть модель общедоступной версии из пользовательского интерфейса Студии, выберите GPT-4 и выберите turbo-2024-04-09 версию из раскрывающегося меню. Квота по умолчанию для gpt-4-turbo-2024-04-09 модели будет совпадать с текущей квотой для GPT-4-Turbo. См. ограничения региональной квоты.

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

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

Отправка запроса POST на https://{RESOURCE_NAME}.openai.azure.com/openai/deployments/{DEPLOYMENT_NAME}/chat/completions?api-version=2024-02-15-preview место

  • RESOURCE_NAME — это имя ресурса Azure OpenAI
  • DEPLOYMENT_NAME — это имя вашего GPT-4 Turbo с развертыванием модели визуального зрения

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

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

Текст: ниже приведен пример текста запроса. Формат совпадает с API завершения чата для GPT-4, за исключением того, что содержимое сообщения может быть массивом, содержащим текст и изображения (допустимый URL-адрес HTTP или HTTPS для изображения или изображение в кодировке base-64).

Внимание

Не забудьте задать "max_tokens" значение или вырезать возвращаемые выходные данные.

Внимание

При отправке изображений на запрос чата ограничено 10 изображений.

{
    "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>"
}
...

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

Ответ API должен выглядеть следующим образом.

{
    "id": "chatcmpl-8VAVx58veW9RCm5K1ttmxU6Cm4XDX",
    "object": "chat.completion",
    "created": 1702439277,
    "model": "gpt-4",
    "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: опущенное содержимое из-за флага из фильтров содержимого.

Параметры подробных параметров в обработке изображений: низкий, высокий, авто

Параметр подробных сведений в модели предлагает три варианта: lowилиhighauto, чтобы настроить способ интерпретации и обработки изображений модели. Параметр по умолчанию является автоматическим, где модель выбирает между низким или высоким значением на основе размера входных данных изображения.

  • low параметр: модель не активирует режим высокого размера, а обрабатывает более низкую версию 512x512, что приводит к более быстрому ответу и снижению потребления маркеров для сценариев, где подробные сведения не имеют решающего значения.
  • high параметр: модель активирует режим "высокий res". Здесь модель изначально просматривает изображение с низким разрешением, а затем создает подробные сегменты 512x512 из входного образа. Каждый сегмент использует двойной бюджет токена, что позволяет более подробно интерпретировать изображение.

Дополнительные сведения о том, как параметры изображения влияют на используемые маркеры и цены, см. в разделе " Что такое OpenAI? Маркеры изображений с GPT-4 Turbo с vision

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

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

{
    "id": "chatcmpl-8UyuhLfzwTj34zpevT3tWlVIgCpPg",
    "object": "chat.completion",
    "created": 1702394683,
    "model": "gpt-4",
    "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: опущенное содержимое из-за флага из фильтров содержимого.

Создание индекса извлечения видео

  1. Получите ресурс Azure AI Vision в том же регионе, что и ресурс Azure OpenAI, который вы используете.

  2. Создайте индекс для хранения и упорядочивания видеофайлов и их метаданных. В приведенном ниже примере команды показано, как создать индекс с именем my-video-index с помощью API создания индекса. Сохраните имя индекса во временном расположении; Вам потребуется это в последующих шагах.

    Совет

    Более подробные инструкции по созданию индекса видео см. в статье "Извлечение видео" с помощью векторизации.

    Внимание

    Имя индекса видео может содержать до 24 символов, если это не GUID, который может быть 36 символов.

    curl.exe -v -X PUT "https://<YOUR_ENDPOINT_URL>/computervision/retrieval/indexes/my-video-index?api-version=2023-05-01-preview" -H "Ocp-Apim-Subscription-Key: <YOUR_SUBSCRIPTION_KEY>" -H "Content-Type: application/json" --data-ascii "
    {
      'metadataSchema': {
        'fields': [
          {
            'name': 'cameraId',
            'searchable': false,
            'filterable': true,
            'type': 'string'
          },
          {
            'name': 'timestamp',
            'searchable': false,
            'filterable': true,
            'type': 'datetime'
          }
        ]
      },
      'features': [
        {
          'name': 'vision',
          'domain': 'surveillance'
        },
        {
          'name': 'speech'
        }
      ]
    }"
    
  3. Добавьте видеофайлы в индекс со связанными метаданными. В приведенном ниже примере показано, как добавить два видеофайла в индекс с помощью URL-адресов SAS с ПОМОЩЬЮ API создания приема . Сохраните URL-адреса и documentId значения SAS в временном расположении. Их потребуется выполнить позже.

    curl.exe -v -X PUT "https://<YOUR_ENDPOINT_URL>/computervision/retrieval/indexes/my-video-index/ingestions/my-ingestion?api-version=2023-05-01-preview" -H "Ocp-Apim-Subscription-Key: <YOUR_SUBSCRIPTION_KEY>" -H "Content-Type: application/json" --data-ascii "
    {
      'videos': [
        {
          'mode': 'add',
          'documentId': '02a504c9cd28296a8b74394ed7488045',
          'documentUrl': 'https://example.blob.core.windows.net/videos/02a504c9cd28296a8b74394ed7488045.mp4?sas_token_here',
          'metadata': {
            'cameraId': 'camera1',
            'timestamp': '2023-06-30 17:40:33'
          }
        },
        {
          'mode': 'add',
          'documentId': '043ad56daad86cdaa6e493aa11ebdab3',
          'documentUrl': '[https://example.blob.core.windows.net/videos/043ad56daad86cdaa6e493aa11ebdab3.mp4?sas_token_here',
          'metadata': {
            'cameraId': 'camera2'
          }
        }
      ]
    }"
    
  4. После добавления видеофайлов в индекс начинается процесс приема. В зависимости от размера и количества файлов может потребоваться некоторое время. Чтобы убедиться, что прием завершен перед выполнением поисковых запросов, можно использовать API приема приема для проверки состояния. Дождитесь возвращения "state" = "Completed" этого вызова, прежде чем перейти к следующему шагу.

    curl.exe -v -X GET "https://<YOUR_ENDPOINT_URL>/computervision/retrieval/indexes/my-video-index/ingestions?api-version=2023-05-01-preview&$top=20" -H "ocp-apim-subscription-key: <YOUR_SUBSCRIPTION_KEY>"
    

Следующие шаги