NuevoConecta cualquier agente a UberLLM: una clave, todos los modelos, a precio de lista o menos.
UberLLM

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)

  1. Crea una clave en tu página de claves y añade crédito.
  2. Guárdala como una variable de entorno:
export UBERLLM_API_KEY=ull_your_key
  1. 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-it u 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. Imprime len(os.environ["UBERLLM_API_KEY"]); una clave es ull_ más 43 caracteres.
  • openai.NotFoundError (404) en /responses o /embeddings: esas rutas no existen aquí, consulta arriba.
  • model_not_found: los IDs estilo OpenAI como gpt-4o necesitan 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.

Sigue leyendo

Modelos para empezar

El primero está en el código de abajo. Cada uno acepta tool calls.

ModeloID del modelo (pega esto)Precio actual
DeepSeek V4.1 Flashdeepseek/deepseek-v4.1-flash$0.00018 entrada · $0.0014 salida / 1M
Gemini 3.5 Flashgoogle/gemini-3.5-flash$0.0150 entrada · $0.0900 salida / 1M
Claude Sonnet 5.5anthropic/claude-sonnet-5.5$0.1077 entrada · $0.5387 salida / 1M
GPT-5.5openai/gpt-5.5$0.1250 entrada · $0.7500 salida / 1M
Kimi K3moonshotai/kimi-k3$0.0017 entrada · $0.0781 salida / 1M
GLM 5.3z-ai/glm-5.3$0.00079 entrada · $0.0140 salida / 1M
Gemma 3 27Bgoogle/gemma-3-27b-it$0.00079 entrada · $0.0020 salida / 1M
Qwen3 VL 235B A22Bqwen/qwen3-vl-235b-a22b-instruct$0.0021 entrada · $0.0188 salida / 1M

Precios de la última actualización horaria, sin comisión añadida · todos los modelos →

Para grandes trabajos por lotes

El precio más bajo por token para resumir, etiquetar y extraer a gran volumen.

ModeloID del modelo (pega esto)Precio actual
Gemma 3 27Bgoogle/gemma-3-27b-it$0.00079 entrada · $0.0020 salida / 1M
GPT-OSS 120Bopenai/gpt-oss-120b$0.000069 entrada · $0.00030 salida / 1M
DeepSeek V3.2deepseek/deepseek-v3.2$0.0026 entrada · $0.0039 salida / 1M
Qwen 3 235B A22B Instruct 2507qwen/qwen3-235b-a22b-2507$0.00057 entrada · $0.0035 salida / 1M
Gemini 3.1 Flash Litegoogle/gemini-3.1-flash-lite$0.0025 entrada · $0.0149 salida / 1M
DeepSeek V4.1 Flashdeepseek/deepseek-v4.1-flash$0.00018 entrada · $0.0014 salida / 1M

Precios de la última actualización horaria, sin comisión añadida · todos los modelos →

Preguntas frecuentes

¿Puedo usar el SDK oficial de Python de OpenAI con UberLLM?

Sí. Pasa base_url="https://api.uberllm.dev/v1" y tu clave de UberLLM a OpenAI(), o configura OPENAI_BASE_URL y OPENAI_API_KEY. chat.completions con streaming, tools y salida JSON funciona para cada modelo de chat.

¿Funciona LangChain con UberLLM?

Sí. ChatOpenAI de langchain-openai toma base_url y api_key; chains, agents y tool binding funcionan sin cambios con cualquier modelo de chat de UberLLM.

¿UberLLM soporta embeddings o la API de Responses?

La API de Responses sí, embeddings no. UberLLM sirve /v1/chat/completions, /v1/responses (client.responses.create, sin previous_response_id: envía la conversación completa en cada llamada) y la ruta /v1/messages de Anthropic. Mantén los embeddings en tu proveedor actual.