Seedance 2.5 is live — 30-second cinematic video with native audio & real-person references
Claude Fable 5.1 마이그레이션: 400 오류 해결
2026/09/07

Claude Fable 5.1 마이그레이션: 400 오류 해결

Claude Fable 5에서 도구 호출과 대화 기록을 보존하고 강제 Tool 선택, 생각 블록, 압축, Fallback 오류를 수정하며 안전하게 마이그레이션하세요.

Claude Fable 5에서 Claude Fable 5.1로 마이그레이션하는 것은 단순히 모델 이름 한 줄을 바꾸는 것이 아닙니다. 새 모델은 강제된 Tool 선택을 거부하고, 보존된 생각 블록을 그것을 만든 대화 접두사에 묶으며, 자신의 생각 블록을 이전 Claude 모델로 다시 전송할 수 없습니다. 따라서 한 번의 턴 스모크 테스트는 통과하지만 첫 번째 구조화된 출력 요청, 압축된 대화 또는 Fallback에서 실패할 수 있습니다.

안전한 마이그레이션은 세 부분으로 나뉩니다. 강제 Tool 호출을 자동 선택 플러스 스키마 강제로 바꾸고, 멀티턴 기록을 추가 전용으로 유지하며, 대화를 이전 모델로 전환할 수 있는 모든 경로를 테스트하세요. OpenAI 호환 경로를 사용하는 경우, Claude Fable 5.1 요청 가이드에서 시작하세요. 아래의 네이티브 예제는 Anthropic의 Messages API를 사용하므로 각 breaking change가 명확합니다.

빠른 답변

  • 네이티브 모델 ID를 claude-fable-5-1로 변경한 후 강제 tool_choice 모드를 제거하세요. any 및 이름이 지정된 도구는 HTTP 400을 반환합니다.[1]
  • Fable 5.1 생각 블록 후에 시스템 프롬프트, 도구 및 이전 메시지 접두사를 변경하지 않은 채로 두세요. 기록을 다시 작성하는 대신 새 지침을 추가하세요.[1]
  • 모든 Fallback을 테스트하세요. 이전 Claude 모델은 Fable 5.1 생각 블록을 읽을 수 없으므로 API는 계속하기 전에 그것들을 삭제합니다.[1]
  • 적응형 생각을 계속 사용하세요. 수동 토큰 예산을 effort로 바꾸고 롤아웃 전에 CI에서 접두사 불일치를 연습하세요.[1]

먼저 실제로 마이그레이션하는 코드 경로를 인벤토리화하세요

리터럴 모델 ID보다 더 널리 검색하세요. 래퍼는 일반 "필수 도구" 설정을 Anthropic의 tool_choice: {"type":"any"}로 변환하고, 대화 저장소에서 생각 블록을 유지하거나, 모든 요청에서 시스템 프롬프트를 변경할 수 있습니다. 릴리스 직후에 나타난 OpenCode 문제는 유용한 예입니다. 구조화된 출력 어댑터가 필수 도구 사용을 선택하여 Anthropic의 지원되지 않는 any 모드가 되고 400을 생성했습니다.[6] 이 문제는 실제 통합 패턴을 보여줍니다. Anthropic의 마이그레이션 가이드는 API 동작의 권한입니다.

편집하기 전에 이러한 구성 요소를 감사하세요:

구성 요소검색할 항목예상되는 실패
모델 선택claude-fable-5, 별칭, Fallback 목록이전 모델이 여전히 트래픽 수신
Tool 어댑터tool_choice, required, any, 이름이 지정된 도구400 invalid_request_error
구조화된 출력합성 도구, 스키마 래퍼래퍼가 도구를 자동으로 강제
대화 저장소thinking, redacted_thinking, 서명편집 후 잘못된 생각 서명
압축요약 삽입, 테일 유지, 메시지 삭제나중 블록이 이전 접두사에 묶임
동적 프롬프트현재 날짜, 권한, 활성화된 도구매 턴마다 시스템 또는 도구 접두사 변경
Retry 및 Fallback이전 Claude 모델 IDFable 5.1 생각이 전환 시 제거됨
보존 정책ZDR 작업 영역 또는 조직생성 전에 요청 거부됨

가능하면 직렬화된 요청 경계에서 인벤토리를 수행하세요. 애플리케이션 객체는 SDK 또는 제공자 어댑터가 다시 작성해도 변경되지 않은 것처럼 보일 수 있습니다.

단계 1: 모델 ID를 업데이트하되 나머지는 관찰 가능하게 유지하세요

