Anthropic Python SDKのcount_tokens機能が0.75.0~正式版に変わりました:移行ガイド

Anthropic Python SDKのcount_tokens機能が0.75.0~正式版に変わりました:移行ガイド

こんにちは!

本日は Anthropic Claude API を使用するのに便利な Anthropic Python SDK に関する話題です!

2週間ほど前にわりと大きな変更がありましたので、解説いたします。

はじめに

「あれ、client.count_tokens() が動かない...」

Anthropic Python SDKをアップデートしたら、今まで動いていたトークンカウントのコードがエラーになった。そんな経験をされたLLMエンジニアの方も多いのではないでしょうか。

当社のBestllamのように、LLM統合サービスを開発していると、実際にユーザーがどれほどのトークンを使用しているのかを正確に把握することは非常に重要になります。利用料金の計算、コンテキストウィンドウの管理、そしてユーザーへの使用量の可視化など、トークンカウント機能はサービスの根幹を支える機能です。そのため、この機能が突然動かなくなると影響は小さくありません。

ゆえに本番サービスを提供している場合、pip install で気軽にSDKバージョンを上げてはいけません。

さて、Anthropic Python SDK ですが、実は、0.74.1(2025年11月20日リリース)から0.75.0(2025年11月25日リリース)にかけて大きな変更がありました。

さらに、それより前にもSDKのバージョン0.39.0(2024年11月5日リリース)でトークンカウント機能は大きく刷新されましたので、そこからの更新も本記事の対象としたいと思います。
それでは、これら変更の背景と、新しいAPIへの移行方法を解説していきます!

1.何が変わったのか

廃止されたAPI

バージョン0.38.x以前では、以下のようにトークン数を取得していました。

# 旧API(0.38.x以前)- もう動きません
client = Anthropic()
token_count = client.count_tokens("こんにちは、世界")

シンプルで使いやすいAPIでしたが、バージョン0.39.0でこの client.count_tokens()client.get_tokenizer() は完全に削除されました。

アップデート後にこれらを呼び出すと AttributeError が発生します。

なぜ廃止されたのか→マルチモーダル化に対応するため

理由はClaudeの進化にあります。Claude 3以降、モデルは画像やPDFを理解できるようになりました旧APIはテキスト専用だったため、これらマルチモーダルコンテンツのトークン数を計算できませんでした

また、システムプロンプトやツール定義など、実際のAPI呼び出しで消費される全てのトークンを正確に計算することも困難でした。

Anthropicは中途半端な互換性維持よりも、新しい設計への完全移行を選択してようですね。

2.新しいAPIの使い方

基本形

新しいAPIは client.messages.count_tokens() です。messages.create() とほぼ同じパラメータを受け付けます。

# 新API(0.75.0以降)
from anthropic import Anthropic

client = Anthropic()

response = client.messages.count_tokens(
    model="claude-sonnet-4-5-20250929",
    messages=[
        {"role": "user", "content": "こんにちは、世界"}
    ]
)

print(response.input_tokens)  # トークン数

ただ、重要な違いは三点あります。

まず、model パラメータが必須になりました。トークン化の方法はモデルによって異なるためです。

次に、テキストを直接渡すのではなくメッセージ構造として渡します。最後に、返り値が整数ではなくオブジェクトになり、.input_tokens でトークン数を取得します。

システムプロンプトやツールも計算できる

この新APIの強みは、実際のAPI呼び出しと同じ構造でトークン数を計算できる点です。

response = client.messages.count_tokens(
    model="claude-sonnet-4-5-20250929",
    system="あなたは親切なアシスタントです。",
    messages=[
        {"role": "user", "content": "こんにちは"},
        {"role": "assistant", "content": "こんにちは!何かお手伝いできますか?"},
        {"role": "user", "content": "天気を教えて"}
    ],
    tools=[
        {
            "name": "get_weather",
            "description": "天気を取得します",
            "input_schema": {
                "type": "object",
                "properties": {
                    "location": {"type": "string"}
                },
                "required": ["location"]
            }
        }
    ]
)

response.input_tokens でトークン数を取得できます

# トークン数を取得
print(response.input_tokens)  # 例: 142

システムプロンプト、会話履歴、ツール定義、全てのトークン数が正確に計算されます。

画像やPDFにも対応

マルチモーダルコンテンツのトークン数も計算できます。これが一番重要なポイントでしょう。

