Índice
- 1. Para Quem é Este Guia de Migração
- 2. Resumo em 3 Linhas -- Pegue o Essencial
- 3. Atualizar o Nome do Modelo
- 4. Breaking Change 1: Extended Thinking Removido -> Adaptive
- 5. Breaking Change 2: Parâmetros de Sampling Removidos
- 6. Breaking Change 3: Thinking Oculto por Padrão
- 7. Breaking Change 4: Novo Tokenizador (~1,35x)
- 8. Breaking Change 5: Prefill Removido
- 9. Como Escolher o Effort (xhigh Novo)
- 10. Lidando com as Mudanças de Comportamento
- 11. Mudanças Recomendadas (Não Obrigatórias)
- 12. Migrando Direto de Opus 4.5/4.1
- 13. Checklist Completo de Migração
- 14. Ferramentas Automáticas de Migração
- FAQ
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-6via 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) outemperatureem 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.
Claude Opus 4.7
Guia de migração completo
Mudanças incompativeis e como adaptar seu código
2. Resumo em 3 Linhas -- Pegue o Essencial
Para quem está sem tempo, o TL;DR:
- Trocar o nome do modelo:
claude-opus-4-6->claude-opus-4-7(e atualizar a versão do SDK) - Três breaking changes principais: fim do extended thinking
enabled(vira adaptive + effort); remoção detemperature/top_p/top_k; novo tokenizador (até 1,35x mais tokens no mesmo texto) - 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_tokensno 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_tokensdifere 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:
- Structured outputs (
output_config.format) -- restringir formato com JSON schema - Prompt de sistema dizendo "retorne apenas JSON, sem markdown ou introdução"
- 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
9. Como Escolher o Effort (xhigh Novo)
Os valores aceitos em output_config.effort são 5. No 4.7 chega o novo xhigh.
| effort | Posicionamento | Usos principais |
|---|---|---|
| max | Pensar sem limite | Benchmarks e problemas difíceis -- cuidado com overthinking e retorno decrescente |
| xhigh (novo) | Ótimo para coding / agentes | Padrão para Claude Code e agentes autônomos |
| high | Equilibrado | Piso para tarefas intelectualmente exigentes |
| medium | Foco em custo | Aceita alguma perda de qualidade para priorizar preço e velocidade |
| low | Tarefas curtas e repetitivas | Classificar, 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:
mediumoulow maxsó 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.
11. Mudanças Recomendadas (Não Obrigatórias)
Daqui para a frente, itens que "funcionam mesmo sem, mas vale fazer":
- 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 - Auditar a estimativa de tokens no cliente: se você calcula cobrança e tamanho por conta própria, migre para a API
count_tokensou reajuste o coeficiente - Introduzir
task_budgets(beta): para agentes. Inclua o headertask-budgets-2026-03-13, com mínimo de 20k. Lembre que é limite consultivo, não hard cap - Definir
max_tokens>= 64k: ao usarxhigh/max, recomenda-se total (thinking + saída) de 64k ou mais - 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_tokense 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-14etc. já foram incorporados ao core -- podem ser removidos - Trocar o endpoint: onde chamava
client.beta.messages.create, passe paraclient.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.loadsde 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
claude-opus-4-6 → claude-opus-4-7temperature / top_p / top_kthinking: enabled por adaptive + effortdisplay: "summarized"max_tokens Aumentar cerca de 1,35× como referênciamax_tokens adicional ou reduzir amostragemmax_tokens ≥ 64ktask_budgets (beta)client.messages.createPara 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_tokensmultiplicando 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, definirmax_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.