| |

6 raisons pour lesquelles Claude Code utilise le mode compatible OpenAI plutôt que /v1/messages (Guide de dépannage complet de la version NPM)

Note de l'auteur : L'installation via NPM de Claude Code devrait normalement utiliser l'interface native /v1/messages, mais dans la pratique, les requêtes sont envoyées vers /v1/chat/completions. Cet article analyse les 6 causes probables selon les mécanismes officiels, propose un plan de diagnostic rapide en 5 étapes et fournit un exemple de configuration correcte pour une intégration via APIYI.

Selon la documentation officielle, @anthropic-ai/claude-code installé via NPM doit toujours envoyer des requêtes vers le point de terminaison /v1/messages dans un environnement en ligne de commande. Il s'agit du protocole natif Messages API d'Anthropic, incluant l'en-tête anthropic-version et le format natif messages.

Cependant, si vous observez via une capture de paquets que votre client utilise /v1/chat/completions (format OpenAI Chat Completions), cela signifie qu'une conversion de protocole ou une confusion de paquets s'est produite à un certain niveau. Ce n'est pas un bug de Claude Code lui-même, mais l'un des 6 problèmes de configuration ou d'environnement courants.

Valeur ajoutée : Cet article analyse en détail ces 6 causes (y compris l'installation accidentelle de paquets tiers, ANTHROPIC_BASE_URL pointant vers une passerelle de compatibilité, ou l'interception par claude-code-router), fournit un plan de diagnostic rapide en 5 étapes et présente la configuration correcte pour garantir l'utilisation du /v1/messages natif lors d'une connexion via APIYI (apiyi.com).

claude-code-openai-compatible-mode-instead-of-v1-messages-fr 图示

I. Claude Code doit utiliser /v1/messages par défaut : analyse du mécanisme central

Avant de commencer le dépannage, clarifions le comportement attendu de Claude Code officiel afin de déterminer où se situe le problème.

1.1 Conception du protocole du package officiel @anthropic-ai/claude-code

Le package NPM @anthropic-ai/claude-code maintenu par Anthropic utilise uniquement le protocole natif Messages API d'Anthropic dans toutes ses versions. Voici comment cela se manifeste :

Dimension Comportement officiel de Claude Code
Point de terminaison POST {ANTHROPIC_BASE_URL}/v1/messages
En-têtes de requête x-api-key, anthropic-version: 2023-06-01, anthropic-beta
Format du corps { "model": "...", "messages": [...], "system": "...", "max_tokens": ... }
Format de réponse { "content": [...], "stop_reason": "...", "usage": {...} }
Réponse en flux Flux d'événements SSE, types d'événements comme message_start, content_block_delta

Si votre client capture des requêtes vers /v1/chat/completions, avec Authorization: Bearer ... et un corps de requête contenant un tableau choices, ce sont des caractéristiques du protocole OpenAI. Cela signifie que la requête ne suit pas le chemin prévu pour le Claude Code officiel.

1.2 Sémantique correcte des variables d'environnement clés

Le Claude Code officiel ne reconnaît que les variables d'environnement suivantes pour ajuster le comportement de l'API :

# Obligatoire : Clé API Anthropic ou clé d'un service compatible
ANTHROPIC_AUTH_TOKEN=sk-your-key
# Ou variable synonyme :
ANTHROPIC_API_KEY=sk-your-key

# Optionnel : Adresse de la passerelle API personnalisée (ne pas inclure le suffixe /v1)
ANTHROPIC_BASE_URL=https://api.anthropic.com

# Optionnel : ID du modèle personnalisé
ANTHROPIC_MODEL=claude-sonnet-4-5
ANTHROPIC_SMALL_FAST_MODEL=claude-haiku-4-5

Attention : Le Claude Code officiel n'utilise pas de variables comme OPENAI_BASE_URL ou CLAUDE_CODE_USE_OPENAI. Si ces noms de variables apparaissent dans votre environnement, cela signifie qu'un wrapper tiers est utilisé.