import base64

with open("image.png", "rb") as f:
    image_data = base64.standard_b64encode(f.read()).decode("utf-8")

response = client.messages.count_tokens(
    model="claude-sonnet-4-5-20250929",
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "image",
                    "source": {
                        "type": "base64",
                        "media_type": "image/png",
                        "data": image_data
                    }
                },
                {"type": "text", "text": "この画像を説明してください"}
            ]
        }
    ]
)

print(response.input_tokens)  # 画像サイズに応じたトークン数が返る

3.移行の手順

ステップ1:SDKをアップデートする

まず、SDKを0.75.0以上(2025年12月9日、ブログ執筆時点で最新)にアップデートしてください。

pip install anthropic>=0.75.0

実は冒頭にも書きましたが、0.39.0から0.74.xの間は client.beta.messages.count_tokens() という形式でベータ提供されていました。

# ベータ版API(0.39.0〜0.74.x)- 2025/12/9現在は非推奨
response = client.beta.messages.count_tokens(
    betas=["token-counting-2024-11-01"],  # ベータヘッダーが必要だった
    model="claude-3-5-sonnet-20241022",
    messages=[
        {"role": "user", "content": "こんにちは"}
    ]
)
print(response.input_tokens)

0.75.0以降は正式版として client.messages.count_tokens() が使えます。ベータヘッダーの指定も不要になりました。

# 正式版API(0.75.0以降)- 現在の推奨
response = client.messages.count_tokens(
    model="claude-sonnet-4-5-20250929",
    messages=[
        {"role": "user", "content": "こんにちは"}
    ]
)
print(response.input_tokens)

ステップ2:コードを書き換える

旧コードと新コードの対応を示します。

# 旧:シンプルなテキスト
count = client.count_tokens("Hello")

# 新:メッセージ構造で渡す
response = client.messages.count_tokens(
    model="claude-sonnet-4-5-20250929",
    messages=[{"role": "user", "content": "Hello"}]
)
count = response.input_tokens

あらかじめ、こういうヘルパー関数を作っておくと移行が楽になります。

def count_tokens(client, text, model="claude-sonnet-4-5-20250929"):
    """旧APIと同じ感覚で使えるヘルパー関数"""
    response = client.messages.count_tokens(
        model=model,
        messages=[{"role": "user", "content": text}]
    )
    return response.input_tokens

ステップ3:requirements.txtを更新する

本番環境では、バージョンを明示的に固定することをお勧めします。

anthropic>=0.75.0,<1.0.0

4.FAQ

「0.39.0のままだと問題ある?」

0.39.0でも動きますが、client.beta.messages.count_tokens() という形式でベータヘッダーの指定が必要です。0.75.0以降なら正式版として安定したAPIが使えるため、こちらをお勧めします。

「APIコールとして課金されますか?」

count_tokens はAPIリクエストとしてカウントされますが、トークン課金はされません。ただし、レート制限の対象にはなる可能性があるため、大量のリクエストを送る場合は注意しましょう。

「非同期で使えますか?」

使えます。AsyncAnthropic クライアントで同じメソッドを await 付きで呼び出してください。

from anthropic import AsyncAnthropic

client = AsyncAnthropic()
response = await client.messages.count_tokens(
    model="claude-sonnet-4-5-20250929",
    messages=[{"role": "user", "content": "Hello"}]
)

おわりに

トークンカウントAPIの変更は、Claudeのマルチモーダル化という大きな進化に伴うものでした。マルチモーダル化は正常進化だと思っていましたが、案外APIは目の前の仕様(テキストのみのやりとり)のみ設計思想のベースにしていたことが逆に意外でしたね。

新しいAPIは、テキストだけでなく画像やPDF、ツール定義まで含めた正確なトークン数を計算できます。

移行作業は少し手間がかかりますが、より正確で実用的なトークン管理が可能になります。この機会にぜひアップデートしてみてください。

それでは、また次回お会いしましょう!

Read more

今からはじめるClaude Code

今からはじめるClaude Code

