Vérifier le modèle et l'utilisation
Vérifiez le modèle, l'utilisation des tokens et les frais de chaque appel à l'aide du journal d'appels et de cinq contrôles.
Journal d’appels
Section intitulée « Journal d’appels »Chaque appel est enregistré dans le journal d’appels de la console, qui liste le modèle, l’utilisation des tokens en entrée, en sortie, en lecture de cache et en écriture de cache, ainsi que les frais.
Cinq contrôles
Section intitulée « Cinq contrôles »Les contrôles suivants comparent le format public de l’interface Anthropic afin de détecter les différences dans les champs et le format des réponses.
| Contrôle | Résultat attendu | Points de vigilance |
|---|---|---|
1. Champ model renvoyé | Identique à l’ID du modèle demandé | Un autre nom de modèle est renvoyé, ou le champ est absent |
| 2. Lecture de cache | La même requête satisfaisant les conditions de cache est envoyée deux fois dans la durée de validité du cache ; le cache_read_input_tokens de la seconde est supérieur à 0 | Toujours à 0, ou aucun champ de cache dans usage |
| 3. ID d’appel d’outil | Le id du bloc tool_use commence par toolu_ | Autre format, ou le modèle n’appelle pas l’outil comme demandé |
| 4. Ordre des événements en streaming | Apparition dans l’ordre de message_start, content_block_start, content_block_delta, message_delta et message_stop | Seulement des blocs data: au format OpenAI, ou événements manquants, ordre incorrect |
| 5. Comparaison sur une tâche réelle | Comparer les résultats d’une tâche fixe avec l’API officielle ou une autre source fiable | Résultats nettement dégradés, refus anormaux ou troncatures fréquentes |
Ces contrôles ne permettent de détecter que des différences de champs et de format ; ils ne peuvent pas confirmer à eux seuls le modèle réellement utilisé. Le champ model peut être falsifié et le format peut être imité.
Réaliser les quatre premiers contrôles avec un script
Section intitulée « Réaliser les quatre premiers contrôles avec un script »Nécessite bash, curl et jq. Le script effectue cinq petits appels, dont un avec une écriture d’environ 18 000 tokens en cache, facturée au tarif normal.
#!/usr/bin/env bash# 用法:ONEZHE_API_KEY=sk-你的API密钥 bash verify.sh [模型ID]set -euo pipefailBASE="https://1zheai.com"MODEL="${1:-claude-sonnet-5-5}"H=(-H "x-api-key: $ONEZHE_API_KEY" -H "anthropic-version: 2023-06-01" -H "content-type: application/json")
echo "== 1. model 字段"curl -s "$BASE/v1/messages" "${H[@]}" \ -d "$(jq -n --arg m "$MODEL" '{model:$m,max_tokens:16,messages:[{role:"user",content:"ping"}]}')" \ | jq 'if .error then .error else {id, model, usage} end'
echo "== 2. 缓存:同一请求发两次,看第二次的 cache_read_input_tokens"LONG=$(printf '这是一段用来测试缓存的固定文本,内容不重要,长度够就行。%.0s' {1..600})BODY=$(jq -n --arg m "$MODEL" --arg t "$LONG" '{model:$m,max_tokens:16, system:[{type:"text",text:$t,cache_control:{type:"ephemeral"}}], messages:[{role:"user",content:"ping"}]}')for i in 1 2; do curl -s "$BASE/v1/messages" "${H[@]}" -d "$BODY" | jq -c 'if .error then .error else .usage end'done
echo "== 3. 工具调用 ID"curl -s "$BASE/v1/messages" "${H[@]}" \ -d "$(jq -n --arg m "$MODEL" '{model:$m,max_tokens:256, tools:[{name:"get_weather",description:"查询城市天气", input_schema:{type:"object",properties:{city:{type:"string"}},required:["city"]}}], tool_choice:{type:"auto"}, messages:[{role:"user",content:"北京今天天气怎么样"}]}')" \ | jq -r 'if .error then .error.message else (.content[]? | select(.type=="tool_use") | .id) end'
echo "== 4. 流式事件序列"curl -sN "$BASE/v1/messages" "${H[@]}" \ -d "$(jq -n --arg m "$MODEL" '{model:$m,max_tokens:32,stream:true,messages:[{role:"user",content:"数到三"}]}')" \ | grep '^event:' | uniqLe contrôle n° 3 utilise tool_choice: auto. Les modèles 5.x comme Sonnet 5.5 ne prennent pas en charge la spécification forcée d’un outil ({"type":"tool"} ou {"type":"any"}) et renvoient une erreur 400 does not support forced tool_choice.
Sortie obtenue le 2026-10-15 avec claude-sonnet-5-5 (le contrôle n° 1 ne conserve que les champs clés) :
== 1. model 字段{ "id": "msg_011Cg3Esh8zeEdLeXAPVALKe", "model": "claude-sonnet-5-5", "usage": { "input_tokens": 518, "cache_creation_input_tokens": 0, "cache_read_input_tokens": 0, "output_tokens": 12, ... }}== 2. 缓存:同一请求发两次,看第二次的 cache_read_input_tokens{"input_tokens":23,"cache_creation_input_tokens":17920,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":17920,"ephemeral_1h_input_tokens":0},"output_tokens":4,"output_tokens_details":{"thinking_tokens":0},"service_tier":"standard","inference_geo":"global"}{"input_tokens":23,"cache_creation_input_tokens":0,"cache_read_input_tokens":17920,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":4,"output_tokens_details":{"thinking_tokens":0},"service_tier":"standard","inference_geo":"global"}== 3. 工具调用 IDtoolu_01UPsdyKX8M9fJTTkDoSKHXA== 4. 流式事件序列event: message_startevent: content_block_startevent: pingevent: content_block_deltaevent: content_block_stopevent: message_deltaevent: message_stopL’apparition de l’événement ping et sa position ne sont pas fixes et n’affectent pas le jugement.
Blocs thinking
Section intitulée « Blocs thinking »Lorsque thinking est activé, le bloc thinking renvoyé comporte le champ signature, qui peut également servir de contrôle de format. La syntaxe des modèles 5.x diffère de celle des 4.x ; testé le 2026-10-15 :
| Modèle | Paramètre thinking | Résultat |
|---|---|---|
claude-sonnet-4-6 | {"type":"enabled","budget_tokens":1024} | Renvoie un bloc thinking avec le texte de réflexion et signature |
claude-sonnet-5 | {"type":"enabled","budget_tokens":1024} ou {"type":"adaptive"} | Les deux fonctionnent |
claude-sonnet-5-5 | {"type":"adaptive"} | Fonctionne ; envoyer enabled renvoie 400, indiquant que seul adaptive est pris en charge |
Par défaut, le bloc thinking des modèles 5.x ne contient que signature, le texte de réflexion étant une chaîne vide. Pour afficher le résumé de réflexion, ajoutez "display": "summarized" :
"thinking": {"type": "adaptive", "display": "summarized"}Lors de l’utilisation d’un site de détection tiers, il est recommandé de créer une clé API dédiée puis de la supprimer après le test.
En cas d’incohérence
Section intitulée « En cas d’incohérence »Envoyez un e-mail à [email protected] en indiquant l’heure de la requête, l’ID du modèle, le contenu complet de la réponse (sans la clé API) et le contrôle correspondant. Le request id présent dans la réponse ou le message d’erreur peut aider à localiser cet appel.
Questions fréquentes
Section intitulée « Questions fréquentes »Demander directement au modèle « Qui es-tu ? » est-il fiable ?
Peu fiable. L’auto-présentation du modèle est influencée par le prompt système et, sous certains prompts, il peut se tromper sur sa propre version. Vérifier les champs renvoyés et le format des événements est plus pertinent.
Opus sélectionné, pourquoi Haiku apparaît-il dans les journaux d'appels ?
Claude Code utilise le modèle Haiku pour traiter certaines tâches d’arrière-plan ; des enregistrements correspondants apparaissent dans le journal d’appels. Vous pouvez spécifier le modèle utilisé pour ces tâches avec la variable d’environnement ANTHROPIC_DEFAULT_HAIKU_MODEL, voir Intégration de Claude Code. Si ce cas se produit sans utiliser Claude Code, envoyez l’heure de la requête à [email protected].
