LiteLLM: um proxy unificado local e cloud
Se você alternar entre um Ollama local para tarefas sensíveis e APIs na nuvem (OpenAI, Anthropic) para requisições pesadas, logo terá três SDKs, três formatos de chave, três maneiras de lidar com erros. O LiteLLM é um proxy local que fala a API OpenAI com sua aplicação e, por trás, redireciona para o backend certo — local ou na nuvem — com fallback, limitação de taxa e rastreamento de custos. Uma única URL no código, toda a lógica em um config.yaml.
#Por que usar um proxy LiteLLM para modelos locais e na nuvem
Uma stack híbrida típica tem dois problemas. Primeiro, o código da aplicação fica repleto de if provider == 'openai' / elif provider == 'ollama'. Depois, a decisão "local versus nuvem" fica definida no momento em que o código é escrito: se o Ollama cair, a aplicação cai; se você quiser mudar para o Claude para uma tarefa específica, precisará fazer uma nova implantação.
LiteLLM resolve os dois. No lado da aplicação, você fala com um endpoint único compatível com a OpenAI (chat/completions, embeddings, streaming). No lado da infraestrutura, um arquivo config.yaml descreve seus modelos: alias lógico, backend, chave API, prioridade de fallback. Você muda a rota sem tocar no código.
#Como funciona
Seu ChatGPT privado e gratuito na sua máquina em 1 hora — LM Studio, Ollama, Open WebUI, seus documentos, sem nuvem.
- Espaço online vitalício
- PDF + arquivos
- Atualizações vitalícias
O proxy expõe a porta 4000 por padrão. Sua aplicação envia um POST /chat/completions com model: "chat-fr". O LiteLLM analisa seu config.yaml, vê que chat-fr aponta para ollama/qwen3.5:9b no localhost:11434, faz a requisição, normaliza a resposta no formato OpenAI e retorna o resultado para a aplicação.
- Do lado do aplicativo
- Uma única URL (http://localhost:4000), uma única chave virtual, o SDK padrão da OpenAI é suficiente.
- Do lado do proxy
- Um model_list mapeia aliases (chat-fr, code-rapide, analyse-doc) para backends reais.
- Routing
- Vários backends para o mesmo alias = balanceamento de carga, fallback, nova tentativa automática.
- Observabilidade
- Logs, latências, custo por requisição e por chave virtual, exportáveis para o Langfuse, Prometheus ou um Postgres.
#Pré-requisitos
- Python 3.10+
- LiteLLM é um pacote pip. Uma venv limpa ou uma instalação limpa com pipx basta.
- Ollama em execução
- Em http://localhost:11434 com pelo menos um modelo baixado. Consulte o guia de instalação Ollama se necessário.
- Chaves API de nuvem (opcional)
- OPENAI_API_KEY, ANTHROPIC_API_KEY se você quiser redirecionar para a nuvem como fallback.
- Um arquivo .env
- Para nunca commitar chaves em texto claro no config.yaml.
#1. Instalação
O extra proxy inclui FastAPI, uvicorn e as dependências opcionais (Postgres, Redis se você quiser limitação de taxa compartilhada). Para um teste rápido, isso é suficiente. Para produção, prefira a imagem Docker oficial.
Verifique se está funcionando:
#2. Um config.yaml mínimo do LiteLLM
Crie o config.yaml ao lado do seu projeto. A estrutura é composta por três seções: model_list (os aliases), litellm_settings (comportamento global) e general_settings (autenticação, banco de dados).
Inicie o proxy com esta configuração:
Na aplicação, o SDK da OpenAI para Python se comunica diretamente com o proxy. Nenhuma dependência do LiteLLM no código da aplicação:
#3. Adicionar OpenAI e Anthropic
Nunca inserimos as chaves diretamente no código. Coloque-as em um .env ao lado do arquivo de configuração:
Em seguida, referencie as variáveis com a sintaxe os.environ no YAML — o LiteLLM as substitui na inicialização:
Neste estágio, você tem três aliases lógicos. O código do aplicativo escolhe chat-fr para conversas privadas, chat-gros para requisições longas, analyse-doc para leitura de PDF. Nenhuma chave aparece no código.
#4. Roteamento por modelo e fallback automático
É aqui que o verdadeiro valor do proxy aparece. Dois mecanismos que você precisa conhecer: várias entradas com o mesmo model_name (balanceamento de carga) e a chave fallbacks (alternância em caso de erro).
- 01Várias entradas, um único aliasVocê pode declarar model_name: chat-fr duas vezes — uma entrada apontando para o Ollama local, a outra para um Mistral na nuvem. O LiteLLM distribui as requisições conforme a estratégia (simple-shuffle por padrão, ou usage-based-routing se você quiser otimizar o custo).
- 02Fallback explícitoEm litellm_settings, declare qual alias assume o lugar se o primeiro retornar um erro ou timeout. O fallback ativa automaticamente um retry no backend de reserva.
- 03Verificação de funcionamento ativaO LiteLLM envia pings periodicamente a cada modelo. Uma instância do Ollama que deixa de responder é marcada como unhealthy e retirada do pool até voltar a responder — suas requisições passam automaticamente para a nuvem.
Com essa configuração, seu app sempre faz chamadas com model: "chat-fr". Se o Ollama estiver indisponível, atingir o tempo limite ou se o prompt ultrapassar a janela de contexto que você alocou localmente (num_ctx reduzido para economizar VRAM), o proxy alterna de forma transparente para GPT-4o-mini. O app não percebe nada — apenas recebe uma resposta, talvez um pouco mais lenta.
#5. Acompanhamento de custos e limitação de requisições
Uma stack híbrida tem um custo oculto: você acredita estar usando um modelo local, mas 30% das requisições, na verdade, foram direcionadas para o GPT-4o. O LiteLLM calcula o custo de cada requisição com base em uma tabela de preços interna (atualizada conforme as tabelas públicas de preços).
Para armazenar os logs de forma persistente e disponibilizar um dashboard, conecte um banco Postgres:
Depois de conectar o Postgres, a interface de administração (http://localhost:4000/ui) mostra o custo por chave virtual, por modelo e por usuário. Você também pode criar chaves virtuais com um teto de orçamento — útil para conceder acesso a uma equipe sem risco de gastos fora de controle.
Custos aproximados para 1 milhão de tokens de saída (preços públicos de junho de 2026, que você deve recalcular junto ao seu fornecedor):
- Ollama local (Qwen 3.5 9B Q4)
- Custo marginal de 0 $ — sua eletricidade e a amortização da GPU.
- OpenAI gpt-4o-mini
- Aproximadamente 0,60 $ / 1M de tokens de saída, ideal para fallback barato.
- Anthropic Claude Haiku 4.5
- Aproximadamente 5 $ / 1M tokens de saída, mais caro, mas excelente relação qualidade/preço na análise de documentos.
- OpenAI gpt-4o
- Aproximadamente 10 $ por 1 milhão de tokens de saída; reservar para tarefas em que o 4o-mini não é bom o suficiente.
No que diz respeito ao limite de taxa, definimos limites RPM (requisições por minuto) e TPM (tokens por minuto) por modelo. O LiteLLM coloca em fila ou retorna um erro 429 conforme sua configuração:
#Solução de problemas
- "Model not found" mesmo que o alias exista
- Verifique a indentação do YAML. Um espaço a mais sob litellm_params faz o proxy ignorar silenciosamente a entrada. Execute litellm --config config.yaml --debug para ver o model_list efetivamente carregado.
- O fallback não é ativado
- num_retries deve ser ≥ 1 e o tempo limite deve ser atingido. Por padrão, request_timeout é muito generoso no Ollama — reduza-o para 30 segundos para que os fallbacks sejam acionados rapidamente.
- Erro 401 no Ollama
- ollama/* não aceita chave de API. Se você colocou api_key em uma entrada Ollama, remova-a. O LiteLLM repassa a chave sem alterações, o que causa uma falha.
- Custos incorretos ou zerados
- A tabela de preços depende da versão do LiteLLM. Atualize (pip install -U 'litellm[proxy]'). Para um modelo personalizado não listado, declare input_cost_per_token e output_cost_per_token manualmente em litellm_params.
- Latência anormal no Ollama
- O proxy realiza uma verificação de integridade a cada minuto. Se o Ollama demorar para carregar um modelo (cold start), a verificação excede o tempo limite e marca o modelo como unhealthy. Aumente health_check_interval ou pré-carregue os modelos com ollama run X --keepalive 60m.
#Para se aprofundar
Com essa configuração, você tem um ponto de entrada único para toda a sua IA, local ou na nuvem, com alternância transparente entre as duas. Os próximos passos naturais:
O que é um gateway de LLM?+
O LiteLLM é o único gateway LLM possível?+
Um comentário, um erro ou uma observação? Avise-nos; isso ajuda a melhorar o guia para todos.