Invitez des amis et gagnez des tokens gratuits !En savoir plus

Créer une Complétion de Chat avec Reconnaissance d'Image (Streaming) Base64

Description de l'API : Étant donné un prompt, le modèle renverra une ou plusieurs complétions prédites, et peut également renvoyer les probabilités des tokens alternatifs à chaque position. Cette API est principalement utilisée pour créer des complétions de conversation intégrant la reconnaissance d'image (via Base64) et des prompts textuels.

Référence Officielle : Documentation de l'API OpenAI


Détails de l'API

  • Méthode de requête : POST
  • URL de la requête : https://api.codingplanx.ai/v1/chat/completions
  • Format des données : application/json

En-têtes de la Requête (Request Headers)

Nom du paramètreRequisTypeValeur d'exempleDescription
Content-TypeOuistringapplication/jsonFormat des données envoyées
AcceptOuistringapplication/jsonFormat des données acceptées
AuthorizationNonstringBearer {{VOTRE_CLE_API}}Jeton d'authentification (Token)

Corps de la Requête (Request Body)

Nom du champTypeRequisDescription
modelstringOuiL'ID du modèle à utiliser (ex. : gpt-4o-mini).
messagesarrayOuiListe des messages composant la conversation jusqu'à présent. Contient role et content. Pour la reconnaissance d'image, content peut être un tableau contenant du texte et une image_url (Base64).
toolsarrayOuiListe d'outils que le modèle peut appeler. Actuellement, seules les fonctions sont prises en charge comme outils. Utilisé pour fournir une liste de fonctions pour lesquelles le modèle peut générer des entrées JSON.
tool_choiceobjectOuiContrôle quelle fonction le modèle appelle. none signifie aucun appel ; auto signifie sélection automatique ; on peut aussi forcer l'appel d'une fonction spécifique.
temperatureintegerNonTempérature d'échantillonnage, comprise entre 0 et 2. Des valeurs plus élevées (ex. : 0.8) rendent la sortie plus aléatoire, tandis que des valeurs plus basses (ex. : 0.2) la rendent plus déterministe. Il est recommandé de ne pas modifier en même temps que top_p.
top_pintegerNonParamètre d'échantillonnage de noyau (nucleus sampling). 0.1 signifie que seuls les tokens composant les 10 % de masse de probabilité supérieure sont considérés. Il est recommandé de ne pas modifier en même temps que temperature.
nintegerNonNombre de choix de complétion de chat à générer pour chaque message d'entrée. La valeur par défaut est 1.
streambooleanNonInterrupteur de sortie en streaming. La valeur par défaut est false. Si défini sur true, des fragments de message seront envoyés sous forme d'événements envoyés par le serveur (SSE) et se termineront par l'indicateur data: [DONE].
stopstringNonSéquences (jusqu'à 4) où l'API arrêtera de générer d'autres tokens. La valeur par défaut est null.
max_tokensintegerNonLe nombre maximum de tokens à générer dans la complétion de chat. La valeur par défaut est inf (infini).
presence_penaltynumberNonPénalité de présence (-2.0 à 2.0). Les valeurs positives pénalisent les nouveaux tokens en fonction de leur présence ou non dans le texte généré jusqu'à présent, augmentant ainsi la probabilité que le modèle aborde de nouveaux sujets.
frequency_penaltynumberNonPénalité de fréquence (-2.0 à 2.0). Les valeurs positives pénalisent les nouveaux tokens en fonction de leur fréquence d'apparition dans le texte généré jusqu'à présent, réduisant ainsi la probabilité que le modèle répète le même contenu. La valeur par défaut est 0.
logit_biasobjectNonModifie la probabilité que les tokens spécifiés apparaissent dans la complétion. Accepte un objet JSON mappant les ID de tokens à une valeur de biais (-100 à 100).
userstringNonUn identifiant unique représentant votre utilisateur final, ce qui aide à surveiller et à détecter les abus.
response_formatobjectNonSpécifie le format que le modèle doit générer. Passer { "type": "json_object" } active le mode JSON. Lors de son utilisation, vous devez explicitement demander au modèle de générer du JSON dans le prompt.
seenintegerNonFonctionnalité Bêta. Graine (seed) d'échantillonnage déterministe. Les requêtes répétées avec la même graine et les mêmes paramètres devraient renvoyer le même résultat (le déterminisme absolu n'est pas garanti).

Exemple de Requête

