HappyHorse 1.0 ist jetzt liveJetzt ausprobieren
Context Length Exceeded bei LLM-API-Aufrufen: Lösungen, Kompromisse und Modellauswahl
guide

Context Length Exceeded bei LLM-API-Aufrufen: Lösungen, Kompromisse und Modellauswahl

EvoLink Team
EvoLink Team
Product Team
13. Mai 2026
9 Min. Lesezeit

Ihr LLM-API-Aufruf hat gerade Folgendes zurückgegeben:

{
  "error": {
    "message": "This model's maximum context length is 128000 tokens. However, your messages resulted in 142837 tokens.",
    "type": "invalid_request_error",
    "code": "context_length_exceeded"
  }
}

Das bedeutet, dass Ihre Eingabe (System-Prompt + Gesprächsverlauf + Benutzernachricht) das Kontextfenster des Modells überschreitet. Die Anfrage wurde abgelehnt, bevor überhaupt Tokens generiert wurden.

Anders als Rate-Limit-Fehler (bei denen es um die Anfragehäufigkeit geht) betreffen Context-Length-Fehler die Anfragegröße. Die Lösung besteht nicht darin, langsamer zu werden — sondern die Eingabe zu reduzieren, die Anfrage umzustrukturieren oder auf ein Modell mit größerem Kontextfenster zu wechseln.

Kurzfassung

  • Context Length Exceeded = Ihre Eingabe ist zu groß für das Token-Fenster des Modells.
  • Sie haben vier Optionen: kürzen, zusammenfassen, aufteilen oder das Modell wechseln.
  • Jede Option hat unterschiedliche Auswirkungen auf Kosten, Qualität und Latenz.
  • Nutzen Sie die Entscheidungstabelle unten, um den richtigen Ansatz für Ihren Anwendungsfall zu wählen.
  • In Produktionssystemen sollten Sie das Problem abfangen, bevor der Nutzer es sieht — nicht erst danach.

Schnellcheck-Checkliste

Bevor Sie eine Strategie wählen, prüfen Sie zuerst diese häufigen Ursachen:

PrüfungWorauf achtenSchnelle Lösung
Gesprächsverlauf zu langDas Messages-Array wächst bei Multi-Turn-Chats unbegrenztÄlteste Nachrichten entfernen oder ein Sliding Window implementieren
System-Prompt zu großDetaillierte Anweisungen verbrauchen das KontextbudgetSystem-Prompt komprimieren oder statische Anweisungen in eine Referenz auslagern
Doppelte InhalteGleicher Kontext wird mehrfach eingefügt (RAG, Tool-Ergebnisse)Vor dem Senden deduplizieren
Große Tool-/FunktionsergebnisseTool-Aufruf hat einen riesigen JSON- oder Text-Block zurückgegebenTool-Ausgabe kürzen oder zusammenfassen, bevor sie zum Kontext hinzugefügt wird
Unnötige MetadatenVollständige Objekte, obwohl nur wenige Felder relevant sindNur die relevanten Felder extrahieren

Wenn keine dieser Schnelllösungen zutrifft, brauchen Sie einen strukturellen Ansatz.

Entscheidungstabelle: Kürzen vs. Zusammenfassen vs. Aufteilen vs. Modellwechsel

StrategieFunktionsweiseQualitätsauswirkungKostenauswirkungLatenzauswirkungIdeal für
KürzenÄlteste Nachrichten entfernen oder Eingabe trimmenWichtiger Kontext kann verloren gehenReduziert Input-Tokens = geringere KostenSchneller (weniger Input)Chat-Apps mit langen Verläufen; Fälle, in denen aktueller Kontext am wichtigsten ist
ZusammenfassenEin günstigeres Modell komprimiert den bisherigen Kontext in eine ZusammenfassungVerlustbehaftet — Zusammenfassung kann Details übersehenZusätzlicher API-Aufruf für die Zusammenfassung, aber der Hauptaufruf wird kleinerEin zusätzlicher AufrufAgenten-Workflows mit angesammeltem Zustand; wissensintensive Konversationen
Aufteilen + ZusammenführenEingabe in Chunks aufteilen, separat verarbeiten, Ergebnisse zusammenführenRisiko, dass chunk-übergreifender Kontext verloren gehtMehrere Aufrufe = höhere GesamtkostenLangsamer (sequenzielle oder parallele Chunks)Dokumentverarbeitung, Analyse langer Texte
Modell wechselnEin Modell mit größerem Kontextfenster verwendenIn der Regel neutral oder besserModelle mit größerem Kontext kosten oft mehr pro TokenKann variierenWenn die Eingabe nicht reduziert werden kann, ohne wesentliche Informationen zu verlieren

Strategie 1: Kürzen — das Unwichtigste weglassen

Kürzung ist der einfachste Ansatz. Entfernen Sie die ältesten oder am wenigsten relevanten Teile der Eingabe.

Sliding Window für Chat

