Seedance 2.5 is live — 30-second cinematic video with native audio & real-person references
Claude Fable 5.1 Migrationsleitfaden: Tool-Choice 400 beheben
2026/09/07

Claude Fable 5.1 Migrationsleitfaden: Tool-Choice 400 beheben

Migriere von Claude Fable 5 ohne Toolaufrufe zu brechen. Behebe erzwungene Tool-Auswahl, Thinking Blocks, Verlaufskompression und Fallbacks.

Die Migration von Claude Fable 5 zu Claude Fable 5.1 ist nicht immer nur eine Änderung des Modellnamens. Das neue Modell lehnt erzwungene Tool-Auswahl ab, bindet erhaltene Thinking Blocks an das Gesprächspräfix, das sie erzeugt hat, und kann seine Thinking Blocks nicht an ältere Claude-Modelle zurückgeben. Eine Integration kann daher einen Single-Turn-Smoke-Test bestehen und trotzdem beim ersten strukturierten Request, bei komprimiertem Gespräch oder bei einem Fallback fehlschlagen.

Die sichere Migration hat drei Teile: Ersetze erzwungene Tool-Aufrufe durch automatische Auswahl plus Schema-Erzwingung, halte Multi-Turn-Verlauf nur mit Append-Operationen, und teste jede Route, die das Gespräch zurück auf ein älteres Modell schalten kann. Wenn du die OpenAI-kompatible Route nutzt, beginne mit dem Claude Fable 5.1 Request Guide; die nativen Beispiele unten verwenden Anthropics Messages API, sodass jede Breaking Change sichtbar wird.

Schnelle Antwort

  • Ändere die native Modell-ID zu claude-fable-5-1, dann entferne erzwungene tool_choice-Modi; any und benannte Tools geben HTTP 400 zurück.[1]
  • Halte den System-Prompt, die Tools und das frühere Nachrichtenpräfix nach einem Fable 5.1 Thinking Block unverändert. Hänge neue Anweisungen an, anstatt die Verlaufshistorie umzuschreiben.[1]
  • Teste jeden Fallback: Ältere Claude-Modelle können Fable 5.1 Thinking Blocks nicht lesen, daher wird die API sie vor der Fortsetzung ab.[1]
  • Adaptive Thinking bleibt an. Ersetze manuelle Token-Budgets durch effort, und trainiere Präfix-Mismatches in CI vor dem Rollout.[1]

Zuerst: Bestandsaufnahme des Code-Pfads, den du wirklich migrierst

Suche breiter als nur die wörtliche Modell-ID. Ein Wrapper kann eine generische „erforderliches Tool"-Einstellung in Anthropics tool_choice: {"type":"any"} übersetzen, Thinking Blocks in einem Conversation Store beibehalten oder den System-Prompt bei jedem Request ändern. Das OpenCode-Issue, das kurz nach der Veröffentlichung auftauchte, ist ein nützliches Beispiel: Sein Structured-Output-Adapter wählte erforderliche Tool-Nutzung, die zu Anthropics nicht unterstütztem any-Modus wurde und einen 400 erzeugtem.[6] Dieses Issue zeigt ein echtes Integrationsmuster; Anthropics Migrationsleitfaden ist der autoritäre Standard für das API-Verhalten.

Prüfe diese Komponenten vor der Bearbeitung:

KomponenteWomach zu suchenFehler zu erwarten
Modellauswahlclaude-fable-5, Aliase, Fallback-ListenAltes Modell empfängt weiterhin einen Teil des Verkehrs
Tool-Adaptertool_choice, required, any, benannte Tools400 invalid_request_error
Structured Outputsynthetische Tools, Schema-WrapperWrapper erzwingt stumm ein Tool
Conversation Storethinking, redacted_thinking, SignaturenUngültige Thinking-Signatur nach einer Bearbeitung
KompressionZusammenfassungs-Injektion, Tail-Erhalt, NachrichtenlöschungSpätere Blocks gebunden an das alte Präfix
Dynamische Promptsaktuelles Datum, Berechtigungen, aktivierte ToolsSystem- oder Tool-Präfix ändert sich pro Turn
Retry und Fallbackältere Claude-Modell-IDsFable 5.1 Thinking wird beim Schalten entfernt
AufbewahrungsrichtlinieZDR-Arbeitsbereich oder OrganisationRequest vor der Generierung abgelehnt

