Retour au blog

DépannageGuide

Erreur 400 de l'API Claude sur temperature, top_p, top_k : comment la corriger

Votre requête Claude renvoie une 400 depuis la version d'API 2026-10-21 ? Supprimez temperature, top_p et top_k, ou épinglez l'ancienne version. Étapes à suivre.

Par CheapTokens TeamPublié le 5 min de lecture

Carte de style terminal : erreur 400 pour temperature, top_p et top_k dans l'API Claude
Sur cette page
  1. À quoi ressemble la requête qui échoue
  2. Le correctif : supprimer les trois paramètres
  3. Les réponses vont-elles changer après leur suppression ?
  4. Liste de vérification rapide quand vous voyez la 400
  5. Un seul chemin de code pour Claude et les API de style OpenAI

Votre requête Claude fonctionnait hier, vous l'avez passée à la version d'API 2026-10-21 (l'en-tête anthropic-version, ou une version du SDK conçue pour celle-ci), et maintenant elle renvoie une 400. Regardez le corps de la requête : s'il contient temperature, top_p ou top_k, c'est la cause. Supprimez ces trois champs et la requête passe.

D'après le guide de migration d'Anthropic pour la version 2026-10-21 (https://platform.claude.com/docs/en/api/migration-2026-10-21, vérifié le 24 octobre 2026), une requête Messages ou Message Batches qui envoie l'un des trois renvoie une erreur 400. Cela se produit même si la valeur est celle par défaut du paramètre. Recherchez le statut 400 et ces noms de champs dans votre requête.

À quoi ressemble la requête qui échoue#

Imaginons un petit script qui demande à Claude de résumer un ticket et stabilise la réponse avec une température basse :

python
import anthropic

client = anthropic.Anthropic()

reply = client.messages.create(
    model="<your Claude model>",
    max_tokens=500,
    temperature=0.2,  # <- this line now causes the 400
    messages=[{"role": "user", "content": "Summarise this ticket in two lines: ..."}],
)

Même histoire en HTTP simple. Si vous définissez vous-même l'en-tête de version, voici la ligne qui vous fait basculer vers le nouveau comportement :

bash
curl https://api.anthropic.com/v1/messages \
  -H "x-api-key: $ANTHROPIC_API_KEY" \
  -H "anthropic-version: 2026-10-21" \
  -H "content-type: application/json" \
  -d '{"model": "<your Claude model>", "max_tokens": 500, "top_p": 0.9,
       "messages": [{"role": "user", "content": "Hello"}]}'

Le correctif : supprimer les trois paramètres#

Supprimez temperature, top_p et top_k de toutes les requêtes Messages et Message Batches. Sans eux, le modèle échantillonne avec ses valeurs par défaut (température 1.0), exactement comme le faisait une requête 2023-06-01 qui les omet.

python
reply = client.messages.create(
    model="<your Claude model>",
    max_tokens=500,
    messages=[{"role": "user", "content": "Summarise this ticket in two lines: ..."}],
)
Avant et après : la requête avec temperature renvoie 400, la même requête sans elle passe
La même requête avant et après suppression de temperature

Les dernières versions majeures du SDK et la CLI ant (2.0.0) n'ont plus du tout ces paramètres, donc après la mise à niveau vous devez les retirer de votre code. Une 400 provient de requêtes qui partent avec anthropic-version: 2026-10-21 et portent encore l'un des trois champs. Les adaptateurs .NET IChatClient prennent une voie plus douce : ils ignorent désormais ChatOptions.Temperature, TopK et TopP. Les numéros exacts de version du SDK par langage se trouvent dans les onglets Upgrade steps du guide.

Si vous appelez l'API sans SDK, la version est l'en-tête anthropic-version, et 2026-10-21 est la valeur qui active la nouvelle règle.

Les réponses vont-elles changer après leur suppression ?#

Cela dépend du modèle, et le guide est précis sur ce point.

  • Claude 4.7 et versions ultérieures n'acceptent déjà que les valeurs d'échantillonnage par défaut. Rien ne change pour vous : ils échantillonnaient par défaut avant et continuent de le faire.
  • Les modèles qui acceptent d'autres valeurs, comme Claude Sonnet 4.6 : si vous aviez baissé temperature pour obtenir une sortie plus constante, cet effet disparaît, et aucun autre réglage ne le remplace.

Si une requête particulière dépend vraiment d'une valeur non par défaut, le guide vous donne deux options : arrêter d'envoyer le paramètre et accepter l'échantillonnage par défaut, ou garder cette requête sur anthropic-version: 2023-06-01.

Si vos réponses doivent être strictement constantes, mettez la constance dans le prompt à la place : un format de sortie fixe, un court exemple de la réponse souhaitée, et une vérification dans votre code qui rejette tout ce qui sort du format. C'est plus de travail qu'un simple nombre, mais cela ne dépend pas d'un réglage d'échantillonnage.

Liste de vérification rapide quand vous voyez la 400#

  1. Cherchez dans le projet temperature, top_p, top_k, y compris les wrappers et les fichiers de configuration partagés.
  2. Vérifiez les jobs par lots : la règle s'applique à chaque requête à l'intérieur d'un Message Batch créé avec 2026-10-21, donc regardez les paramètres de chaque requête du lot.
  3. Vérifiez ce qui a changé : version majeure du SDK, version de la CLI, ou l'en-tête anthropic-version.
  4. Supprimez les champs, ou épinglez cette requête sur 2023-06-01 si elle a besoin d'une valeur non par défaut.
  5. Lancez une requête avant de relancer un gros lot.

Un seul chemin de code pour Claude et les API de style OpenAI#

Une configuration courante : un seul helper qui construit la requête et l'envoie soit à Anthropic Messages, soit à un endpoint Chat Completions de style OpenAI. Le correctif le plus simple est de séparer les paramètres. Gardez temperature uniquement dans la branche de style OpenAI, et ne l'ajoutez pas à la branche Messages.

Dans le format Chat Completions, le réglage est un champ de requête normal. Sur CheapTokens, il fonctionne via l'adresse compatible OpenAI https://api.cheaptokens.dev/v1. Voici une requête vers DeepSeek-V4-Flash (contexte de 380K, jusqu'à 32 768 jetons de sortie par réponse), avec l'identifiant complet du modèle issu de la documentation CheapTokens :

bash
curl https://api.cheaptokens.dev/v1/chat/completions \
  -H "Authorization: Bearer $CHEAPTOKENS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-ai/DeepSeek-V4-Flash-0731",
    "temperature": 0.2,
    "max_tokens": 300,
    "messages": [{"role": "user", "content": "Summarise this ticket in two lines: ..."}]
  }'

Une requête comme celle-ci, avec 1 000 jetons d'entrée et 300 jetons de sortie, coûte $0.000045 au prix actuel. DeepSeek-V4-Flash a un seul prix à toute heure de la journée, sans heures de pointe, et un seul solde couvre tous les modèles. Pour le même chemin de code avec une fenêtre de contexte de 390K, il y a aussi GLM-5.3-Flash (zai-org/GLM-5.3-Flash, jusqu'à 8 192 jetons de sortie). Les prix actuels de tous les modèles sont sur la page de tarification.

Pour voir comment le réglage se comporte, lisez System prompt and temperature: what they do and how to set them. Pour appeler des Messages au format Claude depuis Python, voir Anthropic Python SDK with CheapTokens. L'adresse de base et la configuration de la clé se trouvent dans la documentation CheapTokens.