def sliding_window(messages: list, max_tokens: int, system_prompt: str) -> list:
    """Keep system prompt + most recent messages within token budget."""
    # Always keep system prompt
    result = [{"role": "system", "content": system_prompt}]
    token_count = count_tokens(system_prompt)

    # Add messages from newest to oldest
    for msg in reversed(messages):
        msg_tokens = count_tokens(msg["content"])
        if token_count + msg_tokens > max_tokens:
            break
        result.insert(1, msg)  # Insert after system prompt
        token_count += msg_tokens

    return result

Wann Kürzung gut funktioniert

  • Multi-Turn-Chats, in denen der aktuelle Kontext am wichtigsten ist
  • RAG-Pipelines, bei denen Sie bei Bedarf erneut abrufen können
  • Batch-Verarbeitung, bei der Sie in Reihenfolge verarbeiten können

Wann Kürzung gefährlich ist

  • Agenten-Workflows, bei denen frühe Anweisungen das spätere Verhalten beeinflussen
  • Rechtliche oder Compliance-Kontexte, in denen Vollständigkeit wichtig ist
  • Mehrstufiges Reasoning, bei dem das Weglassen von Schritten die Antwort verändert

Strategie 2: Zusammenfassen — komprimieren, ohne die Bedeutung zu verlieren

Die Zusammenfassung nutzt ein günstigeres, schnelleres Modell, um den bisherigen Kontext zu komprimieren:

async def summarize_context(messages: list, client) -> str:
    """Compress older messages into a summary."""
    context_text = "\n".join(
        f"{m['role']}: {m['content']}" for m in messages
    )

    response = await client.chat.completions.create(
        model="gpt-4o-mini",  # Cheaper model for summarization
        messages=[{
            "role": "user",
            "content": f"Summarize this conversation context in under 500 tokens. "
                       f"Preserve key decisions, facts, and pending actions:\n\n{context_text}"
        }],
        max_tokens=500
    )

    return response.choices[0].message.content

Kostenvergleich: Zusammenfassen vs. Kürzen

AnsatzInput-Tokens für das HauptmodellZusätzliche API-AufrufeGesamtkosten
Keine Verwaltung (Fehler tritt auf)N/A — Anfrage abgelehnt0Verschwendete Latenz + Wiederholungskosten
Auf 80K Tokens kürzen80K0Basiskosten bei 80K Input
Älteren Kontext zusammenfassen~10K (Zusammenfassung) + 40K (aktuell) = 50K1 Zusammenfassungs-Aufruf (~$0,01)Niedrigere Hauptaufruf-Kosten + geringe Zusammenfassungskosten

Die Zusammenfassung fügt einen günstigen Aufruf hinzu, reduziert aber oft die Input-Tokens des Hauptaufrufs erheblich — was bei teuren Modellen netto eine Kostenersparnis bedeuten kann.

Strategie 3: Aufteilen und Zusammenführen — für lange Dokumente

Wenn die Eingabe ein einzelnes langes Dokument ist (kein Gespräch), ist das Aufteilen oft der richtige Ansatz:

async def process_long_document(
    document: str,
    question: str,
    client,
    chunk_size: int = 50000
) -> str:
    """Process a long document by chunking."""
    chunks = split_into_chunks(document, chunk_size)
    chunk_results = []

    for i, chunk in enumerate(chunks):
        response = await client.chat.completions.create(
            model="gpt-4o",
            messages=[{
                "role": "user",
                "content": f"Analyze chunk {i+1}/{len(chunks)} of a document.\n"
                           f"Question: {question}\n\n"
                           f"Chunk content:\n{chunk}"
            }]
        )
        chunk_results.append(response.choices[0].message.content)

    # Merge chunk results
    merge_response = await client.chat.completions.create(
        model="gpt-4o",
        messages=[{
            "role": "user",
            "content": f"Merge these partial analyses into a final answer.\n"
                       f"Question: {question}\n\n"
                       f"Partial results:\n" + "\n---\n".join(chunk_results)
        }]
    )

    return merge_response.choices[0].message.content

Abwägungen beim Aufteilen

  • Vorteil: Verarbeitet beliebig lange Eingaben
  • Nachteil: Chunk-übergreifender Kontext geht verloren
  • Nachteil: Mehrere API-Aufrufe = höhere Gesamtkosten und Latenz
  • Gegenmaßnahme: Chunks um 10-20% überlappen lassen, um den Kontext an den Grenzen zu erhalten

Strategie 4: Auf ein Modell mit größerem Kontext wechseln

Wenn Ihre Eingabe wirklich groß bleiben muss, wechseln Sie zu einem Modell mit größerem Kontextfenster:

ModellfamilieTypischer maximaler KontextEinsatzbereich
GPT-4o128K TokensStandard für die meisten Workloads
GPT-4o (Long Context)128K TokensBereits der Standard
Claude Sonnet/Opus200K TokensWenn mehr als 128K benötigt werden
Gemini Pro1M+ TokensSehr lange Dokumente, vollständige Codebasen
Gemini Flash1M+ TokensKostensensible Aufgaben mit langem Kontext

