Usa l'OpenAI Python SDK e LangChain con un'API più economica (UberLLM)
Imposta base_url="https://api.uberllm.dev/v1" e api_key sulla tua chiave UberLLM in OpenAI(...) o ChatOpenAI(...), poi passa qualsiasi ID del modello UberLLM. Chat, streaming, tool calls e JSON output continuano a funzionare; il tuo altro codice rimane invariato.
Passaggi (OpenAI Python SDK)
- Crea una chiave sulla tua pagina delle chiavi e aggiungi credito.
- Salvala come variabile d'ambiente:
export UBERLLM_API_KEY=ull_your_key
- Punta il client 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)
Questa è l'unica modifica. client.chat.completions.create con stream=True, tools, response_format, temperature e max_tokens funziona come prima. Il client asincrono (AsyncOpenAI) accetta gli stessi due argomenti.
Senza toccare il codice
L'SDK di OpenAI legge anche due variabili d'ambiente, quindi uno script che chiama OpenAI() senza argomenti può essere spostato senza modificarlo:
export OPENAI_BASE_URL=https://api.uberllm.dev/v1
export OPENAI_API_KEY=ull_your_key
python your_script.py
Devi comunque cambiare la stringa model= con un ID UberLLM come deepseek/deepseek-v4.1-flash.
Passi (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() funzionano senza modifiche. Passa base_url nel codice piuttosto che affidarti a variabili d'ambiente: l'argomento vince sempre, quindi un OPENAI_API_BASE errato sulla macchina non può inviare chiamate altrove.
LangChain.js è la stessa 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" },
});
Scegli un modello più economico per ogni lavoro
Il vantaggio di avere una sola chiave per ogni modello è che puoi smettere di pagare prezzi da frontiera per lavori semplici. Una suddivisione comune:
- Ragionamento complesso o risposte rivolte al cliente: un modello di punta come
deepseek/deepseek-v4.1-flash. - Riepiloghi di massa, etichettatura, estrazione:
google/gemma-3-27b-ito un altro modello dalla tabella dei batch qui sotto, spesso 50 a 100 volte più economico per token.
Cambia solo la stringa model= per passare da uno all'altro.
Cosa non c'è
UberLLM offre completamenti di chat (/v1/chat/completions), la Responses API (client.responses.create, streaming e tool calls incluse) e la route dei messaggi di Anthropic. Non mantiene alcuno stato tra le chiamate, quindi invia l'intera conversazione in input invece di previous_response_id (riferimento alla Responses API). Non offre embeddings o la Assistants API: mantieni quelle chiamate sul loro provider attuale.
Risoluzione dei problemi
openai.AuthenticationError(401): la chiave è sbagliata o vuota. Stampalen(os.environ["UBERLLM_API_KEY"]); una chiave èull_più 43 caratteri.openai.NotFoundError(404) su/responseso/embeddings: questi percorsi non esistono qui, vedi sopra.model_not_found: ID in stile OpenAI comegpt-4orichiedono il produttore davanti:openai/gpt-4o.openai.RateLimitError(429): il limite per minuto della chiave (300 per impostazione predefinita). Aumentalo sulla pagina delle chiavi, o aggiungi tentativi con backoff.- 402
insufficient_credits: ricarica sulla pagina dei crediti.