Créer une API de Chat avec Reconnaissance d'Image (Streaming / Non-streaming)
Cette API prend en charge les entrées multimodales, permettant aux utilisateurs d'envoyer du texte ainsi que des URL d'images dans la conversation. Le modèle génère des réponses correspondantes basées sur le prompt (invite) et le contenu de l'image fournis. La sortie en continu (Streaming) est prise en charge pour offrir une expérience d'interaction plus fluide.
- URL de l'API :
https://api.codingplanx.ai/v1/chat/completions - Méthode de requête :
POST - Référence officielle : OpenAI Chat Completion API
Paramètres de la requête
Paramètres d'en-tête (Header)
| Nom du paramètre | Requis | Type | Valeur d'exemple | Description |
|---|---|---|---|---|
| Content-Type | Oui | string | application/json | Format du corps de la requête |
| Accept | Oui | string | application/json | Format de la réponse |
| Authorization | Non | string | Bearer {{YOUR_API_KEY}} | Clé API utilisée pour l'authentification |
Paramètres du corps (Body)
| Nom du paramètre | Type | Requis | Valeur par défaut | Description |
|---|---|---|---|---|
| model | string | Oui | - | ID du modèle utilisé (ex. gpt-4o, gpt-4-vision-preview). |
| messages | array | Oui | - | Liste des messages de la conversation à ce jour. Voir la structure messages ci-dessous. |
| stream | boolean | Non | false | Active la sortie en continu. Si activé, des événements Server-Sent Events (SSE) seront envoyés. |
| temperature | number | Non | 1 | Température d'échantillonnage (0-2). Plus elle est élevée, plus le résultat est aléatoire ; plus elle est basse, plus il est déterministe. |
| top_p | number | Non | 1 | Probabilité d'échantillonnage de noyau (nucleus). Il est recommandé de modifier soit ceci, soit temperature, mais pas les deux en même temps. |
| max_tokens | integer | Non | inf | Nombre maximum de tokens générés dans la complétion du chat. |
| n | integer | Non | 1 | Nombre de complétions à générer pour chaque message d'entrée. |
| presence_penalty | number | Non | 0 | (De -2.0 à 2.0) Des valeurs positives augmentent la probabilité que le modèle aborde de nouveaux sujets. |
| frequency_penalty | number | Non | 0 | (De -2.0 à 2.0) Des valeurs positives diminuent la probabilité que le modèle répète les mêmes mots. |
| response_format | object | Non | - | Spécifie le format de sortie, par exemple {"type": "json_object"}. |
| stop | string/array | Non | null | Séquence (jusqu'à 4) où l'API arrêtera de générer des tokens. |
| user | string | Non | - | Identifiant unique de l'utilisateur final, utilisé pour surveiller et prévenir les abus. |
Structure de l'objet messages
Chaque élément de la liste des messages contient les champs suivants :
role: (string) Rôle, options disponibles :system,user,assistant,tool.content: (string ou array) Contenu du message.- En mode reconnaissance d'image,
contentest un tableau (array) contenant des objets de typetextetimage_url.
- En mode reconnaissance d'image,
Exemple de requête
Requête mixte Texte et Image (JSON)
{
"model": "gpt-4o",
"messages": [
{
"role": "system",
"content": "Vous êtes un assistant professionnel en analyse d'images."
},
{
"role": "user",
"content": [
{
"type": "text",
"text": "Que contient cette image ? Veuillez la décrire en détail."
},
{
"type": "image_url",
"image_url": {
"url": "https://example.com/image.png"
}
}
]
}
],
"stream": true
}
Description de la réponse
Réponse non-streaming (stream: false)
| Nom du paramètre | Type | Description |
|---|---|---|
| id | string | Identifiant unique pour cette requête. |
| object | string | Type d'objet, généralement chat.completion. |
| created | integer | Horodatage de création (en secondes). |
| choices | array | Liste des choix générés par le modèle. |
| choices[n].message | object | Objet message retourné par le modèle (contenant role et content). |
| choices[n].finish_reason | string | Raison de l'arrêt (ex. stop, length). |
| usage | object | Statistiques d'utilisation des tokens. |
Exemple de réponse
{
"id": "chatcmpl-123",
"object": "chat.completion",
"created": 1677652288,
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Cette image montre un lac paisible avec une chaîne de montagnes en arrière-plan."
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 120,
"completion_tokens": 35,
"total_tokens": 155
}
}
Réponse en streaming (stream: true)
Lorsque stream est configuré sur true, l'API renvoie text/event-stream. Chaque ligne commence par data: , suivi d'une chaîne JSON. Le tout dernier message est data: [DONE].
FAQ (Foire Aux Questions)
Q1 : Comment puis-je uploader une image directement au lieu d'utiliser une URL ?
R : Cette API prend principalement en charge les URL d'images. Si vous n'avez que des images locales, il est recommandé de les uploader d'abord sur votre hébergeur d'images ou un stockage objet (OSS), ou de convertir l'image en une chaîne codée en Base64 au format data:image/jpeg;base64,{base64_encode_data} et de la placer dans le champ url.
Q2 : Pourquoi ma requête en streaming ne renvoie-t-elle pas les statistiques usage ?
R : Dans le protocole de streaming standard compatible OpenAI, usage n'est généralement renvoyé que dans le dernier bloc de données ou en configurant un paramètre spécial stream_options. Veuillez vérifier si la version de votre modèle prend en charge le renvoi du comptage des tokens dans le flux (stream).
Q3 : Quelles sont les restrictions de taille et de format pour la reconnaissance d'image ?
R : Généralement, les formats PNG, JPEG, WEBP et GIF (non animés) sont pris en charge. Il est recommandé que la taille de l'image ne dépasse pas 20 Mo. Pour obtenir les meilleurs résultats de reconnaissance, une résolution supérieure à 512x512 est recommandée.
Q4 : Que dois-je faire si ma requête renvoie l'erreur "401 Unauthorized" ?
R : Assurez-vous d'avoir correctement transmis le champ Authorization dans l'en-tête (Header), au format Bearer suivi de votre CLÉ API (API KEY), et vérifiez que la clé est valide et que le solde de votre compte est suffisant.
Q5 : Le paramètre temperature affecte-t-il la reconnaissance d'image ?
R : Oui. Le paramètre temperature influence la créativité linguistique du modèle lors de la description de l'image. Si vous avez besoin d'une description très objective et rigoureuse, il est recommandé de définir une valeur faible (ex. 0.2) ; si vous souhaitez une description plus vivante et intéressante, vous pouvez définir une valeur plus élevée (ex. 0.8).
Q6 : Comment traiter la reconnaissance de plusieurs images ?
R : Vous pouvez placer plusieurs objets de type image_url dans le tableau messages.content. Le modèle essaiera de comprendre le contenu de toutes ces images simultanément.