Kostenauswirkung von Modellen mit größerem Kontext

Größere Kontextfenster bedeuten in der Regel höhere Kosten pro Token. Berechnen Sie, ob die Qualitätsverbesserung die Kosten rechtfertigt:

Option A: Auf 80K kürzen + GPT-4o = $X
Option B: Volle 150K Eingabe + Claude Sonnet = $Y
Option C: Volle 150K Eingabe + Gemini Flash = $Z

Vergleichen: Qualitätsunterschied vs. Kostenunterschied

Ein Routing-Gateway für die Modellauswahl nutzen

Anstatt die Modellauswahl fest zu codieren, können Sie ein Gateway verwenden, das basierend auf der Eingabegröße an das passende Modell weiterleitet:

from openai import OpenAI

client = OpenAI(
    api_key="your-evolink-key",
    base_url="https://api.evolink.ai/v1"
)

# Let the Smart Router choose based on your workload
response = client.chat.completions.create(
    model="evolink/auto",
    messages=your_messages
)
Der Smart Router von EvoLink kann Anfragen an Modelle weiterleiten, die zu Ihrer Eingabegröße und Ihren Kostenanforderungen passen, sodass Sie keine Kontextfenster-Schwellenwerte fest codieren müssen.

Produktionsmuster: Vorprüfung vor dem Senden

Warten Sie nicht, bis die API Ihre Anfrage ablehnt. Prüfen Sie die Eingabegröße vor dem Senden:

import tiktoken

def check_context_length(messages: list, model: str, max_tokens: int) -> dict:
    """Pre-check whether messages fit within the model's context window."""
    encoder = tiktoken.encoding_for_model(model)
    total_tokens = sum(
        len(encoder.encode(m["content"])) for m in messages
    )

    if total_tokens > max_tokens:
        return {
            "fits": False,
            "total_tokens": total_tokens,
            "excess": total_tokens - max_tokens,
            "suggestion": "truncate" if total_tokens < max_tokens * 1.5
                          else "summarize_or_switch"
        }

    return {"fits": True, "total_tokens": total_tokens}

So vermeiden Sie verschwendete Latenz durch abgelehnte Anfragen und können die richtige Strategie anwenden, bevor der Nutzer einen Fehler sieht.

Verwandte Artikel

Explore EvoLink Smart Router

FAQ

Was bedeutet "context length exceeded"?

Es bedeutet, dass Ihre Eingabe (System-Prompt + Nachrichten + eingefügter Kontext) mehr Tokens enthält, als das maximale Kontextfenster des Modells zulässt. Die Anfrage wird abgelehnt, bevor die Generierung beginnt.

Ist "context length exceeded" dasselbe wie ein Rate-Limit-Fehler?

Nein. Rate-Limit-Fehler (429) betreffen das Anfragevolumen — zu viele Anfragen in einem Zeitfenster. Context-Length-Fehler betreffen die Anfragegröße — eine einzelne Anfrage, die zu groß ist. Sie erfordern unterschiedliche Lösungen.

Was ist besser: Kürzung oder Zusammenfassung?

Kürzung ist einfacher und günstiger, aber es gehen Informationen verloren. Zusammenfassung bewahrt die Bedeutung, erfordert aber einen zusätzlichen API-Aufruf und führt zu Kompressionsartefakten. Verwenden Sie Kürzung für Chat-Verläufe, bei denen Aktualität am wichtigsten ist; verwenden Sie Zusammenfassung für Agenten-Workflows, bei denen der angesammelte Kontext wichtig ist.

Kann ich Context-Length-Fehler vermeiden, indem ich ein größeres Modell verwende?

Ja, aber zu einem Preis. Modelle mit größeren Kontextfenstern (Gemini 1M+, Claude 200K) können größere Eingaben verarbeiten, kosten aber in der Regel mehr pro Token. Berechnen Sie, ob die Qualitätsverbesserung die zusätzlichen Kosten rechtfertigt.

Wie zähle ich Tokens, bevor ich eine Anfrage sende?

Verwenden Sie die tiktoken-Bibliothek für OpenAI-Modelle oder den Token-Zähl-Endpunkt des Anbieters. Die genaue Token-Anzahl hängt vom Tokenizer des Modells ab, verwenden Sie also den richtigen Encoder für Ihr Zielmodell.

Sollte ich diesen Fehler im Anwendungscode oder auf Gateway-Ebene behandeln?

Beides. Der Anwendungscode sollte die Eingabegröße vorab prüfen und die passende Strategie anwenden (kürzen, zusammenfassen, aufteilen oder wechseln). Ein Routing-Gateway kann zusätzlich ein Modell mit einem ausreichend großen Kontextfenster für Ihre Anfrage auswählen.

Bereit, Ihre KI-Kosten um 89 % zu senken?

Starten Sie noch heute mit EvoLink und erleben Sie die Vorteile intelligenter API-Routing.