Führe die Bestandsaufnahme an der serialisierten Request-Grenze durch, wenn möglich. Anwendungsobjekte können unverändert aussehen, auch wenn ein SDK oder Provider-Adapter sie umschreibt.

Schritt 1: Update die Modell-ID, aber halte den Rest beobachtbar

Die native ID ist claude-fable-5-1. Fable 5.1 behält das Ein-Millionen-Token-Kontextfenster bei, unterstützt bis zu 128.000 Output-Tokens und verwendet immer aktiviertes adaptives Thinking.[2] Beginne mit der gleichen Production-Traffic-Form und protokolliere Request-IDs, Status-Codes, Stop-Gründe, Token-Nutzung, Tool-Aufrufe und Fallbacks.

Nutze diese Migration nicht, um Effort, Kompression, Prompt-Wording und das Tool-Framework gleichzeitig zu ändern. Ein enger erster Rollout macht einen 400er oder eine Verhaltensänderung zurückverfolgbar. Sobald die Kompatibilität etabliert ist, teste low, medium, high, xhigh und max auf die Workload, anstatt anzunehmen, dass die alte Einstellung optimal ist. Anthropic dokumentiert high als den Standard.[1]

Entferne auch einer dieser Konfigurationen, wenn eine vorherige Integration sie liefert (beide sind ungültig für Claude Fable 5.1):

thinking={"type": "disabled"}

thinking={"type": "enabled", "budget_tokens": 12000}

Fable 5.1 entscheidet, wann und wie viel es denkt. Eine nachgelagerte Assistant-Nachricht, die als Prefill verwendet wird, gibt auch einen 400 zurück, daher drücke Output-Anweisungen im System oder Benutzerinhalt aus.[1]

Schritt 2: Ersetze erzwungene Tool-Auswahl

Die Kompatibilitätsgrenze ist exakt:

tool_choice WertFable 5Fable 5.1
{"type":"auto"}UnterstütztUnterstützt
{"type":"none"}UnterstütztUnterstützt
{"type":"any"}UnterstütztHTTP 400
{"type":"tool","name":"record_summary"}UnterstütztHTTP 400

Die Überprüfung gilt für Messages, Message Batches und Token-Zählung. Der gemeldete Fehler besagt, dass Tool-Choice-Typen tool und any für dieses Modell nicht unterstützt werden.[1] Ein erneuter Versuch mit dem gleichen Body wird nicht helfen.

Hier ist das häufige Pre-Migration-Muster:

response = client.messages.create(
    model="claude-fable-5",
    max_tokens=4096,
    tools=[record_summary_tool],
    tool_choice={"type": "tool", "name": "record_summary"},
    messages=[
        {"role": "user", "content": "Summarize the meeting notes."}
    ],
)

Für Fable 5.1 verwende automatische Auswahl, packe die Anforderung in die aktuelle Anweisung und mache das Tool streng:

record_summary_tool = {
    "name": "record_summary",
    "description": "Record the structured meeting summary.",
    "strict": True,
    "input_schema": {
        "type": "object",
        "properties": {
            "summary": {"type": "string"},
            "action_items": {
                "type": "array",
                "items": {"type": "string"},
            },
        },
        "required": ["summary", "action_items"],
        "additionalProperties": False,
    },
}

response = client.messages.create(
    model="claude-fable-5-1",
    max_tokens=4096,
    tools=[record_summary_tool],
    tool_choice={"type": "auto"},
    messages=[{
        "role": "user",
        "content": (
            "Summarize the meeting notes, then call record_summary "
            "with the summary and action items."
        ),
    }],
)

