Use o OpenAI Python SDK e LangChain com uma API mais barata (UberLLM)
Defina base_url="https://api.uberllm.dev/v1" e api_key para sua chave UberLLM em OpenAI(...) ou ChatOpenAI(...), então passe qualquer ID de modelo UberLLM. Chat, streaming, chamadas de ferramentas (tool calls) e saída JSON continuam funcionando; seu outro código permanece o mesmo.
Passos (OpenAI Python SDK)
- Crie uma chave na sua página de chaves e adicione crédito.
- Salve-a como uma variável de ambiente:
export UBERLLM_API_KEY=ull_your_key
- Aponte o cliente para o UberLLM:
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.uberllm.dev/v1",
api_key=os.environ["UBERLLM_API_KEY"],
)
resp = client.chat.completions.create(
model="deepseek/deepseek-v4.1-flash",
messages=[{"role": "user", "content": "Give me three names for a coffee shop."}],
)
print(resp.choices[0].message.content)
Essa é a única alteração. client.chat.completions.create com stream=True, tools, response_format, temperature e max_tokens funciona como antes. O cliente assíncrono (AsyncOpenAI) aceita os mesmos dois argumentos.
Sem tocar no código
O OpenAI SDK também lê duas variáveis de ambiente, então um script que chama OpenAI() sem argumentos pode ser movido sem edição:
export OPENAI_BASE_URL=https://api.uberllm.dev/v1
export OPENAI_API_KEY=ull_your_key
python your_script.py
Você ainda precisa alterar a string model= para um ID do UberLLM como deepseek/deepseek-v4.1-flash.
Passos (LangChain)
pip install langchain-openai
import os
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model="deepseek/deepseek-v4.1-flash",
base_url="https://api.uberllm.dev/v1",
api_key=os.environ["UBERLLM_API_KEY"],
)
print(llm.invoke("Say hello in one sentence.").content)
Chains, agents, bind_tools e .stream() funcionam sem alterações. Passe base_url no código em vez de depender de variáveis de ambiente: o argumento sempre prevalece, então um OPENAI_API_BASE perdido na máquina não pode enviar chamadas para outro lugar.
LangChain.js é a mesma ideia:
import { ChatOpenAI } from "@langchain/openai";
const llm = new ChatOpenAI({
model: "deepseek/deepseek-v4.1-flash",
apiKey: process.env.UBERLLM_API_KEY,
configuration: { baseURL: "https://api.uberllm.dev/v1" },
});
Escolha um modelo mais barato para cada tarefa
O objetivo de uma chave para cada modelo é que você pode parar de pagar preços de modelos de ponta por tarefas simples. Uma divisão comum:
- Raciocínio complexo ou respostas diretas ao cliente: um modelo de ponta como
deepseek/deepseek-v4.1-flash. - Resumos em massa, marcação, extração:
google/gemma-3-27b-itou outro modelo da tabela de lote abaixo, muitas vezes 50 a 100 vezes mais barato por token.
Mude apenas a string model= para alternar entre um e outro.
O que não está incluído
UberLLM oferece chat completions (/v1/chat/completions), a Responses API (client.responses.create, incluindo streaming e tool calls) e a rota de mensagens da Anthropic. Não mantém estado entre as chamadas, portanto, envie a conversa completa em input em vez de previous_response_id (Referência da Responses API](](/docs/responses))). Não oferece embeddings ou a Assistants API: mantenha essas chamadas no seu provedor atual.
Solução de Problemas
openai.AuthenticationError(401): a chave está errada ou vazia. Imprimalen(os.environ["UBERLLM_API_KEY"]); uma chave temull_mais 43 caracteres.openai.NotFoundError(404) em/responsesou/embeddings: essas rotas não existem aqui, veja acima.model_not_found: IDs no estilo OpenAI comogpt-4oprecisam do fabricante na frente:openai/gpt-4o.openai.RateLimitError(429): o limite por minuto da chave (300 por padrão). Aumente-o na página de chaves, ou adicione retentativas com backoff.- 402
insufficient_credits: adicione créditos na página de créditos.