1. Para Quem é Este Guia de Migração

Como apresentado no artigo de lançamento do Claude Opus 4.7, o 4.7 e o sucessor direto do 4.6. Porém, no nível da API há vários breaking changes aplicados ao mesmo tempo, e trocar apenas o nome do modelo pode resultar em 400 Bad Request.

Este artigo é voltado a:

  • Desenvolvedores que chamam claude-opus-4-6 via Anthropic API / SDK
  • Times que usam Claude via Bedrock / Vertex AI
  • Quem parou em Opus 4.5 ou 4.1 e quer saltar direto para o 4.7
  • Quem usa extended thinking (thinking: enabled) ou temperature em produção

Usamos como fonte primária o guia oficial de migração da Anthropic e organizamos os pontos em que os desenvolvedores costumam travar. Para informações oficiais, veja o guia de migração em platform.claude.com.

GUIA DE MIGRAÇÃO

Claude Opus 4.7

Guia de migração completo

Mudanças incompativeis e como adaptar seu código

1 Modelo de pensamento
- enabled + budget
+ adaptive + effort
OFF por padrão, surge xhigh
2 Sampling removido
- temperature
- top_p / top_k
Use o prompt para controle
3 Novo tokenizador
1.35x
Reajustar max_tokens
claude-opus-4-6 -> claude-opus-4-7
Fonte: notas de versão da Anthropic (Claude Opus 4.7)

2. Resumo em 3 Linhas -- Pegue o Essencial

Para quem está sem tempo, o TL;DR:

  1. Trocar o nome do modelo: claude-opus-4-6 -> claude-opus-4-7 (e atualizar a versão do SDK)
  2. Três breaking changes principais: fim do extended thinking enabled (vira adaptive + effort); remoção de temperature/top_p/top_k; novo tokenizador (até 1,35x mais tokens no mesmo texto)
  3. O que você ganha em troca: melhor desempenho em coding, 1M de contexto no preço padrão e novo nível de esforço xhigh

Detalhes a partir do próximo capítulo.

3. Atualizar o Nome do Modelo

Primeira ação: simples. Só trocar o identificador do modelo.

# Antes
model = "claude-opus-4-6"

# Depois
model = "claude-opus-4-7"

Se você mantém o modelo em variável de ambiente ou arquivo de configuração, reflita em um único lugar -- vai facilitar a próxima migração também.

// .env
// CLAUDE_MODEL=claude-opus-4-6
CLAUDE_MODEL=claude-opus-4-7

// app.ts
const model = process.env.CLAUDE_MODEL ?? "claude-opus-4-7";

Porém, o detalhe desta migração é que trocar só o nome geralmente não basta. Veja os breaking changes a seguir.

4. Breaking Change 1: Extended Thinking Removido -> Adaptive

No Opus 4.6, para ativar o extended thinking você usava thinking: {type: "enabled", budget_tokens: N}. No 4.7, esse formato retorna erro 400.

Agora usa-se o "adaptive thinking", em que o modelo ajusta sozinho a quantidade de pensamento. E ainda: o padrão no 4.7 e thinking OFF; omitir o campo thinking significa rodar sem pensar. Para ter o raciocínio profundo de antes, e preciso opt-in explícito.

Antes (4.6) / Depois (4.7)

# Antes: Opus 4.6
client.messages.create(
    model="claude-opus-4-6",
    max_tokens=64000,
    thinking={"type": "enabled", "budget_tokens": 32000},
    messages=[{"role": "user", "content": "..."}],
)

# Depois: Opus 4.7
client.messages.create(
    model="claude-opus-4-7",
    max_tokens=64000,
    thinking={"type": "adaptive"},
    output_config={"effort": "high"},  # "max", "xhigh", "high", "medium", "low"
    messages=[{"role": "user", "content": "..."}],
)
// Antes: Opus 4.6
await client.messages.create({
  model: "claude-opus-4-6",
  max_tokens: 64000,
  thinking: { type: "enabled", budget_tokens: 32000 },
  messages: [{ role: "user", content: "..." }],
});

// Depois: Opus 4.7
await client.messages.create({
  model: "claude-opus-4-7",
  max_tokens: 64000,
  thinking: { type: "adaptive" },
  output_config: { effort: "high" },
  messages: [{ role: "user", content: "..." }],
});

Pontos importantes

  • Não precisa mais controlar "quanto pensar" via budget_tokens
  • Agora você indica "com que seriedade pensar" via output_config.effort
  • Sem o campo thinking, o modelo responde sem pensar (comportamento diferente do 4.6)