네이티브 ID는 claude-fable-5-1입니다. Fable 5.1은 백만 토큰 컨텍스트 윈도우를 유지하고 최대 128,000개의 출력 토큰을 지원하며 항상 켜진 적응형 생각을 사용합니다.[2] 동일한 프로덕션 트래픽 형태로 시작하고 요청 ID, 상태 코드, 중지 이유, 토큰 사용량, 도구 호출 및 Fallback을 기록하세요.

이 마이그레이션을 사용하여 Effort, 압축, 프롬프트 단어 및 도구 프레임워크를 동시에 변경하지 마세요. 좁은 첫 배포는 400 또는 동작 변화를 귀속시킵니다. 호환성이 확립되면 워크로드에서 low, medium, high, xhigh, max를 스윕하세요. 이전 설정이 최적이라고 가정하지 마세요. Anthropic은 high를 기본값으로 문서화합니다.[1]

또한 이전 통합이 제공하는 경우 이러한 구성을 제거하세요:

# 둘 다 Claude Fable 5.1에 유효하지 않습니다.
thinking={"type": "disabled"}

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

Fable 5.1은 언제 어느 정도 생각할지 결정합니다. 프리필로 사용되는 후행 어시스턴트 메시지도 400을 반환하므로 출력 지침을 시스템 또는 사용자 콘텐츠로 표현하세요.[1]

단계 2: 강제된 도구 선택을 바꾸세요

호환성 경계는 정확합니다:

tool_choiceFable 5Fable 5.1
{"type":"auto"}지원됨지원됨
{"type":"none"}지원됨지원됨
{"type":"any"}지원됨HTTP 400
{"type":"tool","name":"record_summary"}지원됨HTTP 400

확인은 Messages, Message Batches 및 토큰 카운팅에 적용됩니다. 보고된 오류는 도구 선택 유형 toolany가 이 모델에 지원되지 않는다고 말합니다.[1] 동일한 본문을 다시 시도해도 도움이 되지 않습니다.

일반적인 마이그레이션 전 패턴입니다:

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."}
    ],
)

Fable 5.1의 경우 자동 선택을 사용하고 현재 지침에 요구 사항을 입력한 후 도구를 엄격하게 만드세요:

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는 모델이 도구를 호출할 때 인수를 제한합니다. 도구가 반드시 호출되어야 한다는 전송 수준의 보장을 다시 만들지 않습니다. 응용 프로그램은 여전히 응답에 필수 도구 사용 블록이 포함되어 있는지 확인해야 합니다. Anthropic은 강제된 도구가 스키마 유효 JSON을 얻기 위해서만 존재했을 때 output_config.format을 통한 JSON 출력도 권장합니다.[1]

응용 프로그램이 대화 중간에 하나의 이름이 지정된 도구를 요구해야 하는 경우 최신 사용자 메시지 후에 role: "system" 메시지를 추가하세요. 도구의 이름을 지정하고, 이 턴에 필요하다고 말하고, 모델에 호출로 시작하도록 지시하세요. 나중 기록에서 해당 시스템 메시지를 유지하세요. 이것은 이전 접두사를 보존합니다. 최상위 시스템 프롬프트를 다시 작성하는 것은 하지 않습니다.[1]

"모델이 지침을 무시했습니다"를 처리된 결과로 취급하세요. 턴을 거부하고 경계가 있는 정책 하에서 다시 시도하거나 안전하게 실패하세요. 프롬프팅을 절대 강제 메커니즘으로 설명하지 마세요.

단계 3: API가 지원하는 방향으로 생각을 보존하세요

모든 Fable 5.1 생각 블록은 모델 및 대화 바인딩 정보를 수반합니다. 호환성은 일방향입니다:

Fable 5 생각  ───────► Fable 5.1은 이를 읽을 수 있습니다
Opus 5 생각   ───────► Fable 5.1은 이를 읽을 수 있습니다

Fable 5.1 생각 ──X──► Fable 5는 이를 읽을 수 없습니다
Fable 5.1 생각 ──X──► Opus 5는 이를 읽을 수 없습니다

Claude Mythos 5.1은 Fable 5.1 블록을 읽을 수 있는 문서화된 예외입니다. 라우터, 거부 Fallback 또는 클라이언트 재시도가 대화를 이전 모델로 보낼 때, API는 대상이 읽을 수 없는 블록을 제거합니다. 요청은 여전히 성공할 수 있고 제거된 입력 토큰은 청구되지 않지만 대상은 해당 추론 없이 다시 계획해야 합니다.[1]

