モデルと使用量の確認
呼び出しログと五つの確認項目で、各リクエストのモデル、トークン使用量、料金を確認します。
调用日志
「调用日志」というセクション每次调用都记入控制台的調用ログ、モデル、入力・出力・キャッシュ読み取り・キャッシュ書き込みのトークン使用量、および料金を一覧表示します。
五つのチェック
「五つのチェック」というセクション以下のチェックは Anthropic API の公開フォーマットと照合し、返却フィールドやフォーマットの差異を発見するために使用します。
| チェック | 期待される結果 | 留意すべき点 |
|---|---|---|
1. 返却される model フィールド | リクエストのモデル ID と一致 | 別のモデル名が返る、または当該フィールドが存在しない |
| 2. キャッシュ読み取り | キャッシュ条件を満たす同一リクエストをキャッシュ有効期間内に2回送信し、2回目の cache_read_input_tokens が 0 より大きい | 常に 0、または usage にキャッシュフィールドが存在しない |
| 3. ツール呼び出し ID | tool_use ブロックの id が toolu_ で始まる | 他のフォーマット、またはモデルが要求どおりにツールを呼び出さない |
| 4. ストリーミングイベントの順序 | message_start、content_block_start、content_block_delta、message_delta、message_stop の順に出現 | OpenAI フォーマットの data: ブロックのみ、またはイベントの欠落・順序の乱れ |
| 5. 実タスクとの照合 | 固定のタスクを1つ用い、公式 API またはその他の信頼できるソースと結果を比較 | 結果の明確な悪化、拒否の異常、頻繁な打ち切り |
これらのチェックはフィールドとフォーマットの差異を発見するだけで、実際に使用されているモデルを単独で確認するものではありません。model フィールドは改変でき、フォーマットも模倣できます。
スクリプトで前4項目を実行
「スクリプトで前4項目を実行」というセクションbash、curl、jq が必要です。スクリプトは5回の小規模な呼び出しを行い、そのうち1回は約 1.8 万トークンのキャッシュ書き込みを行い、通常の価格で課金されます。
#!/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:' | uniq項目3は tool_choice: auto を使用します。Sonnet 5.5 などの 5.x モデルはツールの強制指定({"type":"tool"} または {"type":"any"})に対応しておらず、400 does not support forced tool_choice を返します。
2026-10-15 に claude-sonnet-5-5 で実測した出力は以下のとおりです(項目1は主要フィールドのみを残しています):
== 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_stopping イベントの有無や出現位置は固定ではなく、判定には影響しません。
thinking ブロック
「thinking ブロック」というセクションthinking を有効にすると、返却される thinking ブロックに signature フィールドが付き、フォーマットチェックの1項目としても使用できます。5.x モデルの書き方は 4.x と異なり、2026-10-15 の実測結果は以下のとおりです:
| モデル | thinking パラメータ | 結果 |
|---|---|---|
claude-sonnet-4-6 | {"type":"enabled","budget_tokens":1024} | thinking ブロックが返り、思考テキストと signature が含まれる |
claude-sonnet-5 | {"type":"enabled","budget_tokens":1024} または {"type":"adaptive"} | どちらも使用可能 |
claude-sonnet-5-5 | {"type":"adaptive"} | 使用可能。enabled を渡すと 400 が返り、adaptive のみサポートと表示される |
5.x モデルの thinking ブロックはデフォルトで signature のみで、思考テキストは空文字列です。思考の要約を表示するには、"display": "summarized" を追加します:
"thinking": {"type": "adaptive", "display": "summarized"}サードパーティの検証サイトを使用する場合は、専用の API キーを新規作成し、測定後に削除することを推奨します。
不一致を発見した場合
「不一致を発見した場合」というセクション[email protected] にメールで、リクエスト時刻、モデル ID、完全な返却内容(API キーは削除)、および該当するチェック項目を添付してください。返却内容やエラーメッセージ内の request id は、当該呼び出しの特定に役立ちます。
よくある質問
「よくある質問」というセクションモデルに「あなたは誰」と直接聞くのは信頼できますか?
信頼できません。モデルの自己紹介はシステムプロンプトの影響を受け、特定のプロンプト下では自分のバージョンを誤答することがあります。返却されるフィールドとイベントフォーマットの照合の方が参考になります。
Opus を選択したのに、なぜ呼び出しログに Haiku が現れるのですか?
Claude Code は一部のバックグラウンドタスクを Haiku モデルで処理するため、呼び出しログに対応する記録が表示されます。ANTHROPIC_DEFAULT_HAIKU_MODEL 環境変数でこの種のタスクに使用するモデルを指定できます。詳細は Claude Code 接続 を参照してください。Claude Code を使用していないのにこの状況が発生した場合は、リクエスト時刻を [email protected] までお知らせください。
