Usa el OpenAI Python SDK y LangChain con una API más barata (UberLLM)
Establece base_url="https://api.uberllm.dev/v1" y api_key a tu clave de UberLLM en OpenAI(...) o ChatOpenAI(...), luego pasa cualquier ID de modelo de UberLLM. El chat, el streaming, las llamadas a herramientas y la salida JSON siguen funcionando; tu otro código permanece igual.
Pasos (OpenAI Python SDK)
- Crea una clave en tu página de claves y añade crédito.
- Guárdala como una variable de entorno:
export UBERLLM_API_KEY=ull_your_key
- Dirige el cliente a 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)
Ese es todo el cambio. client.chat.completions.create con stream=True, tools, response_format, temperature y max_tokens funciona como antes. El cliente async (AsyncOpenAI) toma los mismos dos argumentos.
Sin tocar el código
El SDK de OpenAI también lee dos variables de entorno, así que un script que llama a OpenAI() sin argumentos puede moverse sin editarlo:
export OPENAI_BASE_URL=https://api.uberllm.dev/v1
export OPENAI_API_KEY=ull_your_key
python your_script.py
Aún necesitas cambiar la cadena model= a un ID de UberLLM como deepseek/deepseek-v4.1-flash.
Pasos (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)
Cadenas, agentes, bind_tools y .stream() funcionan sin cambios. Pasa base_url en el código en lugar de depender de variables de entorno: el argumento siempre gana, así que un OPENAI_API_BASE suelto en la máquina no puede enviar llamadas a otro sitio.
LangChain.js es la misma idea:
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" },
});
Elige un modelo más barato para cada tarea
La idea de una clave para cada modelo es que puedes dejar de pagar precios de frontera para tareas sencillas. Una división común:
- Razonamiento complejo o respuestas de cara al cliente: un modelo superior como
deepseek/deepseek-v4.1-flash. - Resúmenes masivos, etiquetado, extracción:
google/gemma-3-27b-itu otro modelo de la tabla de lotes a continuación, a menudo 50 a 100 veces más barato por token.
Cambia solo la cadena model= para pasar de uno a otro.
Lo que no está disponible
UberLLM ofrece chat completions (/v1/chat/completions), la Responses API (client.responses.create, incluyendo streaming y tool calls) y la ruta de mensajes de Anthropic. No mantiene estado entre llamadas, así que envía la conversación completa en input en lugar de previous_response_id (referencia de la Responses API). No ofrece embeddings ni la Assistants API: mantén esas llamadas en tu proveedor actual.
Solución de problemas
openai.AuthenticationError(401): la clave es incorrecta o está vacía. Imprimelen(os.environ["UBERLLM_API_KEY"]); una clave esull_más 43 caracteres.openai.NotFoundError(404) en/responseso/embeddings: esas rutas no existen aquí, consulta arriba.model_not_found: los IDs estilo OpenAI comogpt-4onecesitan el fabricante delante:openai/gpt-4o.openai.RateLimitError(429): el límite por minuto de la clave (300 por defecto). Auméntalo en la página de claves, o añade reintentos con backoff.- 402
insufficient_credits: recarga en la página de créditos.