こんにちは! 今日は、最近エンジニアの間で話題になっているAIコーディングエージェント「Claude Code」について取り上げます。 AIによるコーディング支援ツールはここ1〜2年で一気に増え、「結局どれを選べばいいのか分からない」と感じている方も多いのではないでしょうか。本記事では、そうした中でClaude Codeを実際に使ってみた所感と、Windows環境での導入・運用の考え方を整理していきます。 AIコーディングツール、どれを使う? 2025年は、AIコーディング支援が一気に“実用品”になり、選択肢が増えすぎて迷いやすい年になりました。 GitHub Copilot、Cursor、Windsurf、Devin、Aider、Cline、OpenHandsなど、商用からオープンソースまで含めると、軽く20種類を超えます。 機能や思想が似ているものも多く、情報を追うだけで疲れてしまう、という方も少なくないと思います。 以前、当社ブログでは「AIコーディングエージェント20選」で全体像を整理しました。 AIコーディングエージェント20選!現状と未来への展望 【第1回】

By Qualiteg プロダクト開発部, Qualiteg コンサルティング
日本語対応 LLMランキング2025 ~ベンチマーク分析レポート~(12月18日版)

日本語対応 LLMランキング2025 ~ベンチマーク分析レポート~(12月18日版)

はじめに 本レポートは、Nejumi Leaderboard 4のベンチマークデータ(2025/12/18版)に基づいて、日本語対応LLMの性能を総合的に分析したものです。 前回は 2025/10/12 版の分析レポートを公開しましたが、たった2か月で劇的な変化がありました! (定期的に最新LLMランキングを更新してまいります。当社のX(旧Twitter)をフォローいただくことで更新情報を受け取り可能です) Nejumi Leaderboard 4は、日本語タスクにおけるLLMの性能を多角的に評価する信頼性の高いベンチマークとして知られています。 本分析では、商用APIモデルとオープンモデルの両方を対象に、それぞれの特徴や傾向を詳しく見ていきます。 オープンソースモデルについて Weightがオープンなモデルは場合によっては「オープンソースモデル」、「OSSモデル」と呼ばれますが、モデルによっては「オープンソース」と呼ぶには不十分な場合があるため本稿では、「オープンソースモデル」ではなく「オープンモデル」と表現しています。 ベンチマーク分析について 本レポートは、

By Qualiteg コンサルティング, Qualiteg プロダクト開発部
AIコーディングエージェント20選!現状と未来への展望 【第1回】全体像と基礎

AIコーディングエージェント20選!現状と未来への展望 【第1回】全体像と基礎

こんにちは! 今回は、20種類以上あるまさに百花繚乱なAIコーディングツールを一挙に紹介&解説していきたいとおもいます! AIをつかったコーディングはもはや常識となり、日々目まぐるしく新しいツールが登場しています。当社でも自社開発のAIコーディングツールをふくめ複数のツールを活用してソフトウェア開発をすすめていますが、次々とナイスなツールがでてきて興奮しつつも、正直キャッチアップが追いつかない…!という状況です。 「結局どれを使えばいいの?」「Claude CodeとCursorって何が違うの?」「オープンソースでも使えるやつあるの?」——そんな疑問を持っている方も多いのではないでしょうか。 そこで本シリーズでは、2025年12月時点でのAIコーディングツールを徹底的に整理してみました。商用サービスからオープンソースまで、20以上のツールを比較しながら、それぞれの特徴や使いどころ、そして現時点での限界についても現場視点をいれながら正直にお伝えしていければとおもいます ※「AIコーディングツール」は「コーディングエージェント」といったほうが今風なので記事内ではコーディングエー

By Qualiteg コンサルティング
【NPM】クラシックトークンが2025年12月9日に完全廃止されたことに伴うパッケージのインストールエラー(403)と対処法

【NPM】クラシックトークンが2025年12月9日に完全廃止されたことに伴うパッケージのインストールエラー(403)と対処法

こんにちは! 本日は2025年12月9日に行われた npm に関する重要なアップデートについて解説いたします! 2025年12月9日、npmがセキュリティ強化のためclassic tokenを完全に無効化しました。 この影響で、プライベートパッケージを使用しているプロジェクトで突然npm installが失敗するケースが発生しています。(パブリックパッケージの使用には影響はありません) 本記事では、実際に遭遇したエラーと解決方法についてみていきたいと思います。 発生した問題 症状 プライベートパッケージ(@your-org/package-name形式)を含むプロジェクトで npm install を実行すると、以下のようなエラーが発生 パターン1: 404エラー npm ERR! code E404 npm ERR! 404 Not Found - GET https://registry.npmjs.org/@your-org/package-name/... npm ERR! 404 '@your-org/package-name@x.x.

By Qualiteg プロダクト開発部