NovitàCollega qualsiasi agente a UberLLM: una chiave, tutti i modelli, a prezzo di listino o meno.
UberLLM

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)

  1. Crea una chiave sulla tua pagina delle chiavi e aggiungi credito.
  2. Salvala come variabile d'ambiente:
export UBERLLM_API_KEY=ull_your_key
  1. 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-it o 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. Stampa len(os.environ["UBERLLM_API_KEY"]); una chiave è ull_ più 43 caratteri.
  • openai.NotFoundError (404) su /responses o /embeddings: questi percorsi non esistono qui, vedi sopra.
  • model_not_found: ID in stile OpenAI come gpt-4o richiedono 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.

Continua a leggere

Modelli per iniziare

Il primo è nel codice qui sotto. Ognuno accetta tool calls.

ModelloID del modello (incollalo)Prezzo attuale
DeepSeek V4.1 Flashdeepseek/deepseek-v4.1-flash$0.00018 input · $0.0014 output / 1M
Gemini 3.5 Flashgoogle/gemini-3.5-flash$0.0150 input · $0.0900 output / 1M
Claude Sonnet 5.5anthropic/claude-sonnet-5.5$0.1099 input · $0.5495 output / 1M
GPT-5.5openai/gpt-5.5$0.1250 input · $0.7500 output / 1M
Kimi K3moonshotai/kimi-k3$0.0010 input · $0.0788 output / 1M
GLM 5.3z-ai/glm-5.3$0.00070 input · $0.0141 output / 1M
Gemma 3 27Bgoogle/gemma-3-27b-it$0.00079 input · $0.0020 output / 1M
Qwen3 VL 235B A22Bqwen/qwen3-vl-235b-a22b-instruct$0.0021 input · $0.0188 output / 1M

Prezzi all’ultimo aggiornamento orario, senza commissioni aggiunte · tutti i modelli →

Per lavori batch di grandi dimensioni

Prezzo più basso per token per riassunto, tagging ed estrazione a volume.

ModelloID del modello (incollalo)Prezzo attuale
Gemma 3 27Bgoogle/gemma-3-27b-it$0.00079 input · $0.0020 output / 1M
GPT-OSS 120Bopenai/gpt-oss-120b$0.000069 input · $0.00030 output / 1M
DeepSeek V3.2deepseek/deepseek-v3.2$0.0026 input · $0.0039 output / 1M
Qwen 3 235B A22B Instruct 2507qwen/qwen3-235b-a22b-2507$0.00057 input · $0.0035 output / 1M
Gemini 3.1 Flash Litegoogle/gemini-3.1-flash-lite$0.0025 input · $0.0149 output / 1M
DeepSeek V4.1 Flashdeepseek/deepseek-v4.1-flash$0.00018 input · $0.0014 output / 1M

Prezzi all’ultimo aggiornamento orario, senza commissioni aggiunte · tutti i modelli →

Domande frequenti

Posso usare l'SDK ufficiale di OpenAI per Python con UberLLM?

Sì. Passa base_url="https://api.uberllm.dev/v1" e la tua chiave UberLLM a OpenAI(), oppure imposta OPENAI_BASE_URL e OPENAI_API_KEY. chat.completions con streaming, tools e output JSON funziona per ogni modello di chat.

LangChain funziona con UberLLM?

Sì. ChatOpenAI da langchain-openai accetta base_url e api_key; chains, agents e tool binding funzionano senza modifiche con qualsiasi modello di chat UberLLM.

UberLLM supporta gli embeddings o la Responses API?

L'API Responses sì, gli embeddings no. UberLLM supporta /v1/chat/completions, /v1/responses (client.responses.create, senza previous_response_id: invia l'intera conversazione ad ogni chiamata) e la route Anthropic /v1/messages. Mantieni gli embeddings sul loro provider attuale.