◉CLAUDE LABEN
●2.1.310 — Bedrock・Vertex・Foundry でも Monitor ツールが使え、ゲートウェイの失敗を修正しました(10/23)●2.1.307 — スリープやキーチェーンロックのあとに MCP が再接続されない問題を修正しました(10/21)。2.1.306 では claude -p の誤表示も解消●SONNET 4.5 — Claude API での提供終了は 11/30、残り34日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●API — 新しい API バージョン 2026-10-21 では temperature・top_p・top_k を渡すと 400 になります●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました●2.1.310 — Bedrock・Vertex・Foundry でも Monitor ツールが使え、ゲートウェイの失敗を修正しました(10/23)●2.1.307 — スリープやキーチェーンロックのあとに MCP が再接続されない問題を修正しました(10/21)。2.1.306 では claude -p の誤表示も解消●SONNET 4.5 — Claude API での提供終了は 11/30、残り34日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●API — 新しい API バージョン 2026-10-21 では temperature・top_p・top_k を渡すと 400 になります●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました
記事一覧/API & SDK
⬡ API & SDK/2026-10-27中級

Python SDK を 2.0.0 に上げて動かなくなる3か所 — モック越しに再現して決めた確認の順番

Python SDK 2.0.0 へ上げると、temperature の引数、認証ヘッダ、環境変数の二重指定の3か所で動作が変わります。手元のモック越しに再現した出力と、プロキシを挟む構成での直し方、確認の順番をお伝えします。

Claude API135Python SDKAPI バージョン移行13認証9

個人開発の小さな Python スクリプトで、依存をまとめて更新しようとした日のことです。pip install -U anthropic を流す前に、念のため公式のリリースノートを開きました。

そこで目に入ったのが、10月21日公開の API バージョン 2026-10-21 と、それを既定で送る新しい SDK 群(Python は 2.0.0)が載っていたのです。

本物の API を叩く前に、通信を差し替えられるモックの上で、何が変わるのかを一つずつ確かめました。この記事は、その記録です。

先に結論です

最初にお伝えしたいのは、壊れやすい場所が3つに絞れる、ということです。

症状原因最初に見る場所
`temperature` を渡した呼び出しが TypeError になるサンプリング引数が SDK から削除された`messages.create` の呼び出し箇所
プロキシやゲートウェイ越しで認証が通らない鍵が `X-Api-Key` ではなく `Authorization: Bearer` で送られるゲートウェイ側のヘッダ設定
起動時に ValueError、または警告が出るクライアントが持てる認証が一つになったコンストラクタと環境変数

上げる順番は、コードの修正を先に用意してから、SDK を上げることです。公式の移行ガイドも、アップグレードと修正を同時にリリースするよう案内しています。

1. temperature を渡した呼び出しは、送る前に止まります

公式の移行ガイドによると、2026-10-21 では temperature・top_p・top_k を送るとサーバーが 400 を返します。既定値のままでも同じです。

SDK 側はそれより手前で止まります。モックに差し替えたクライアントで試すと、通信が走る前に次の結果になりました。

# SDK 2.0.0 で temperature を渡した場合(モック越し)
c.messages.create(model="claude-sonnet-4-6", max_tokens=10,
                  temperature=0.2, messages=[{"role": "user", "content": "hi"}])
# TypeError: Messages.create() got an unexpected keyword argument 'temperature'

エラーの出どころが SDK なので、ログに API の 400 は残りません。「通信していないのに失敗している」ように見えて、最初は少し戸惑いました。

直し方は引数を消すだけですが、一つだけ判断が要ります。Claude 4.7 以降のモデルは、もともと既定値しか受け付けないので、挙動は変わりません。一方で Sonnet 4.6 のように別の値を受けるモデルでは、温度を下げて出力を安定させていた呼び出しが、その効果を失います。

代わりになる設定は、公式ガイドによれば用意されていません。固定したい呼び出しがあるなら、その呼び出しだけ旧 API バージョンに残す、という選び方になります。

2. 鍵のヘッダが変わるので、ゲートウェイ側を見ます

2つ目は、気づきにくい変更です。新しい SDK は、API キーを X-Api-Key ではなく Authorization: Bearer <鍵> で送ります。

モックに届いたヘッダを実際に覗いてみました。

authorization: Bearer sk-ant-test
anthropic-version: 2026-10-21

Claude API 自体はどちらのヘッダも受け付けます。ですから、直接つなぐ構成なら何も起きません。

困るのは、間にプロキシやゲートウェイを置いている構成です。X-Api-Key を見て鍵を差し替えたり、ログから伏せたりしている場合、今度は別のヘッダを見る必要があります。

ゲートウェイ側を直せない事情があるときは、公式ガイドの方法で SDK 側から鍵を元のヘッダへ戻せます。同じ関数をモックで動かし、x-api-key だけが届くことを確かめました。

import httpx2
from anthropic import Anthropic, DefaultHttpxClient
 
