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 senzaimage_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/jsonapi-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 inputmax_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 inputmax_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
Ottenere una risorsa di Visione artificiale di Azure nella stessa area della risorsa OpenAI di Azure in uso.
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' } ] }"
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' } } ] }"
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>"