5. Breaking Change 2: Parâmetros de Sampling Removidos

Passar temperature, top_p ou top_k com valor diferente do padrão retorna erro 400. E a postura da Anthropic: "controle o comportamento via prompt".

# Antes
client.messages.create(
    model="claude-opus-4-6",
    temperature=0.7,
    top_p=0.9,
    top_k=40,
    messages=[...],
)

# Depois
client.messages.create(
    model="claude-opus-4-7",
    # temperature / top_p / top_k removidos completamente
    messages=[...],
)

Quem usava temperature=0.2 para "saída estável" passa a escrever no prompt algo como "responda a mesma pergunta da forma mais consistente possível", ou combina com structured outputs (JSON schema).

Quem usava temperature=1.2 para "mais criativo" agora adiciona instruções de tom no prompt, do tipo "use metáforas e expressões inesperadas".

6. Breaking Change 3: Thinking Oculto por Padrão

No 4.6, ao ativar thinking, por padrão chegava um "thinking resumido (summarized)" no stream. Muitos apps exibiam isso como "pensando..." na UI.

No 4.7, isso mudou silenciosamente: o bloco thinking existe, mas o campo thinking volta vazio. Para receber o conteúdo, é preciso opt-in explícito.

Sintoma

O indicador "pensando..." da UI fica girando sem parar e demora absurdamente até a resposta começar. Quando o usuário reclama "travou?", geralmente é esse caso.

Como resolver

# Para enviar o resumo do thinking a UI, como no 4.6
client.messages.create(
    model="claude-opus-4-7",
    thinking={
        "type": "adaptive",
        "display": "summarized",  # explicite isto
    },
    output_config={"effort": "high"},
    messages=[...],
)
await client.messages.create({
  model: "claude-opus-4-7",
  thinking: {
    type: "adaptive",
    display: "summarized",
  },
  output_config: { effort: "high" },
  messages: [...],
});

Se for processamento no backend e a UI não mostra thinking, sem problema deixar o display sem definir.

7. Breaking Change 4: Novo Tokenizador (~1,35x)

O Opus 4.7 usa um novo tokenizador. Ele contribui para o ganho de qualidade, mas o número de tokens no mesmo texto cresce 1,0 a 1,35x em relação ao 4.6.

O que isso causa:

  • Processos com max_tokens no limite podem ser truncados
  • Estimativas de tokens no cliente (tipo tiktoken) usadas em cobrança e checagem de tamanho ficam imprecisas
  • O resultado de /v1/messages/count_tokens difere entre 4.6 e 4.7
  • Mesmo prompt passa a ter custo e latência um pouco maiores

Como resolver

# Antes: buffer de saida de 16k baseado no 4.6
response = client.messages.create(
    model="claude-opus-4-6",
    max_tokens=16000,
    messages=[...],
)

# Depois: 1,35x de folga como referencia
response = client.messages.create(
    model="claude-opus-4-7",
    max_tokens=22000,  # 16000 * 1.35 ~= 21600 -> arredondado para cima
    messages=[...],
)

Além disso, no 4.7 a janela de 1M de contexto e disponível no preço padrão da API (sem adicional). Sim, o consumo de tokens sobe, mas em troca você tem margem para "jogar tudo dentro" com mais liberdade.

8. Breaking Change 5: Prefill Removido

Breaking change que veio do 4.6. O prefill de mensagem assistant -- inserir no fim do messages algo como {role: "assistant", content: "```json"} para forçar a resposta a começar de JSON -- volta com erro 400.

# Antes: prefill para forcar saida em JSON
client.messages.create(
    model="claude-opus-4-6",
    messages=[
        {"role": "user", "content": "Me retorne dados do usuario em JSON"},
        {"role": "assistant", "content": "```json\n{"},  # prefill
    ],
)

# Depois: usar structured outputs
client.messages.create(
    model="claude-opus-4-7",
    output_config={
        "format": {
            "type": "json_schema",
            "schema": {
                "type": "object",
                "properties": {
                    "name": {"type": "string"},
                    "age": {"type": "integer"},
                },
                "required": ["name", "age"],
            },
        },
    },
    messages=[
        {"role": "user", "content": "Me retorne dados do usuario em JSON"},
    ],
)

Alternativas ao prefill são três:

  1. Structured outputs (output_config.format) -- restringir formato com JSON schema
  2. Prompt de sistema dizendo "retorne apenas JSON, sem markdown ou introdução"
  3. Tool use -- receber como chamada de função (os argumentos já chegam como JSON estruturado)

