Condividi tramite


Usare GPT-4 Turbo con Visione

GPT-4 Turbo con Visione è un grande modello granulare (LMM) sviluppato da OpenAI in grado di analizzare le immagini e fornire risposte testuali a domande su di essi. Incorpora sia l'elaborazione del linguaggio naturale che la comprensione visiva.

Il modello GPT-4 Turbo con Vision risponde a domande generiche sui contenuti presenti nelle immagini.

Suggerimento

Per usare GPT-4 Turbo con Visione, chiamare l'API Completamento chat in un modello GPT-4 Turbo con Visione distribuito. Se non si ha familiarità con l'API Completamento chat, vedere la Guida pratica di GPT-4 Turbo e GPT-4.

Aggiornamento del modello GPT-4 Turbo

La versione con disponibilità generale più recente di GPT-4 Turbo è:

  • gpt-4 Versione: turbo-2024-04-09

Questa è la sostituzione per i modelli di anteprima seguenti:

  • gpt-4 Versione: 1106-Preview
  • gpt-4 Versione: 0125-Preview
  • gpt-4 Versione: vision-preview

Differenze tra i modelli OpenAI e Azure OpenAI GPT-4 Turbo GA

  • La versione di OpenAI del modello turbo 0409 più recente supporta la modalità JSON e la chiamata di funzione per tutte le richieste di inferenza.
  • La versione di OpenAI di Azure dell'ultima turbo-2024-04-09 attualmente non supporta l'uso della modalità JSON e della chiamata di funzione quando si effettuano richieste di inferenza con input di immagine (visione). Le richieste di input basate su testo (richieste senza image_url e immagini inline) supportano la modalità JSON e le chiamate di funzione.

Differenze rispetto a gpt-4 vision-preview

  • L'integrazione dei miglioramenti specifici di Visione di Azure per intelligenza artificiale con GPT-4 Turbo con Visione non è supportata per la gpt-4 Versione: turbo-2024-04-09. Sono inclusi il riconoscimento ottico dei caratteri (OCR), il grounding degli oggetti, le richieste video e una migliore gestione dei dati con le immagini.

Importante

Le funzionalità di anteprima dei miglioramenti della visione, tra cui riconoscimento ottico dei caratteri (OCR), grounding di oggetti e le richieste video, verranno ritirate e non saranno più disponibili dopo l'aggiornamento di gpt-4 Versione: vision-preview a turbo-2024-04-09. Se attualmente si fa affidamento su una di queste funzionalità di anteprima, questo aggiornamento automatico del modello sarà una modifica che causa un'interruzione.

Disponibilità gestita con provisioning di GPT-4 Turbo

  • gpt-4 Versione: turbo-2024-04-09 è disponibile sia per le distribuzioni standard che per le distribuzioni con provisioning. Attualmente la versione con provisioning di questo modello non supporta le richieste di inferenza di immagini/visione. Le distribuzioni con provisioning di questo modello accettano solo input di testo. Le distribuzioni di modelli standard accettano richieste di inferenza di testo e immagine/visione.

Distribuzione della disponibilità generale di GPT-4 Turbo con Visione

Per distribuire il modello con disponibilità generale dall'interfaccia utente di Studio, selezionare GPT-4 e quindi scegliere la versione turbo-2024-04-09 dal menu a discesa. La quota predefinita per il modello di gpt-4-turbo-2024-04-09 corrisponderà alla quota corrente per GPT-4-Turbo. Vedere i limiti di quota a livello di area.

Chiamare le API Completamento chat

Il comando seguente illustra il modo più semplice per usare il modello GPT-4 Turbo con Visione con codice. Se questa è la prima volta che si usano questi modelli a livello di codice, è consigliabile iniziare con la Guida introduttiva a GPT-4 Turbo con Visione.

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

  • RESOURCE_NAME è il nome della risorsa OpenAI di Azure
  • DEPLOYMENT_NAME è il nome della distribuzione del modello GPT-4 Turbo con Visione

Intestazioni richieste:

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

Corpo: di seguito è riportato un corpo della richiesta di esempio. Il formato è uguale all'API di completamento della chat per GPT-4, ad eccezione del fatto che il contenuto del messaggio può essere una matrice contenente testo e immagini (un URL HTTP o HTTPS valido per un'immagine o un'immagine con codifica base-64).