💡 Conseil de vérification rapide : Exécutez which claude dans le terminal pour voir le chemin d'installation de Claude Code, puis exécutez cat $(which claude) | head -20. Si vous voyez la mention @anthropic-ai/claude-code, c'est la version officielle. Si vous voyez des mots-clés comme openclaude, claudex ou cli-agent-openai-adapter, vous avez trouvé la cause profonde.

二、6 raisons probables pour lesquelles Claude Code utilise le mode compatible OpenAI

Classées par probabilité décroissante, nous vous conseillons de les vérifier dans cet ordre.

2.1 Raison n°1 : Installation accidentelle d'un package "OpenAI Wrapper" tiers (environ 35 % des cas)

Il existe sur NPM plusieurs packages nommés de manière similaire à "Claude Code" mais dont la fonction est de convertir les requêtes pour les rendre compatibles avec OpenAI. Il est possible que vous ayez installé l'un d'entre eux par erreur :

Nom du package Fonction réelle Protocole par défaut
@anthropic-ai/claude-code ✅ Package officiel /v1/messages
@gitlawb/openclaude Shim OpenAI /v1/chat/completions
@aryanjsx/openclaude Shim OpenAI /v1/chat/completions
cli-agent-openai-adapter Convertisseur de protocole /v1/chat/completions
claude-code-openai-wrapper Wrapper bi-protocole Supporte les deux
claudex Proxy OpenAI écrit en Go /v1/chat/completions

Méthode de diagnostic :

# 1. Vérifier le chemin d'installation réel
which claude
# Exemple de sortie : /usr/local/bin/claude

# 2. Vérifier le champ "name" dans le package.json du package
cat $(npm root -g)/@anthropic-ai/claude-code/package.json 2>/dev/null | grep '"name"'

# 3. Lister tous les packages liés à "claude" installés globalement
npm list -g --depth=0 | grep -i claude

Si npm list n'affiche pas @anthropic-ai/claude-code mais contient d'autres packages aux noms similaires, c'est que vous avez installé le mauvais.

2.2 Raison n°2 : Utilisation d'outils de routage comme claude-code-router (environ 25 % des cas)

