0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude Sonnet 5、単価据え置きでも新トークナイザで請求が約3割増える

0
Posted at

6月30日に出たClaude Sonnet 5の値段表を見て、多くの人は「据え置きか」と思って読み飛ばした。入力100万トークンあたり3ドル、出力15ドル。前世代のSonnet 4.6と同じだ。導入価格として8月31日まで2ドル/10ドルの割引も付く。

ところが実際に本番トラフィックを流し替えた開発者が、請求ダッシュボードの数字が上がっていることに気づき始めた。単価は1円も変わっていないのに、だ。犯人はモデルの賢さでも隠れた課金項目でもなく、Anthropicがこの世代でこっそり載せ替えた新しいトークナイザにある。

🧮 なぜ「単価そのまま」で請求が増えるのか

課金は「トークン数 × 単価」で決まる。単価が同じでも、同じ文章がより多くのトークンに分割されれば、掛け算の答えは大きくなる。トークナイザとは、テキストを「dog」「▁the」のような処理単位(トークン)に刻む部品のこと。ここを差し替えると、1文字あたり何トークンになるかの換算率そのものが変わる。

Anthropicは公式ドキュメントでこう明言している。

Claude Sonnet 5 uses a new tokenizer. The same input text produces approximately 30% more tokens than on Claude Sonnet 4.6.

同じテキストでおよそ3割多くトークンを食う、という意味だ(What's new in Claude Sonnet 5)。これはAPIの形が変わったわけではない。リクエストもレスポンスもストリーミングも構造は同じで、コード変更は要らない。効いてくるのは「トークンで測る・見積もるものすべて」だ。請求額はもちろん、1Mトークンのコンテキストウィンドウに入る実テキスト量は減り、Sonnet 4.6向けにギリギリで詰めたmax_tokensは、同じ出力なのに途中で切れることがある。

だから移行時にまず走らせるべきは新モデルへのcount_tokensの測り直しだ。過去に測ったトークン数を使い回すと見積もりが狂う。

# 同じ messages でも Sonnet 5 では返る数が増える
count = client.messages.count_tokens(
    model="claude-sonnet-5",
    messages=[{"role": "user", "content": prompt}],
)
print(count.input_tokens)

移行で 400 が返る3つの落とし穴

トークナイザ以外に、Sonnet 4.6のコードをそのまま向けると400エラーで弾かれる挙動変更が3つある。ドキュメントは「ドロップイン交換」と表現しているが、この3点だけは手当てが要る。

まずサンプリングパラメータの禁止temperaturetop_ptop_kを既定以外の値に設定すると400が返る。出力のばらつきを温度で制御していたコードは、パラメータを外してシステムプロンプト側の指示に寄せる必要がある(Opus 4.7で先に導入された制約が、ついにSonnet系にも降りてきた形だ)。

次に手動の拡張思考(extended thinking)の廃止thinking: {type: "enabled", budget_tokens: N}は削除され、これも400になる。代わりに使うのが既定でオンになった適応思考(adaptive thinking)で、思考の深さはeffortパラメータ(既定high)で調整する。

そして三つ目、その適応思考が既定でオンになったこと自体が地味に効く。Sonnet 4.6ではthinkingフィールドを付けなければ思考なしで走ったが、Sonnet 5では同じリクエストが思考ありで動く。max_tokensは「思考+応答テキスト」の合計に対する上限なので、思考なし前提で切り詰めていたワークロードは応答が切れやすくなる。移行の実体は概ねこうなる。

# Before(Sonnet 4.6)
resp = client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=4096,
    temperature=0.7,                                    # ← Sonnet 5 では 400
    thinking={"type": "enabled", "budget_tokens": 8000},# ← Sonnet 5 では 400
    messages=messages,
)

# After(Sonnet 5)
resp = client.messages.create(
    model="claude-sonnet-5",
    max_tokens=8192,                     # 思考込みの総量。余裕を持たせる
    thinking={"type": "adaptive"},       # 既定でオン。切るなら {"type": "disabled"}
    messages=messages,
)

思考を止めたいだけならthinking={"type": "disabled"}で明示的にオフにできる。

英語は約1.4倍、簡体字中国語はほぼ変わらない

ここで一つ、ソース間の食い違いを挙げておきたい。公式ドキュメントは「約30%増」と単一の値で書く一方、発表ブログは「コンテンツ種別によって概ね1.0〜1.35倍」とレンジで書いている。そして独立に実測したSimon Willison氏の記録は、この上限をさらに超える数字を出している。

入力の種類 Sonnet 4.6比のトークン倍率
英語の散文 約1.4倍
スペイン語 約1.33倍
Pythonコード 約1.27〜1.28倍
簡体字中国語 ほぼ変わらず

英語の散文で約1.4倍という実測値は、Anthropic自身が示した「最大1.35倍」のレンジをはみ出している。つまり**「30%」は目安であって保証ではない**。倍率は言語とコンテンツ形状に強く依存し、自然言語ほど増え、既に細かく刻まれていた表意文字はあまり動かない、という傾向が読み取れる。

実務上の含意は明快だ。あなたのプロンプトが英語のドキュメントで埋まっているなら3〜4割増を覚悟し、コード中心なら3割弱、と当たりを付けられる。なお公開されている実測に日本語は含まれていないので、日本語混じりのプロンプトを扱うなら「たぶん3割」と決め打ちせず、自分のワークロードでcount_tokensを回して測るのが唯一まともなやり方だ。

測ってから移す

Sonnet 5は、コーディングとエージェント系タスクで4.6を明確に上回りつつ価格は据え置き、というのが素直な評価だ。1Mトークンのコンテキストと128kの最大出力に対応し、ベンチマーク上はOpus 4.8に迫るとAnthropicは説明している。乗り換える理由は十分ある。

引っかかるのは、値上げが「単価」ではなく「トークン数の増加」という見えにくい経路で来る点だ。価格表を見ただけの人には気づけない。だから移行の順番は、モデルIDを差し替える前に、代表的なプロンプト数本を新旧のcount_tokensに通し、月間コストがどれだけ動くかを先に見ておくこと。そのうえでtemperature系を外し、thinkingを適応思考に直し、max_tokensを思考込みで取り直す。この3手当てと1回の実測を済ませれば、請求ダッシュボードで驚かずに済む。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?