トラブルシューティングガイド
temperature、top_p、top_kでClaude APIが400エラー: 修正方法
ClaudeリクエストがAPIバージョン2026-10-21で400を返すようになった?temperature、top_p、top_kを削除するか、古いバージョンに固定しよう。手順はこちら。

このページの内容
昨日は動いていたClaudeリクエストをAPIバージョン2026-10-21(anthropic-ヘッダー、またはそれ向けにビルドされたSDKリリース)に移したら、400が返ってくる。リクエストのボディを見てほしい。temperature、top_p、top_kが含まれていれば、それが原因だ。この3つのフィールドを削除すればリクエストは通る。
Anthropicのバージョン2026-10-21向け移行ガイド(https://platform.claude.com/docs/en/api/migration-2026-10-21,、2026年10月24日確認)によると、MessagesまたはMessage Batchesリクエストでこの3つのいずれかを送信すると400エラーが返る。パラメータのデフォルト値であっても発生する。リクエスト内で400ステータスとこれらのフィールド名を探してほしい。
失敗するリクエストの例#
チケットを要約するようClaudeに依頼し、低いtemperatureで回答を安定させる小さなスクリプトがあるとする:
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: ..."}],
)プレーンHTTPでも同じ話だ。バージョンヘッダーを自分で設定する場合、新しい挙動に移行させるのはこの行だ:
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"}]}'修正方法: 3つのパラメータを削除する#
すべてのMessagesおよびMessage Batchesリクエストからtemperature、top_p、top_kを削除する。これらがなければ、モデルはデフォルト(temperature 1.0)でサンプリングする。これは、これらを省略した2023-06-01のリクエストとまったく同じだ。
reply = client.messages.create(
model="<your Claude model>",
max_tokens=500,
messages=[{"role": "user", "content": "Summarise this ticket in two lines: ..."}],
)
最新のメジャーSDKバージョンとant CLI(2.0.0)にはこれらのパラメータがそもそも存在しないため、アップグレード後はコードから削除する必要がある。400は、anthropic-で送信され、まだ3つのフィールドのいずれかを持つリクエストから発生する。.NETのIChatClientアダプターはより穏やかな方法を取る。ChatOptions.、TopK、TopPを無視するようになった。言語ごとの正確なSDKバージョン番号は、ガイドの「Upgrade steps」タブにある。
SDKを使わずにAPIを呼び出す場合、バージョンはanthropic-ヘッダーであり、新しいルールを有効にする値は2026-10-21だ。
削除すると回答は変わるのか?#
モデルによる。ガイドはここで具体的に述べている。
- Claude 4.7以降はすでにデフォルトのサンプリング値のみを受け付ける。何も変わらない。以前もデフォルトでサンプリングしており、今もそうだ。
- 他の値を受け付けるモデル、たとえばClaude Sonnet 4.6: より一貫した出力を得るために
temperatureを下げていた場合、その効果は消え、それを置き換える設定はない。
特定のリクエストが本当に非デフォルト値に依存している場合、ガイドには2つの選択肢がある。パラメータの送信をやめてデフォルトのサンプリングを受け入れるか、その1つのリクエストをanthropic-に固定したままにするかだ。
回答が厳密に一貫している必要があるなら、一貫性をプロンプトに持たせる。固定の出力形式、望む回答の短い例、そしてフォーマット外のものを拒否するコード内のチェックだ。1つの数値より手間はかかるが、サンプリングのつまみに依存しない。
400が表示されたときのクイックチェックリスト#
- プロジェクト内で
temperature、top_p、top_kを検索する。ラッパーや共有設定ファイルも含める。 - バッチジョブを確認する。このルールは2026-10-21で作成されたMessage Batch内の各リクエストに適用されるため、バッチ内のすべてのリクエストのパラメータを見る。
- 何が変わったか確認する。SDKのメジャーバージョン、CLIバージョン、または
anthropic-ヘッダー。version - フィールドを削除するか、非デフォルト値が必要な場合はそのリクエストを
2023-06-01に固定する。 - 大きなバッチを再起動する前に、1つのリクエストを実行する。
ClaudeとOpenAI形式APIで1つのコードパス#
よくある構成: リクエストを構築し、Anthropic MessagesまたはOpenAI形式のChat Completionsエンドポイントのいずれかに送信する単一のヘルパー。最も簡単な修正はパラメータを分割することだ。temperatureはOpenAI形式の分岐にのみ残し、Messagesの分岐には追加しない。
Chat Completions形式では、この設定は通常のリクエストフィールドだ。CheapTokensでは、OpenAI互換アドレスhttps:/を通じて機能する。以下はDeepSeek-V4-Flash(380Kコンテキスト、回答あたり最大32,768出力トークン)へのリクエストで、CheapTokensドキュメントの完全なモデルIDを使用している:
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: ..."}]
}'このようなリクエストは、入力1,000トークン、出力300トークンで、現在の価格では$0.000045かかる。DeepSeek-V4-Flashは時間帯を問わず1つの価格で、ピーク時間はなく、1つの残高ですべてのモデルをカバーする。390Kコンテキストウィンドウで同じコードパスを使うなら、GLM-5.3-Flash(zai-、最大8,192出力トークン)もある。すべてのモデルの現在の価格は価格ページにある。
この設定の挙動を確認するには、システムプロンプトとtemperature: それぞれの役割と設定方法を読んでほしい。PythonからClaude形式のMessagesを呼び出すには、Anthropic Python SDKとCheapTokensを参照。ベースアドレスとキーの設定はCheapTokensドキュメントにある。



