Published on

Claude-Token zählen statt schätzen

Authors

Token für Claude korrekt zählen

TL;DR

tiktoken ist der Tokenizer von OpenAI und für Claude falsch — er unterschätzt den Verbrauch bei typischem Text spürbar und bei Code sowie deutschsprachigen Inhalten deutlich stärker. Anthropic stellt einen eigenen Endpunkt bereit, und die Zählung ist modellabhängig: Dasselbe Modell-Kürzel, das Sie produktiv nutzen, gehört auch in die Zählung.


Warum die Schätzung nicht trägt

Die verbreitete Faustformel lautet "vier Zeichen sind ein Token". Für englischen Fließtext kommt das ungefähr hin. Für die Inhalte, mit denen deutsche Unternehmen arbeiten, nicht:

Deutsche Komposita werden in mehr Teilstücke zerlegt als englische Wortfolgen. "Druckbehälterprüfintervall" ist ein Wort und mehrere Token.

Code tokenisiert dichter — Einrückungen, Klammern, Bezeichner in Binnenmajuskel.

Strukturierte Daten wie JSON oder Tabellen erzeugen viele kurze Token durch Trennzeichen.

Wer auf Basis einer Faustformel budgetiert, liegt bei einem deutschen Fachkorpus regelmäßig zweistellig prozentual daneben — und zwar nach unten.

Der richtige Weg

from anthropic import Anthropic

client = Anthropic()

resp = client.messages.count_tokens(
    model="claude-opus-5",          # dasselbe Modell wie im Produktivbetrieb
    system=SYSTEMANWEISUNG,
    messages=[{"role": "user", "content": open("CLAUDE.md").read()}],
)
print(resp.input_tokens)

Der Endpunkt berücksichtigt Systemanweisung, Werkzeugdefinitionen und Nachrichten gemeinsam — also genau das, was auch berechnet wird. Er ist kostenfrei und hat eigene Kontingente.

Auf der Kommandozeile geht es ohne Skript:

ant messages count-tokens --model claude-opus-5 \
  --message '{role: user, content: "@./CLAUDE.md"}' \
  --transform input_tokens -r

Das @-Präfix liest den Dateiinhalt ein, --transform ... -r gibt die nackte Zahl aus — direkt weiterverwendbar in einem Shell-Skript.

Die Zählung ist modellabhängig

Der Punkt, der beim Modellwechsel Budgets zerlegt: Verschiedene Modellgenerationen zählen unterschiedlich.

Beim Wechsel von Claude Sonnet 4.6 auf Claude Sonnet 5 erzeugt derselbe Text rund 30 Prozent mehr Token. Der Preis je Token ändert sich dabei nicht — die Rechnung für dieselbe Arbeit steigt trotzdem.

Was daraus folgt, wenn Sie migrieren:

  • Token-Zahlen nicht übernehmen. Zählen Sie gegen das Zielmodell neu.
  • max_tokens prüfen. Ein Wert, der beim alten Modell knapp reichte, kann beim neuen mitten in der Antwort abschneiden.
  • Kontextfenster-Budgets prüfen. Eine Million Token fassen bei dichterer Tokenisierung weniger Text.
  • Kostenkennzahlen neu bilden, bevor Sie auf einen gemessenen Anstieg reagieren.

Ein pauschaler Multiplikator hilft dabei nicht — die Abweichung hängt an der Art des Inhalts.

Zwei Versionen einer Datei vergleichen

Der Endpunkt ist zustandslos. Für einen Vergleich zählen Sie beide Fassungen und subtrahieren:

import subprocess
from anthropic import Anthropic

client = Anthropic()

def zaehle(text: str) -> int:
    return client.messages.count_tokens(
        model="claude-opus-5",
        messages=[{"role": "user", "content": text}],
    ).input_tokens

vorher = subprocess.check_output(["git", "show", "HEAD:CLAUDE.md"], text=True)
nachher = open("CLAUDE.md").read()
print(f"Differenz: {zaehle(nachher) - zaehle(vorher):+d} Token")

