Créer une complétion de chat (Streaming)
Référence de la documentation officielle : OpenAI Chat Create
Description de l'API
Étant donné une invite (Prompt), le modèle renverra une ou plusieurs prédictions de complétion de chat. Cette API prend en charge à la fois les réponses standard et les réponses en continu / streaming (SSE), et peut également renvoyer les probabilités des jetons (tokens) alternatifs à chaque position.
Instructions de requête
- Méthode de requête :
POST - URL de requête :
https://api.codingplanx.ai/v1/chat/completions
En-têtes de requête (Headers)
| Nom du paramètre | Requis | Type | Exemple | Description |
|---|---|---|---|---|
Content-Type | Oui | string | application/json | Format des données |
Accept | Oui | string | application/json | Format des données acceptées |
Authorization | Non* | string | Bearer {{YOUR_API_KEY}} | Jeton d'authentification (généralement requis lors de l'appel réel) |
X-Forwarded-Host | Non | string | localhost:5173 | Nom d'hôte du proxy (généralement inutile de le passer manuellement) |
Corps de la requête (Request Body)
| Nom du paramètre | Type | Requis | Description |
|---|---|---|---|
model | string | Oui | ID du modèle à utiliser. Pour la liste des modèles compatibles, veuillez consulter le tableau de compatibilité des points de terminaison des modèles. |
messages | array | Oui | Liste des messages composant la conversation jusqu'à présent. Contient les champs role et content. |
tools | array | Oui | Liste des outils que le modèle peut appeler. Actuellement, seules les fonctions sont prises en charge en tant qu'outils. |
tool_choice | object | Oui | Contrôle quelle fonction (le cas échéant) le modèle doit appeler. none signifie aucun appel, auto signifie sélection automatique, ou force l'appel d'une fonction spécifique. |
extra_body | object | Oui | Paramètres supplémentaires. Contient enable_thinking (booléen), pour activer ou non le mode de réflexion (nécessite la prise en charge du modèle). |
temperature | integer/float | Non | Tempé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 ciblée et déterministe. Il est recommandé de modifier ceci ou top_p, mais pas les deux en même temps. |
top_p | integer/float | Non | Paramètre d'échantillonnage de noyau (nucleus sampling). 0.1 signifie que seuls les jetons constituant les 10 % supérieurs de la masse de probabilité sont considérés. Il est recommandé de modifier ceci ou temperature, mais pas les deux en même temps. |
n | integer | Non | Nombre de choix de complétion de chat à générer pour chaque message d'entrée. La valeur par défaut est 1. |
stream | boolean | Non | Activer ou non la sortie en streaming (flux). Si défini sur true, des incréments de message partiels seront envoyés sous forme d'événements envoyés par le serveur (Server-Sent Events / SSE), et le flux se terminera par le message data: [DONE]. |
stop | string/array | Non | Séquence(s) (jusqu'à 4) à laquelle l'API arrêtera de générer d'autres jetons. La valeur par défaut est null. |
max_tokens | integer | Non | Nombre maximum de jetons (tokens) à générer dans la complétion de chat. La longueur totale des jetons d'entrée et générés est limitée par la longueur de contexte du modèle. |
presence_penalty | number | Non | Nombre entre -2.0 et 2.0. Les valeurs positives pénalisent les nouveaux jetons en fonction de leur présence dans le texte jusqu'à présent, augmentant ainsi la probabilité que le modèle aborde de nouveaux sujets. |
frequency_penalty | number | Non | Nombre entre -2.0 et 2.0. Les valeurs positives pénalisent les nouveaux jetons en fonction de leur fréquence existante dans le texte jusqu'à présent, réduisant la probabilité que le modèle répète textuellement la même ligne. |
logit_bias | object | Non | Modifie la probabilité d'apparition de jetons spécifiés dans la complétion. Accepte un objet JSON mappant les ID de jetons à une valeur de biais associée allant de -100 à 100. |
user | string | Non | Identifiant unique représentant votre utilisateur final, qui peut aider à surveiller et détecter les abus. |
response_format | object | Non | Spécifie le format de sortie du modèle. Définir sur { "type": "json_object" } pour activer le mode JSON. Attention : Lors de son utilisation, vous devez explicitement demander au modèle de générer du JSON dans le message, sinon cela pourrait entraîner un flux de caractères blancs infini. |
seen | integer | Non | Définit la graine (Seed) pour un échantillonnage déterministe (Fonctionnalité Beta). |
Exemple de requête
{
"model": "gpt-5-mini",
"max_tokens": 1000,
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "你好"
}
],
"temperature": 1.0,
"stream": true,
"stream_options": {
"include_usage": true
}
}
Instructions de réponse
- Content-Type:
application/json(Non-streaming) outext/event-stream(Streaming lorsquestream: true)
Paramètres de réponse (Structure non-streaming)
| Nom du paramètre | Type | Description |
|---|---|---|
id | string | Identifiant unique de la complétion de chat. |
object | string | Type d'objet, généralement chat.completion ou chat.completion.chunk. |
created | integer | Horodatage de création (temps Unix). |
choices | array | Liste des choix de complétion. |
choices[].index | integer | Indice dans la liste des choix. |
choices[].message | object | Objet de message généré par le modèle, contenant role et content. Dans le cas du streaming, c'est delta. |
choices[].finish_reason | string | Raison pour laquelle le modèle a cessé de générer (ex: stop, length, etc.). |
usage | object | Statistiques d'utilisation des jetons (tokens) de l'API. |
usage.prompt_tokens | integer | Nombre de jetons consommés par l'invite (Prompt). |
usage.completion_tokens | integer | Nombre de jetons générés par le modèle. |
usage.total_tokens | integer | Nombre total de jetons consommés pour cette requête. |
Exemple de réponse (Non-streaming / Résultat de streaming agrégé)
{
"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
}
}
(Remarque : Si stream: true est spécifié dans la requête, le corps de la réponse sera un flux d'événements SSE séparés par des sauts de ligne, chaque ligne commençant par data: {...}, et se terminant par data: [DONE].)
FAQs (Foire Aux Questions)
Q1 : Comment analyser (parser) une réponse en streaming avec stream: true activé ?
R : Lorsque stream: true est activé, l'API renvoie les données via le protocole Server-Sent Events (SSE). Le client doit lire le flux de réponse ligne par ligne, trouver les chaînes commençant par le préfixe data: et les analyser au format JSON. Veuillez noter que le dernier message du flux de données est toujours data: [DONE], indiquant la fin du flux. Vous devez filtrer ce marqueur de fin lors de l'analyse de la réponse.
Q2 : Pourquoi ma requête se bloque-t-elle ou renvoie-t-elle un flux de caractères blancs infini après avoir défini response_format sur JSON ?
R : Lorsque vous activez le mode JSON à l'aide de { "type": "json_object" }, vous devez ordonner explicitement au modèle de "générer un format JSON" dans les messages transmis (généralement dans l'invite système / system prompt). Sans invite textuelle pertinente, le modèle peut rester bloqué et générer une infinité de caractères blancs jusqu'à ce que la limite de max_tokens soit atteinte.
Q3 : Les paramètres temperature et top_p peuvent-ils être ajustés simultanément ?
R : Il est fortement déconseillé de modifier ces deux paramètres en même temps. Les deux sont des mécanismes utilisés pour contrôler le caractère aléatoire de la sortie du modèle. Si vous souhaitez rendre la sortie plus stable et prévisible, diminuez temperature OU réduisez top_p ; si vous voulez des réponses plus créatives, augmentez l'un d'entre eux. Modifier les deux à la fois rendra les résultats difficiles à prédire.
Q4 : Quel est le rôle du paramètre extra_body.enable_thinking ?
R : Il s'agit d'un paramètre d'extension spécifique à cette API. Lors de la transmission de {"enable_thinking": true}, si le modèle actuellement utilisé par le backend prend en charge le "Mode de réflexion (Thinking Mode/CoT)" (comme certains grands modèles améliorés pour le raisonnement), le modèle initiera un processus de réflexion approfondie. Si le modèle ne le prend pas en charge, ce paramètre est généralement ignoré.
Q5 : Pourquoi le finish_reason de la réponse est-il length au lieu de stop ?
R : Le fait que finish_reason renvoie length indique que le modèle a été tronqué de force avant de générer une réponse complète. Cela est généralement dû au fait que votre paramètre max_tokens est défini de manière trop faible, ou que le nombre total de jetons (entrée + générés) dépasse la limite maximale de la fenêtre de contexte autorisée par le modèle actuel. Veuillez essayer d'augmenter la valeur de max_tokens.