Sie haben eine 12.000 Token lange Eingabeaufforderung an Claude gesendet und eine Antwort erhalten, die mitten im Satz abgebrochen wurde. Oder Sie haben ein System entwickelt, das im Test einwandfrei funktionierte, dann aber in der Produktion ausfiel, weil reale Benutzereingaben Sie über das Limit brachten. Token-Limits sind keine Ausnahmefälle – sie sind strukturelle Einschränkungen, um die herum Sie Ihre Architektur aufbauen müssen.
Token sind keine Wörter. Das ist das Erste, was die Intuition der Leute bricht.
Was Token wirklich sind
Ein Token ist ein Textstück, das ein Sprachmodell als Einheit verarbeitet. Ein Token kann ein einzelnes Zeichen, ein Teil eines Wortes, ein ganzes Wort oder ein Satzzeichen sein. Die genaue Aufschlüsselung hängt vom Tokenizer ab – dem Algorithmus, der den Text in Stücke zerlegt, bevor das Modell ihn sieht.
Englischer Text hat durchschnittlich etwa 1,3 Token pro Wort, aber das ist nur ein Durchschnitt. Code ist dichter – oft 1,7+ Token pro Wort, da Operatoren und Klammern separat tokenisiert werden. JSON ist noch schlimmer. Ein einzelnes Leerzeichen oder ein Zeilenumbruch kann ein eigenes Token sein.
Das ist wichtig, weil Sie pro Token bezahlt werden und Ihr Kontextfenster in Token gemessen wird, nicht in Wörtern. Wenn Sie denken, Sie haben 128.000 Token Platz und speichern Text mit 1,5 Token pro Wort, haben Sie tatsächlich nur etwa 85.000 Wörter – nicht 128.000.
Die meisten Modelle geben ihre Token-Limits als Eingabe + Ausgabe an. Claude 3.5 Sonnet hat ein 200.000 Token umfassendes Kontextfenster. Das bedeutet, Ihre Eingabeaufforderung (Eingabe-Token) plus die Antwort des Modells (Ausgabe-Token) dürfen zusammen nicht 200.000 überschreiten. Wenn Ihre Eingabeaufforderung 150.000 Token beträgt, haben Sie noch etwa 50.000 Token für die Antwort übrig, bevor das Modell abbricht.
Warum das Ihre Pläne durchkreuzt
Der häufigste Fehler: Sie entwerfen ein System, das mit einer 10.000 Token langen Eingabeaufforderung isoliert funktioniert, und fügen dann RAG-Abrufe, Konversationsverlauf, Systemanweisungen und Benutzereingaben hinzu, alles gestapelt. Jetzt sind Sie bei 45.000 Token pro Anfrage, und entweder stoßen Sie an Grenzen oder Ihre Kosten steigen um das 4- bis 5-fache Ihrer Schätzung.
Der zweite Fehler: Sie stopfen alles in den Kontext, weil Sie es können, und dann sinkt die Ausgabequalität des Modells. Lange Kontexte beeinträchtigen die Denkfähigkeit. Das ist keine Übertreibung – es ist messbar. Claudes Leistung bei Aufgaben verschlechtert sich merklich über etwa 100.000 Token hinaus, auch wenn es 200.000 verarbeiten kann.
Der dritte Fehler: Sie berücksichtigen keine Ausgabe-Token. Sie berechnen Ihre Eingabekosten, schicken das System in Produktion und entdecken dann, dass die Antworten des Modells länger sind als erwartet. Eine 100 Token lange Eingabeaufforderung könnte eine 800 Token lange Antwort generieren, wenn Sie eine detaillierte Analyse anfordern. Plötzlich betragen Ihre Kosten pro Anfrage 900 Token, nicht 100.
Berechnung Ihres tatsächlichen Token-Verbrauchs
Hören Sie auf zu raten. Messen Sie es.
Verwenden Sie die Tokenizer-Bibliothek des Anbieters, bevor Sie etwas bereitstellen. Für Claude verwenden Sie den Tokenizer im Paket anthropic. Für GPT-Modelle verwenden Sie tiktoken. Führen Sie Ihre tatsächlichen Eingabeaufforderungen damit aus und protokollieren Sie die Token-Anzahl.
from anthropic import Anthropic, messages
import anthropic
client = Anthropic()
# Ihre Eingabeaufforderung
system_prompt = """Sie sind ein Analyst. Extrahieren Sie wichtige Kennzahlen aus den bereitgestellten Daten.
Seien Sie prägnant. Formatieren Sie als JSON."""
user_input = """Hier sind die Finanzdaten für Q3 von Acme Corp...
[4000 Wörter tatsächliche Daten]
"""
# Zählen Sie Token, BEVOR Sie die API aufrufen
token_count = len(client.beta.messages.count_tokens(
model="claude-3-5-sonnet-20241022",
system=system_prompt,
messages=[{"role": "user", "content": user_input}]
).input_tokens)
print(f"Ihre Eingabeaufforderung: {token_count} Token")
# Rufen Sie nun die API auf
response = client.messages.create(
model="claude-3-5-sonnet-20241022",
max_tokens=1000,
system=system_prompt,
messages=[{"role": "user", "content": user_input}]
)
output_tokens = response.usage.output_tokens
print(f"Modellantwort: {output_tokens} Token")
print(f"Gesamtkosten: {token_count + output_tokens} Token")
Das ist keine Option. Sie benötigen die tatsächlichen Zahlen, bevor Sie die Systemarchitektur entwerfen.
Strukturelle Ansätze zur Einhaltung von Limits
Komprimieren Sie Ihre System-Eingabeaufforderung. Unnötige Anweisungen fügen Token hinzu, ohne Wert zu schaffen. Vergleichen Sie:
# Schlechte System-Eingabeaufforderung (287 Token)
Sie sind ein hilfsbereiter Kundendienstmitarbeiter. Sie arbeiten für TechCorp,
ein Softwareunternehmen. Wenn Kunden Sie kontaktieren, ist es wichtig, dass Sie
höflich, professionell und hilfsbereit sind. Sie sollten versuchen, ihre
Probleme zu verstehen und ihnen bei der Lösungsfindung zu helfen. Seien Sie
stets respektvoll und geduldig.
Seien Sie niemals unhöflich. Sie können technische Informationen über unsere
Produkte bereitstellen. Stellen Sie sicher, dass Sie bei Bedarf klärende Fragen stellen.
Wenn Sie die Antwort nicht wissen, sagen Sie dem Kunden, dass Sie sich darum kümmern werden.
# Gute System-Eingabeaufforderung (89 Token)
Sie sind der TechCorp Kundensupport. Seien Sie direkt und professionell.
Stellen Sie klärende Fragen. Wenn Sie es nicht wissen, sagen Sie es.
Stellen Sie technische Produktinformationen bereit. Konzentrieren Sie sich auf die Lösung des Problems.
Beide vermitteln die gleiche Anweisung. Die zweite ist 68% kleiner.
Verwenden Sie Paginierung für große Dokumente. Laden Sie nicht alle 50 Seiten eines Dokuments in eine Eingabeaufforderung. Teilen Sie es in Abschnitte auf, rufen Sie nur die relevanten Teile per Suche oder semantischer Übereinstimmung ab und übergeben Sie diese. Deshalb gibt es RAG-Systeme – sie sind von Natur aus Token-effizient.
Beschränken Sie den Konversationsverlauf. Behalten Sie die letzten 5-10 Nachrichten in einer mehrteiligen Konversation bei, nicht den gesamten Chat. Für die meisten Anwendungen fügt älterer Kontext Rauschen und kein Signal hinzu und verbraucht unnötige Token.
Strukturieren Sie das Ausgabeformat von Anfang an. Wenn Sie JSON möchten, geben Sie dies in der System-Eingabeaufforderung an, nicht in der Benutzernachricht. Wenn Sie genau 3 Aufzählungspunkte wünschen, geben Sie dies an. Explizite Formatierung erspart dem Modell das Erzeugen von Fülltext, was die Ausgabe-Token reduziert.
Was Sie sofort tun können
Wählen Sie eine Ihrer aktiven Eingabeaufforderungen – etwas, das Sie regelmäßig in der Produktion oder im Test verwenden. Messen Sie deren tatsächliche Token-Anzahl mit dem Tokenizer des Anbieters. Berücksichtigen Sie die System-Eingabeaufforderung, die Benutzereingabe und schätzen Sie die Antwortlänge.
Berechnen Sie Ihre Gesamtsumme: Eingabe + Ausgabe-Token. Multiplizieren Sie dies nun mit Ihrem Nutzungsvolumen über einen Monat. Wenn diese Zahl Sie überrascht, komprimieren Sie Ihre System-Eingabeaufforderung anhand der obigen Muster und messen Sie erneut. Sie werden oft 20-30% an Token-Einsparungen finden, indem Sie redundante Anweisungen entfernen.