Importante

Ricordarsi di impostare un valore "max_tokens" oppure l'output restituito verrà tagliato.

Importante

Quando si caricano immagini, è previsto un limite di 10 immagini per ogni richiesta di 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 
} 

Suggerimento

Usare un'immagine locale

Se si vuole usare un'immagine locale, è possibile usare il codice Python seguente per convertirlo in base64 in modo che possa essere passato all'API. Gli strumenti di conversione file alternativi sono disponibili 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 i dati delle immagini base64 sono pronti, è possibile passarli all'API nel corpo della richiesta, nel modo seguente:

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

Output

La risposta API dovrebbe essere simile alla seguente.

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

Ogni risposta include un campo "finish_reason" e include i valori possibili seguenti:

  • stop: l'API ha restituito l'output completo del modello.
  • length: output del modello incompleto a causa del parametro di input max_tokens o del limite di token del modello.
  • content_filter: contenuto omesso a causa di un flag dai filtri di contenuto.

Impostazioni dei parametri dettagli nell'elaborazione delle immagini: Basso, Alto, Automatico

Il parametro dettaglio nel modello offre tre opzioni: low, high o auto, per regolare il modo in cui il modello interpreta ed elabora le immagini. L'impostazione predefinita è automatica e il modello decide tra livello basso o alto in base alle dimensioni dell'input dell'immagine.

  • Impostazione low: il modello non attiva la modalità "alta risoluzione", ma elabora invece una versione alla risoluzione inferiore di 512x512, ottenendo risposte più rapide e un consumo ridotto di token per gli scenari in cui i dettagli non sono cruciali.
  • Impostazione high: il modello attiva la modalità "alta risoluzione". In questo caso, il modello visualizza inizialmente l'immagine a bassa risoluzione e quindi genera segmenti dettagliati a risoluzione 512x512 dall'immagine di input. Ogni segmento usa il doppio del budget del token, consentendo un'interpretazione più dettagliata dell'immagine".

Per informazioni dettagliate su come i parametri dell'immagine influisce sui token usati e sui prezzi, vedere Informazioni su OpenAI di Azure? Token immagine

Output

Le risposte di chat ricevute dal modello dovrebbero ora includere informazioni avanzate sull'immagine, ad esempio etichette degli oggetti, rettangoli delimitatori e risultati OCR. La risposta API dovrebbe essere simile alla seguente.

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

Ogni risposta include un campo "finish_reason" e include i valori possibili seguenti:

  • stop: l'API ha restituito l'output completo del modello.
  • length: output del modello incompleto a causa del parametro di input max_tokens o del limite di token del modello.
  • content_filter: contenuto omesso a causa di un flag dai filtri di contenuto.

Creare un indice di recupero video

  1. Ottenere una risorsa di Visione artificiale di Azure nella stessa area della risorsa OpenAI di Azure in uso.

  2. Creare un indice per archiviare e organizzare i file video e i relativi metadati. Il comando di esempio seguente mostra come creare un indice denominato my-video-index tramite l'API Crea indice. Salvare il nome dell'indice in una posizione temporanea; sarà necessario nei passaggi successivi.

    Suggerimento

    Per istruzioni più dettagliate sulla creazione di un indice video, vedere Eseguire il recupero video usando la vettorializzazione.

    Importante

    Un nome di indice video può contenere fino a 24 caratteri, a meno che non si tratti di un GUID, che può essere di 36 caratteri.

    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. Aggiungere file video all'indice con i metadati associati. L'esempio seguente illustra come aggiungere due file video all'indice usando gli URL di firma di accesso condiviso con l'API Crea inserimento. Salvare gli URL di firma di accesso condiviso e i valori documentId in una posizione temporanea; saranno necessari nei passaggi successivi.

    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. Dopo aver aggiunto file video all'indice, viene avviato il processo di inserimento. L'operazione potrebbe richiedere del tempo a seconda delle dimensioni e del numero di file. Per assicurarsi che l'inserimento sia completo prima di eseguire ricerche, è possibile usare l'API Get Ingestion per controllare lo stato. Attendere che la chiamata restituisca "state" = "Completed" prima di procedere al passaggio successivo.

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

Passaggi successivi