LiteLLM: o tradutor invisível entre Claude Code e qualquer API
Entenda o fluxo completo de como o LiteLLM intercepta e traduz requests do formato Anthropic para a Zhipu, DeepSeek e outros provedores.
No artigo anterior, configuramos o Claude Code para usar os modelos GLM-5 da Zhipu AI sem gastar créditos da Anthropic. O “segredo” dessa integração atende pelo nome de LiteLLM.
Mas por que precisamos do LiteLLM? O que exatamente ele faz nos bastidores? Neste artigo, vamos entender a arquitetura desse proxy e por que ele é uma ferramenta essencial para qualquer desenvolvedor lidando com IA hoje.
O problema da fragmentação de APIs
Se você já tentou usar diferentes modelos de linguagem no seu código, sabe que cada empresa tem seu próprio formato de requisição.
- A OpenAI usa um padrão.
- A Anthropic usa outro.
- A Google (Gemini) usa outro.
- Empresas chinesas como Zhipu AI e DeepSeek geralmente tentam copiar o padrão da OpenAI, mas com algumas particularidades.
O Claude Code (a ferramenta CLI da Anthropic) foi construído para falar exclusivamente o dialeto da Anthropic. Se você tentar apontar o Claude Code diretamente para a API da Zhipu, ele vai enviar uma requisição no formato Anthropic e a Zhipu não vai entender nada.
A solução: Um “Tradutor Universal”
É aqui que entra o LiteLLM. Ele atua como um proxy (um intermediário) que roda localmente no seu computador.
O fluxo é o seguinte:
- O Claude Code cria uma requisição no formato Anthropic.
- Ele envia essa requisição não para os servidores da Anthropic, mas para o LiteLLM, que está rodando em
http://localhost:4001. - O LiteLLM recebe a requisição (no formato Anthropic), traduz para o formato esperado pelo destino (por exemplo, o formato compatível com OpenAI usado pela Zhipu) e faz a requisição real para a internet.
- Quando a resposta chega da Zhipu, o LiteLLM faz o caminho inverso: traduz a resposta de volta para o formato da Anthropic e devolve para o Claude Code.
Para o Claude Code, ele está conversando com a Anthropic. Para a Zhipu, ela está recebendo uma requisição normal no seu próprio formato. O LiteLLM faz a mágica acontecer de forma invisível.
O desafio do “Thinking Mode”
Um exemplo perfeito de como essa tradução é complexa envolve o Thinking Mode (modo de raciocínio).
No Claude Code, você pode configurar o “Esforço” (Effort). Quando você escolhe um esforço maior, a Anthropic envia um parâmetro específico chamado budget_tokens dentro de um bloco thinking.
// O que o Claude Code envia
{
"model": "claude-3-5-sonnet-20241022",
"thinking": {
"budget_tokens": 4096
}
}
A Zhipu AI não faz a menor ideia do que é budget_tokens. O LiteLLM intercepta isso e pode (dependendo da configuração e do modelo de destino) traduzir essa intenção para algo que a Zhipu entenda, ou pelo menos remover (dropar) os parâmetros que causariam um erro na API de destino (é por isso que usamos drop_params: true no config.yaml).
Endpoint Nativo vs LiteLLM
Você pode estar se perguntando: “Mas a própria Zhipu não tem um endpoint nativo para a Anthropic?”
Sim! A Zhipu AI criou recentemente um endpoint (/api/anthropic) projetado exclusivamente para simular a API da Anthropic. Isso permite usar o Claude Code sem o LiteLLM.
Então por que ainda usamos o LiteLLM?
Para quem tem o Developer (Coding) Plan da Zhipu, o endpoint nativo tem um problema fatal: ele não suporta o roteamento para /api/coding/paas/v4, que é o endpoint que não consome seus créditos pay-as-you-go. Se você usar o endpoint nativo, vai acabar pagando por fora do seu plano. O LiteLLM nos dá o controle granular para apontar exatamente para o endpoint correto.
(Abordaremos essa comparação em detalhes em um artigo futuro).
Conclusão
O LiteLLM é mais do que um quebra-galho; é uma camada de abstração poderosa. Ele permite que você troque de modelo ou provedor com uma simples alteração no arquivo config.yaml, sem precisar reescrever seu código ou trocar de ferramenta.
No próximo artigo, vamos mergulhar fundo nas Cotas e Billing da Zhipu, entendendo como o plano Developer funciona e como criar um monitor visual no terminal para não estourar seu limite diário.