Claude Opus 4.7 が temperature を含む request で 400 を返すなら、まず別の temperature 値を探さないでください。最初にやることは、実際に送信される payload から temperature を削除することです。
同じ扱いが top_p と top_k にも必要です。問題は「どの数値なら通るか」ではなく、「SDK、Bedrock adapter、gateway、IDE plugin、eval harness、retry template のどこが古い sampling フィールドをまだ入れているか」です。
安全な順序は、古いフィールドを削除し、final outbound payload を確認し、必要な制御を prompt、schema、test、または対応 route の effort に移し、同じ route で再試行することです。fallback は、現在の stack がそのフィールドを止められない場合だけです。
まず修復分岐を決める
このエラーは一つの症状に見えて、実際には owner の切り分けです。route を替える前に、どの層がフィールドを追加しているかを決めます。
| 見えている状態 | likely owner | 最初の作業 | 検証方法 |
|---|---|---|---|
code に temperature、top_p、top_k がある | direct API / SDK call | フィールドを削除する | final payload を見て同じ prompt を再実行 |
| code は clean だが API が field を受け取る | SDK default、helper、gateway、proxy、eval harness | request builder か transformer を直す | その層を出る payload に旧フィールドがないことを確認 |
| Bedrock 経由で失敗する | Bedrock adapter / provider mapping | Bedrock payload から sampling フィールドを削除 | 同じ model ID と workload で再試行 |
| IDE や agent tool が失敗する | plugin、model wrapper、legacy preset | preset が generation defaults を入れていないか見る | preset 修正後に同じ task を再実行 |
Claude Code の top_p deprecated が主症状 | Claude Code 専用分岐 | version、route、preset を先に見る | Claude Code Opus 4.7 top_p Deprecated を使う |
修復と同時に provider、model family、prompt を全部変えると、何が効いたかわからなくなります。同一路径での検証を先に置いてください。
Opus 4.7 で変わった境界
Anthropic の現在の Opus 4.7 migration guidance では、non-default の temperature、top_p、top_k は 400 の原因になります。推奨される migration は、これらのフィールドを送らないことです。
そのため、temperature: 0 は安全な置き換えではありません。以前のモデルでも、temperature 0 はあらゆる route で同じ出力を保証するスイッチではありませんでした。Opus 4.7 では、それ以前に request shape と model contract を合わせる必要があります。
| 以前の発想 | 今の制御 | 注意点 |
|---|---|---|
| 低い temperature で厳密にする | schema、examples、禁止出力、validation | 完全な決定性ではない |
| 高い temperature で多様にする | 複数案、比較軸、選択基準を prompt に書く | removed knob を使わない |
temperature: 0 で code を安定させる | tests、fixtures、same-route checks | 安定性は検証で作る |
| 推論量を増やす | 対応 route の effort | randomness control ではない |
つまり、temperature の話を「数値の話」から「request field cleanup の話」に変える必要があります。
SDK request を修正する

自分の code に field があるなら、修正は単純です。削除します。
pythonmessage = client.messages.create( model="claude-opus-4-7", max_tokens=1200, temperature=0.2, top_p=0.9, messages=[{"role": "user", "content": "Refactor this function."}], )
修正後:
pythonmessage = client.messages.create( model="claude-opus-4-7", max_tokens=1200, messages=[{"role": "user", "content": "Refactor this function."}], )
TypeScript でも同じです。
tsconst response = await anthropic.messages.create({ model: "claude-opus-4-7", max_tokens: 1200, messages: [{ role: "user", content: "Summarize the incident." }], });
修正後は call site ではなく、送信直前の body を見ます。shared helper が default を入れ直す、gateway が OpenAI-style body を変換する、retry が古い template から payload を再構築する、といったことが起きます。
厳密な output が欲しいなら、field ではなく contract を書きます。
textReturn exactly one JSON object with keys "root_cause", "fix", and "verification". Do not include prose outside the JSON. If evidence is insufficient, set "root_cause" to "unknown".
hidden injection を探す

日本語の現場では「コードにはないのに API が怒る」という相談が多くなりがちです。その場合、first SDK call だけでは足りません。最後に出る payload を確認します。
見る場所は次です。
- 全モデルに generation defaults を足す SDK wrapper。
- OpenAI-compatible gateway が
temperatureを Anthropic body にコピーする箇所。 - Bedrock adapter が account defaults を merge する箇所。
- IDE plugin や agent preset の古い model config。
- eval harness が比較用に
temperatureを固定する設定。 MODEL_TEMPERATUREなどの environment variable。- retry middleware が stale body から再送する箇所。
log には secret や full prompt を出さず、field name、model ID、route、old fields の有無だけを出せば十分です。
Bedrock と provider route
AWS Bedrock の Claude Opus 4.7 model card でも、temperature、top_p、top_k はサポートされないとされています。つまり Bedrock 経由の失敗も同じ cleanup が必要です。
| 層 | 確認するもの | 修正 |
|---|---|---|
| application request | 古い field が残っているか | adapter 前で削除 |
| adapter mapping | OpenAI-style field をコピーしていないか | Opus 4.7 branch で drop |
| project defaults | console preset / config | model-aware defaults にする |
| retry | stale body で再送していないか | cleaned payload から retry |
モデル移行そのものを判断したいなら Claude Opus 4.7 vs Claude Opus 4.6 を見てください。ここでは、選択済みの Opus 4.7 route を動かすことに集中します。
何で置き換えるか

temperature の一対一の後継はありません。昔その field にやらせていた job を分解します。
| job | 今の方法 | 境界 |
|---|---|---|
| format | schema、examples、validation | 完全保証ではない |
| reasoning depth | effort | sampling ではない |
| length/cost | max_tokens、task budget | 切り詰め過ぎに注意 |
| alternatives | multiple candidates with criteria | removed knob は使わない |
| production stability | same prompt、same route、tests | check で安定化する |
effort は reasoning と token spend の control です。temperature の名前違いとして扱うと、また別の mismatch を作ります。
検証してから fallback
検証は同一路径で行います。
- model、provider、prompt、task を変えない。
temperature、top_p、top_kを送信経路から削除する。- final outbound body を確認する。
- 一度だけ同じ route で retry する。
- regression check を入れて旧 preset の復活を防ぐ。
fallback は、今日その stack がどうしても old fields を止められないときだけ使います。古い model route、field stripping gateway、tool version pin は bridge です。長期の答えは payload を現行 contract に合わせることです。
よくある質問
temperature は完全に消えたのですか?
公式の境界は non-default 値です。ただし実装上は field を省略するのが安全です。SDK や gateway が default をどう扱うかは route により変わります。
temperature: 0 は使えますか?
migration fix としては使わないでください。deterministic output が欲しいなら、prompt、schema、test、same-route verification を使います。
effort は temperature の代替ですか?
いいえ。reasoning depth と token spend の control です。style や format は prompt contract で制御します。
Bedrock でも同じですか?
はい。Bedrock の Opus 4.7 route でもこれらの sampling field はサポートされません。adapter の hidden defaults を見てください。
Claude Code の top_p deprecated と同じですか?
根本境界は近いですが、Claude Code では version、route、preset を先に見ます。対応記事は Claude Code Opus 4.7 top_p Deprecated です。
作業ルール
Claude Opus 4.7 が temperature で失敗したら、数値を調整しない。field を削除し、注入元を探し、prompt または effort に制御を移し、同じ route で検証します。