As 5 mudanças incompativeis do Opus 4.7 -- Antes / Depois

1 Extended thinking (enabled) removido -> adaptive thinking
- thinking: { type: "enabled", budget_tokens: 32000 }
// no 4.7 retorna erro 400
+ thinking: { type: "adaptive" }
+ output_config: { effort: "high" }
2 Parâmetros de sampling removidos
- temperature: 0.7
- top_p: 0.9 - top_k: 40
// remover totalmente
Controle o estilo via prompt
3 Conteúdo do pensamento oculto por padrão
4.6: summarized vinha por padrão
4.7: campo thinking volta vazio
+ thinking: { type: "adaptive",
   display: "summarized" }
4 Novo tokenizador: até 1,35x mais tokens no mesmo texto
Resultado de count_tokens muda em 4.6 vs 4.7
Risco de truncar saída com max_tokens curto
Aumentar max_tokens (xhigh/max: 64k+ recomendado)
Contexto de 1M no preço padrão
5 Prefill removido (continua desde o 4.6)
- { role: "assistant", content: "```json" }
// retorna erro 400
+ output_config: { format: {...} }
Use structured outputs ou prompt de sistema
Fonte: guia oficial de migração da Anthropic / AI Arte

9. Como Escolher o Effort (xhigh Novo)

Os valores aceitos em output_config.effort são 5. No 4.7 chega o novo xhigh.

effortPosicionamentoUsos principais
maxPensar sem limiteBenchmarks e problemas difíceis -- cuidado com overthinking e retorno decrescente
xhigh (novo)Ótimo para coding / agentesPadrão para Claude Code e agentes autônomos
highEquilibradoPiso para tarefas intelectualmente exigentes
mediumFoco em custoAceita alguma perda de qualidade para priorizar preço e velocidade
lowTarefas curtas e repetitivasClassificar, formatar, resumir -- quando latência e prioridade

Quem vinha definindo budget_tokens na mão no 4.6 agora apenas escolhe o effort no 4.7. Heuristicas úteis:

  • Agente de coding (tipo Claude Code): comece em xhigh
  • Chat de Q&A / resposta de RAG: high é seguro
  • Workers leves de tagging, extração de JSON, classificação: medium ou low
  • max só em casos pontuais, quando precisa aprofundar sem olhar o custo

10. Lidando com as Mudanças de Comportamento

Mesmo com a API compatível, a maneira do modelo responder a prompts mudou em relação ao 4.6. Quem migra sem saber disso costuma ouvir dos usuários "ficou meio seco".

10.1 Comprimento da resposta se adapta a tarefa

O 4.7 ajusta o comprimento conforme a complexidade. Não há mais "sempre 3 parágrafos" por padrão. Na prática, remova primeiro os prompts de controle de tamanho existentes e veja o comportamento.

10.2 Interpretação mais literal

Mais visível com effort baixo. "De forma sucinta" vira resposta realmente sucinta; "me cite 3" não adiciona um quarto item. Útil, mas aquele "ler nas entrelinhas" do 4.6 diminuiu.

10.3 Tom mais direto

Frases de validação ("ótima pergunta!"), emojis decorativos e saudações no início diminuem. Para manter um tom amigável, deixe isso explícito no prompt de sistema.

10.4 Progresso embutido no tracking do agente

Se em uso de agente você montou andaimes para o modelo escrever "estou fazendo isso" ou "estou fazendo aquilo", saiba que o 4.7 emite esses updates nativamente -- da para simplificar a scaffolding.

10.5 Sub-agentes e tool calls mais comedidos

Por padrão o modelo dispara menos sub-agentes e usa menos tools. Quando consegue resolver no raciocínio, resolve sem ferramenta. Atualize suas expectativas no design do agente.

10.6 Salvaguardas de cibersegurança em tempo real

Mesmo trabalho ofensivo legítimo (red team, PoC de vulnerabilidade) pode ser recusado conforme o contexto. Se segurança e seu uso em produção, inscreva-se no Cyber Verification Program da Anthropic.

10.7 Suporte a imagens em alta resolução

Imagens até 2576px já são processadas direto. Porém, cada imagem em HD consome cerca de 3x mais tokens. Em cargas pesadas de imagem, opte por (a) redistribuir max_tokens ou (b) reduzir a imagem antes de enviar.