strict: true begrenzt die Argumente, wenn das Modell das Tool aufruft; es reproduziert keine Transport-Level-Garantie, dass das Tool aufgerufen werden muss. Deine Anwendung muss trotzdem überprüfen, dass die Response den erforderlichen Tool-Use-Block enthält. Anthropic empfiehlt auch JSON-Ausgaben über output_config.format, wenn das erzwungene Tool nur existierte, um Schema-gültiges JSON zu erhalten.[1]

Wenn die Anwendung ein benanntes Tool in der Mitte eines Gesprächs erforderlich machen muss, hänge eine role: "system"-Nachricht nach der neuesten Benutzernachricht an. Benenne das Tool, gebe an, dass es für diesen Turn erforderlich ist, und sag dem Modell, dass es den Aufruf beginnen soll. Behalte diese System-Nachricht in späterer Verlaufshistorie. Dies erhält das frühere Präfix; das Umschreiben des Top-Level-System-Prompts würde nicht.[1]

Behandle „das Modell ignorierte die Anweisung" als ein verarbeitetes Ergebnis. Lehne den Turn ab, versuche erneut unter einer beschränkten Richtlinie oder schlage fehl. Beschreibe Prompting nicht als absoluter Durchsetzungsmechanismus.

Schritt 3: Behalte Thinking in der Richtung, die die API unterstützt

Jeder Fable 5.1 Thinking Block trägt Modell- und Gesprächs-Bindungsinformationen. Die Kompatibilität ist einseitig:

Fable 5 Thinking   ───────► Fable 5.1 kann es lesen
Opus 5 Thinking    ───────► Fable 5.1 kann es lesen

Fable 5.1 Thinking ──X──► Fable 5 kann es nicht lesen
Fable 5.1 Thinking ──X──► Opus 5 kann es nicht lesen

Claude Mythos 5.1 ist die dokumentierte Ausnahme, die Fable 5.1 Blocks lesen kann. Wenn ein Router, Refusal Fallback oder Client Retry das Gespräch auf ein älteres Modell sendet, entfernt die API Blocks, die das Ziel nicht lesen kann. Der Request kann trotzdem erfolgreich sein, und die entfernten Input-Tokens werden nicht berechnet, aber das Ziel muss ohne dieses Reasoning erneut planen.[1]

Dies ist wichtig für Fallback-Bewertung. Ein erster Request auf Fable 5 und ein erster Request auf Fable 5.1 sind nicht gleichwertig zu einem Mid-Conversation-Wechsel von 5.1 zu 5. Messe beides. Protokolliere input_transformations mit der Thinking-Binding Beta aktiviert; model_binding_mismatch identifiziert Blocks, die gelöscht wurden, weil das Modell sich geändert hat.

Schritt 4: Mache das Gesprächspräfix nur-append

Ein Fable 5.1 Thinking Block ist gültig gegen den exakten System-Prompt, die Tool-Menge und die Nachrichtshistorie, die ihn vorausgingen. Das Ändern jeder dieser vor dem Abspielen des Blocks kann einen 400 für eine ungültige Thinking-Signatur erzeugen.[1]

Häufige versehentliche Änderungen beinhalten:

  • Wiederaufbau des System-Prompts mit einem frischen Zeitstempel;
  • Hinzufügen oder Entfernen eines Tools aus dem Top-Level tools-Array;
  • Löschen eines alten Tool-Ergebnisses, um Tokens zu sparen;
  • Einfügen einer Zusammenfassung vor kürzlichen Turns, während ihre Thinking Blocks beibehalten werden;
  • Entfernen einer per-Turn-Erinnerung bei der nächsten Request;
  • Abruf verschiedener Bild- oder Dokument-Bytes von der gleichen URL.

Der letzte Fall ist leicht zu übersehen: Die Bindung umfasst File-Bytes statt nur des URL-Strings. Für ein File, das über Turns hinweg wiederverwendet wird, empfiehlt Anthropic eine stabile Files API file_id oder Base64-Inhalt.[1]

Bevorzuge diese Muster:

  • Hänge neue Turns an, ohne frühere Bytes zu ändern;
  • Hänge Mid-Conversation-System-Nachrichten für geänderte Anweisungen an;
  • Verwende unterstützte Tool-Addition und Tool-Removal Blocks für Tool-Änderungen;
  • Verwende Server-seitige Kompression oder Context-Editing;
  • Wenn du auf dem Client komprimierst, ersetze die gesamte Historie mit einer Zusammenfassung und dem neuen User-Turn, ohne alte Thinking Blocks.