이것은 Fallback 평가에 중요합니다. Fable 5의 첫 번째 요청과 Fable 5.1의 첫 번째 요청은 5.1에서 5로의 대화 중 전환과 동등하지 않습니다. 둘 다 측정하세요. input_transformations를 생각 바인딩 베타가 활성화된 상태로 기록하세요. model_binding_mismatch는 모델이 변경되었기 때문에 삭제된 블록을 식별합니다.

단계 4: 대화 접두사를 추가 전용으로 만드세요

Fable 5.1 생각 블록은 선행된 정확한 시스템 프롬프트, 도구 집합 및 메시지 기록에 대해 유효합니다. 블록을 다시 재생하기 전에 이들 중 하나를 변경하면 잘못된 생각 서명으로 인해 400을 생성할 수 있습니다.[1]

일반적인 실수로 인한 편집:

  • 새 타임스탐프로 시스템 프롬프트 다시 빌드;
  • 최상위 tools 배열에서 도구 추가 또는 제거;
  • 토큰을 절약하기 위해 이전 도구 결과 삭제;
  • 최근 턴을 유지하면서 요약을 요약 전에 삽입;
  • 다음 요청에서 턴당 리마인더 제거;
  • 동일한 URL에서 다른 이미지 또는 문서 바이트 가져오기.

마지막 경우는 놓치기 쉽습니다. 바인딩은 URL 문자열이 아니라 파일 바이트를 다룹니다. 턴 간에 재사용된 파일의 경우 Anthropic은 안정적인 Files API file_id 또는 base64 콘텐츠를 권장합니다.[1]

이러한 패턴을 선호하세요:

  • 이전 바이트를 변경하지 않고 새 턴 추가;
  • 변경된 지침을 위해 대화 중 시스템 메시지 추가;
  • 도구 변경을 위해 지원되는 도구 추가 및 도구 제거 블록 사용;
  • 서버 측 압축 또는 컨텍스트 편집 사용;
  • 클라이언트에서 압축하는 경우 전체 기록을 하나의 요약 및 새 사용자 턴으로 바꾸고 이전 생각 블록을 전달하지 마세요.

최종 클라이언트 측 형태는 의도적으로 간단합니다. 새 요약 뒤에 최근 턴을 유지하는 것은 해당 턴의 thinkingredacted_thinking 블록이 제거되는 경우에만 안전합니다. 왜냐하면 이러한 블록은 요약 전 기록에 대해 생성되었기 때문입니다.[1]

사용자가 하기 전에 접두사 불일치를 진단하세요

Anthropic은 2026년 8월 31일 이후에 생성된 계정에 대해 기본적으로 대화 접두사 확인을 강제합니다. 이전 계정은 제어를 선택하지 않으면 실패하지 않을 수 있으며, 이는 고객 키와 함께 사용되는 라이브러리에 대해 위험한 "우리 키로 작동" 테스트 격차를 만듭니다.[1]

스테이징 세션에서 베타 제어를 사용하세요:

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)

drop_block을 사용하면 API는 첫 번째 불일치 생각 블록과 이후의 모든 생각 블록을 제거한 다음 prefix_binding_mismatch를 보고합니다. 기본 error을 사용하면 요청을 거부합니다. 성능 저하된 연속이 실패보다 나을 때 drop_block을 사용하세요. 불일치를 즉시 노출하려면 CI에서 error를 사용하세요.[1]

동일한 잘못된 본문의 자동 재시도는 불일치를 복구할 수 없습니다. 원래 접두사를 복원하거나 영향을 받는 생각 블록을 제거하거나 명시적으로 드롭 동작을 요청하세요.

400을 생성하지 않는 동작을 다시 확인하세요

호환성 테스트도 더 조용한 변경을 다루어야 합니다. Anthropic은 Fable 5.1이 긴 에이전트 루프에서 더 적은 병렬 도구 호출을 실행하고, 더 적은 진행 메시지를 생성하고, low Effort에서 검색 또는 검색을 덜 호출할 수 있다고 말합니다.[3] 이들 중 어느 것도 반드시 결함을 나타내지는 않지만 각각은 지연 시간 또는 제품 동작을 변경할 수 있습니다.

