Créer une complétion de chat - DeepSeek v3.1 Contrôle du niveau de réflexion (Streaming)
Cette API permet de créer une conversation avec le modèle DeepSeek v3.1. Elle prend en charge la sortie en streaming (SSE) ainsi que le contrôle précis de la capacité de réflexion profonde (Thinking) du modèle.
Détails de l'API
- Statut de l'API : Publiée (Released)
- Méthode HTTP :
POST - URL de la requête :
https://api.codingplanx.ai/v1/chat/completions
En-têtes de la requête (Headers)
| Nom du paramètre | Requis | Type | Valeur d'exemple | Description |
|---|---|---|---|---|
Content-Type | Oui | String | application/json | Format des données |
Accept | Oui | String | application/json | Format accepté |
Authorization | Non | String | Bearer {{YOUR_API_KEY}} | Identifiant d'authentification (généralement requis lors de l'appel réel) |
(Note : L'en-tête X-Forwarded-Host est actuellement désactivé)
Corps de la requête (Request Body)
Content-Type: application/json
| Nom du paramètre | Requis | Type | Description |
|---|---|---|---|
model | Oui | String | L'ID du modèle à utiliser. Exemple : deepseek-v3-1-250821 |
messages | Oui | Array of Objects | Liste des messages de la conversation. |
? role | Oui | String | Le rôle de l'auteur du message (ex: system, user, assistant). |
? content | Oui | String | Le contenu spécifique du message. |
max_tokens | Non | Integer | Limite le nombre maximum de tokens générés par le modèle en une seule requête. La longueur totale des tokens d'entrée et de sortie est soumise à la limite de contexte du modèle. |
temperature | Non | Number | Température d'échantillonnage, comprise entre 0 et 2. Une valeur plus élevée (ex: 0.8) rend la sortie plus aléatoire, tandis qu'une valeur plus basse (ex: 0.2) la rend plus ciblée et déterministe. |
stream | Non | Boolean | Si défini sur true, les incréments de message seront envoyés en streaming sous forme de SSE (Server-Sent Events). Le flux se termine par data: [DONE]. |
stream_options | Non | Object | Options relatives à la sortie en streaming. Ne peut être défini que si le paramètre stream est sur true. |
? include_usage | Non | Boolean | Si défini sur true, un bloc supplémentaire sera transmis juste avant le data: [DONE] final en streaming. Le champ usage de ce bloc affiche les statistiques d'utilisation des tokens pour l'ensemble de la requête. |
thinking | Non | Object | Pour les modèles dotés de la capacité de réflexion profonde, ce champ permet de contrôler l'activation de cette fonctionnalité. |
? type | Non | String | enabled : Force l'activation de la réflexion profonde.<br>disabled : Force la désactivation.<br>auto : Laisse le modèle décider. |
Exemple de requête
{
"model": "deepseek-v3-1-250821",
"max_tokens": 1000,
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "Bonjour"
}
],
"temperature": 1.0,
"stream": true,
"stream_options": {
"include_usage": true
},
"thinking": {
"type": "enabled"
}
}
Corps de la réponse (Response)
Code d'état HTTP : 200 OK
Content-Type: application/json
(Note : Lorsque stream: true, le format de retour est un flux de données SSE, où chaque bloc de données (data chunk) est une chaîne JSON avec la structure suivante. Ce qui suit représente la structure JSON standard pour une requête non-streaming ou une fois le flux entièrement assemblé)
| Nom du champ | Type | Description |
|---|---|---|
id | String | Identifiant unique de la requête. |
object | String | Type d'objet, généralement chat.completion ou chat.completion.chunk. |
created | Integer | Horodatage de création (en secondes). |
choices | Array of Objects | Liste des réponses générées par le modèle. |
? index | Integer | L'index de cette réponse dans la liste des choices. |
? message | Object | Objet du message généré (généralement delta dans les requêtes en streaming). |
? role | String | Le rôle (généralement assistant). |
? content | String | Le contenu spécifique de la réponse. |
? finish_reason | String | La raison pour laquelle la génération s'est arrêtée (ex: stop, length). |
usage | Object | Statistiques d'utilisation des tokens. |
? prompt_tokens | Integer | Nombre de tokens consommés par le prompt (invite). |
? completion_tokens | Integer | Nombre de tokens consommés par le contenu généré. |
? total_tokens | Integer | Nombre total de tokens consommés. |
Exemple de réponse (JSON)
{
"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 (FAQ)
Q1 : Comment obtenir les statistiques d'utilisation des tokens (Usage) dans une requête en streaming (SSE) ?
R1 : Vous devez définir stream sur true dans le corps de la requête, tout en configurant stream_options: {"include_usage": true}. Ainsi, avant l'envoi du marqueur de fin de flux data: [DONE], le serveur enverra un bloc de données supplémentaire. Le tableau choices de ce bloc sera vide, mais le champ usage contiendra les statistiques complètes d'utilisation des tokens.
Q2 : Quelle est la différence entre enabled et auto dans le paramètre thinking ?
R2 :
enabled: Force le modèle à effectuer une "réflexion profonde" (Chain of Thought) avant de renvoyer la réponse finale. Cela conduit généralement à des résultats de raisonnement de meilleure qualité, mais peut augmenter le temps de réponse (latence du premier caractère) et la consommation de tokens en sortie.auto: Laisse le pouvoir de décision au modèle. Il évaluera automatiquement s'il est nécessaire de mener une réflexion profonde en fonction de la complexité de votre question dansmessages.
Q3 : Pourquoi la requête a-t-elle renvoyé une erreur 401 Unauthorized ?
R3 : Cela est généralement dû à l'échec de votre authentification. Veuillez vérifier que le champ Authorization dans l'en-tête de votre requête (Request Header) est correctement rempli selon le format Bearer {{YOUR_API_KEY}}, et assurez-vous que votre clé API (API Key) est valide et n'a pas expiré.
Q4 : Une fois la réflexion profonde thinking activée, le contenu du processus de réflexion sera-t-il renvoyé ?
R4 : Selon l'implémentation standard du format compatible OpenAI, s'il s'agit d'une sortie en streaming, le contenu de la réflexion profonde peut être renvoyé à l'intérieur de balises spécifiques (comme <think>...</think>), ou via un champ spécifique du chunk. Lors de l'analyse des données en streaming côté front-end, veuillez faire attention au traitement du contenu du processus de réflexion dans content, afin d'afficher un effet d'interface utilisateur (UI) "En cours de réflexion" pour les utilisateurs.
Q5 : Que signifie l'apparition de finish_reason: "length" ?
R5 : Cela indique que la sortie du modèle a atteint la limite max_tokens que vous avez définie, ou a touché la limite de la fenêtre de contexte maximale du modèle lui-même, ce qui a entraîné la troncature de la réponse. Si la réponse est incomplète, vous pouvez essayer d'augmenter la valeur de max_tokens.