Compartir por


Usar GPT-4 Turbo con Visión

GPT-4 Turbo con Visión es un modelo multimodal grande (LMM) desarrollado por OpenAI que puede analizar imágenes y proporcionar respuestas textuales a preguntas sobre ellas. Incorpora tanto el procesamiento del lenguaje natural como la comprensión visual.

El modelo GPT-4 Turbo con Visión responde preguntas generales sobre lo que está presente en las imágenes.

Sugerencia

Para usar GPT-4 Turbo con Visión, llame a la API de finalización de chat en un modelo GPT-4 Turbo con Visión que haya implementado. Si no está familiarizado con API Chat Completion, consulte la guía paso a paso de GPT-4 Turbo y GPT-4.

Actualización del modelo GPT-4 Turbo

La versión más reciente de disponibilidad general de GPT-4 Turbo es:

  • gpt-4 Versión: turbo-2024-04-09

Este es el reemplazo de los siguientes modelos en versión preliminar:

  • gpt-4 Versión: 1106-Preview
  • gpt-4 Versión: 0125-Preview
  • gpt-4 Versión: vision-preview

Diferencias entre los modelos de disponibilidad general OpenAI y Azure OpenAI GPT-4 Turbo

  • La versión de OpenAI del último modelo turbo 0409 admite el modo JSON y la llamada a funciones para todas las solicitudes de inferencia.
  • La versión de Azure OpenAI de la turbo-2024-04-09 más reciente actualmente no admite el uso del modo JSON y la llamada a funciones al realizar solicitudes de inferencia con entrada de imagen (visión). Las solicitudes de entrada basadas en texto (solicitudes sin image_url e imágenes insertadas) admiten el modo JSON y las llamadas a funciones.

Diferencias de gpt-4 vision-preview

  • Las mejoras específicas de Visión de Azure AI con GPT-4 Turbo con Visión no se admiten para la gpt-4 Versión: turbo-2024-04-09. Esto incluye el reconocimiento óptico de caracteres (OCR), la conexión a tierra de objetos, las indicaciones de vídeo y un mejor tratamiento de sus datos con imágenes.

Disponibilidad administrada aprovisionada por GPT-4 Turbo

  • gpt-4 Versión: turbo-2024-04-09 está disponible para implementaciones estándar y aprovisionadas. Actualmente, la versión aprovisionada de este modelo no admite solicitudes de inferencia de imagen/visión. Las implementaciones aprovisionadas de este modelo solo aceptan entradas de texto. Las implementaciones de modelos estándar aceptan solicitudes de inferencia de texto e imagen/visión.

Implementación de GPT-4 Turbo con disponibilidad general de Vision

Para implementar el modelo de disponibilidad general en la interfaz de usuario de Studio, seleccione GPT-4 y elija la versión de turbo-2024-04-09 en el menú desplegable. La cuota predeterminada para el modelo gpt-4-turbo-2024-04-09 será la misma que la cuota actual para GPT-4-Turbo. Consulte los límites de cuota regionales.

Llame a las API de finalización de chat

El siguiente comando muestra la forma más básica de utilizar el modelo GPT-4 Turbo con Visión con código. Si es la primera vez que utiliza estos modelos mediante programación, le recomendamos comenzar con nuestro inicio rápido de GPT-4 Turbo con Visión.

Enviar una solicitud POST a https://{RESOURCE_NAME}.openai.azure.com/openai/deployments/{DEPLOYMENT_NAME}/chat/completions?api-version=2024-02-15-preview donde

  • RESOURCE_NAME es el nombre del recurso de Azure OpenAI
  • DEPLOYMENT_NAME es el nombre de la implementación de modelo GPT-4 Turbo con Visión

Encabezados obligatorios:

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

Cuerpo: a continuación se muestra un cuerpo de solicitud de ejemplo. El formato es el mismo que el de la API de finalización de chat para GPT-4, excepto que el contenido del mensaje puede ser una matriz que contenga texto e imágenes (ya sea una URL HTTP o HTTPS a una imagen, o bien una imagen codificada en base 64).

Importante

Recuerde establecer un valor "max_tokens" o se cortará la salida de retorno.

Importante

