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

AIエージェントを"事業に載せる"ために【第3回】AI導入を止めないために、実務で先に設計すべきこと

AIエージェントを"事業に載せる"ために【第3回】AI導入を止めないために、実務で先に設計すべきこと

— AI導入を"事業に載せる"ために、いま設計すべきこと(全3回) こんにちは!Qualitegコンサルティングチームです。 今回の「AI導入を“事業に載せる”ために、いま設計すべきこと」シリーズも、いよいよ第3回です。 第1回では、実際のAI導入事故を通じて、AIエージェントのリスクが単なる技術不良ではなく、権限や運用設計の不在から生まれることを見てきました。第2回では、事故が起きたときに責任をどこに置くのか、法務・契約・組織の観点から責任分解の難しさを整理しました。 では、AI導入を止めずに前に進めるためには、実務として何を先に設計しておくべきなのでしょうか。 本記事では、品質保証の転換、人間レビューの限界、海外で進む保険市場の変化も踏まえながら、AIエージェント導入前に設計すべき5つの領域と、経営として先に答えるべき3つの問いを整理します。 1. 品質保証の転換:「AIは自信を持って間違える」を前提にする 従来のソフトウェアの品質保証は、少なくとも同じ入力に対して同じ結果を期待しやすく、仕様・テスト・再現性を軸に品質を確認する考え方に立っていました。 ISACA

By Qualiteg コンサルティング
主要LLMプロバイダーのAPI料金表 — Claude / GPT / Gemini/Grok 【2026年5月13日時点】

主要LLMプロバイダーのAPI料金表 — Claude / GPT / Gemini/Grok 【2026年5月13日時点】

こんにちは、 今回は、主要LLMプロバイダー( Claude / GPT /Gemini/Grok)のAPI料金表  をまとめてみました。(2026年5月13日時点) プロバイダ別 料金一覧 まずは各社の現行ラインナップを縦に並べた一覧をご紹介します。価格はすべて per 1M tokens、円表記は 1ドル=160円換算です。 Anthropic(Claude) モデル Status Context Input Output Cached Input Claude Opus 4.7 Fast Mode Beta(Opus専用) 1M $30.00<br>(¥4,800) $150.00<br>

By Qualiteg プロダクト開発部
コーディングエージェントの現状と未来への展望 【第3回】"書くAI"から"指揮するAI"へ──2026年の開発現場で起きている変化

コーディングエージェントの現状と未来への展望 【第3回】"書くAI"から"指揮するAI"へ──2026年の開発現場で起きている変化

こんにちは! コーディングエージェントシリーズ、ついに最終回です! 2026年に入り、Claude Code、Cursor 3、GitHub Copilot Coding Agentはいずれも、単なるコード補完やチャット型支援を超え、複数エージェントを使った開発ワークフローへ進化しつつあります。本稿では、AIコーディングエージェントの最新動向を、Claude CodeのAuto Memory / Subagents、Cursor 3のAgents Window、GitHub CopilotのCoding Agent、そしてSWE-benchの読み方まで含めて整理します。 第1回では、2025年12月時点で百花繚乱状態にあったAIコーディングエージェントの全体像を俯瞰し、商用からOSSまで20以上のツールを「CLIベース」「IDE統合型」「AI特化IDE型」「自律型」の4つのカテゴリに整理しました。 第2回では、Claude Code・Codex CLI・Aiderを詳細比較したうえで、現在のコーディングエージェントが共通して抱える構造的課題——コンテキストウィンドウの限界、セッ

By Qualiteg コンサルティング
Windows版 Claude Code を irm でインストールして「claude is not recognized」を直すまで

Windows版 Claude Code を irm でインストールして「claude is not recognized」を直すまで

こんにちは! 公式PowerShellインストーラー(irm https://claude.ai/install.ps1 | iex)で Claude Code を入れたのに、claude --version を叩くと「The term 'claude' is not recognized as a name of a cmdlet...」と怒られるときがあります これは Anthropic 公式 GitHub にも報告されている 既知のバグで、インストーラーが PATH の追加を忘れています。実際にインストール作業をやって詰まったので、最短の解決手順をまとめます。 環境 * Windows 11 * PowerShell 7.x(コードは PowerShell

By Qualiteg プロダクト開発部