Compartilhar via


Usar o GPT-4 Turbo with Vision

O GPT-4 Turbo with Vision é um grande modelo multimodal (LMM) desenvolvido pela OpenAI que pode analisar imagens e fornecer respostas textuais a perguntas sobre elas. Ele incorpora o processamento de linguagem natural e a compreensão visual.

O modelo GPT-4 Turbo com Visão responde a perguntas gerais sobre o que está presente nas imagens.

Dica

Para usar o GPT-4 Turbo com a Visão, chame a API de Conclusão de Chat em um modelo GPT-4 Turbo with Vision implantado. Se você não estiver familiarizado com a API de Conclusão de Chat, consulte o Guia de instruções do GPT-4 Turbo e GPT-4.

Upgrade do modelo GPT-4 Turbo

A última versão GA do GPT-4 Turbo é:

  • gpt-4 Versão: turbo-2024-04-09

Essa é a substituição dos seguintes modelos de versão prévia:

  • gpt-4 Versão: 1106-Preview
  • gpt-4 Versão: 0125-Preview
  • gpt-4 Versão: vision-preview

Diferenças entre os modelos OpenAI e Azure OpenAI GPT-4 Turbo GA

  • A versão mais recente do modelo turbo 0409 do OpenAI suporta o modo JSON e chamadas de função para todas as solicitações de inferência.
  • A versão do OpenAI do Azure do turbo-2024-04-09 mais recente no momento não dá suporte ao uso do modo JSON e chamadas de função ao fazer solicitações de inferência com entrada de imagem (visão). As solicitações de entrada baseadas em texto (solicitações sem image_url e imagens embutidas) dão suporte ao modo JSON e à chamada de função.

Diferenças do gpt-4 vision-preview

  • A integração de aprimoramentos específicos do IA do Azure Vision com GPT-4 Turbo com Vision não é suportada para gpt-4 Versão: turbo-2024-04-09. Isso inclui Reconhecimento Óptico de Caracteres (OCR), ancoragem de objetos, solicitações de vídeo e melhor manuseio dos seus dados com imagens.

Disponibilidade gerenciada provisionada do GPT-4 Turbo

  • gpt-4 Versão: turbo-2024-04-09 está disponível para implantações padrão e provisionadas. Atualmente, a versão provisionada deste modelo não dá suporte a solicitações de inferência de imagem/visão. As implantações provisionadas deste modelo aceitam apenas a entrada de texto. As implantações de modelo Standard aceitam solicitações de inferência de texto e imagem/visão.

Implantar o GPT-4 Turbo com Visão GA

Para implantar o modelo GA na interface do usuário do Estúdio, selecione GPT-4 e escolha a versão turbo-2024-04-09 no menu suspenso. A cota padrão para o modelo gpt-4-turbo-2024-04-09 será a mesma da cota atual para o GPT-4-Turbo. Consulte os limites de cota regional.

Chamar as APIs de Conclusão de Chat

O comando a seguir mostra a maneira mais básica de usar o modelo GPT-4 Turbo com Visão com código. Se esta for sua primeira vez usando esses modelos programaticamente, recomendamos começar com nosso início rápido do GPT-4 Turbo with Vision.

Enviar uma solicitação POST para https://{RESOURCE_NAME}.openai.azure.com/openai/deployments/{DEPLOYMENT_NAME}/chat/completions?api-version=2024-02-15-preview onde

  • RESOURCE_NAME é o nome do recurso do Azure OpenAI
  • DEPLOYMENT_NAME é o nome da implantação do modelo GPT-4 Turbo with Vision

Cabeçalhos necessários:

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

Corpo: o seguinte é um corpo de solicitação de exemplo. O formato é o mesmo da API de conclusões de chat para GPT-4, exceto pelo fato de que o conteúdo da mensagem pode ser uma matriz contendo texto e imagens (uma URL HTTP ou HTTPS válida para uma imagem ou uma imagem codificada em base 64).

Importante

Lembre-se de definir um valor "max_tokens", caso contrário, a saída de retorno será cortada.