Al cargar imágenes, hay un límite de 10 imágenes por solicitud de chat.

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

Sugerencia

Uso de una imagen local

Si desea utilizar una imagen local, use el siguiente código de Python para convertirla a base 64 y poder pasarla a la API. Las herramientas de conversión de archivos alternativas están disponibles en línea.

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)

Cuando los datos de la imagen en base 64 estén listos, páselos a la API en el cuerpo de la solicitud de la siguiente manera:

...
"type": "image_url",
"image_url": {
   "url": "data:image/jpeg;base64,<your_image_data>"
}
...

Output

La respuesta de la API debe ser similar a la siguiente.

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

Cada respuesta incluye un campo "finish_reason". Tiene los siguientes valores posibles:

  • stop: la API devolvió la salida completa del modelo.
  • length: salida incompleta del modelo debido al parámetro de entrada max_tokens o al límite de tokens del modelo.
  • content_filter: contenido omitido debido a una marca de nuestros filtros de contenido.

Configuración de parámetros de detalle en el procesamiento de imágenes: baja, alta y automática

El parámetro detalle del modelo ofrece tres opciones: low, high o auto, para ajustar la forma en que el modelo interpreta y procesa imágenes. La configuración predeterminada es automática, en la que el modelo decide entre baja o alta en función del tamaño de la entrada de la imagen.

  • Configuración low: el modelo no activa el modo "alta resolución", sino que procesa una versión de resolución 512x512 más baja, lo que da lugar a respuestas más rápidas y a un menor consumo de tokens para escenarios en los que los detalles finos no son cruciales.
  • Configuración high: el modelo activa el modo "alta resolución". Aquí, el modelo ve inicialmente la imagen de baja resolución y, a continuación, genera segmentos detallados de 512x512 a partir de la imagen de entrada. Cada segmento usa el doble del presupuesto del token, lo que permite una interpretación más detallada de la imagen.

Para más información sobre cómo afectan los parámetros de imagen a los tokens usados y los precios, consulte : ¿Qué es OpenAI? Tokens de imagen con GPT-4 Turbo con Visión

Output

Las respuestas de chat que reciba del modelo ahora deberían incluir información mejorada sobre la imagen, como etiquetas de objetos y cuadros delimitadores, y resultados de OCR. La respuesta de la API debe ser similar a la siguiente.

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

Cada respuesta incluye un campo "finish_reason". Tiene los siguientes valores posibles:

  • stop: la API devolvió la salida completa del modelo.
  • length: salida incompleta del modelo debido al parámetro de entrada max_tokens o al límite de tokens del modelo.
  • content_filter: contenido omitido debido a una marca de nuestros filtros de contenido.

Creación de un índice de recuperación de vídeo

  1. Obtenga un recurso de Visión de Azure AI en la misma región que el recurso de Azure OpenAI que usa.

  2. Cree un índice para almacenar y organizar los archivos de vídeo y sus metadatos. En el siguiente comando de ejemplo se muestra cómo crear un índice denominado my-video-index mediante la API Crear un índice. Guarde el nombre del índice en una ubicación temporal; lo necesitará más adelante.

    Sugerencia

    Para obtener instrucciones más detalladas sobre cómo crear un índice de vídeo, consulte Recuperación de vídeo mediante vectorización.

    Importante

    Un nombre de índice de vídeo puede tener hasta 24 caracteres, a menos que sea un GUID, que puede tener 36 caracteres.

    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. Agregue archivos de vídeo al índice con sus metadatos asociados. En el ejemplo siguiente se muestra cómo agregar dos archivos de vídeo al índice mediante direcciones URL de SAS con la API Crear ingesta. Guarde las direcciones URL de SAS y los valores documentId en una ubicación temporal; los necesitará más adelante.

    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. Después de agregar archivos de vídeo al índice, se inicia el proceso de ingesta. Puede tardar algún tiempo en función del tamaño y el número de archivos. Para asegurarse de que la ingesta se ha completado antes de realizar búsquedas, puede usar la API Obtener ingesta para comprobar el estado. Espere a que esta llamada devuelva "state" = "Completed" antes de continuar con el siguiente paso.

    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>"
    

Pasos siguientes