claude-code-router (CCR) est un outil communautaire populaire qui intercepte les requêtes de Claude Code pour les rediriger vers différents modèles (OpenAI, DeepSeek, Zhipu). Son fonctionnement :

  1. Il lance un serveur proxy local (par défaut http://localhost:3456).
  2. L'utilisateur pointe ANTHROPIC_BASE_URL vers ce proxy local.
  3. CCR reçoit la requête /v1/messages, la traduit en /v1/chat/completions et la transfère au modèle cible.
  4. Lors de l'analyse réseau, vous voyez donc le protocole OpenAI.

Méthode de diagnostic :

# Vérifier les variables d'environnement
env | grep -i ANTHROPIC

# Si vous voyez ANTHROPIC_BASE_URL=http://localhost:3456 ou http://127.0.0.1:xxx
# Il s'agit probablement d'un proxy local comme CCR / claude-code-router

2.3 Raison n°3 : ANTHROPIC_BASE_URL pointe vers une passerelle compatible OpenAI (environ 20 % des cas)

Certaines passerelles LLM (comme LiteLLM Proxy, OneAPI, Bifrost) supportent la configuration de modèles Anthropic, mais n'exposent que l'interface /v1/chat/completions. Si vous pointez ANTHROPIC_BASE_URL vers ces passerelles :

  • Claude Code envoie toujours sa requête vers /v1/messages.
  • La passerelle renvoie une erreur 404 ou réécrit automatiquement le chemin.
  • La passerelle convertit en interne la requête au format OpenAI.
  • Si votre outil de capture réseau est situé après la passerelle, vous verrez le protocole OpenAI.

Méthode de diagnostic : Vérifiez si ANTHROPIC_BASE_URL pointe vers une passerelle compatible OpenAI connue et si la requête aboutit réellement (code 200 ou 404).

2.4 Raison n°4 : Variables d'environnement de wrappers tiers définies (environ 10 % des cas)

Certains packages de type "wrapper" utilisent des variables d'environnement pour basculer le mode de protocole, par exemple :

# Variable de basculement pour openclaude
CLAUDE_CODE_USE_OPENAI=1
OPENAI_API_KEY=sk-xxx
OPENAI_MODEL=gpt-4o
OPENAI_BASE_URL=https://api.openai.com/v1

Même si vous avez installé le package officiel, si votre PATH contient un script wrapper (par exemple, si /usr/local/bin/claude est en réalité un wrapper), ces variables seront prises en compte.

Méthode de diagnostic :

# Lister tous les exécutables nommés "claude" dans le PATH
type -a claude

# Vérifier la présence de variables d'environnement suspectes
env | grep -E 'CLAUDE_CODE|OPENAI_BASE_URL|OPENAI_MODEL'

2.5 Raison n°5 : Alias Shell ou script wrapper (environ 7 % des cas)

Vous avez peut-être configuré un alias dans ~/.bashrc ou ~/.zshrc :

# Ce type d'alias remplace la commande claude originale
alias claude='openclaude'
alias claude='claude-code-router run'

# Ou une fonction définie avec le même nom
claude() {
  CCR_PROXY=http://localhost:3456 command claude "$@"
}

Méthode de diagnostic :

# Voir les alias
alias | grep claude

# Voir les fonctions
type claude

# Vérifier les fichiers de démarrage du shell
grep -nE 'claude' ~/.bashrc ~/.zshrc ~/.profile 2>/dev/null

2.6 Raison n°6 : Mauvaise interprétation de la capture réseau (environ 3 % des cas)

Dans de rares cas, l'outil de capture est mal positionné et ne voit pas la requête réelle émise par Claude Code. Par exemple :

  • Claude Code → Proxy transparent local (ex: mitmproxy) → Passerelle OpenAI distante.
  • L'outil de capture est placé après la passerelle et voit la requête réécrite.
  • En réalité, Claude Code a bien envoyé /v1/messages.

Méthode de diagnostic : Utilisez mitmproxy directement sur votre machine pour intercepter le processus Claude Code et confirmer le protocole de la première requête émise.


三、Diagnostic rapide en 5 étapes des anomalies de protocole Claude Code

claude-code-openai-compatible-mode-instead-of-v1-messages-fr 图示

Suivez ces étapes dans l'ordre ; la grande majorité des anomalies de protocole peuvent être résolues dès les 3 premières étapes.

3.1 Étape 1 : Confirmer l'installation du package NPM officiel

# Désinstaller tous les wrappers potentiels
npm uninstall -g @gitlawb/openclaude @aryanjsx/openclaude cli-agent-openai-adapter claudex claude-code-router 2>/dev/null

# Désinstaller et réinstaller le package officiel
npm uninstall -g @anthropic-ai/claude-code
npm install -g @anthropic-ai/claude-code

# Vérifier la source de la version
claude --version
npm list -g @anthropic-ai/claude-code

Condition de validation : npm list -g affiche @anthropic-ai/[email protected].

3.2 Étape 2 : Nettoyer le PATH et les alias Shell

# Identifier tous les exécutables "claude" dans le PATH
type -a claude
which -a claude

# Supprimer les alias / fonctions homonymes
unalias claude 2>/dev/null
unset -f claude 2>/dev/null

# Vérifier et nettoyer les configurations liées à "claude" dans les scripts de démarrage
grep -n 'claude' ~/.bashrc ~/.zshrc ~/.profile 2>/dev/null

Condition de validation : type -a claude ne renvoie qu'un seul chemin, pointant vers le package officiel dans le répertoire global de npm.

3.3 Étape 3 : Nettoyer les variables d'environnement conflictuelles

# Voir toutes les variables liées à "claude" / "openai" / "anthropic"
env | grep -iE 'claude|openai|anthropic'

# Supprimer les variables potentiellement conflictuelles
unset CLAUDE_CODE_USE_OPENAI
unset OPENAI_BASE_URL
unset OPENAI_MODEL
unset CCR_PROXY

# Ne conserver que les variables nécessaires au package officiel
export ANTHROPIC_BASE_URL="https://vip.apiyi.com"
export ANTHROPIC_AUTH_TOKEN="sk-your-apiyi-key"

🎯 Conseil clé : ANTHROPIC_BASE_URL doit pointer vers la racine du domaine (sans le suffixe /v1), car Claude Code ajoute automatiquement /v1/messages. Si vous indiquez https://vip.apiyi.com/v1, la requête sera envoyée vers https://vip.apiyi.com/v1/v1/messages, ce qui provoquera une erreur 404.

3.4 Étape 4 : Tester si la base_url supporte nativement /v1/messages

Utilisez curl pour simuler une requête de Claude Code et vérifier si la passerelle supporte réellement le protocole natif d'Anthropic :

curl -X POST "$ANTHROPIC_BASE_URL/v1/messages" \
  -H "x-api-key: $ANTHROPIC_AUTH_TOKEN" \
  -H "anthropic-version: 2023-06-01" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-sonnet-4-5",
    "max_tokens": 100,
    "messages": [{"role": "user", "content": "Hello"}]
  }'