def send_x_api_key(request: httpx2.Request) -> httpx2.Request:
    # Authorization に載った鍵を、X-Api-Key へ付け替える
    if request.headers.get("Authorization") == f"Bearer {api_key}":
        del request.headers["Authorization"]
        request.headers["X-Api-Key"] = api_key
    return request
 
client = Anthropic(api_key=api_key,
                   http_client=DefaultHttpxClient(auth=send_x_api_key))

付け替えた結果、モックに届いたのは x-api-key だけでした。この関数は再試行のたびに走るので、一度書けば抜けは出ません。

3. 認証が二つ重なると、止まるか警告が出ます

3つ目は、鍵とトークンを両方持っている環境で起きます。新しい SDK では、クライアントが持てる認証は一つだけです。

コンストラクタで二つ渡すと、その場で止まります。

Anthropic(api_key="a", auth_token="b")
# ValueError: Pass at most one of `api_key=`, `auth_token=`, `credentials=`,
#             `config=`, or `profile=`. Received `api_key=`, `auth_token=`.

環境変数の場合は止まらず、優先順位で一つが選ばれます。ANTHROPIC_API_KEY と ANTHROPIC_AUTH_TOKEN を両方入れて試すと、警告が一度だけ出て、鍵のほうが使われました。

Anthropic: ANTHROPIC_API_KEY and ANTHROPIC_AUTH_TOKEN are both set. Using ANTHROPIC_API_KEY.

ここが、いちばん見落としやすいと感じました。止まってくれるなら気づけますが、静かに鍵が選ばれると、トークンのつもりで書いた設定が使われないまま動き続けるからです。

以前のように「ゲートウェイ向けにトークン、その先の API に鍵」と両方を送っていた方は、トークンを auth_token で渡し、鍵は default_headers に入れる形へ組み替えます。ゲートウェイ側で Authorization を外してから転送する、という約束も必要です。

上げる前の確認順

私は、いくつか試したうえで次の順番に落ち着きました。短く、手順だけにします。

  1. 呼び出し箇所を検索し、temperature top_p top_k を探します
  2. 固定したい呼び出しがあれば、その呼び出しだけ旧 API バージョンに残すと決めます
  3. ゲートウェイや社内プロキシが X-Api-Key を見ていないか確認します
  4. 環境変数に ANTHROPIC_API_KEY と ANTHROPIC_AUTH_TOKEN が同居していないか見ます
  5. モックで一度通してから、本物の鍵で一回だけ呼びます

ほかにも、MessageParam(...) のように関数として呼ぶ書き方は、2.0.0 では型の合併になったため TypeError: Cannot instantiate typing.Union になります。辞書で書いていれば影響はありません。Bedrock で古いモデルを呼んでいる場合は、新しい API バージョンが使えないので、今の SDK のまま残す必要もあります。

線引きとして残したいこと

依存の更新は、本物の鍵を使う前に、通信を差し替えたモックで一度通すようにしています。壊れる場所は、リリースノートより先に、手元の出力が教えてくれます。

今回の3か所は、どれも公式の移行ガイドに書かれていました。それでも、自分の環境でどこに当たるのかは、動かしてみるまで分からなかったのだと、いま思えば感じます。

まずはお手元のスクリプトで、temperature の検索から始めてみてください。

SDK 2.0.0 への更新は、依存の更新日を一つ決めて、モックの確認とあわせて回しております。

シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

もしこの記事がお役に立ちましたら、チップ(¥150)で応援いただけると大変励みになります。広告なしでの運営を続けるため、皆さまのご支援が大きな力になっています。

関連記事

⬡ API & SDK2026-10-25
SDK を上げた途端に temperature が 400 になる前に、呼び出し箇所を洗いました
API バージョン 2026-10-21 では temperature・top_p・top_k を送ると、既定値でも 400 が返ります。SDK の更新で切り替わる仕組みと、先に洗っておく記述を拾う小さなスキャナ、直す順番をまとめました。
⬡ API & SDK2026-10-20
構造化出力を output_config.format へ移す — beta ヘッダーを外す前に確かめておきたい差分
output_format と beta ヘッダーで書いた構造化出力を output_config.format へ移すときの差分を、公式ドキュメントから洗い出しました。Python SDK の TypeError、プロンプトキャッシュの無効化、拒否や途中切れで崩れるスキーマまで、移行前に確かめる順番を整理します。
⬡ API & SDK2026-10-13
Haiku 5.5 は単価が下がるのに、4.5 換算で約 7.7 万トークンを超えると請求が跳ねます
Haiku 4.5 から 5.5 へ移すと、価格表だけ見れば約 1/10 です。ただし同じ文章が約 30% 多いトークンになり、入力が 10 万を超えた時点で単価が 5 倍になります。境目を 4.5 換算で計算し、実際に動かした出力と、移行時に直す 400 の項目を並べました。