KostenoptimierungAnleitung
Zähle Tokens, bevor du eine Anfrage sendest: tiktoken in Python
Schätze die Token-Anzahl eines Prompts offline mit tiktoken, prüfe sie gegen das Kontextfenster, bepreise sie und vergleiche sie mit dem usage-Feld der API.

Auf dieser Seite
Du kannst die Tokens eines Prompts auf deiner eigenen Maschine zählen, bevor er gesendet wird: installiere tiktoken, kodiere den Text, nimm len() des Ergebnisses. tiktoken ist OpenAIs Tokenizer, daher ist die Zahl für DeepSeek-, GLM- und MiniMax-Modelle eine Schätzung. Die tatsächliche Zahl kommt nach dem ersten Aufruf in usage. zurück, und der Vergleich der beiden kostet eine weitere Zeile.
Warum sich das lohnt? Weil sowohl die Rechnung als auch die Fehler mit der Eingabegröße beginnen. Füge einen langen Vertrag in ein Skript ein, und du erfährst erst, dass er zu groß war, wenn die API mit einem 400 antwortet. Führe einen Batch von fünftausend E-Mails aus, und du erfährst erst, was er gekostet hat, wenn das Guthaben niedriger ist. Vorher zu zählen verwandelt beide Überraschungen in eine Zahl, die du im Voraus lesen kannst.
Fünf Zeilen, die Tokens zählen#
Die tiktoken README (geprüft am 1. November 2026) zeigt die ganze Idee: wähle eine Kodierung, kodiere den Text, und die Länge der Liste ist die Token-Anzahl.
pip install tiktokenimport tiktoken
enc = tiktoken.get_encoding('o200k_base')
text = 'Hello world'
tokens = enc.encode(text)
print(len(tokens)) # how many tokens the text is
enc. gibt den Originaltext zurück, was eine praktische Plausibilitätsprüfung ist, dass du denselben Text siehst, den das Modell sehen wird. Die README erwähnt außerdem tiktoken., das den Tokenizer für ein bestimmtes OpenAI-Modell auswählt. Das ist der Haken, den man sich merken sollte: Tokenizer gehören zu Modellfamilien. Die Faustregel der README sind etwa vier Bytes Text pro Token, und sie beschreibt nur OpenAIs Tokenizer.
Was machst du also für ein DeepSeek-Modell? Verwende dieselbe Zählung als Arbeits-Schätzung und kalibriere sie, wie unten gezeigt.
Zahl erraten
Wie viele Tokens sind grob ein englischer Text mit 2.000 Zeichen?
Deine Schätzung
02.000
Antwort anzeigen
Antwort: 500
Etwa 500. Mit der Faustregel der README von vier Bytes pro Token und einfachem englischem Text bei etwa einem Byte pro Zeichen ergibt sich 2.000 ÷ 4 = 500. Andere Sprachen und Emoji brauchen mehr Bytes pro Zeichen, daher bedeuten dieselben 2.000 Zeichen nach dieser Regel meist mehr Tokens.
Passt der Prompt ins Fenster?#
Jedes Modell hat ein Kontextfenster, und deine Eingabe plus die Antwort, die du zulässt, müssen hineinpassen. Die Fenster für die Modelle, die wir anbieten: DeepSeek-V4-Flash 380K, GLM-5.3-Flash 390K, MiniMax-M2.7 180K Tokens. Die längste Antwort ist 32.768 Tokens für DeepSeek-V4-Flash und 8.192 für die anderen beiden (CheapTokens-Modellliste, 1. November 2026).
Eine Absicherung vor dem Aufruf sind vier Zeilen:
CONTEXT = {
'deepseek-ai/DeepSeek-V4-Flash-0731': 380_000,
'zai-org/GLM-5.3-Flash': 390_000,
'MiniMaxAI/MiniMax-M2.7': 180_000,
}
def fits(prompt_tokens, max_tokens, model):
return prompt_tokens + max_tokens <= CONTEXT[model]Angenommen, du hast ein Dokument mit 250.000 Tokens. fits(250_ ist False, also leitest du diesen Job an ein Modell mit größerem Fenster weiter oder teilst das Dokument auf, und der 400 tritt nie auf. fits(250_ ist True. Wenn du die ganze Geschichte darüber willst, wie der Fehler aussieht, geht request too long: 400 vs 413, context window and max_tokens darauf ein.
Was wird es kosten?#
Jetzt das Budget. Nimm ein typisches Element, zähle es und multipliziere. Angenommen, du klassifizierst 5.000 Bestell-E-Mails. Du zählst eine repräsentative E-Mail und erhältst etwa 800 Eingabe-Tokens, und du begrenzt das Label und eine kurze Begründung auf 200 Ausgabe-Tokens. Die Summen: 5.000 × 800 = 4.000.000 Eingabe-Tokens und 5.000 × 200 = 1.000.000 Ausgabe-Tokens.
Die folgende Tabelle bepreist genau diese Arbeitslast zu Live-Preisen, mit Eingabe und Ausgabe zusammen gezählt:
| Modell | Input $/1M | Output $/1M | Pro Anfrage | 5.000 Anfragen | OpenRouter, 5.000 Anfragen |
|---|---|---|---|---|---|
| GLM-5.3-Flash | $0.02 | $0.04 | $0.000024 | $0.12 | $0.217 |
| DeepSeek-V4-Flash | $0.015 | $0.10 | $0.000032 | $0.16 | $0.42 |
| MiniMax-M2.7 | $0.05 | $0.15 | $0.00007 | $0.35 | $4.20 |
800 Input- und 200 Output-Tokens pro Anfrage. Die Preise pro 1 Mio. Tokens sind aktuell und ändern sich zusammen mit unseren Tarifen; die OpenRouter-Spalte zeigt Referenzpreise für dieselbe Arbeitslast.
Insgesamt, mit Eingabe und Ausgabe zusammen gezählt, ist die CheapTokens-Spalte für diese Modelle günstiger als OpenRouter. Ändere die drei Zahlen auf deine eigenen Zählungen, und du hast ein Budget vor der ersten Anfrage. Für den Unterschied zwischen den beiden Seiten der Rechnung siehe input vs output tokens: what an AI API bills you for, und für echte gemessene Beispiele how many tokens an API request uses. Aktuelle Preise stehen immer auf der Preisseite.

Vergleiche die Schätzung mit der Usage#
Die Schätzung ist eine Vermutung über den Tokenizer von jemand anderem, also prüfe sie einmal gegen den Lösungsschlüssel. Jede Antwort trägt ein usage-Feld, und usage. ist das, was die API für deine Eingabe gezählt hat. Stelle die beiden Zahlen nebeneinander und dividiere.
Schritt für Schritt
Führe den Vergleich aus
Einrichtung
Installiere die Pakete und lege den Schlüssel in einer Umgebungsvariable ab. Füge ihn niemals in das Skript ein.
pip install tiktoken openai
export CHEAPTOKENS_API_KEY='your-key-here'Führe das Skript aus
Speichere dies als compare.py. Es zählt lokal, sendet die Anfrage an https:/ und gibt beide Zahlen aus. Die Modell-ID ist die vollständige aus der CheapTokens-Modellliste, da verkürzte Namen nicht akzeptiert werden.
import os
import tiktoken
from openai import OpenAI
MODEL = 'deepseek-ai/DeepSeek-V4-Flash-0731'
enc = tiktoken.get_encoding('o200k_base')
messages = [{'role': 'user',
'content': 'Classify this email as order, refund or other: Hi, my parcel from last Tuesday has not arrived yet.'}]
estimate = sum(len(enc.encode(m['content'])) for m in messages)
client = OpenAI(base_url='https://api.cheaptokens.dev/v1',
api_key=os.environ['CHEAPTOKENS_API_KEY'])
r = client.chat.completions.create(model=MODEL, messages=messages, max_tokens=200)
real = r.usage.prompt_tokens
print(f'estimate {estimate}, usage.prompt_tokens {real}, ratio {real / estimate:.2f}')Lies die Abweichung
Die letzte Zeile gibt drei Zahlen aus. Angenommen, sie zeigt estimate 24, usage.. Dann multipliziere deine zukünftigen Schätzungen vor der Budgetierung mit dem Verhältnis. Ein echter Prompt wird außerdem in Chat-Formatierung eingebettet, daher kann die echte Zählung etwas über der Klartext-Schätzung liegen. Führe es mit einigen typischen Prompts aus, nicht nur einem, und verwende das durchschnittliche Verhältnis.
Ab dann lautet die Routine: lokal schätzen, das Fenster absichern, dein Verhältnis auf das Budget anwenden und dich durch usage in jeder Antwort ehrlich halten lassen. Wenn du auch die laufende Summe über einen ganzen Job willst, baut track AI agent token cost in Python das auf demselben Feld auf. Neu bei der Verbindung selbst? Your first API request with CheapTokens behandelt das, und die Docs haben den Rest.
Paare zuordnen
Ordne jeden Namen dem zu, was er dir sagt
Tippe auf ein Element links, dann auf sein Paar
- len(enc.encode(text))Deine lokale Schätzung der Eingabegröße
- usage.prompt_tokensDie Eingabegröße, wie die API sie gezählt hat
- usage.completion_tokensDie Größe der Antwort, auf der Ausgabeseite bepreist
- max_tokensDie Obergrenze für die Antwortlänge, die du bei der Fensterprüfung reservierst
Zählen ist günstig, lokal und dauert Sekunden. Tu es vor dem Aufruf, der Geld kostet.