Condition de validation : Le serveur renvoie un code 200 et le corps de la réponse contient "type": "message" et "content": [...].

Si vous recevez une erreur 404 ou si la réponse est au format OpenAI (contenant choices), cela signifie que la passerelle ne supporte pas le protocole natif d'Anthropic. Dans ce cas, basculez vers APIYI (apiyi.com) pour résoudre le problème immédiatement : il supporte nativement /v1/messages tout en restant compatible avec /v1/chat/completions.

3.5 Étape 5 : Vérification finale par capture réseau locale

Si le problème persiste après les 4 premières étapes, utilisez mitmproxy pour vérifier la requête réelle :

# Lancer mitmproxy (port 8080 par défaut)
mitmproxy --listen-port 8080

# Forcer Claude Code à passer par le proxy local
export HTTPS_PROXY=http://localhost:8080
export HTTP_PROXY=http://localhost:8080

# Lancer Claude Code
claude

Condition de validation : La première requête capturée par mitmproxy est bien POST /v1/messages avec l'en-tête anthropic-version.

IV. Configuration complète pour connecter Claude Code à APIYI via le protocole natif /v1/messages

APIYI (apiyi.com) est l'un des rares services proxy API à prendre en charge nativement le protocole Anthropic Messages API, garantissant ainsi que Claude Code utilise bien /v1/messages plutôt que /v1/chat/completions.

4.1 Configuration des variables d'environnement (méthode la plus simple)

# macOS / Linux
export ANTHROPIC_BASE_URL="https://vip.apiyi.com"
export ANTHROPIC_AUTH_TOKEN="sk-your-apiyi-key"
# Optionnel : spécifier le modèle par défaut
export ANTHROPIC_MODEL="claude-sonnet-4-5"
export ANTHROPIC_SMALL_FAST_MODEL="claude-haiku-4-5"

# Windows PowerShell
$env:ANTHROPIC_BASE_URL = "https://vip.apiyi.com"
$env:ANTHROPIC_AUTH_TOKEN = "sk-your-apiyi-key"

# Lancer Claude Code
claude

4.2 Persistance de la configuration dans le fichier de démarrage du Shell

# Ajouter à ~/.zshrc ou ~/.bashrc
cat >> ~/.zshrc <<'EOF'

# Configuration du proxy APIYI pour Claude Code
export ANTHROPIC_BASE_URL="https://vip.apiyi.com"
export ANTHROPIC_AUTH_TOKEN="sk-your-apiyi-key"
export ANTHROPIC_MODEL="claude-sonnet-4-5"
EOF

# Recharger la configuration
source ~/.zshrc

4.3 Via la commande de configuration intégrée de Claude Code (recommandé)

Claude Code propose son propre CLI de configuration, ce qui évite d'exposer vos clés API dans les variables d'environnement :

