Claude Fable 5.1의 새로운 기능

Claude Fable 5.1의 새로운 기능 (What's new in Claude Fable 5.1)

Claude Fable 5.1은 Claude Fable 5를 같은 입력·출력 가격으로 확장하면서 캐시 읽기 비용은 4분의 1로 낮추고, 장시간 실행되는 에이전트 코딩, 다단계 리서치, 문서·스프레드시트·슬라이드 작업에서 더 강력해졌어요. 대부분의 워크로드에서는 모델 선택을 참고해 Claude Opus 5로 시작해 보세요. 까다로운 추론이나 장기 지평 에이전트 작업이 필요하거나, 더 높은 effort에서 Claude Opus 5로 평가한 결과가 여전히 부족할 때 Claude Fable 5.1을 사용하세요. Claude Mythos 5.1은 같은 기능을 Project Glasswing 참여자에게만 제공해요.

이미 Claude Fable 5를 호출하고 있다면 세 가지 변경이 하위 호환을 깨요: 강제 도구 사용이 오류를 반환하고, 이전 모델은 그 사고 블록을 읽을 수 없으며, 이전 턴을 편집하면 사고 블록이 무효화돼요. 다섯 가지는 추가 기능이에요: 메시지별 effort (베타), 턴 범위 시스템 메시지 (베타), 도구 호출 사이의 읽기 가능한 진행 업데이트 (display: "updates", 베타), 더 낮은 캐시 읽기 가격, 그리고 콘텐츠 출처 확인이에요.

출처: 문서

본문

모델 (Models)

모델 Claude API ID 설명 제공 상황
Claude Fable 5.1 claude-fable-5-1 장시간 에이전트 코딩, 지식 작업, 리서치를 위한 Claude Fable 5의 후속 모델 모든 고객, Claude API 및 파트너 플랫폼에서
Claude Mythos 5.1 claude-mythos-5-1 Claude Fable 5.1과 동일한 기능. Claude Mythos 5의 후속 모델. Project Glasswing 참여자만

Claude Fable 5.1과 Claude Mythos 5.1은 사양과 가격을 공유해요:

  • 컨텍스트 창과 출력: 전체 창에 걸쳐 표준 토큰당 가격으로 1M 토큰 컨텍스트 창 (기본값이자 최대값)을 제공하고, 최대 출력 토큰은 128k예요.
  • 사고: 적응형 사고가 항상 켜져 있어요. 사고 깊이를 제어하려면 effort 파라미터를 사용하세요.
  • 가격: 더 낮은 캐시 읽기 가격을 제외하면 Claude Fable 5와 동일해요.
  • 토크나이저: Claude Fable 5와 동일해요 (Claude Opus 4.7에서 도입). Claude Opus 4.7보다 오래된 모델과 비교하면 같은 텍스트가 대략 30% 더 많은 토큰을 만들어요. 토큰 계산을 참고하세요.

현재 모든 모델은 모델 개요를 참고하세요.

하위 호환을 깨는 변경 (Breaking changes)

강제 도구 사용이 지원되지 않아요 (Forced tool use is not supported)

Claude Fable 5.1과 Claude Mythos 5.1은 강제 도구 사용을 지원하지 않아요. tool_choice{"type": "any"} 또는 {"type": "tool", "name": "..."}로 설정하면 400 invalid_request_error를 반환해요:

tool_choice: type "tool" and "any" are not supported for this model.

tool_choice: {"type": "auto"} (기본값)와 {"type": "none"}은 그대로예요. 토큰 계산 엔드포인트에도 같은 검증이 적용돼요.

이 모델들에서는 사고가 항상 켜지는데, 강제 도구 호출은 사고를 건너뛰게 돼요. 그러면 모델이 그 대신 도구 인자 안에 작업 과정을 적어서 인자 품질이 떨어져요. 스키마를 따르는 JSON이 필요하다면 tool_choice: {"type": "auto"}를 유지하고 엄격한 도구 사용과 함께 strict: true를 설정하거나, 스키마를 구조화된 출력으로 옮기세요. 모델이 텍스트로 답하지 않고 도구를 호출하게 하려면 프롬프트에 도구가 언제 적용되는지 명시하세요 (예: "답하려면 get_weather 도구를 사용해"). Claude Fable 5.1은 명시적인 도구 지시를 안정적으로 따르는 편이에요.

이전 모델은 Claude Fable 5.1 사고 블록을 읽을 수 없어요 (Earlier models can't read Claude Fable 5.1 thinking blocks)

모든 사고 블록은 어떤 모델이 만들었는지를 기록하며, 한 방향으로만 보존돼요: Claude Fable 5.1은 이전 모델의 사고 블록을 읽지만, 어떤 이전 모델도 Claude Fable 5.1의 사고 블록을 읽지 못해요. (Claude Opus 5, Claude Fable 5, 또는 그 이전 Claude 모델에서) Claude Fable 5.1로 옮겨온 대화는 그 추론을 유지해요. Claude Fable 5.1에서 그 모델들 중 하나로 옮기는 대화는 그 턴들에서 추론을 잃어요.

요청이 대상 모델이 읽을 수 없는 블록을 실을 때 (예: 대화 도중 모델을 바꾸는 라우터나 폴백), API는 그 블록을 모델이 보기 전에 버려요. 버려진 블록은 input_tokens에 세지 않고 청구되지 않아요. thinking-binding-controls-2026-08-01 베타 헤더를 보내면, 이 버림이 최상위 input_transformations 배열에 보고돼요. 헤더가 없으면 조용히 버려져요. 대화 도중 모델 바꾸기를 참고하세요.

이전 턴을 편집하면 사고 블록이 무효화돼요 (Editing earlier turns invalidates thinking blocks)

Claude Fable 5.1 사고 블록 앞의 어떤 것(system 프롬프트, tools, 또는 이전 메시지)을 수정하면 다음 요청에서 오류가 나거나, 그렇게 하기로 선택하면 블록이 버려져요. Claude Mythos 5.1은 이 검사를 실행하지 않아요. Claude Code, claude.ai, Claude Managed Agents, 그리고 Claude Agent SDK는 이 접두사를 여러분 대신 온전히 유지해요. 직접 messages 배열을 만든다면 마이그레이션 전에 확인해 보세요: 보존된 사고가 검사와 각 수정 방법을 안내해요. 이 검사는 2026년 8월 31일 이후에 만들어진 새 계정에서 시행돼요. 그 전에 만들어진 계정은 API가 불일치를 기록하지만, 요청이 thinking.block_binding.prefix_mismatch_behavior를 설정할 때만 실제로 적용돼요.

이런 패턴은 이후의 모든 사고 블록을 무효화해요:

  • 이전 턴을 유지하면서 그 턴을 편집, 재정렬, 또는 제거하는 것.
  • 이전 턴에 요청별 텍스트(리마인더나 상태 줄)를 집어넣었다가 다음 요청에서 제거하는 것.
  • 같은 대화의 요청 사이에 최상위 system 프롬프트나 tools 배열을 다시 만드는 것.
  • 나중 요청에서 다른 바이트를 제공하는 이미지나 문서 URL (검사는 URL이 아니라 바이트를 다루므로, 같은 파일의 회전 서명 URL은 괜찮아요).

이런 패턴은 이후 블록을 유효하게 유지해요: 앞쪽의 사고 블록 뭉치를 (오래된 것부터) 제거하기, 서버 측 압축이나 컨텍스트 정리를 사용해 기록을 줄이기, cache_control 마커 옮기기, 요청 사이에 effort 바꾸기. 뭉치의 시작이 아닌 곳에서 사고 블록을 제거하면 그 뒤의 모든 사고 블록이 무효화돼요.

검사가 시행되는 곳에서 무효화된 블록을 다시 보내는 요청은 The block is bound to a different conversation 메시지를 담은 400으로 거부돼요. 블록을 버리고 계속하려면 thinking-binding-controls-2026-08-01 베타 헤더를 thinking.block_binding.prefix_mismatch_behavior: "drop_block"과 함께 보내세요. 버림은 reason: "prefix_binding_mismatch"와 함께 input_transformations에 보고돼요.

긴 세션 내내 사고를 유효하게 유지하려면 대화를 append-only로 취급하세요. 대화 도중 시스템 메시지로 지시를 추가하고 (턴 범위는 한 턴에만 적용되게 하려면 그렇게), system이나 tools를 편집하는 대신 대화 도중 도구 변경으로 도구를 바꾸세요. 컨텍스트는 편집으로 세지 않는 서버 측 컨텍스트 정리압축으로 줄이세요. 이런 패턴은 프롬프트 캐시도 따뜻하게 유지해줘요. 여러분의 통합이 기록을 편집하는지 알아보려면 prefix_mismatch_behavior: "drop_block"로 세션을 실행하고 input_transformations를 기록해 보세요: 마이그레이션 가이드에 세 단계 검사가 있어요. 전체 규칙은 접두사 유지를 참고하세요.

새로운 기능 (New features)

대화 도중 effort 바꾸기 (베타) (Change effort mid-conversation)

Claude Fable 5.1에서는 프롬프트 캐시를 무효화하지 않고 effort 수준을 대화 도중에 바꿀 수 있어요. 어려운 단계에서는 올리고 일상적인 단계에서는 내리세요. 메시지별 effort는 베타예요: mid-conversation-output-config-2026-07-01 베타 헤더를 포함하세요. Claude Fable 5.1, Claude Mythos 5.1, Claude Opus 5가 Claude API와 Google Cloud에서 이를 지원해요.

```bash cURL # Effort-only system message: the new level takes effect from the next user turn. curl https://api.anthropic.com/v1/messages \ -H "x-api-key: $ANTHR...KEY" \ -H "anthropic-version: 2023-06-01" \ -H "anthropic-beta: mid-conversation-output-config-2026-07-01" \ -H "content-type: application/json" \ -d '{ "model": "claude-fable-5-1", "max_tokens": 4096, "output_config": {"effort": "high"}, "messages": [ {"role": "user", "content": "Plan a migration from SQLite to PostgreSQL in three short steps."}, {"role": "assistant", "content": "1. Export the SQLite data. 2. Create the PostgreSQL schema. 3. Import the data and verify row counts."}, {"role": "system", "content": [], "output_config": {"effort": "low"}}, {"role": "user", "content": "Summarize the plan in one sentence."} ] }' ```
ant beta:messages create --beta mid-conversation-output-config-2026-07-01 \
  --transform 'content.#(type=="text").text' --raw-output <<'YAML'
model: claude-fable-5-1
max_tokens: 4096
output_config:
  effort: high
messages:
  - role: user
    content: Plan a migration from SQLite to PostgreSQL in three short steps.
  - role: assistant
    content: "1. Export the SQLite data. 2. Create the PostgreSQL schema. 3. Import the data and verify row counts."
  # Effort-only system message: the new level takes effect from the next user turn.
  - role: system
    content: []
    output_config:
      effort: low
  - role: user
    content: Summarize the plan in one sentence.
YAML
client = anthropic.Anthropic()

response = client.beta.messages.create(
    model="claude-fable-5-1",
    max_tokens=4096,
    output_config={"effort": "high"},
    messages=[
        {
            "role": "user",
            "content": "Plan a migration from SQLite to PostgreSQL in three short steps.",
        },
        {
            "role": "assistant",
            "content": "1. Export the SQLite data. 2. Create the PostgreSQL schema. 3. Import the data and verify row counts.",
        },
        # Effort-only system message: the new level takes effect from the next user turn.
        {"role": "system", "content": [], "output_config": {"effort": "low"}},
        {"role": "user", "content": "Summarize the plan in one sentence."},
    ],
    betas=["mid-conversation-output-config-2026-07-01"],
)

for block in response.content:
    if block.type == "text":
        print(block.text)
const client = new Anthropic();

const response = await client.beta.messages.create({
  model: "claude-fable-5-1",
  max_tokens: 4096,
  output_config: { effort: "high" },
  messages: [
    {
      role: "user",
      content: "Plan a migration from SQLite to PostgreSQL in three short steps."
    },
    {
      role: "assistant",
      content:
        "1. Export the SQLite data. 2. Create the PostgreSQL schema. 3. Import the data and verify row counts."
    },
    // Effort-only system message: the new level takes effect from the next user turn.
    { role: "system", content: [], output_config: { effort: "low" } },
    { role: "user", content: "Summarize the plan in one sentence." }
  ],
  betas: ["mid-conversation-output-config-2026-07-01"]
});

for (const block of response.content) {
  if (block.type === "text") {
    console.log(block.text);
  }
}
using Anthropic.Models.Beta;
using Anthropic.Models.Beta.Messages;

AnthropicClient client = new();

var response = await client.Beta.Messages.Create(new MessageCreateParams
{
    Model = "claude-fable-5-1",
    MaxTokens = 4096,
    OutputConfig = new() { Effort = Effort.High },
    Messages =
    [
        new() { Role = Role.User, Content = "Plan a migration from SQLite to PostgreSQL in three short steps." },
        new() { Role = Role.Assistant, Content = "1. Export the SQLite data. 2. Create the PostgreSQL schema. 3. Import the data and verify row counts." },
        // Effort-only system message: the new level takes effect from the next user turn.
        new()
        {
            Role = Role.System,
            Content = new([]),
            OutputConfig = new() { Effort = BetaSystemMessageOutputConfigEffort.Low },
        },
        new() { Role = Role.User, Content = "Summarize the plan in one sentence." },
    ],
    Betas = [AnthropicBeta.MidConversationOutputConfig2026_07_01],
});

foreach (var block in response.Content)
{
    if (block.TryPickText(out var textBlock))
    {
        Console.WriteLine(textBlock.Text);
    }
}
client := anthropic.NewClient()

response, err := client.Beta.Messages.New(context.Background(), anthropic.BetaMessageNewParams{
	Model:     "claude-fable-5-1",
	MaxTokens: 4096,
	OutputConfig: anthropic.BetaOutputConfigParam{
		Effort: anthropic.BetaOutputConfigEffortHigh,
	},
	Messages: []anthropic.BetaMessageParam{
		anthropic.NewBetaUserMessage(anthropic.NewBetaTextBlock("Plan a migration from SQLite to PostgreSQL in three short steps.")),
		{
			Role:    anthropic.BetaMessageParamRoleAssistant,
			Content: []anthropic.BetaContentBlockParamUnion{anthropic.NewBetaTextBlock("1. Export the SQLite data. 2. Create the PostgreSQL schema. 3. Import the data and verify row counts.")},
		},
		// Effort-only system message: the new level takes effect from the next user turn.
		anthropic.NewBetaSystemMessage(anthropic.BetaSystemMessageOutputConfigParam{
			Effort: anthropic.BetaSystemMessageOutputConfigEffortLow,
		}),
		anthropic.NewBetaUserMessage(anthropic.NewBetaTextBlock("Summarize the plan in one sentence.")),
	},
	Betas: []anthropic.AnthropicBeta{anthropic.AnthropicBetaMidConversationOutputConfig2026_07_01},
})
if err != nil {
	log.Fatal(err)
}

for _, block := range response.Content {
	if textBlock, ok := block.AsAny().(anthropic.BetaTextBlock); ok {
		fmt.Println(textBlock.Text)
	}
}
import com.anthropic.models.beta.AnthropicBeta;
import com.anthropic.models.beta.messages.BetaMessage;
import com.anthropic.models.beta.messages.BetaMessageParam;
import com.anthropic.models.beta.messages.BetaOutputConfig;
import com.anthropic.models.beta.messages.BetaSystemMessageOutputConfig;
import com.anthropic.models.beta.messages.MessageCreateParams;

void main() {
    AnthropicClient client = AnthropicOkHttpClient.fromEnv();

    MessageCreateParams params = MessageCreateParams.builder()
        .model("claude-fable-5-1")
        .maxTokens(4096L)
        .addBeta(AnthropicBeta.MID_CONVERSATION_OUTPUT_CONFIG_2026_07_01)
        .outputConfig(BetaOutputConfig.builder()
            .effort(BetaOutputConfig.Effort.HIGH)
            .build())
        .addUserMessage("Plan a migration from SQLite to PostgreSQL in three short steps.")
        .addAssistantMessage("1. Export the SQLite data. 2. Create the PostgreSQL schema. 3. Import the data and verify row counts.")
        // Effort-only system message: the new level takes effect from the next user turn.
        .addMessage(BetaMessageParam.builder()
            .role(BetaMessageParam.Role.SYSTEM)
            .contentOfBetaContentBlockParams(List.of())
            .outputConfig(BetaSystemMessageOutputConfig.builder()
                .effort(BetaSystemMessageOutputConfig.Effort.LOW)
                .build())
            .build())
        .addUserMessage("Summarize the plan in one sentence.")
        .build();

    BetaMessage response = client.beta().messages().create(params);
    response.content().stream()
        .flatMap(block -> block.text().stream())
        .forEach(textBlock -> IO.println(textBlock.text()));
}
use Anthropic\Beta\AnthropicBeta;
use Anthropic\Beta\Messages\BetaMessageParam;
use Anthropic\Beta\Messages\BetaOutputConfig;
use Anthropic\Beta\Messages\BetaSystemMessageOutputConfig;
use Anthropic\Client;

$client = new Client();

$response = $client->beta->messages->create(
    model: 'claude-fable-5-1',
    maxTokens: 4096,
    outputConfig: BetaOutputConfig::with(effort: 'high'),
    messages: [
        BetaMessageParam::with(role: 'user', content: 'Plan a migration from SQLite to PostgreSQL in three short steps.'),
        BetaMessageParam::with(role: 'assistant', content: '1. Export the SQLite data. 2. Create the PostgreSQL schema. 3. Import the data and verify row counts.'),
        // Effort-only system message: the new level takes effect from the next user turn.
        BetaMessageParam::with(
            role: 'system',
            content: [],
            outputConfig: BetaSystemMessageOutputConfig::with(effort: 'low'),
        ),
        BetaMessageParam::with(role: 'user', content: 'Summarize the plan in one sentence.'),
    ],
    betas: [AnthropicBeta::MID_CONVERSATION_OUTPUT_CONFIG_2026_07_01],
);

foreach ($response->content as $block) {
    if ($block->type === 'text') {
        echo $block->text, PHP_EOL;
    }
}
client = Anthropic::Client.new

response = client.beta.messages.create(
  model: "claude-fable-5-1",
  max_tokens: 4096,
  output_config: {effort: :high},
  messages: [
    {role: "user", content: "Plan a migration from SQLite to PostgreSQL in three short steps."},
    {role: "assistant", content: "1. Export the SQLite data. 2. Create the PostgreSQL schema. 3. Import the data and verify row counts."},
    # Effort-only system message: the new level takes effect from the next user turn.
    {role: "system", content: [], output_config: {effort: :low}},
    {role: "user", content: "Summarize the plan in one sentence."}
  ],
  betas: [Anthropic::AnthropicBeta::MID_CONVERSATION_OUTPUT_CONFIG_2026_07_01]
)

response.content.each do |block|
  puts block.text if block.type == :text
end

자세한 내용은 메시지별 effort를 참고하세요.

턴 범위 시스템 메시지 (베타) (Turn-scoped system messages)

대화 도중 시스템 메시지는 한 턴으로 범위를 제한할 수 있어요. role: "system" 메시지에 clear_at: "next_user_message"를 설정하면 그 텍스트가 현재 턴에 대해 시스템 프롬프트 권한을 지니고, 이후 user 메시지가 생기면 렌더링이 멈춰요. 메시지는 messages에 남아 있고 계속 그대로 다시 보내므로 대화의 더 일찍 부분은 바뀌지 않아요. 프롬프트 캐시는 계속 일치하고, 이후의 사고 블록은 유효하게 유지되며, 지워진 메시지는 입력 토큰 비용이 없어요. 도구 루프에서 턴별 리마인더에 사용하세요 ("더 코드를 실행하기 전에 받은 편지함을 확인해", "사용자는 그 도구 출력을 볼 수 없어") — 기록에 텍스트를 집어넣었다가 다음 요청에서 삭제하는 대신에요. 턴 범위 시스템 메시지는 베타예요: mid-conversation-system-clear-at-2026-08-21 베타 헤더를 포함하세요. 턴 범위 시스템 메시지를 참고하세요.

{
  "role": "system",
  "clear_at": "next_user_message",
  "content": "Results have landed in your inbox. Check it before running more code."
}

도구 호출 사이의 진행 업데이트 (베타) (Progress updates between tool calls)

Claude Fable 5와 마찬가지로, Claude Fable 5.1은 도구 호출 사이에 무엇을 발견했고 다음에 무엇을 할지에 대해 짧은 진행 업데이트를 쓰지만, 그 수는 더 적어요 (Claude Fable 5와의 차이 참고). 각 업데이트는 도구 호출 직전에 별개의 thinking 블록으로 도착해요. 기본 thinking.display 값인 "omitted"에서는 그 블록들이 추론처럼 비어서 돌아오므로, 긴 에이전트 턴이 사용자에게 조용해 보일 수 있어요. 새로운 것은 display: "updates" 옵션이에요: thinking-display-updates-2026-08-18 베타 헤더로 설정하면 추론은 숨긴 채 진행 업데이트를 텍스트로 받을 수 있어요. 텍스트가 비어 있지 않은 thinking 블록은 그때 사용자에게 보여줄 수 있는 상태 줄이에요. "summarized"도 그것들을 요약된 추론과 섞어서 돌려줘요. 도구 호출 사이의 진행 업데이트를 참고하세요.

콘텐츠 출처 (Content provenance)

Claude Fable 5.1과 Claude Mythos 5.1이 생성한 텍스트는 모델이 제공되는 모든 플랫폼에서 Anthropic의 통계적 텍스트 워터마크를 담아요. Claude가 만든 지원 이미지, 비디오, 오디오 파일 (예: 코드 실행 도구를 통해)은 Files API로 Claude API에서 검색할 때 서명된 C2PA Content Credentials를 담아요.

워터마크는 출력의 의미, 품질, 가독성을 바꾸지 않아요. 토큰이나 숨은 문자를 추가하지 않고, 여러분이나 조직에 대한 정보를 담지 않으며, 요청이나 응답을 바꿀 필요도 없어요. 배경은 Claude가 AI 생성 콘텐츠를 표시하는 방법Claude의 텍스트 워터마크 작동 방식을 참고하세요.

동작 차이 (Behavior differences)

Claude Fable 5와의 차이 (Changed from Claude Fable 5)

Claude Fable 5.1은 코드 변경 없이도 드러나는 여러 방식에서 Claude Fable 5와 달라요. 각각에 Claude Fable 5.1 프롬프팅에 프롬프팅 수정이 있어요:

  • 병렬 도구 호출이 더 가변적이에요. Claude Fable 5.1은 Claude Fable 5가 여러 개를 묶던 곳에서 턴당 하나의 도구 호출을 낼 수 있어요. 이는 다음 독립적인 읽기가 암시적으로만 남는 긴 에이전트 루프에서 두드러져요: 커스텀 코딩 에이전트, bash-and-editor 하네스, computer use. 추가 턴은 토큰, 왕복 시간, 벽시계 시간을 소모하지만 답 품질을 낮추지 않아요. 여러 개를 가져오라고 이름을 나열한 요청은 여전히 병렬로 실행돼요. 에이전트 루프에서 독립 도구 호출 묶기의 한 줄 묶기 지시를 추가하세요.
  • 긴 도구 실행 동안 진행 업데이트가 더 적어요. 모델은 특히 더 높은 effort에서 도구 호출 사이에 사용자에게 보이는 텍스트를 더 적게 써요. thinking.display"updates"로 (베타) 설정하면 모델이 쓰는 진행 업데이트를 받을 수 있고, 최종 응답까지 발견한 것을 보류하라고 하는 프롬프트 줄은 제거하세요. UI가 서술에 의존한다면 시작 줄, 주기적 업데이트, 마지막 요약을 명시적으로 요청하세요. 사용자에게 보이는 진행 업데이트 요청하기를 참고하세요.
  • low effort에서 더 자주 메모리로 답해요. 가장 낮은 effort 수준에서 모델은 검색이나 검색 도구를 덜 호출해요. 새로운 정보가 필요한 턴에서는 (대화 도중 포함) effort를 올리거나, 저 effort에서의 검색 트리거링의 검증 넛지를 추가하세요.
  • 어떤 곳에서는 산문이 더 조밀해요. 어떤 경우 그 산문은 Claude Fable 5보다 조밀해서, 더 긴 문장과 더 적은 단락 나눔을 보여요. 쓰기 밀도를 참고하세요.
  • 채팅에서 서식이 덜 돼요. 모델은 이전 Claude 모델보다 굵게, 제목, 목록을 덜 사용하므로, 그 모델들을 위해 작성된 반-서식 규칙이 콘텐츠가 필요한 구조를 억제할 수 있어요. 채팅에서의 서식을 참고하세요.
  • 요약에서 따옴표 표시가 없는 인용. 문서를 요약할 때 모델은 인용으로 표시하지 않고 출처 구절을 재현할 가능성이 더 높아요. 검색된 출처 인용하기를 참고하세요.
  • 작은 변경에도 파일 전체를 다시 써요. 텍스트 파일을 편집할 때 모델은 표적 편집보다 전체 파일을 다시 쓸 가능성이 더 높아요. 결과는 보통 같지만, 다시 쓰기는 더 많은 출력 토큰과 시간이 들어요. 파일 전체 재작성보다 표적 편집 선호하기를 참고하세요.

Claude Fable 5와 동일 (Unchanged from Claude Fable 5)

이런 Messages API 동작은 Claude Fable 5에서 그대로 이어져요:

  • 적응형 사고는 항상 켜져 있어요. thinking: {"type": "enabled"}budget_tokens, 그리고 thinking: {"type": "disabled"}는 둘 다 400 오류를 반환해요. thinking을 생략하거나 {"type": "adaptive"}를 보내세요.
  • thinking.display는 기본값이 "omitted"예요. "summarized"를 사용할 수 있고, 원시 사고 사슬은 절대 반환되지 않아요.
  • 도구 호출 사이의 추론은 텍스트가 아닌 thinking 블록에 나타나고, 교차 사고는 베타 헤더 없이 자동이에요.
  • 어시스턴트 응답 프리필은 400 오류를 반환해요.
  • 기본값이 아닌 temperature, top_p, 또는 top_k 값은 400 오류를 반환해요.
  • 캐시 가능한 최소 프롬프트 길이는 512 토큰이에요.
  • 대화 도중 시스템 메시지와 도구 변경이 지원돼요.

성능 개선 (Capability improvements)

Claude Fable 5.1은 Claude Fable 5를 개선하며, 그 격차는 더 높은 effort 수준에서 가장 커요. 개선은 여섯 영역에 집중돼요:

  • 긴 세션에 걸친 에이전트 코딩, 다중 파일 기능, 큰 리팩터·마이그레이션, 디버깅, 그리고 몇 시간씩 이어지는 세션에서의 코드 리뷰를 포함해요.
  • 문서, 스프레드시트, 슬라이드를 다루는 지식 작업, 첫 질문에서 완성된 문서, 실시간 수식 스프레드시트, 또는 빈 페이지에서 만든 슬라이드 데크까지 분석을 진행해요.
  • 리서치와 검색, 다단계 웹 리서치와 찾은 것을 후속 조사하는 딥 리서치 작업에서 더 높은 정확도를 보여요.
  • 비전, PDF에 내장된 조밀한 차트, 서류, 표를 읽고 차트에 크롭-줌 도구를 사용할 수 있어요.
  • 긴 컨텍스트 작업, 전체 1M 토큰 컨텍스트 창에 걸쳐 세부 사항을 추론하고 연결해요.
  • Computer use, 브라우저와 데스크톱 애플리케이션을 더 안정적으로 조작하고 실패한 단계에서 복구해요.

다국어 성능은 Claude Fable 5와 비슷해요.

거부, 폴백, 청구 (Refusals, fallback, and billing)

Claude Fable 5.1은 Claude Fable 5와 같은 stop_details 범주를 다루는 안전 분류기를 포함하며 거부와 폴백의 모든 것이 적용돼요. stop_reason: "refusal"을 반환할 수 있으므로 거부를 처리하고 폴백을 구성하세요.

  • 거부(Refusals): 거절된 요청은 stop_reason: "refusal"과 함께 발동된 정책 영역을 이름 짓는 stop_details 객체를 담은 HTTP 200을 반환해요.
  • 폴백(Fallback): 거절된 요청을 다른 모델에서 서버 측 폴백, SDK 미들웨어, 또는 직접 재시도로 다시 시도하세요. fallbacks: "default" (베타)는 거절된 요청을 Anthropic이 그 범주에 대해 권장하는 모델에서 재시도해요. Claude Fable 5.1의 허용 폴백 대상은 Claude Opus 4.8과 Claude Opus 5예요.
  • 청구(Billing): 출력 전에 도착한 거부는 청구되지 않고, Claude Fable 5.1의 경우 폴백 크레딧이 모델을 바꾸는 프롬프트 캐시 비용을 환불해줘요.

가격 (Pricing)

Claude Fable 5.1과 Claude Mythos 5.1은 캐시 읽기를 제외하면 Claude Fable 5와 같은 가격이에요 (USD 기준):

기본 입력 5m 캐시 쓰기 1h 캐시 쓰기 캐시 읽기 출력
$10 / MTok $12.50 / MTok $20 / MTok $0.25 / MTok $50 / MTok

이 모델들에서 캐시 읽기(히트·새로고침)는 기본 입력 가격의 0.025배인데, 다른 Claude 모델은 0.1배예요. 캐시된 접두사를 다시 읽는 긴 에이전트 세션은 Claude Fable 5 요율의 4분의 1을 내요. 캐시 쓰기와 512토큰 최소 캐시 가능 프롬프트 길이는 그대로예요.

배치 처리는 입력 토큰 백만 개당 $5 USD, 출력 토큰 백만 개당 $25 USD예요. 데이터 상주와 도구 가격은 가격(Pricing)을 참고하세요.

제공 상황 (Availability)

Claude Fable 5.1은 다음에서 사용할 수 있어요:

Claude Mythos 5.1은 Project Glasswing의 승인된 고객에게만 제공돼요. 액세스는 Anthropic, AWS, 또는 Google Cloud 계정 팀에 문의하세요.

Claude Fable 5.1과 Claude Mythos 5.1은 30일 데이터 보존을 지니며, Anthropic이 명시적으로 승인하지 않는 한 제로 데이터 보존(Zero Data Retention)에서는 제공되지 않아요. 둘 다 Claude Fable 5와 Claude Mythos 5처럼 Covered Models로 지정돼요. 모델별 데이터 보존 요구사항을 참고하세요.

Claude Fable 5에서 마이그레이션 (Migrate from Claude Fable 5)

Claude Fable 5에서 마이그레이션하려면 모델 ID를 업데이트하세요:

```python Python model = "claude-fable-5" # Before model = "claude-fable-5-1" # After ```
let model = "claude-fable-5"; // Before
model = "claude-fable-5-1"; // After
var model = "claude-fable-5"; // Before
model = "claude-fable-5-1"; // After
model := "claude-fable-5"  // Before
model = "claude-fable-5-1" // After
String model = "claude-fable-5"; // Before
model = "claude-fable-5-1"; // After
$model = 'claude-fable-5'; // Before
$model = 'claude-fable-5-1'; // After
model = "claude-fable-5" # Before
model = "claude-fable-5-1" # After

그런 다음 이런 항목을 검토하세요:

  1. any 또는 tool 유형의 tool_choice를 제거하세요. 스키마 적용은 tool_choice: {"type": "auto"}와 함께 엄격한 도구 사용으로 옮기거나 구조화된 출력으로 옮기세요.
  2. 사고 블록을 그대로 다시 보내고 기록을 append-only로 유지하세요. 직접 messages 배열을 만든다면 기록 편집 검사를 실행하세요: 현재 집어넣고 삭제하는 턴별 리마인더를 턴 범위 시스템 메시지로 옮기고, systemtools 변경은 대화 도중 시스템 메시지로 옮기고, 컨텍스트는 서버 측으로 줄이거나 클라이언트 측 요약에 걸쳐 가져가는 턴에서 사고 블록을 떼어낸 다음, 프로덕션 prefix_mismatch_behavior를 선택하고 input_transformations를 모니터링하세요.
  3. effort를 기본값(high)에서 다시 조정하고, 세션 내내 한 수준을 유지하는 대신 대화 도중 바꾸기를 고려하세요.
  4. 에이전트 루프에서 Claude Fable 5가 여러 개를 묶던 곳에 턴당 도구 호출이 하나 있는지 보고, Claude Fable 5.1 프롬프팅의 턴별 메모를 추가하세요.
  5. 평가를 다시 실행하세요. 거부 처리, 폴백, 폴백 크레딧, 토크나이저는 그대로 이어져요. 캐시 읽기는 비용이 덜 들고 (가격 참고), 기본 동작은 Claude Fable 5와의 차이 아래 나열된 방식으로 달라져요.

단계별 지침은 마이그레이션 가이드를 참고하세요, Claude Opus 5 및 이전 모델에서의 마이그레이션을 포함해요.

다음 단계 (Next steps)

현재 모든 Claude 모델의 사양과 가격. Claude Fable 5, Claude Opus 5, 그리고 이전 모델에서 마이그레이션하기. Claude Fable 5.1에 특화된 프롬프팅 패턴.

더 알아보기 (Learn more)