Nützlich, wenn eine Systemanweisung oder eine Werkzeugsammlung wächst und Sie wissen wollen, was das je Anfrage kostet — bei 17.600 Anfragen im Jahr schlägt jedes zusätzliche Kilotoken durch.

Was die Zählung nicht abdeckt

Drei Dinge, die Sie ergänzen müssen:

Ausgabe-Token lassen sich nicht vorher zählen. Sie entstehen erst bei der Erzeugung. Für die Planung nehmen Sie einen Erfahrungswert aus dem Betrieb — response.usage.output_tokens über eine repräsentative Woche.

Denk-Token zählen mit. Bei aktivem Denkmodus erzeugt das Modell zusätzlich Denk-Token, die voll berechnet werden und in max_tokens mit hineinzählen. Die Menge hängt an der Aufwandsstufe. Wer nur die Eingabe zählt, unterschätzt die Rechnung erheblich.

Der Cache verschiebt die Rechnung, nicht die Zählung. count_tokens sagt Ihnen, wie groß der Prompt ist — nicht, welcher Anteil davon zum Zehntelpreis aus dem Cache kommt. Die tatsächliche Aufteilung steht nach dem Aufruf in response.usage, aufgeteilt in ungecachte, geschriebene und gelesene Token. Die Systematik dazu steht im Beitrag zum Prompt-Caching.

Häufig gestellte Fragen

Kann ich tiktoken für Claude verwenden?

Nein. tiktoken ist der Tokenizer von OpenAI und liefert für Claude falsche Werte — er unterschätzt den Verbrauch bei typischem Text spürbar und bei Code sowie nicht-englischen Inhalten deutlich stärker. Jede Schätzung aus tiktoken, gpt-tokenizer oder vergleichbaren Werkzeugen ist für Claude unbrauchbar.

Warum hat sich mein Token-Verbrauch nach dem Modellwechsel erhöht?

Weil verschiedene Modellgenerationen unterschiedlich tokenisieren. Beim Wechsel von Claude Sonnet 4.6 auf Sonnet 5 erzeugt derselbe Text rund 30 Prozent mehr Token, bei unverändertem Preis je Token. Zählen Sie nach einem Wechsel gegen das Zielmodell neu, statt alte Werte fortzuschreiben.

Kostet das Token-Zählen etwas?

Nein, der Endpunkt ist kostenfrei. Er hat eigene Kontingente, die unabhängig von Ihren Inferenz-Kontingenten sind. Bei einer Massenauswertung über tausende Dokumente lohnt es sich trotzdem, die Zählung zu bündeln statt sie pro Anfrage auszuführen.

Wie plane ich Ausgabe-Token?

Nicht über die Zählung — Ausgabe-Token entstehen erst bei der Erzeugung. Nehmen Sie response.usage.output_tokens über eine repräsentative Woche aus dem Betrieb als Erfahrungswert. Denken Sie bei aktivem Denkmodus daran, dass zusätzlich Denk-Token anfallen, die voll berechnet werden und in max_tokens mit hineinzählen.

Berücksichtigt der Endpunkt auch Werkzeuge und Systemanweisung?

Ja, und das ist der Grund, ihn statt einer Faustformel zu nutzen. Übergeben Sie system, tools und messages genauso wie beim produktiven Aufruf — dann entspricht das Ergebnis dem, was tatsächlich berechnet wird. Werkzeugdefinitionen sind dabei oft größer, als man annimmt.


Der nächste Schritt

Zählen Sie einmal Ihre Systemanweisung samt Werkzeugdefinitionen. Bei den Installationen, die wir übernehmen, liegt dieser fixe Anteil regelmäßig über 2.000 Token — und er wird bei jeder einzelnen Anfrage berechnet, wenn er nicht gecacht ist. Wir schauen gern mit drauf.

📖 Verwandte Artikel

Weitere interessante Beiträge zu ähnlichen Themen