Como usar turn-scoped system messages no Claude Fable 5.1 para uma instrução valer só por um turno?

esquema explicando turn-scoped system messages no Claude Fable 5.1
Resposta rápida

As turn-scoped system messages são um recurso aditivo em beta do Claude Fable 5.1 (e do Mythos 5.1) que deixa você mandar uma instrução válida por um turno só. Na prática: você envia o beta header anthropic-beta: mid-conversation-system-clear-at-2026-08-21 e adiciona no array messages uma entrada role: "system", apenas texto, com clear_at: "next_user_message". Assim que chega a próxima mensagem do usuário, a API limpa as cópias anteriores e o modelo lê só a mais recente. As antigas ficam no histórico sem custar tokens de input, e o prefixo já cacheado continua intacto

Fala aí, beleza? A Anthropic soltou o Claude Fable 5.1 e o Claude Mythos 5.1 no dia 1 de setembro de 2026, e junto veio um recurso pequeno que resolve uma dor bem chata: mandar uma regra que vale AGORA e some no turno seguinte

Quem monta aplicação em cima da API conhece o problema. Você quer que o modelo, só naquela resposta, siga um formato diferente, ou olhe o retorno de uma ferramenta com um cuidado extra. Aí você joga isso no system prompt de topo e a regra fica lá pra sempre, contaminando todos os turnos seguintes da conversa

As turn-scoped system messages são um recurso aditivo e em beta do Claude Fable 5.1, que está em disponibilidade geral. O Mythos 5.1 oferece as mesmas capacidades, mas o acesso a ele é só via trusted access programs. A ideia é simples: uma mensagem de sistema no meio da conversa, com clear_at: "next_user_message", escopada a um único turno 🙂

Formação Claude Code
Formação Recomendada

Formação Claude Code

Domine Claude Code do absoluto zero até o avançado

  • 110 aulas
  • 4 projetos
  • 9h 2min

O que você precisa antes de começar

A lista é curta, e é bom conferir cada item antes de sair debugando resposta estranha:

  • Acesso à API da Anthropic com um modelo suportado: o Fable 5.1 está em disponibilidade geral, e o Mythos 5.1 só via trusted access programs
  • O beta header: anthropic-beta: mid-conversation-system-clear-at-2026-08-21
  • Ciência de que o conteúdo é somente texto: o content da mensagem de sistema no meio da conversa é text-only, então nada de imagem, documento ou bloco exótico ali dentro

Tome cuidado com o primeiro item! Modelo sem suporte não devolve resposta degradada, devolve erro:

400 BadRequestError: role 'system' is not supported on this model

Se bateu esse 400, o problema não é o teu JSON, é o modelo (ou o header que não foi junto)

Como usar turn-scoped system messages no Claude Fable 5.1 passo a passo

  1. Ative o beta header na sua requisição

Sem esse header, o recurso simplesmente não existe pra sua chamada

anthropic-beta: mid-conversation-system-clear-at-2026-08-21

Erro comum deste passo: mandar o corpo certinho e esquecer o header. O sintoma é o mesmo 400 do modelo sem suporte, então dá aquela confusão de achar que é o model errado quando é só header ausente

  1. Monte a entrada role: "system" dentro do array messages

Ela vai como mensagem SEPARADA, apenas texto, com o parâmetro clear_at definido como next_user_message

{
  "messages": [
    {
      "role": "user",
      "content": "Refatora o componente de checkout pra usar hooks"
    },
    {
      "role": "system",
      "content": "Neste turno, responda apenas com o diff, sem explicação em prosa",
      "clear_at": "next_user_message"
    }
  ]
}

Erro comum deste passo: tentar embutir a instrução dentro da mensagem do usuário, com aquele bloco de "IMPORTANTE:" grudado no final do prompt. Isso vira histórico normal e fica lá pra sempre, que é exatamente o que a gente está querendo evitar aqui

  1. Posicione a mensagem no lugar certo do array

Aqui mora a maior parte dos erros. As regras de posicionamento são bem específicas:

Posição no array messages Pode?
Primeira entrada do array Não, pra isso existe o campo system de topo
Logo depois de um turno de user (inclusive user com blocos tool_result) Sim
Depois de um turno de assistant terminado em server tool result Sim
Antes de um turno de assistant, ou encerrando o array Sim
Entre um bloco tool_use e o tool_result correspondente Não

Erro comum deste passo: usar a mensagem de sistema no meio da conversa como se fosse o system prompt global, colocando ela na primeira posição. Se a instrução vale pra conversa inteira, o lugar dela é o campo system de topo, ponto

  1. Deixe a cópia antiga no histórico e anexe uma nova a cada turno

Esse é o pulo do gato, e é contraintuitivo à primeira vista

Você não precisa sair varrendo o array pra remover as mensagens antigas. Assim que existe uma mensagem de usuário posterior, a API limpa as cópias anteriores e o modelo lê apenas a mais recente. As antigas continuam ali no array, mas depois de limpas o modelo não as vê e elas não custam tokens de input

{
  "messages": [
    { "role": "user", "content": "Primeiro pedido" },
    { "role": "system", "content": "Regra do turno 1", "clear_at": "next_user_message" },
    { "role": "assistant", "content": "Resposta do turno 1" },
    { "role": "user", "content": "Segundo pedido" },
    { "role": "system", "content": "Regra do turno 2", "clear_at": "next_user_message" }
  ]
}

No exemplo acima, só a "Regra do turno 2" é lida pelo modelo

Erro comum deste passo: marcar como turn-scoped uma mensagem que carrega blocos tool_addition ou tool_removal. Mensagem com bloco de mudança de ferramenta NÃO pode ser turn-scoped, e aí a requisição não passa

Quando vale usar uma instrução que dura só um turno

Nem toda regra precisa virar lei eterna do teu system prompt. Três cenários em que o clear_at cai bem:

Lembrete de um turno só:

Aquela orientação pontual, tipo "responda em português e sem código nesta resposta". Manda como mensagem separada, texto puro, com role: "system" e clear_at: "next_user_message", e deixa no histórico

Ela para de renderizar depois da próxima mensagem do usuário, e você não precisa fazer faxina no array 😀

Instrução logo depois de um resultado de ferramenta:

Dá pra anexar instruções depois de turnos de tool result como uma turn-scoped system message. Serve pra orientar a leitura DAQUELE retorno específico: o que priorizar, o que ignorar, em que formato resumir

É instrução cirúrgica, morre junto com o contexto que ela servia

Regra temporária que você não quer fixar no topo:

Pensa numa regra do tipo "antes de mexer no código, me pergunte o que ficou ambíguo". É a mesma família de ideia de fazer o Claude perguntar antes de codar, só que válida por um turno e não pra sempre

Vale o mesmo raciocínio de decidir entre planejar antes ou codar direto: tem regra que é estrutural e merece o system de topo, e tem regra que é só pra agora

Erros comuns e como resolver

Sintoma: 400 BadRequestError: role 'system' is not supported on this model

Causa: o modelo não suporta mensagem de sistema no meio da conversa, ou o beta header não foi enviado

Solução: confirme que está em um modelo suportado (Fable 5.1 ou Mythos 5.1) e que o header anthropic-beta: mid-conversation-system-clear-at-2026-08-21 está na requisição

Como prevenir: centralize o header no client da sua aplicação, em vez de repetir em cada chamada

Sintoma: erro de posicionamento

Causa: a entrada system está como primeira do array, ou está espremida entre um bloco tool_use e o tool_result dele

Solução: mova a mensagem pra logo depois de um turno de user (inclusive user com tool_result) ou de um assistant terminado em server tool result, e garanta que ela precede um turno de assistant ou encerra o array. Se a intenção era instrução global, use o campo system de topo

Como prevenir: valide o array antes de mandar, com uma função boba que checa a posição do índice

Sintoma: a mensagem com mudança de ferramenta é rejeitada

Causa: uma mensagem que carrega blocos tool_addition ou tool_removal não pode ser turn-scoped

Solução: separe as coisas. A mudança de ferramenta vai numa mensagem, a instrução temporária vai em outra

Sintoma: "o modelo esqueceu o que eu mandei!"

Causa: expectativa errada, e não bug. A instrução deixa de ser lida assim que chega a próxima mensagem do usuário