Daqui para a frente, itens que "funcionam mesmo sem, mas vale fazer":

  1. Reavaliar max_tokens: com o novo tokenizador, a saída também cresce. Re-teste com valores 1,2 a 1,35x maiores que os atuais
  2. Auditar a estimativa de tokens no cliente: se você calcula cobrança e tamanho por conta própria, migre para a API count_tokens ou reajuste o coeficiente
  3. Introduzir task_budgets (beta): para agentes. Inclua o header task-budgets-2026-03-13, com mínimo de 20k. Lembre que é limite consultivo, não hard cap
  4. Definir max_tokens >= 64k: ao usar xhigh/max, recomenda-se total (thinking + saída) de 64k ou mais
  5. Downsampling de imagens: se alta resolução não é necessária, reduza antes de enviar para economizar tokens e custo

11.1 Exemplo mínimo de task_budgets (SDK oficial em Python)

Como task_budgets está em beta, use o endpoint client.beta.messages.create e passe o argumento betas explicitamente. É diferente dos recursos já em GA.

response = client.beta.messages.create(
    model="claude-opus-4-7",
    max_tokens=128000,
    output_config={
        "effort": "high",
        "task_budget": {"type": "tokens", "total": 128000},
    },
    messages=[
        {"role": "user", "content": "Review the codebase and propose a refactor plan."}
    ],
    betas=["task-budgets-2026-03-13"],
)

Pontos-chave:

  • Mínimo 20.000 tokens. Valores menores são rejeitados
  • max_tokens e hard cap por requisição (não visível ao modelo); task_budget é limite consultivo do loop todo do agente (o modelo reconhece a contagem regressiva)
  • Para restringir custo com rigor: max_tokens. Para equilibrar qualidade e eficiência: task_budget
  • Em trabalho aberto onde qualidade > velocidade, não defina task_budget -- ele tende a cortar curto demais

12. Migrando Direto de Opus 4.5/4.1

Se pular o 4.6 e ir direto de 4.5 / 4.1 para o 4.7, além do acima você precisa:

  • Remover parâmetros de sampling: quem vinha do Claude 3.x geralmente usa temperature. Remover totalmente
  • Limpar beta headers: effort-2025-11-24, fine-grained-tool-streaming-2025-05-14, interleaved-thinking-2025-05-14 etc. já foram incorporados ao core -- podem ser removidos
  • Trocar o endpoint: onde chamava client.beta.messages.create, passe para client.messages.create
  • Migrar output_format -> output_config.format: a chave mudou de nome
  • Parsing de argumentos de tool: desde o 4.6, o comportamento de escape de JSON mudou em alguns casos. Não faça parsing manual de string; use JSON.parse / json.loads de verdade

Para novidades do Opus 4.7 propriamente, veja também o artigo anterior: Claude Opus 4.7: novidades, benchmarks e preço.

13. Checklist Completo de Migração

Checklist de migração para Opus 4.7

Seguindo de cima para baixo, você migra com segurança

Obrigatório (sem isso, não funciona)
Atualize o nome do modelo de claude-opus-4-6claude-opus-4-7
Remover temperature / top_p / top_k
Substituir thinking: enabled por adaptive + effort
Remover prefill da mensagem assistant (use structured outputs)
Se sua UI mostra o raciocínio, especifique display: "summarized"
Ajustes (otimização de qualidade e custo)
Re-medir custo e latência com o novo tokenizador
max_tokens Aumentar cerca de 1,35× como referência
Re-testar a lógica de estimativa de tokens do cliente
Para imagens em alta resolução, reservar max_tokens adicional ou reduzir amostragem
Ao usar xhigh / max, defina max_tokens ≥ 64k
Para agentes, considere introduzir task_budgets (beta)
Revisão de prompts (mudanças de comportamento)
Verificar interpretação literal, comprimento adaptado e menos uso de tools
Remover prompts de controle de comprimento e refazer a baseline
Para tarefas de segurança, inscreva-se no programa de verificação cibernética
Migração de versões pré-4.5: remover o header beta e migrar para client.messages.create
AI Arte -- Checklist de migração para Claude Opus 4.7

Para você imprimir e distribuir no time:

13.1 Obrigatório (sem isso, da erro 400 ou comportamento errado)

  • [ ] Atualizar o nome do modelo: claude-opus-4-6 -> claude-opus-4-7
  • [ ] Remover temperature / top_p / top_k
  • [ ] Substituir thinking: {type: "enabled", budget_tokens: N} por {type: "adaptive"} + output_config.effort
  • [ ] Remover prefill de assistant e migrar para structured outputs / prompt de sistema
  • [ ] Se a UI exibe thinking, definir thinking.display: "summarized" explicitamente

