Zurück zu den Leitfäden
Fehlerbehebung·23. September 2026·6 Min. Lesezeit

„Dieses Modell unterstützt kein Prefill von Assistant-Nachrichten“ – welche Claude-Modelle Prefill eingestellt haben und was es ersetzt

Ihr messages-Array endet mit einer Assistant-Nachricht, und Claude-Modelle ab Claude 4.6 interpretieren dies als Prefill und lehnen es ab. Beenden Sie die Unterhaltung mit einer User-Nachricht und verlagern Sie die Funktion des Prefills – JSON zu erzwingen, eine Präambel zu überspringen, eine Persona beizubehalten oder eine abgebrochene Antwort fortzusetzen – auf den von Anthropic dafür dokumentierten Ersatz.

Zuletzt überprüft am .

Ihr messages-Array endet mit einer Assistant-Nachricht, und Claude-Modelle ab Claude 4.6 interpretieren dies als Prefill und lehnen es ab. Beenden Sie die Unterhaltung mit einer User-Nachricht und verlagern Sie die Funktion des Prefills – JSON zu erzwingen, eine Präambel zu überspringen, eine Persona beizubehalten oder eine abgebrochene Antwort fortzusetzen – auf den von Anthropic dafür dokumentierten Ersatz.

Der Fehler

Anthropic API response (HTTP 400)
{
  "type": "error",
  "error": {
    "type": "invalid_request_error",
    "message": "This model does not support assistant message prefill. The conversation must end with a user message."
  },
  "request_id": "req_..."
}

Ursachen und Lösungen im Überblick

