Utilisez le OpenAI Python SDK et LangChain avec une API moins chère (UberLLM)
Définissez base_url="https://api.uberllm.dev/v1" et api_key sur votre clé UberLLM dans OpenAI(...) ou ChatOpenAI(...), puis passez n'importe quel ID de modèle UberLLM. Le chat, le streaming, les appels d'outils et la sortie JSON continuent de fonctionner ; votre autre code reste inchangé.
Étapes (OpenAI Python SDK)
- Créez une clé sur votre page des clés et ajoutez du crédit.
- Enregistrez-la comme variable d'environnement :
export UBERLLM_API_KEY=ull_your_key
- Faites pointer le client vers 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)
C'est tout le changement. client.chat.completions.create avec stream=True, tools, response_format, temperature et max_tokens fonctionne comme avant. Le client async (AsyncOpenAI) prend les mêmes deux arguments.
Sans toucher au code
Le SDK OpenAI lit également deux variables d'environnement, donc un script qui appelle OpenAI() sans arguments peut être déplacé sans être modifié :
export OPENAI_BASE_URL=https://api.uberllm.dev/v1
export OPENAI_API_KEY=ull_your_key
python your_script.py
Vous devez toujours changer la chaîne model= en un ID UberLLM tel que deepseek/deepseek-v4.1-flash.
Étapes (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 et .stream() fonctionnent sans changement. Passez base_url dans le code plutôt que de vous fier aux variables d'environnement : l'argument l'emporte toujours, donc un OPENAI_API_BASE égaré sur la machine ne peut pas envoyer d'appels ailleurs.
LangChain.js repose sur la même idée :
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" },
});
Choisir un modèle moins cher pour chaque tâche
L'intérêt d'une clé unique pour tous les modèles est que vous pouvez arrêter de payer les prix des modèles de pointe pour les tâches faciles. Une répartition courante :
- Raisonnement complexe ou réponses destinées aux clients : un modèle de pointe tel que
deepseek/deepseek-v4.1-flash. - Résumés en masse, étiquetage, extraction :
google/gemma-3-27b-itou un autre modèle du tableau de traitement par lot ci-dessous, souvent 50 à 100 fois moins cher par token.
Il suffit de modifier la chaîne model= pour passer de l'un à l'autre.
Ce qui n'est pas là
UberLLM propose les complétions de chat (/v1/chat/completions), l'API Responses (client.responses.create, streaming et appels d'outils inclus) et la route de messages Anthropic. Il ne conserve aucun état entre les appels, envoyez donc toute la conversation dans input au lieu de previous_response_id (Référence de l'API Responses). Il ne propose pas les embeddings ni l'API Assistants : gardez ces appels sur leur fournisseur actuel.
Dépannage
openai.AuthenticationError(401) : la clé est incorrecte ou vide. Imprimezlen(os.environ["UBERLLM_API_KEY"]); une clé estull_plus 43 caractères.openai.NotFoundError(404) sur/responsesou/embeddings: ces routes n'existent pas ici, voir ci-dessus.model_not_found: les IDs de style OpenAI commegpt-4onécessitent le fabricant devant :openai/gpt-4o.openai.RateLimitError(429) : la limite par minute de la clé (300 par défaut). Augmentez-la sur la page des clés, ou ajoutez des retries avec backoff.- 402
insufficient_credits: rechargez sur la page des crédits.