응용 프로그램이 필요로 하는 것 주위에 어설션을 빌드하세요:

  • 병렬화 가능한 읽기의 경우 턴당 호출 및 총 왕복을 기록하세요.
  • 진행 UI의 경우 정의된 간격에서가 아닌 사용자 대면 업데이트를 요청하세요.
  • 검색 그라운드 답변의 경우 검색 기준을 명시적으로 만들고 필수 증거가 없는 답변을 거부하세요.
  • 에디트 에이전트의 경우 변경된 파일 목록을 확인하고 작은 패치가 필요할 때 전체 파일 다시 쓰기를 권장하지 마세요.[4]

거부 처리도 유지하세요. Fable 5.1은 stop_reason: "refusal"stop_details.category와 함께 반환할 수 있습니다. 빈 답변 텍스트를 전송 실패로 취급하지 마세요. 모든 Fallback은 일방향 생각 호환성을 설명해야 합니다.[2]

FAQ

Fable 5.1이 구조화된 출력 요청에 대해 400을 반환하는 이유는 무엇입니까?

직렬화된 Anthropic 요청을 검사하세요. 프레임워크는 tool_choice: any로 합성 도구를 강제하여 구조화된 출력을 구현할 수 있습니다. Fable 5.1은 any 및 이름이 지정된 tool 선택을 모두 거부합니다. 자동 도구 선택 플러스 엄격한 스키마 및 명시적 지침으로 전환하거나 Anthropic의 JSON 출력 메커니즘을 사용하세요.

strict: true가 Claude가 도구를 호출한다는 것을 보장합니까?

아니요. 도구가 호출될 때 스키마 준수 인수를 보장합니다. 지침은 호출을 요구할 수 있지만 응용 프로그램은 여전히 예상 도구 사용 블록이 존재하는지 확인하고 그 부재를 처리해야 합니다.

Fable 5.1이 Fable 5 대화를 계속할 수 있습니까?

네. Fable 5.1은 Fable 5 및 기타 문서화된 이전 Claude 모델에서 보존된 생각을 읽을 수 있습니다. 역방향은 호환되지 않습니다. 이전 대상은 Fable 5.1 생각 블록이 삭제된 후 대화를 수신합니다.

턴 사이에 시스템 프롬프트를 변경할 수 있습니까?

이전 Fable 5.1 생각 블록을 다시 재생하는 동안 접두사를 다시 작성하여 변경할 수 없습니다. 대화 중 시스템 메시지를 추가하고 기록에 유지하세요. 응용 프로그램이 의도적으로 새 대화를 시작하면 이전 생각 블록이 없기 때문에 새 시스템 프롬프트를 사용할 수 있습니다.

가장 안전한 클라이언트 측 압축 전략은 무엇입니까?

모든 이전 기록을 하나의 요약 메시지 플러스 새 사용자 턴으로 바꾸고 이전 생각 블록을 다시 재생하지 마세요. 최근 테일을 유지하면 해당 테일에서 생각 및 редacted-thinking 블록을 제거하거나 문서화된 드롭 동작을 사용하세요.

마이그레이션이 모든 API 청구서를 낮춥니까?

아니요. 입력 및 출력 목록 가격은 백만 토큰당 $10 및 $50으로 유지됩니다. 캐시 읽기가 저렴하지만 작업 비용은 출력, 턴 수, Effort, 재시도 및 캐시가 유효한지 여부에 따라서도 달라집니다.[5] Fable 5.1 비용 분석은 해당 계산을 별도로 다룹니다.

릴리스 게이트: 모든 행이 통과할 때까지 배포하지 마세요

게이트통과 조건
모델 경로모든 프로덕션 별칭이 의도된 곳에서 claude-fable-5-1로 확인됩니다
강제 도구직렬화된 요청에 tool_choice: any 또는 이름이 지정된 강제 도구가 포함되지 않습니다
필수 출력누락된 도구 호출 및 잘못된 데이터가 응용 프로그램 코드에서 안전하게 실패합니다
생각 기록멀티턴, 도구 변경 및 압축 테스트는 설명되지 않은 접두사 불일치를 보이지 않습니다
Fallback다운그레이드 테스트는 삭제된 5.1 생각을 허용하고 부작용을 두 번 실행하지 않습니다
보존대상 작업 영역은 모델의 필수 보존 정책을 허용합니다
동작 확인검색, 진행, 도구 배치, 거부 및 파일 편집 범위가 제품 기준을 충족합니다

녹색 단일턴 응답은 모델 ID와 자격 증명만 작동한다는 것을 증명합니다. 녹색 마이그레이션은 도구 호출 후, 기록 변경 후, 일반적으로 프로덕션이 이미 스트레스를 받을 때 실행되는 Fallback 후의 대화를 연습합니다.

References

  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.