Importante

Ao carregar imagens, há um limite de dez imagens por solicitação 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 
} 

Dica

Usar uma imagem local

Se você quiser usar uma imagem local, poderá usar o seguinte código Python para convertê-la em base64 para que ela possa ser passada para a API. Ferramentas alternativas de conversão de arquivo estão disponíveis online.

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)

Quando os dados de imagem base64 estiverem prontos, você poderá passá-los para a API no corpo da solicitação da seguinte maneira:

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

Saída

A resposta da API deve ser semelhante à seguinte.

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

Todas as respostas incluem um campo "finish_reason". Tem os seguintes valores possíveis:

  • stop: a API retornou a saída completa do modelo.
  • length: saída do modelo incompleta devido ao parâmetro de entrada max_tokens ou limite de tokens do modelo.
  • content_filter: conteúdo omitido devido a um sinalizador dos nossos filtros de conteúdo.

Detalhar as configurações de parâmetro no processamento de imagens: Baixo, Alto, Automático

O parâmetro detail no modelo oferece três opções: low, high ou auto, para ajustar a maneira como o modelo interpreta e processa imagens. A configuração padrão é automática, em que o modelo decide entre baixo ou alto com base no tamanho da entrada da imagem.

  • Configuração low: o modelo não ativa o modo "altas res", em vez disso, processa uma versão de resolução 512x512 mais baixa, resultando em respostas mais rápidas e redução do consumo de token para cenários em que detalhes finos não são cruciais.
  • Configuração high: o modelo ativa o modo "altas res". Aqui, o modelo exibe inicialmente a imagem de baixa resolução e, em seguida, gera segmentos detalhados de 512 x 512 da imagem de entrada. Cada segmento usa o dobro do orçamento do token, permitindo uma interpretação mais detalhada da imagem."

Para obter detalhes sobre como os parâmetros de imagem afetam tokens usados e preços, consulte – O que é OpenAI? Tokens de imagem com GPT-4 Turbo com Visão

Saída

As respostas de chat recebidas do modelo agora devem incluir informações aprimoradas sobre a imagem, como rótulos de objeto e caixas delimitadoras, e resultados do OCR. A resposta da API deve ser semelhante à seguinte.

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

Todas as respostas incluem um campo "finish_reason". Tem os seguintes valores possíveis:

  • stop: a API retornou a saída completa do modelo.
  • length: saída do modelo incompleta devido ao parâmetro de entrada max_tokens ou limite de tokens do modelo.
  • content_filter: conteúdo omitido devido a um sinalizador dos nossos filtros de conteúdo.

Criar um índice de recuperação de vídeo

  1. Obtenha um recurso do Visão de IA do Azure na mesma região que o recurso do OpenAI do Azure que você está usando.

  2. Crie um índice para armazenar e organizar os arquivos de vídeo e seus metadados. O comando de exemplo abaixo demonstra como criar um índice chamado my-video-index usando a API Criar Índice. Salve o nome do índice em um local temporário; você precisará dele em etapas posteriores.

    Dica

    Para obter instruções mais detalhadas sobre como criar um índice de vídeo, confira Recuperação de vídeo usando vetorização.

    Importante

    Um nome de índice de vídeo pode ter até 24 caracteres, a menos que seja um GUID, que pode ter 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. Adicione arquivos de vídeo ao índice com seus metadados associados. O exemplo a seguir demonstra como adicionar dois arquivos de vídeo ao índice usando URLs SAS com a API Criar Ingestão. Salve as URLs da SAS e os valores documentId em um local temporário; você precisará deles em etapas posteriores.

    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. Após você adicionar arquivos de vídeo ao índice, o processo de ingestão será iniciado. Isso pode levar algum tempo, dependendo do tamanho e do número de arquivos. Para garantir que a ingestão seja concluída antes de executar pesquisas, você pode usar a API Obter Ingestão para verificar o status. Aguarde até que essa chamada retorne "state" = "Completed" antes de prosseguir para a próxima etapa.

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

Próximas etapas