UrsacheLösung
Der letzte Eintrag in messages hat die Rolle: "assistant"Das ist ein Prefill, und Claude-Modelle ab Claude 4.6 lehnen ihn ab. Beenden Sie die Unterhaltung mit einer User-Nachricht.
Ein Framework hat zuletzt eine leere Assistant-Nachricht hinterlassenEntfernen Sie vor dem Senden eine nachgestellte Assistant-Nachricht ohne Inhalt.
Sie haben „{“ vorbefüllt, um JSON zu erzwingenVerwenden Sie stattdessen strukturierte Ausgaben (output_config.format).
Sie haben vorbefüllt, um eine Präambel zu überspringen, eine Persona beizubehalten oder eine abgebrochene Antwort fortzusetzenEine Anweisung im System-Prompt, eine Rolle im System-Prompt oder eine Fortsetzung in einem User-Turn.
Ein Speicherverwalter, eine Agentenschleife oder eine Übergabe hat zuletzt einen Assistant-Turn hinterlassenNormalisieren Sie das Ende einmal direkt vor der Anfrage statt in jedem Codepfad.

Welche Claude-Modelle Prefill ablehnen (Stand September 2026)

Anthropics Fehlerreferenz ist eindeutig: Claude 4.6 und spätere Modelle unterstützen kein Prefill der letzten Assistant-Nachricht, und eine solche Anfrage erzeugt genau diesen 400-Fehler (https://platform.claude.com/docs/en/api/errors#prefill-not-supported). Namentlich sind das Claude Opus 4.6 und jedes spätere Opus, einschließlich Claude Opus 5.5 (https://platform.claude.com/docs/en/models/opus-5-5/migration-guide); Claude Sonnet 4.6 und Claude Sonnet 5 (https://platform.claude.com/docs/en/models/sonnet-5/migration-guide); sowie Claude Fable 5 und Fable 5.1 (https://platform.claude.com/docs/en/models/fable-5-1/migration-guide). Claude Haiku 4.5 akzeptiert weiterhin ein Prefill, ebenso Claude Sonnet 4.5 und Claude Opus 4.5 – deshalb tritt dieser Fehler häufig nach einer Änderung der Modell-ID statt nach einer Codeänderung auf. Frühere Assistant-Nachrichten in der Unterhaltung, einschließlich Few-Shot-Beispielen, sind nicht betroffen.

Mit einem User-Turn enden – einschließlich der einzeiligen Korrektur

Oft hat niemand absichtlich ein Prefill geschrieben: Etwas im Stack hat zuletzt eine Assistant-Nachricht eingefügt. Öffentliche Berichte führen dies auf einen Speicherverwalter zurück, der eine solche Nachricht anhängt (Strands Issue #1694), eine Agentenschleife, die nach einem Turn erneut anfragt, den sie fälschlich für unvollständig hält (opencode Issue #46415), aufeinanderfolgende Antworten und Agentenübergaben (LiveKit Issue #4907) sowie eine am Ende verbliebene leere Assistant-Nachricht (AutoGen PR #7931). Wenn die nachgestellte Nachricht leer ist, entfernen Sie sie – das ist die eine Zeile. Enthält sie Text, den Sie fortsetzen möchten, folgen Sie Anthropics Migrationsanleitung für Fortsetzungen: Legen Sie die Fortsetzung in eine User-Nachricht, die die Stelle zitiert, an der die Antwort abgebrochen wurde. Eine dokumentierte Ausnahme, die unverändert bleiben soll: Ein pause_turn aus Server-Tools wie der Websuche wird fortgesetzt, indem der pausierte Assistant-Inhalt unverändert zurückgesendet wird (https://platform.claude.com/docs/en/agents-and-tools/tool-use/server-tools).

end_on_user.py
from openai import OpenAI

client = OpenAI(base_url="https://api.kunavo.com/v1", api_key="sk-kn-...")

def end_on_user(messages: list[dict]) -> list[dict]:
    """Claude 4.6 and later reject a conversation whose last turn is the assistant's."""
    last = messages[-1] if messages else None
    if not last or last["role"] != "assistant" or last.get("tool_calls"):
        return messages               # tool_calls are owed tool results instead
    content = last.get("content")
    if not content or (isinstance(content, str) and not content.strip()):
        return messages[:-1]          # the one line: drop an empty tail
    tail = content[-200:] if isinstance(content, str) else "..."
    return messages + [{
        "role": "user",
        "content": f"Your previous response was interrupted and ended with {tail!r}. "
                   "Continue from where you left off.",
    }]

messages = [
    {"role": "user", "content": "Explain HTTP caching in three bullets."},
    {"role": "assistant", "content": ""},  # the empty tail a framework left behind
]

resp = client.chat.completions.create(
    model="claude-sonnet-4-6",
    max_tokens=1024,
    messages=end_on_user(messages),
)
print(resp.choices[0].message.content)

Ersetzen Sie die Funktion des Prefills

Anthropics Prompting-Leitfaden ordnet jeder früheren Verwendung von Prefill einen Ersatz zu (https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/claude-prompting-best-practices#migrating-away-from-prefilled-responses). JSON erzwingen: strukturierte Ausgaben, die die Antwort auf Ihr Schema beschränken und für Claude Haiku 4.5, Sonnet 4.5, Opus 4.5 und jedes spätere Modell verfügbar sind (https://platform.claude.com/docs/en/build-with-claude/structured-outputs); für YAML oder ein anderes Format empfiehlt der Leitfaden, die Struktur anzufordern und bei Abweichung erneut zu versuchen. Klassifizierung: ein Tool mit einem Enum Ihrer gültigen Bezeichnungen oder strukturierte Ausgaben. Eine Präambel überspringen: eine System-Prompt-Anweisung wie „Direkt und ohne Präambel antworten.“ Eine Persona beibehalten: Legen Sie die Rolle im System-Prompt fest (https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/claude-prompting-best-practices#give-claude-a-role) und platzieren Sie regelmäßige Erinnerungen im User-Turn statt in einem vorbefüllten Assistant-Turn. Abgebrochene Antwort: die obige Fortsetzung im User-Turn. Das Erzwingen eines Tool-Aufrufs ist nicht überall ein direkter Ersatz – Claude Fable 5.1 und Claude Opus 5.5 lehnen tool_choice any und tool jeweils mit einem eigenen 400-Fehler ab (https://platform.claude.com/docs/en/api/errors#forced-tool-use-not-supported).

structured-output.sh
# Before: messages ended with {"role": "assistant", "content": "{"}
# Kunavo forwards output_config as sent; the reply is constrained to the schema.
curl https://api.kunavo.com/v1/messages \
  -H "x-api-key: sk-kn-..." \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{
    "model": "claude-sonnet-4-6",
    "max_tokens": 1024,
    "messages": [
      {"role": "user", "content": "Extract the name and email: John Smith <john@example.com>"}
    ],
    "output_config": {
      "format": {
        "type": "json_schema",
        "schema": {
          "type": "object",
          "properties": {
            "name": {"type": "string"},
            "email": {"type": "string"}
          },
          "required": ["name", "email"],
          "additionalProperties": false
        }
      }
    }
  }'

Wenn Sie Kunavo verwenden

Kunavo leitet einen nachgestellten Assistant-Turn weiter; es repariert ihn nicht. /v1/messages übergibt Ihr messages-Array unverändert an den Upstream, und bei /v1/chat/completions überträgt der Übersetzer eine abschließende Nachricht mit role: "assistant" als abschließenden Assistant-Turn in die Claude-Anfrage – einschließlich einer leeren Nachricht; leere Nachrichten müssen Sie daher selbst entfernen. Anthropic lehnt einen vorbefüllten abschließenden Turn bei jedem von uns bereitgestellten claude-* Modell außer claude-haiku-4-5 ab, und dieser 400-Fehler erreicht Sie mit unverändertem Meldungstext sowie der Request-ID des Upstreams: im Anthropic-Format bei /v1/messages, mit dem Typ invalid_request_error wie bei Anthropics API (bis zum 24. September 2026 lautete er api_error), und im OpenAI-Format bei /v1/chat/completions (Typ upstream_error, Code upstream_400). Ein 400-Fehler wird niemals über einen anderen Kanal wiederholt, und der fehlgeschlagene Aufruf wird mit Kosten von null erfasst. Für JSON senden Sie statt eines Prefills ein Schema: /v1/messages leitet output_config so weiter, wie Sie es gesendet haben, und bei /v1/chat/completions wird ein response_format vom Typ json_schema in output_config.format übersetzt. Am 24.09.2026 beschränkte dieses Feld die Antwort bei jedem von uns bereitgestellten claude-* Modell auf das Schema. Ein response_format vom Typ json_object hat kein Claude-Gegenstück und wird nicht erzwungen, und ein gemeinsam mit einem vorbefüllten abschließenden Turn gesendetes Schema erzeugt auch bei claude-haiku-4-5 einen eigenen 400-Fehler: „When using output format, pre-filling the `assistant` response is not supported.“ Der native Endpunkt und die Anforderungsstruktur, die ihn durchläuft, sind dokumentiert in der Messages-API-Dokumentation.

Häufig gestellte Fragen

Welche Claude-Modelle unterstützen kein Prefill von Assistant-Nachrichten?

Laut der Anthropic-Dokumentation vom September 2026 gilt dies für jedes Claude-Modell ab 4.6: Claude Opus 4.6 und alle späteren Opus-Modelle, Claude Sonnet 4.6 und Sonnet 5, Claude Fable 5 und 5.1 sowie die Mythos-Modelle. Claude Haiku 4.5, Sonnet 4.5 und Opus 4.5 akzeptieren weiterhin eines.

Wie erzwinge ich JSON-Ausgabe von Claude ohne Prefill?

Verwende strukturierte Ausgaben: Übergib ein JSON-Schema in output_config.format, und die Antwort wird darauf beschränkt. Über einen OpenAI-kompatiblen Endpunkt sendest du es als response_format mit type json_schema; Kunavo übersetzt dies in output_config.format. Anthropic führt Message-Prefilling grundsätzlich als inkompatibel mit JSON-Ausgaben auf.

Warum erhalte ich diesen Fehler, obwohl ich nie ein Prefill verwendet habe?

Etwas in deinem Stack hat eine Assistant-Nachricht als letzte Nachricht hinterlassen – etwa ein Memory- oder Sitzungsmanager, eine Agentenschleife, die nach einem Durchlauf erneut anfordert, eine Agentenübergabe oder eine leere Assistant-Nachricht, die niemand entfernt hat. Protokolliere das messages-Array exakt so, wie es gesendet wird; sein letztes Element hat role: "assistant".

Kann ich weiterhin Assistant-Nachrichten in die Unterhaltung aufnehmen?

Ja. Nur der letzte Durchlauf ist eingeschränkt; frühere Assistant-Nachrichten, einschließlich Few-Shot-Beispielen, sind nicht betroffen.

Warum passiert das auch über einen OpenAI-kompatiblen Endpunkt?

Weil das Gateway deine abschließende Nachricht mit role: "assistant" als abschließenden Claude-Assistant-Durchlauf weitergibt – dasselbe Prefill, nur umgeformt. Kunavos Chat-Übersetzer macht genau das, und dieselbe Nachricht wurde über andere OpenAI-kompatible Gateways gemeldet (opencode issue #13768). Die Lösung ist dieselbe: Beende mit einer User-Nachricht.

Verwandte Anleitungen

Weitere Informationen zur Fehlersemantik finden Sie unter Fehlerreferenz; einen Schlüssel erhalten Sie in einer Minute über Registrierung und die Authentifizierungsanleitung.