Partager via


Utiliser des modèles de conversation compatible à la vision

Les modèles de chat basés sur la vision sont de grands modèles multimodaux (LMM) développés par OpenAI qui peuvent analyser des images et fournir des réponses textuelles aux questions qui leur sont posées. Ils incorporent à la fois le traitement du langage naturel et la compréhension visuelle. Les modèles de vision actuels sont les modèles de raisonnement de série o, les modèles de série GPT-4.1, GPT-4.5, GPT-4o et GPT-4 Turbo avec Vision.

Les modèles compatibles à la vision peuvent répondre à des questions générales sur les éléments présents dans les images que vous chargez.

Conseil / Astuce

Pour utiliser des modèles compatibles à la vision, vous appelez l’API de saisie automatique de conversation sur un modèle pris en charge que vous avez déployé. Si vous ne connaissez pas bien l’API de saisie semi-automatique de conversation, consultez le Guide pratique de conversation compatible à la vision.

Appeler les API de saisie semi-automatique de conversation

La commande suivante montre la manière la plus élémentaire d’utiliser un modèle de conversation compatible à la vision en utilisant du code. Si c’est la première fois que vous utilisez ces modèles de façon programmatique, nous vous recommandons de commencer par lire notre guide de Démarrage rapide sur les conversations avec des images.

Envoyez une requête POST à https://{RESOURCE_NAME}.openai.azure.com/openai/deployments/{DEPLOYMENT_NAME}/chat/completions?api-version=2024-02-15-preview

  • RESOURCE_NAME est le nom de votre ressource Azure OpenAI
  • DEPLOYMENT_NAME est le nom de votre modèle de déploiement

En-têtes obligatoires :

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

Corps : voici un exemple de corps de la demande. Le format est le même que celui de l’API de saisie semi-automatique de conversation pour GPT-4, sauf que le contenu du message peut être un tableau contenant du texte et des images (soit une URL HTTP ou HTTPS valide vers une image, soit une image encodée en base 64).

Important

N’oubliez pas de définir une valeur "max_tokens" ou la sortie de retour sera coupée.

Important

Lors du chargement d’images, il existe une limite de 10 images par requête de conversation.

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

Conseil / Astuce

Utiliser une image locale

Si vous souhaitez utiliser une image locale, vous pouvez utiliser le code Python suivant pour la convertir en base64 afin qu’elle puisse être transmise à l’API. D’autres outils de conversion de fichiers sont disponibles en ligne.

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)

Lorsque vos données d’image base64 sont prêtes, vous pouvez les transmettre à l’API dans le corps de la demande, comme suit :

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

Paramètres des paramètres de détail

Vous pouvez éventuellement définir un "detail" paramètre dans le "image_url" champ. Choisissez l’une des trois valeurs, lowou high, ou autopour ajuster la façon dont le modèle interprète et traite les images.

  • auto paramètre : paramètre par défaut. Le modèle décide entre faible ou élevé en fonction de la taille de l’entrée d’image.
  • Paramètre low : le modèle n’active pas le mode « résolution élevée ». Il traite plutôt une version de résolution inférieure de 512x512, ce qui entraîne des réponses plus rapides et une consommation de jeton réduite pour les scénarios où les détails précis ne sont pas essentiels.
  • Paramètre high : le modèle active le mode « résolution élevée ». Ici, le modèle affiche initialement l’image à faible résolution, puis il génère des segments détaillés 512x512 à partir de l’image d’entrée. Chaque segment utilise deux fois le budget du jeton, ce qui permet une interprétation plus détaillée de l’image.

Vous définissez la valeur à l’aide du format indiqué dans cet exemple :

{ 
    "type": "image_url",
    "image_url": {
        "url": "<image URL>",
        "detail": "high"
    }
}

Pour plus d’informations sur l’impact des paramètres d’image sur les jetons utilisés et les tarifs, consultez Qu’est-ce qu’Azure OpenAI ? Jetons d’images

Sortie

La réponse de l’API doit ressembler à ce qui suit.

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

Chaque réponse inclut un champ "finish_reason". Il contient les valeurs possibles suivantes :

  • stop : l’API a retourné la sortie complète du modèle.
  • length : sortie de modèle incomplète en raison du paramètre d’entrée max_tokens ou de la limite de jetons du modèle.
  • content_filter : contenu omis en raison d’un signalement par nos filtres de contenu.

Sortie

Les réponses de conversation que vous recevez du modèle devraient maintenant inclure des informations améliorées sur l’image, telles que les étiquettes d’objet et les cadres englobants, ainsi que les résultats de l’OCR. La réponse de l’API doit ressembler à ce qui suit.

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

Chaque réponse inclut un champ "finish_reason". Il contient les valeurs possibles suivantes :

  • stop : l’API a retourné la sortie complète du modèle.
  • length : sortie de modèle incomplète en raison du paramètre d’entrée max_tokens ou de la limite de jetons du modèle.
  • content_filter : contenu omis en raison d’un signalement par nos filtres de contenu.

Mise à niveau d’un modèle GPT-4 Turbo

La dernière version en disponibilité générale de GPT-4 Turbo est :

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

Il s’agit du remplacement des modèles en préversion suivants :

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

Différences entre les modèles OpenAI et Azure OpenAI GPT-4 Turbo GA

  • La version d’OpenAI du dernier modèle 0409 Turbo prend en charge le mode JSON et l’appel de fonction pour toutes les requêtes d’inférence.
  • La version d’Azure OpenAI du dernier turbo-2024-04-09 ne prend actuellement pas en charge l’utilisation du mode JSON et l’appel de fonction lors de l’exécution de requêtes d’inférence avec une entrée d’image (vision). Les requêtes d’entrée basées sur du texte (requêtes sans image_url et images incluses) prennent par contre en charge le mode JSON et l’appel de fonction.

Différences par rapport à gpt-4 vision-preview

  • L’intégration des améliorations de Vision propres à Azure AI à GPT-4 Turbo avec Vision n’est pas prise en charge pour gpt-4Version :turbo-2024-04-09. Cela inclut la reconnaissance optique de caractères (OCR), l’ancrage d’objets, les invites vidéo et la gestion améliorée de vos données avec des images.

Important

Les fonctionnalités en préversion des améliorations de Vision, notamment la reconnaissance optique de caractères (OCR), l'ancrage des objets, les invites vidéo, seront supprimées et ne seront plus disponibles une fois que la version gpt-4 : vision-preview aura été mise à niveau vers turbo-2024-04-09. Si vous utilisez actuellement l’une de ces fonctionnalités en aperçu, cette mise à niveau automatique du modèle sera un changement radical.

Disponibilité planifiée et gérée de GPT-4 Turbo

  • gpt-4Version:turbo-2024-04-09 est disponible pour les déploiements standard et provisionnés. Actuellement, la version approvisionnée de ce modèle ne prend pas en charge les requêtes d’inférence d’image/vision. Les déploiements approvisionnés de ce modèle acceptent uniquement les entrées de texte. Les déploiements de modèles standard acceptent les requêtes d’inférence de texte et d’image/vision.

Déploiement de GPT-4 Turbo avec Vision GA

Pour déployer le modèle en disponibilité générale à partir du portail Azure AI Foundry, sélectionnez GPT-4, puis choisissez la version turbo-2024-04-09 dans le menu déroulant. Le quota par défaut pour le modèle gpt-4-turbo-2024-04-09 est le même que le quota actuel pour GPT-4-Turbo. Voir les limites de quota régionales.