Diese endgültige Client-Seite Form ist absichtlich einfach. Die Beibehaltung von kürzlichen Turns hinter einer neuen Zusammenfassung ist nur sicher, wenn ihre thinking und redacted_thinking Blocks entfernt werden, weil diese Blocks gegen die Vor-Zusammenfassung Historie erzeugt wurden.[1]

Diagnose von Präfix-Mismatches, bevor Benutzer das tun

Anthropic erzwingt die Conversation-Prefix-Überprüfung standardmäßig für Konten, die am oder nach dem 31. August 2026 erstellt wurden. Ältere Konten können fehlschlagen, es sei denn, sie melden sich in die Kontrolle ein, was ein gefährliches „funktioniert mit unserem Schlüssel" Test-Gap für Bibliotheken erzeugt, die mit Kundenschlüsseln verwendet werden.[1]

Verwende die Beta-Kontrolle in einer Staging-Session:

response = client.beta.messages.create(
    model="claude-fable-5-1",
    max_tokens=4096,
    thinking={
        "type": "adaptive",
        "block_binding": {
            "prefix_mismatch_behavior": "drop_block"
        },
    },
    messages=conversation,
    betas=["thinking-binding-controls-2026-08-01"],
)

for change in response.input_transformations or []:
    print(change.path, change.reason)

Mit drop_block entfernt die API den ersten mismatched Thinking Block und jeden späteren Thinking Block, dann meldet prefix_binding_mismatch. Mit dem Standard error lehnt es den Request ab. Verwende drop_block, wenn eine degradierte Fortsetzung gegenüber einem Fehler bevorzugt wird; verwende error in CI, um eine History-Mutation sofort zu offenbaren.[1]

Ein automatischer Retry eines identischen ungültigen Body kann den Mismatch nicht reparieren. Entweder stelle das ursprüngliche Präfix wieder her, entferne die betroffenen Thinking Blocks oder fordere explizit einmal Drop-Verhalten an.

Überprüfe Verhalten, das keinen 400 erzeugt

Kompatibilitätstests sollten auch stillere Änderungen abdecken. Anthropic sagt, Fable 5.1 kann weniger parallele Tool-Aufrufe in langen Agent-Schleifen ausgeben, weniger Progress-Nachrichten produzieren und Search oder Retrieval bei low Effort weniger oft aufrufen.[3] Keines davon zeigt notwendigerweise einen Defekt an, aber jeder kann die Latenz oder das Produktverhalten ändern.

Baue Assertions um das auf, was die Anwendung braucht:

  • Für parallelisierbare Reads, protokolliere Aufrufe pro Turn und Gesamtrundtrips.
  • Für eine Progress UI, erfordere Benutzer-sichtbare Updates bei definierten Intervallen, anstatt anzunehmen, dass sie erscheinen.
  • Für Retrieval-basierte Antworten, mache Retrieval-Kriterien explizit und lehne Antworten ab, denen erforderliche Evidenz fehlt.
  • Für Edit Agents, überprüfe die geänderte Datei-Liste und entmutige Full-File-Rewrites, wenn ein Small Patch erforderlich ist.[4]

Halte auch das Refusal-Handling. Fable 5.1 kann stop_reason: "refusal" mit einer stop_details.category zurückgeben; behandle leeren Antwort-Text nicht als einen Transport-Fehler. Jeder Fallback muss die einseitige Thinking-Kompatibilität berücksichtigen.[2]

FAQ

Warum gibt Fable 5.1 einen 400 für meine Structured-Output-Request zurück?

Inspiziere den serialisierten Anthropic Request. Ein Framework kann Structured Output implementieren, indem es ein synthetisches Tool mit tool_choice: any erzwingt. Fable 5.1 lehnt beide any und ein benannter tool Choice ab. Schalte auf automatische Tool-Auswahl plus ein striktes Schema und explizite Anweisung um, oder verwende Anthropics JSON Output Mechanismus.