{
  "model": "gpt-4o-mini",
  "messages": [
    {
      "role": "system",
      "content": "You are a helpful assistant."
    },
    {
      "role": "user",
      "content": [
        {
          "type": "text",
          "text": "Qu'y a-t-il dans cette image ? Veuillez la décrire en détail."
        },
        {
          "type": "image_url",
          "image_url": {
            "url": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAiEAAAIhCAYAAACYF2qHAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAgAElEQVR4nOy9ebxtWVXf+x1zrrX2Pud2VRQUjUVf0glIYvOJLdJ8iCagIor... (Chaîne base64 trop longue omise ici)"
          }
        }
      ]
    }
  ]
}

Corps de la Réponse (Response Body)

Nom du champTypeDescription
idstringIdentifiant unique de la complétion de chat.
objectstringType d'objet, généralement chat.completion (ou chat.completion.chunk dans le cas du streaming).
createdintegerHorodatage Unix du moment de la création.
choicesarrayListe des choix de complétion.
└─ indexintegerIndex du choix dans la liste.
└─ messageobjectObjet du message généré par le modèle, contenant role et content.
└─ finish_reasonstringRaison pour laquelle le modèle a cessé de générer (par exemple : stop pour un arrêt normal, length pour avoir atteint la limite de max_tokens).
usageobjectStatistiques de consommation des jetons (Tokens) pour cette requête.
└─ prompt_tokensintegerNombre de tokens consommés par le prompt (y compris les tokens calculés à partir de l'image).
└─ completion_tokensintegerNombre de tokens consommés par le contenu généré.
└─ total_tokensintegerNombre total de tokens consommés pour cette requête.

Exemple de Réponse (Succès 200 OK)

{
    "id": "chatcmpl-123",
    "object": "chat.completion",
    "created": 1677652288,
    "choices": [
        {
            "index": 0,
            "message": {
                "role": "assistant",
                "content": "\r
\r
Hello there, how may I assist you today?"
            },
            "finish_reason": "stop"
        }
    ],
    "usage": {
        "prompt_tokens": 9,
        "completion_tokens": 12,
        "total_tokens": 21
    }
}

Foire Aux Questions (FAQs)

Q1 : Comment activer la sortie en streaming (Streaming) ? R : Définissez le paramètre stream sur true dans le corps de la requête. Une fois activé, l'API n'attendra plus que la réponse entière soit générée avant de la renvoyer. Au lieu de cela, elle renverra des blocs de données au format data: {...} mot à mot / phrase par phrase via des Server-Sent Events (SSE), jusqu'à la réception de l'indicateur data: [DONE] signalant la fin de la génération.

Q2 : Quelles sont les exigences pour l'encodage Base64 des images ? R : La chaîne Base64 de l'image doit inclure le préfixe de type MIME correct, tel que data:image/png;base64, ou data:image/jpeg;base64,. Il est recommandé de compresser correctement les dimensions de l'image avant de la convertir en Base64 afin de réduire la latence de transmission réseau et de diminuer la consommation des prompt_tokens (les images trop grandes peuvent consommer énormément de Tokens et même dépasser la limite de la fenêtre de contexte).

Q3 : Pourquoi la réponse du modèle a-elle été tronquée ? R : Veuillez vérifier la valeur de choices[0].finish_reason dans le corps de la réponse. Si elle est de length, cela signifie que le texte généré a atteint la limite de max_tokens que vous avez définie, ou que l'ensemble de la conversation a dépassé la limite de la fenêtre de contexte maximale du modèle. Vous pouvez résoudre ce problème en augmentant la valeur de max_tokens.

Q4 : Comment forcer le modèle à générer des données au format JSON ? R : Tout d'abord, vous devez définir "response_format": { "type": "json_object" } dans le corps de la requête. Remarque importante : en plus de définir ce paramètre, vous devez explicitement demander au modèle, en langage naturel, de générer du JSON dans le prompt système (system prompt) ou le prompt utilisateur au sein de messages (par exemple : "Veuillez formater le résultat en JSON"). Si vous ne le faites pas, le modèle risque de générer des espaces vides à l'infini jusqu'à épuiser les Tokens.

Q5 : Que faire si je rencontre une erreur 401 Unauthorized ? R : Veuillez vérifier si le paramètre Authorization dans l'en-tête de la requête contient correctement votre clé API. Le format doit strictement être Bearer VOTRE_CLE_API (faites attention à l'espace obligatoire entre Bearer et la clé).