Claude Code com GLM-5.3 e Qwen: cinco armadilhas ao trocar o modelo via LiteLLM
O Claude Code pode ser apontado para qualquer modelo via ANTHROPIC_BASE_URL, mas na prática tudo quebra nos detalhes. A equipe da ZuBrIQ colocou um gateway com LiteLLM entre os agentes e os modelos e reuniu cinco armadilhas. As mais desagradáveis são silenciosas: a requisição vai discretamente para o reserva, o gasto mostra zero e a imagem some sem erro.
Processado por IA de Habr AI; editado por Hamidun News
Trocar o modelo por baixo do Claude Code é simplíssimo: ANTHROPIC_BASE_URL, um token, e o agente envia requisições pelo protocolo Anthropic Messages para qualquer lugar. Os problemas começam no segundo dia. A equipe do gateway bielorrusso ZuBrIQ, onde o Claude Code oficialmente não funciona e não há como pagar a Anthropic, descreveu cinco armadilhas em que ela mesma caiu.
O esquema e a regra principal
Entre os clientes (Claude Code, Codex, OpenCode, Zed, Cursor) e os modelos fica o LiteLLM em dois pods. Os clientes conhecem apenas nomes estáveis: zubr, zubr-flash, zubr-coder. Por trás de cada um há uma lista de rotas com ordem e reserva: GLM-5.3 de um provedor, DeepSeek V4 Pro como alternativa e um Qwen3.8-27B próprio em quatro V100. Se os pesos mudam ou o provedor cai, as integrações não percebem. É conveniente, mas é justamente aí que se escondem as falhas silenciosas.
Três falhas silenciosas
Primeira: o desvio discreto para o reserva. O GLM-5.3 foi configurado como um backend openai/ comum. O chat funcionava, mas Claude Code e Codex recebiam respostas do modelo reserva. O LiteLLM traduz /v1/messages e /v1/responses para a Responses API, o provedor responde 404 e o roteador segue adiante em silêncio. Não há erro nos logs; só o cabeçalho x-litellm-attempted-fallbacks: 1 entrega o problema. A solução é usar o provedor nativo do LiteLLM para esse fornecedor, que traduz tudo para chat/completions.
Segunda: gasto zerado. Com o provedor nativo, o LiteLLM não pega o preço de model_info, o spend fica em zero, os orçamentos das chaves não disparam e o relatório de margem mente. Os preços precisam ser duplicados diretamente em litellm_params: input_cost_per_token, output_cost_per_token, cache_read_input_token_cost. Outro detalhe: uma alteração via PATCH /model/{id}/update leva um ou dois minutos para chegar ao segundo pod, então não se apresse em concluir que não funcionou.
Terceira: imagens. O GLM-5.3 é forte em código, mas não aceita imagens.
O endpoint de chat do provedor responde 400, enquanto o endpoint compatível com a Anthropic descarta a imagem em silêncio, e o modelo adivinha com confiança a partir do texto. O usuário envia uma captura de tela de um erro e recebe raciocínios sobre algo que o modelo não viu. No ZubrCode isso foi contornado: se no catálogo o modelo não tem visão, a imagem é substituída por uma descrição textual do GLM-5.
3 Flash, e o resultado é armazenado em cache pelo sha256 da imagem, porque o agente reexecuta todo o histórico a cada turno. Houve ainda um bug separado no catálogo: supports_vision: null era tratado como false, e a visão sumiu de um modelo que enxerga.
Configuração do Claude Code e GPUs próprias
O próprio Claude Code envia subtarefas de serviço (títulos, compressão de contexto, subagentes) a modelos das classes Haiku, Sonnet e Opus. Se você substituir apenas ANTHROPIC_MODEL, essas requisições falharão com 403 no meio do trabalho. É preciso definir ANTHROPIC_DEFAULT_OPUS_MODEL, ANTHROPIC_DEFAULT_SONNET_MODEL e ANTHROPIC_DEFAULT_HAIKU_MODEL. Escreva ANTHROPIC_BASE_URL sem /v1, ou você terá /v1/v1/messages. O sufixo [1m] informa uma janela de 1M e é removido antes do envio; para modelos sem ele, a janela é definida por CLAUDE_CODE_MAX_CONTEXT_TOKENS.
Um modelo próprio em placas de 2017 é outra história. As V100 não têm bf16 nem FP8, por isso usa-se AWQ INT4 com cálculos em FP16, vLLM com paralelismo tensorial em 4 placas e um fork com suporte a SM70. O fork não subtrai os pesos ao calcular o orçamento do cache KV, por isso --kv-cache-memory-bytes é definido explicitamente.
Duas instâncias não podem ser iniciadas ao mesmo tempo: o pico de inicialização passa de 16 GB, o worker sofre OOM e o processo principal trava no NCCL watchdog, embora o systemd mostre active. Agora a segunda unidade espera o health da primeira. O 27B denso no lugar do MoE 35B-A3B é mais inteligente e enxerga imagens por conta própria, mas o primeiro token chega em ~1,3 s em vez de ~0,6 s, por isso ele fica reservado para tarefas em segundo plano e dados fechados.
O que fazer
As limitações são óbvias: é a experiência de uma única equipe, os preços nos exemplos são ilustrativos e o comportamento do LiteLLM pode mudar entre versões. Mas o princípio é geral. Se você coloca um gateway entre o agente e os modelos, monitore os cabeçalhos de fallback, confronte o gasto com as faturas reais do provedor, verifique o que acontece com a imagem em cada rota e defina os três slots: Haiku, Sonnet e Opus.
Os bugs mais caros aqui não caem com um erro: eles respondem com confiança, só que com as palavras erradas. O gateway faz parte da plataforma comercial dos autores, então o artigo é em parte publicitário, mas os detalhes técnicos são fáceis de verificar no seu próprio ambiente de testes.
- 12 de nov. de 2026Jensen Huang deixa o cargo de CEO da Nvidia: empresa perde US$ 1,4 trilhão em duas semanas
- 12 de nov. de 2026Claude in Chrome exige autorização para cada clique em sites da categoria 3
- 12 de nov. de 2026AWS Quick ganha seis agentes para product managers: das reclamações de clientes à especificação
- 12 de nov. de 2026Anthropic fecha o Claude para empresas russas a partir de 12 de novembro, mesmo com entidade jurídica no exterior
Perguntas frequentes sobre a notícia
O que se sabe sobre O esquema e a regra principal?
Entre os clientes (Claude Code, Codex, OpenCode, Zed, Cursor) e os modelos fica o LiteLLM em dois pods. Os clientes conhecem apenas nomes estáveis: zubr, zubr-flash, zubr-coder. Por trás de cada um há uma lista de rotas com ordem e reserva: GLM-5.3 de um provedor, DeepSeek V4 Pro como alternativa e um Qwen3.8-27B próprio em quatro V100. Se os pesos mudam ou o provedor cai, as integrações não percebem. É conveniente, mas é justamente aí que se escondem as falhas silenciosas.
O que se sabe sobre Três falhas silenciosas?
Primeira: o desvio discreto para o reserva. O GLM-5.3 foi configurado como um backend openai/ comum. O chat funcionava, mas Claude Code e Codex recebiam respostas do modelo reserva. O LiteLLM traduz /v1/messages e /v1/responses para a Responses API, o provedor responde 404 e o roteador segue adiante em silêncio. Não há erro nos logs; só o cabeçalho x-litellm-attempted-fallbacks: 1 entrega o problema. A solução é usar o provedor nativo do LiteLLM para esse fornecedor, que traduz tudo para chat/completions.
O que se sabe sobre Configuração do Claude Code e GPUs próprias?
O próprio Claude Code envia subtarefas de serviço (títulos, compressão de contexto, subagentes) a modelos das classes Haiku, Sonnet e Opus. Se você substituir apenas ANTHROPIC_MODEL, essas requisições falharão com 403 no meio do trabalho. É preciso definir ANTHROPIC_DEFAULT_OPUS_MODEL, ANTHROPIC_DEFAULT_SONNET_MODEL e ANTHROPIC_DEFAULT_HAIKU_MODEL. Escreva ANTHROPIC_BASE_URL sem /v1, ou você terá /v1/v1/messages.
Build & Ship Production AI Agents Without Boilerplate Code
Start your free 72-hour trial at Hamidun Academy (academy.hamidun.com) — interactive lessons on Claude Code & Cursor, live Tech Radar, and production agent templates.
O essencial da IA — uma vez por semana
Sete histórias que realmente importaram, escolhidas a dedo. Sem ruído nem releases.
Pronto! Verifique seu e-mail para a confirmação.