Garantiert strict: true, dass Claude das Tool aufruft?

Nein. Es garantiert Schema-konforme Argumente, wenn das Tool aufgerufen wird. Die Anweisung kann einen Aufruf erforderlich machen, aber deine Anwendung muss trotzdem bestätigen, dass der erwartete Tool-Use-Block existiert und seine Abwesenheit handhaben.

Kann Fable 5.1 ein Fable 5 Gespräch fortsetzen?

Ja. Fable 5.1 kann erhaltenes Thinking von Fable 5 und anderen dokumentierten früheren Claude-Modellen lesen. Die umgekehrte Richtung ist nicht kompatibel: das ältere Ziel empfängt das Gespräch, nachdem Fable 5.1 Thinking Blocks entfernt wurden.

Kann ich den System-Prompt zwischen Turns ändern?

Nicht durch Umschreiben des Präfix, während du spätere Fable 5.1 Thinking Blocks abspielst. Hänge eine Mid-Conversation-System-Nachricht an und behalte sie in der Verlaufshistorie. Wenn die Anwendung absichtlich ein neues Gespräch startet, kann sie einen neuen System-Prompt verwenden, weil es keine alten Thinking Blocks gibt, die zu bewahren sind.

Welche ist die sicherste Client-Seite Kompressionsstrategie?

Ersetze alle bisherige Historie mit einer Zusammenfassung-Nachricht plus dem neuen User-Turn, und spiele keine alten Thinking Blocks ab. Wenn du einen jüngsten Tail bewahrst, entferne Thinking und Redacted-Thinking Blocks aus diesem Tail oder verwende dokumentiertes Drop-Verhalten.

Senkt die Migration jede API-Rechnung?

Nein. Input und Output List Preise bleiben $10 und $50 pro Million Tokens. Cache Reads sind billiger, aber Task-Kosten hängen auch von Output, Anzahl Turns, Effort, Retries und ab, ob der Cache gültig bleibt.[5] Der Fable 5.1 Cost Breakdown handhabt diese Berechnung separat.

Release Gate: Nicht deployen bis jede Reihe passes

GatePass Bedingung
Model RouteJeder Production Alias löst zu claude-fable-5-1 auf, wo beabsichtigt
Erzwungene ToolsKein serialisierter Request enthält tool_choice: any oder ein benanntes erzwungenes Tool
Erforderliche AusgabeFehlende Tool-Aufrufe und ungültige Daten schlagen in Anwendungscode sicher fehl
Thinking HistoryMulti-Turn-, Tool-Change- und Kompressions-Tests zeigen keine unerwarteten Präfix-Mismatches
FallbackDowngrade-Tests tolerieren gelöschtes 5.1 Thinking und führen nicht doppelt Side Effects aus
RetentionDer Ziel-Arbeitsbereich erlaubt die erforderliche Aufbewahrungsrichtlinie des Modells
Behavioral ChecksRetrieval, Progress, Tool Batching, Refusals und File-Edit Umfang erfüllen den Product Rubric

Ein grüner Single-Turn Response beweist nur, dass die Modell-ID und Credentials funktionieren. Eine grüne Migration trainiert das Gespräch nach einem Tool-Aufruf, nach einer History-Änderung und nach dem Fallback, der normalerweise nur läuft, wenn Production bereits unter Stress ist.

Quellenangaben

  1. Anthropic, Migrating to Claude Fable 5.1 and Claude Mythos 5.1, accessed September 7, 2026.
  2. Anthropic, Claude Fable 5.1 overview, accessed September 7, 2026.
  3. Anthropic, What's new in Claude Fable 5.1, accessed September 7, 2026.
  4. Anthropic, Prompting Claude Fable 5.1, accessed September 7, 2026.
  5. Anthropic, API pricing, accessed September 7, 2026.
  6. OpenCode, Issue #46735: Claude Fable 5.1 structured output tool-choice error, accessed September 7, 2026. The issue is cited as an integration example; API behavior is sourced from Anthropic.