Partilhar via


Use GPT-4 Turbo com Visã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. Incorpora processamento de linguagem natural e compreensão visual.

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

Gorjeta

Para usar o GPT-4 Turbo com Vision, você chama a API de conclusão de bate-papo em um modelo GPT-4 Turbo com visão que você implantou. Se você não estiver familiarizado com a API de conclusão de bate-papo, consulte o guia de instruções GPT-4 Turbo & GPT-4.

Atualização do modelo GPT-4 Turbo

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

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

Este é o substituto para os seguintes modelos de pré-visualização:

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

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

  • A versão OpenAI do mais recente 0409 modelo turbo suporta o modo JSON e a função chamando para todas as solicitações de inferência.
  • A versão mais recente turbo-2024-04-09 do Azure OpenAI atualmente não oferece suporte ao uso do modo JSON e da chamada 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) suportam o modo JSON e a chamada de função.

Diferenças do gpt-4 vision-preview

  • A integração de aprimoramentos de Visão específicos da IA do Azure com o GPT-4 Turbo com Visão não é suportada para gpt-4 a Versão: turbo-2024-04-09. Isso inclui Reconhecimento Ótico de Caracteres (OCR), aterramento de objetos, prompts de vídeo e processamento aprimorado de seus dados com imagens.

Importante

Os recursos de visualização de aprimoramentos de visão, incluindo Reconhecimento Ótico de Caracteres (OCR), aterramento de objetos, prompts de vídeo serão desativados e não estarão mais disponíveis quando gpt-4 Version: vision-preview for atualizado para turbo-2024-04-09. Se você estiver confiando em qualquer um desses recursos de visualização, essa atualização automática do modelo será uma grande mudança.

Disponibilidade gerenciada provisionada GPT-4 Turbo

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

Implantando o GPT-4 Turbo com o Vision GA

Para implantar o modelo GA a partir da interface do usuário do Studio, selecione GPT-4 e escolha a turbo-2024-04-09 versão no menu suspenso. A cota padrão para o gpt-4-turbo-2024-04-09 modelo será a mesma cota atual para GPT-4-Turbo. Consulte os limites das quotas regionais.

Chamar as APIs de conclusão de bate-papo

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 é a primeira vez que utiliza estes modelos programaticamente, recomendamos que comece com o nosso início rápido GPT-4 Turbo com Vision.

Enviar um pedido 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 seu recurso do Azure OpenAI
  • DEPLOYMENT_NAME é o nome do seu GPT-4 Turbo com implantação do modelo Vision

Cabeçalhos obrigatórios:

  • Content-Type: aplicação/json
  • api-key: {API_KEY}

Corpo: A seguir está um corpo de solicitação de amostra. O formato é o mesmo que a API de conclusão de chat para GPT-4, exceto que o conteúdo da mensagem pode ser uma matriz contendo texto e imagens (um URL HTTP ou HTTPS válido para uma imagem ou uma imagem codificada em base 64).

Importante

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

Importante

Ao carregar imagens, há um limite de 10 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 
} 

Gorjeta

Usar uma imagem local

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

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 da imagem base64 estiverem prontos, você poderá passá-los para a API no corpo da solicitação da seguinte forma:

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

Saída

A resposta da API deve ter a seguinte aparência.

{
    "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 resposta inclui um "finish_reason" campo. Tem os seguintes valores possíveis:

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

Configurações de parâmetros detalhados no processamento de imagem: Baixo, Alto, Automático

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

  • low Configuração: O modelo não ativa o modo "High Res", em vez disso, processa uma versão 512x512 de resolução mais baixa, resultando em respostas mais rápidas e consumo de token reduzido para cenários onde os detalhes finos não são cruciais.
  • high Configuração: O modelo ativa o modo "High Res". Aqui, o modelo inicialmente visualiza a imagem de baixa resolução e, em seguida, gera segmentos detalhados de 512x512 a partir 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 os tokens usados e os preços, consulte - O que é o Azure OpenAI? Tokens de imagem

Saída

As respostas de bate-papo que você recebe do modelo agora devem incluir informações aprimoradas sobre a imagem, como rótulos de objetos e caixas delimitadoras, e resultados de OCR. A resposta da API deve ter a seguinte aparência.

{
    "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 resposta inclui um "finish_reason" campo. Tem os seguintes valores possíveis:

  • stop: A API retornou a saída completa do modelo.
  • length: Saída do modelo incompleta devido ao max_tokens parâmetro de entrada ou ao limite de token 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 Azure AI Vision na mesma região que o recurso do Azure OpenAI 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 nomeado my-video-index usando a API Create Index . Salve o nome do índice em um local temporário; você precisará dele em etapas posteriores.

    Gorjeta

    Para obter instruções mais detalhadas sobre como criar um índice de vídeo, consulte Fazer 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 abaixo demonstra como adicionar dois arquivos de vídeo ao índice usando URLs SAS com a API Create Ingestion. Salve as URLs e documentId os valores SAS 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. Depois de adicionar arquivos de vídeo ao índice, o processo de ingestão é iniciado. Pode levar algum tempo, dependendo do tamanho e do número de arquivos. Para garantir que a ingestão esteja completa antes de realizar pesquisas, você pode usar a API Get Ingestion para verificar o status. Aguarde até que esta 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óximos passos