13.2 Tuning (otimização de custo e qualidade)

  • [ ] Re-benchmark de custo e latência com o novo tokenizador
  • [ ] Ajustar max_tokens multiplicando por ~1,35
  • [ ] Re-testar a lógica de estimativa de tokens no cliente
  • [ ] Se usar imagens, redistribuir tokens para contar o HD
  • [ ] Se usa xhigh/max, definir max_tokens >= 64k
  • [ ] Para agentes, considerar task_budgets (beta)

13.3 Revisão de prompts e operação

  • [ ] Validar comprimento adaptado, interpretação literal e mudança de tom em prompts reais
  • [ ] Remover prompts de controle de tamanho e refazer a baseline
  • [ ] Para uso em segurança, inscrever-se no Cyber Verification Program
  • [ ] Simplificar scaffoldings do agente (updates de progresso etc.)
  • [ ] Vindo de 4.5 ou anterior: remover beta headers e migrar para client.messages.create

14. Ferramentas Automáticas de Migração

Se você usa Claude Code, a skill Claude API oferecida pela Anthropic automatiza a parte mecânica do rewrite. Basta chamar a skill dentro do Claude Code com uma instrução como:

/claude-api migrate

Migre todo o projeto de Claude Opus 4.6 para 4.7.
- Trocar o nome do modelo
- Remover temperature / top_p / top_k
- Substituir thinking: enabled por adaptive + effort: high
- Se houver prefill, substituir por structured outputs

A skill varre o repositório, identifica arquivos que importam o SDK anthropic e propõe as mudanças. Mas ajuste fino de prompts e re-medição de benchmarks não da para automatizar -- feche com o checklist.

FAQ

P. Só trocar o nome do modelo funciona?

Se seu código não usa temperature, top_p, top_k, thinking: {type: "enabled"} nem prefill, funciona. Mesmo assim, o novo tokenizador pode truncar a saída no meio; vale revisar o max_tokens uma vez.

P. Se eu não definir o campo thinking, o 4.7 não pensa?

Isso mesmo, no 4.7 thinking vem OFF por padrão. É igual ao "OFF padrão" que havia no 4.6, mas a mudança de comportamento vindo do adaptive só aparece se você fizer opt-in. Para ativar, use thinking: {type: "adaptive"} e defina a intensidade em output_config.effort.

P. Se eu remover temperature, vou ter a mesma saída toda vez?

Não. O Claude continua gerando respostas de forma probabilística, então o mesmo prompt pode variar um pouco. Para consistência forte, use (a) structured outputs (JSON schema) para fixar o formato, (b) instruções no prompt como "para a mesma entrada, produza a mesma saída" e "mantenha a ordem dos itens".

P. task_budgets e hard cap?

Não. É um "limite consultivo" para o modelo -- não há garantia de que a execução fique dentro. Para cortar custo de verdade, combine com max_tokens e lógica de timeout/interrupção do seu lado. Uso em beta requer o header task-budgets-2026-03-13.

P. O comportamento via Claude Code e via API direta e o mesmo?

A especificação da API e a mesma. Mas o Claude Code costuma ter defaults recomendados (ex.: xhigh como padrão em coding) e skills que definem task_budgets por trás. Se sentir diferença entre um e outro, logue o JSON de request em ambos e compare -- e o caminho mais rápido para achar a divergência.

P. App com muitas imagens estourou o consumo de tokens. Como lidar?

(1) Reduzir para menos de 2576px antes de enviar, (2) juntar várias imagens em um "contact sheet", (3) fazer OCR da imagem no cliente e mandar só o texto. So use resolução máxima onde e realmente necessária (imagem médica, desenho técnico) e aumente max_tokens com esse tráfego em mente.

P. Uso via Bedrock / Vertex AI -- os passos são os mesmos?

As mudanças de parâmetros são iguais. O ID do modelo (ex.: anthropic.claude-opus-4-7 no Bedrock) e a data de disponibilidade seguem o anúncio de cada nuvem. Já a estrutura de thinking e output_config e a mesma em qualquer plataforma.

P. Até onde da para confiar na ferramenta automática de migração?

A skill Claude API (/claude-api migrate) é ótima para a parte mecânica: troca do nome do modelo, remoção de sampling, reescrita do extended thinking. Já tom de prompt, controle de tamanho e re-avaliação de benchmarks dependem de decisão humana. Depois da rodada automática, passe pelo checklist deste artigo linha a linha.

Este artigo foi elaborado com base no guia oficial de migração do Claude Opus 4.7 da Anthropic (abril de 2026). Como a especificação da API pode mudar, confira a documentação oficial antes de colocar em produção.