# Méthode 1 : interactive
claude /login
# Sélectionnez "Custom Endpoint", puis saisissez https://vip.apiyi.com et votre clé API

# Méthode 2 : modification directe du fichier de configuration
cat > ~/.claude/settings.json <<'EOF'
{
  "env": {
    "ANTHROPIC_BASE_URL": "https://vip.apiyi.com",
    "ANTHROPIC_AUTH_TOKEN": "sk-your-apiyi-key"
  }
}
EOF

4.4 Vérification du chemin de requête après configuration

Une fois Claude Code lancé, ouvrez un nouveau terminal et utilisez l'une des commandes suivantes pour vérifier :

# Méthode 1 : capture de paquets via mitmproxy (la plus précise)
mitmproxy --listen-port 8080
# Lancez Claude Code dans un autre terminal avec HTTPS_PROXY=http://localhost:8080

# Méthode 2 : activer les logs de débogage de Claude Code
ANTHROPIC_LOG=debug claude
# Les logs afficheront l'URL de requête complète et la méthode utilisée

Résultat attendu : Toutes les URL de requête doivent être https://vip.apiyi.com/v1/messages, avec la méthode POST et l'en-tête anthropic-version: 2023-06-01.

4.5 Avantages clés de la connexion via APIYI

Avantage Description
Support natif /v1/messages Protocole par défaut de Claude Code, aucune perte de conversion
Support simultané /v1/chat/completions Une seule clé pour deux protocoles, flexibilité totale
Conservation des en-têtes anthropic-beta Support des fonctionnalités avancées (prompt caching, tool use, etc.)
Concurrence illimitée Pas de limitation de débit pour les sessions longues de Claude Code
Bonus de recharge 10% offerts pour 100 $ rechargés (soit 15% d'économie)
Paiement local Paiement direct via WeChat/Alipay

V. Comparaison des protocoles : Natif /v1/messages vs OpenAI /v1/chat/completions

claude-code-openai-compatible-mode-instead-of-v1-messages-fr 图示

Comprendre les différences fondamentales entre ces deux protocoles est essentiel pour saisir pourquoi Claude Code doit impérativement utiliser le protocole natif pour exploiter tout son potentiel.

Dimension Anthropic /v1/messages OpenAI /v1/chat/completions
En-tête d'authentification x-api-key: sk-... Authorization: Bearer sk-...
En-tête de version anthropic-version: 2023-06-01 Aucun (version dans l'URL)
En-tête de fonctionnalités anthropic-beta: prompt-caching-... Aucune norme unifiée
Champ system Champ indépendant au niveau racine Intégré dans messages[0] (rôle system)
Format de réponse { "content": [...], "stop_reason": "..." } { "choices": [{ "message": {...} }] }
Événements de flux Événements structurés (message_start, content_block_delta, etc.) SSE générique data: {...}
Appel d'outils tool_use intégré dans les blocs de contenu choices[0].message.tool_calls
Comptage de jetons usage.input_tokens / usage.output_tokens usage.prompt_tokens / usage.completion_tokens

Conclusion clé : Claude Code utilise intensivement des fonctionnalités exclusives à Anthropic (mise en cache des invites, flux incrémentiel des outils, contenu de raisonnement, etc.). S'il est forcé de passer par le protocole OpenAI, il perdra ces capacités ou présentera des comportements incohérents. C'est pourquoi il est crucial de s'assurer qu'il utilise nativement /v1/messages.

VI. Liste de contrôle pour le dépannage par scénario

6.1 Scénario 1 : Utilisation locale par un développeur individuel

Cause la plus fréquente : Un alias Shell ou un wrapper portant le même nom dans le PATH.

Liste de contrôle :

  • npm list -g contient-il @anthropic-ai/claude-code ?
  • type -a claude pointe-t-il uniquement vers le paquet officiel ?
  • ~/.zshrc / ~/.bashrc contiennent-ils un alias claude=... ?
  • env | grep -i claude révèle-t-il des variables non standard ?
  • ANTHROPIC_BASE_URL inclut-il un suffixe /v1 ? (Il ne devrait pas en avoir)

6.2 Scénario 2 : Déploiement en environnement d'équipe/entreprise

Cause la plus fréquente : La passerelle LLM interne ne prend en charge que le protocole OpenAI.

Liste de contrôle :

  • La passerelle de l'entreprise prend-elle en charge nativement le point de terminaison /v1/messages ?
  • La passerelle transfère-t-elle les en-têtes anthropic-version et anthropic-beta ?
  • La passerelle conserve-t-elle le format original des événements SSE ?
  • Existe-t-il un script wrapper unifié pour l'équipe ?

Si la passerelle de votre entreprise ne prend effectivement en charge que le protocole OpenAI, nous vous recommandons de configurer le ANTHROPIC_BASE_URL du client vers APIYI (apiyi.com) pour bénéficier d'un accès direct au protocole natif et éviter les pertes liées à la conversion.

6.3 Scénario 3 : Invocation de Claude Code en environnement CI/CD

Cause la plus fréquente : Un wrapper tiers est figé dans les scripts CI.

Liste de contrôle :

  • Le fichier de configuration CI exécute-t-il npm install -g sur un paquet non officiel ?
  • Les variables d'environnement CI contiennent-elles CLAUDE_CODE_USE_OPENAI=1 ou similaire ?
  • L'image du runner CI a-t-elle un wrapper préinstallé ?

6.4 Scénario 4 : Exécution dans un conteneur Docker

Cause la plus fréquente : L'image de base contient un wrapper préinstallé.

Liste de contrôle :

  • Le nom du paquet dans RUN npm install -g du Dockerfile est-il bien l'officiel ?
  • Où pointe which claude à l'intérieur du conteneur ?
  • Les variables d'environnement (ENV) du conteneur définissent-elles un changement de protocole ?

VII. FAQ : Anomalies de protocole avec Claude Code

Q1 : J'ai installé le paquet officiel @anthropic-ai/claude-code, pourquoi utilise-t-il le protocole OpenAI ?

La cause la plus probable est que ANTHROPIC_BASE_URL pointe vers une passerelle compatible OpenAI. Certaines passerelles reçoivent la requête /v1/messages et la convertissent en interne en /v1/chat/completions pour appeler le fournisseur en amont. Si votre outil de capture réseau est déployé après la passerelle, vous verrez le protocole converti.

La solution consiste à pointer ANTHROPIC_BASE_URL vers APIYI (apiyi.com), qui prend en charge nativement /v1/messages sans aucune perte de conversion.

Q2 : Comment désinstaller complètement tous les wrappers Claude potentiels ?

# Lister tous les paquets globaux liés à claude
npm list -g --depth=0 | grep -i claude

# Désinstaller en une fois les wrappers connus
npm uninstall -g \
  @gitlawb/openclaude \
  @aryanjsx/openclaude \
  cli-agent-openai-adapter \
  claudex \
  claude-code-router \
  ccr \
  2>/dev/null

# Réinstaller le paquet officiel
npm install -g @anthropic-ai/claude-code

# Vérification
which claude
claude --version

Q3 : Quel niveau de chemin dois-je renseigner pour ANTHROPIC_BASE_URL ?

Renseignez la racine du domaine, sans suffixe /v1. Claude Code concaténera automatiquement /v1/messages en interne.

# ✅ Correct
export ANTHROPIC_BASE_URL="https://vip.apiyi.com"

# ❌ Incorrect (résultera en /v1/v1/messages)
export ANTHROPIC_BASE_URL="https://vip.apiyi.com/v1"

# ❌ Incorrect (inclut déjà le chemin du point de terminaison)
export ANTHROPIC_BASE_URL="https://vip.apiyi.com/v1/messages"

Q4 : Pourquoi certains tutoriels me demandent-ils d'installer claude-code-router ?

claude-code-router est un outil communautaire dont l'objectif principal est de permettre à Claude Code d'appeler des modèles non-Anthropic (comme DeepSeek, Zhipu, ou Ollama local). Il y parvient via une conversion de protocole.

Si vous souhaitez simplement utiliser les modèles Claude originaux d'Anthropic (comme Claude Sonnet 4.5 ou Opus 4.7), vous n'avez absolument pas besoin de CCR. Connectez-vous directement à APIYI (apiyi.com) via le protocole natif /v1/messages pour une meilleure expérience et aucune perte de conversion.

Q5 : APIYI (apiyi.com) prend-il en charge à la fois /v1/messages et /v1/chat/completions ?

Oui, APIYI est entièrement compatible avec les deux protocoles :

  • https://vip.apiyi.com/v1/messages — Format natif Anthropic (par défaut pour Claude Code)
  • https://vip.apiyi.com/v1/chat/completions — Format compatible OpenAI

Une seule clé API peut utiliser les deux protocoles, s'adaptant automatiquement selon l'outil client.

Q6 : Si l'URL capturée est https://vip.apiyi.com/v1/messages, est-ce forcément le mode natif ?

Pas nécessairement. Vous devez vérifier simultanément :

  1. L'en-tête de requête contient anthropic-version: 2023-06-01.
  2. Le corps de la requête contient au niveau racine un tableau messages et un champ system indépendant (et non un rôle system à l'intérieur des messages).
  3. Le corps de la réponse contient "type": "message" et content: [...] (et non choices: [...]).

Si l'URL est /v1/messages mais que le corps de la requête suit le format OpenAI (avec un rôle system dans les messages), cela signifie que le client possède sa propre couche de conversion.

Q7 : Quelle est la variable d'environnement pour activer les logs de débogage de Claude Code ?

# Afficher les logs détaillés des requêtes/réponses HTTP
ANTHROPIC_LOG=debug claude

# Ou utiliser le mode verbose
claude --verbose

# Voir les informations de diagnostic de Claude Code lui-même
claude /doctor

Les logs de débogage affichent l'URL complète, les en-têtes et le corps de la requête (les champs sensibles sont masqués), ce qui est la méthode la plus directe pour localiser les problèmes de protocole.

Q8 : Mon Claude Code fonctionnait normalement, pourquoi est-il passé soudainement au protocole OpenAI ?

Les causes les plus fréquentes de ce changement soudain :

  • Mise à jour de Claude Code ayant réinstallé par erreur un paquet tiers portant le même nom via npm install -g.
  • L'équipe a récemment déployé une passerelle LLM et a diffusé une nouvelle ANTHROPIC_BASE_URL.
  • Certains alias ont été réactivés après une mise à jour de macOS.
  • L'entreprise a activé un proxy transparent pour auditer la conversion de protocole.

Lors du dépannage, vérifiez en priorité les changements récents dans votre environnement (historique d'installation npm, modifications de la configuration shell, notifications de changement de passerelle).

八、Key Takeaways Points clés

  • L'outil officiel @anthropic-ai/claude-code utilise toujours /v1/messages ; il n'existe pas de mode de compatibilité OpenAI officiel.
  • 6 causes probables (par ordre de probabilité) : installation accidentelle d'un paquet tiers / interception par claude-code-router / base_url pointant vers une passerelle OpenAI / variables d'environnement tierces / alias Shell / mauvaise interprétation lors de l'analyse des paquets.
  • Diagnostic rapide en 5 étapes : vérifier le nom du paquet → nettoyer le PATH/alias → nettoyer les variables d'environnement → tester la base_url avec curl → vérifier via une capture réseau locale.
  • Ne pas inclure le suffixe /v1 dans ANTHROPIC_BASE_URL, Claude Code l'ajoute automatiquement.
  • APIYI (apiyi.com) prend en charge nativement /v1/messages tout en étant compatible avec /v1/chat/completions. Une seule clé API pour deux protocoles.
  • Avantages du protocole natif : prise en charge complète des fonctionnalités exclusives d'Anthropic telles que le prompt caching, le tool_use et le contenu de raisonnement (reasoning content).
  • Méthode de vérification rapide : utilisez ANTHROPIC_LOG=debug claude pour visualiser l'URL et la méthode de requête réelles.

九、Conclusion

Le Claude Code installé via NPM dans un environnement en ligne de commande doit toujours utiliser le protocole natif /v1/messages — il s'agit d'un comportement codé en dur dans le paquet officiel @anthropic-ai/claude-code, sans aucun commutateur officiel pour basculer vers le mode de compatibilité OpenAI. Si vous observez via une capture réseau que le client utilise /v1/chat/completions, le problème provient nécessairement d'un élément de votre environnement client : soit un wrapper tiers a été installé par erreur, soit ANTHROPIC_BASE_URL pointe vers une passerelle qui ne prend en charge que le protocole OpenAI, soit un alias Shell ou une variable d'environnement effectue une interception.

En suivant le processus de diagnostic en 5 étapes décrit au chapitre 3, la grande majorité des problèmes peuvent être identifiés en moins de 10 minutes. La solution la plus courante consiste à : désinstaller tous les paquets non officiels → réinstaller @anthropic-ai/claude-code → pointer ANTHROPIC_BASE_URL vers un service proxy API prenant nativement en charge /v1/messages.

APIYI (apiyi.com) est conçu pour ce type de scénario : il prend en charge nativement l'API Messages d'Anthropic (avec transmission complète des en-têtes anthropic-version et anthropic-beta), tout en étant compatible avec OpenAI Chat Completions (double protocole avec une seule clé). Il n'y a pas de limite de concurrence (pour éviter les limitations lors des longues sessions Claude Code), et pour tout rechargement de 100 USD, vous recevez 10 % de bonus (équivalent à une remise de 15 % par rapport au site officiel), avec paiement en RMB (via WeChat/Alipay). Pour la configuration, il suffit de définir ANTHROPIC_BASE_URL sur https://vip.apiyi.com, sans aucune modification de code.

🎯 Prochaine étape suggérée : demandez au client de suivre l'ordre de diagnostic 3.1 → 3.2 → 3.3, de modifier ANTHROPIC_BASE_URL en https://vip.apiyi.com, puis de redémarrer Claude Code et d'utiliser ANTHROPIC_LOG=debug claude pour vérifier si l'URL de la requête est bien revenue à /v1/messages.

Références

  1. Documentation officielle de Claude Code : Instructions de configuration de la passerelle LLM

    • Lien : code.claude.com/docs/en/llm-gateway
    • Description : La documentation officielle précise que Claude Code utilise le format de l'API Messages d'Anthropic.
  2. Package NPM @anthropic-ai/claude-code : Page officielle du package NPM

    • Lien : npmjs.com/package/@anthropic-ai/claude-code
    • Description : Vérifiez que vous avez bien installé le package officiel.
  3. Documentation officielle de l'API Messages d'Anthropic : Spécifications du protocole natif

    • Lien : docs.anthropic.com/en/api/messages
    • Description : Champs complets, en-têtes de requête et format de réponse pour le point de terminaison /v1/messages.
  4. Site officiel d'APIYI : Service proxy API pour le protocole natif Anthropic

    • Lien : apiyi.com
    • Description : Support natif de /v1/messages + compatibilité avec /v1/chat/completions, concurrence illimitée, 10 % offerts pour tout rechargement de 100 USD.

Auteur : Équipe technique
Dernière mise à jour : 02/05/2026
À propos d'APIYI : APIYI (apiyi.com) est un fournisseur professionnel de services proxy API pour Claude. Il prend en charge nativement l'API Messages d'Anthropic (/v1/messages, incluant la transmission complète des en-têtes anthropic-version et anthropic-beta) tout en étant compatible avec l'API Chat Completions d'OpenAI (/v1/chat/completions). Nous proposons un accès stable à toute la gamme Claude Sonnet 4.5, Claude Opus 4.7 et Claude Haiku 4.5. Bénéficiez de 10 % offerts pour 100 USD rechargés (équivalent à une réduction de 15 % par rapport au site officiel), sans limite de concurrence et avec un support technique réactif.

Publications similaires