Solução: se a regra precisa valer nos próximos turnos, ou você reanexa uma cópia nova a cada turno, ou ela não deveria ser turn-scoped

Impacto no cache e no custo da sua aplicação

Essa é a parte que costuma decidir se o recurso entra ou não em produção

A instrução nova entra DEPOIS do prefixo já cacheado. Como ela fica atrás do histórico em cache, não invalida nada anterior: o prefixo permanece intacto e você paga preço cheio só pela mensagem nova

E tem mais: uma mensagem de sistema no meio da conversa que vira histórico estável pode ser lida do cache nos turnos seguintes

As cópias já limpas seguem no array, mas o modelo não as enxerga e elas não custam tokens de input. Ou seja, o array cresce e o custo não acompanha na mesma proporção

Ancorando nos números do Fable 5.1:

Item Preço por milhão de tokens
Input US$ 10
Output US$ 50
Cache read US$ 0,25

O cache read a US$ 0,25 por milhão é 75% mais barato que o do Fable 5, a geração anterior, o que reduz o custo de cargas típicas em cerca de 25% e de cargas altamente agênticas em até cerca de 45%. A estimativa oficial da Anthropic vai na mesma linha: custo estimado 25% menor que o Fable 5 em cargas típicas cobradas por token, justamente por causa da queda no preço de cache read

Juntando as duas coisas, instrução que entra depois do prefixo cacheado e cópias limpas que não custam input, dá pra injetar regra temporária sem ver a conta subir a cada turno

Próximo passo

O recurso é aditivo e está em beta, então trate como beta: teste, meça, depois promova

A regra de ouro cabe em uma linha. Mensagem separada, texto puro, posicionada logo depois de um turno de user, com clear_at: "next_user_message"

O próximo passo é bem direto: liga o header anthropic-beta: mid-conversation-system-clear-at-2026-08-21 num ambiente de teste, monta duas ou três conversas com turnos de tool result e observa o que acontece com o teu cache antes de levar pra produção

Se a taxa de cache hit continuar redonda e a instrução sumir no turno seguinte como esperado, tá valendo

até o próximo post!

Perguntas frequentes

Qual o beta header exato para ativar turn-scoped system messages no Claude Fable 5.1?

É o anthropic-beta: mid-conversation-system-clear-at-2026-08-21. Sem ele na requisição, o recurso simplesmente não existe pra sua chamada, mesmo que o resto do JSON esteja certinho.

Turn-scoped system messages funcionam no Claude Mythos 5.1 também?

Sim, o Mythos 5.1 oferece as mesmas capacidades do Fable 5.1 nesse recurso. A diferença é o acesso: o Fable 5.1 está em disponibilidade geral, enquanto o Mythos 5.1 só é acessível via trusted access programs.

Preciso remover manualmente a mensagem de sistema antiga do array messages?

Não. Assim que existe uma mensagem de usuário posterior, a API já limpa as cópias anteriores e o modelo lê só a mais recente. As antigas ficam no array, mas depois de limpas não custam tokens de input.

Dá pra colocar imagem ou PDF dentro de uma turn-scoped system message?

Não. O content dessa mensagem de sistema no meio da conversa é text-only, então só texto puro entra ali, nada de bloco de imagem ou documento.

Uma turn-scoped system message pode ser a primeira entrada da conversa?

Não pode. Se a instrução vale pra conversa inteira, o lugar dela é o campo system de topo, ponto. A mensagem no meio da conversa precisa vir depois de um turno de user ou de um turno de assistant terminado em server tool result.

Usar turn-scoped system messages aumenta o custo de cache do Fable 5.1?

Não invalida o cache existente, porque a instrução nova entra depois do prefixo já cacheado. Você paga preço cheio só pela mensagem nova, e o que já estava cacheado continua sendo cobrado no preço de cache read do Fable 5.1, que é US$ 0,25 por milhão de tokens.



Subscribe
Notify of
guest

0 Comentários
Oldest
Newest Most Voted

Formações

Formação Vibe Coding

Formação Vibe Coding

Do Prompt ao Produto: Crie Software Real com IA

  • 474 aulas
  • 20 projetos
  • 39h 27min

Blog | Mais populares