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

Usa il Vercel AI SDK con UberLLM (modelli più economici, stesso codice)

Installa @ai-sdk/openai-compatible, crea un provider con baseURL https://api.uberllm.dev/v1 e la tua chiave UberLLM, e passa uberllm("<model id>") ovunque la tua app passi un modello oggi. Nient'altro nell'app cambia.

Passaggi

  1. Crea una chiave sulla tua pagina delle chiavi e aggiungi un po' di credito (gli account partono da $0).
  2. Installa il provider:
npm i ai @ai-sdk/openai-compatible
  1. Inserisci la chiave in .env.local (Next.js) o nell'ambiente del tuo server:
UBERLLM_API_KEY=ull_your_key
  1. Crea il provider una volta, ad esempio in lib/uberllm.ts:
import { createOpenAICompatible } from "@ai-sdk/openai-compatible";

export const uberllm = createOpenAICompatible({
  name: "uberllm",
  baseURL: "https://api.uberllm.dev/v1",
  apiKey: process.env.UBERLLM_API_KEY, // sent as Authorization: Bearer <key>
  includeUsage: true, // token counts on streamed answers too
});
  1. Usalo dove usavi un modello prima:
import { generateText } from "ai";
import { uberllm } from "@/lib/uberllm";

const { text } = await generateText({
  model: uberllm("deepseek/deepseek-v4.1-flash"),
  prompt: "Write a one-line welcome message.",
});

Spostare un'app che usa già @ai-sdk/openai

Scambia l'argomento del modello e mantieni tutto il resto:

// before
import { openai } from "@ai-sdk/openai";
const model = openai("gpt-4o");

// after
import { uberllm } from "@/lib/uberllm";
const model = uberllm("deepseek/deepseek-v4.1-flash");

Gli ID dei modelli sono gli ID su uberllm.dev/models e hanno sempre un produttore davanti (openai/…, anthropic/…, deepseek/…). È così che puoi eseguire GPT, Claude, Gemini e modelli aperti da una singola chiave e confrontarli cambiando una stringa.

Una route di chat Next.js per useChat

Il useChat da @ai-sdk/react invia richieste POST a /api/chat per impostazione predefinita. Questa route risponde a tali richieste:

// app/api/chat/route.ts
import { streamText, convertToModelMessages, type UIMessage } from "ai";
import { uberllm } from "@/lib/uberllm";

export async function POST(req: Request) {
  const { messages }: { messages: UIMessage[] } = await req.json();
  const result = streamText({
    model: uberllm("deepseek/deepseek-v4.1-flash"),
    messages: await convertToModelMessages(messages),
  });
  return result.toUIMessageStreamResponse();
}

Mantieni la chiave sul server. Non metterla mai in una variabile NEXT_PUBLIC_: chiunque potrebbe leggerla dalla pagina e spendere il tuo saldo.

Fissa un tetto al costo di una singola chiamata

Le richieste di chat accettano provider.max_price (dollari per milione di token). Passalo tramite providerOptions sotto il provider name che hai scelto:

await generateText({
  model: uberllm("deepseek/deepseek-v4.1-flash"),
  prompt: "Hi",
  providerOptions: { uberllm: { provider: { max_price: { prompt: 0.2, completion: 0.4 } } } },
});

Se nessuno vende il modello sotto quel prezzo in questo momento, la chiamata viene rifiutata con max_price_exceeded e nulla viene addebitato.

Risoluzione dei problemi

  • 401 invalid_api_key: la chiave non ha raggiunto il server. Riavvia next dev dopo aver modificato .env.local e verifica che process.env.UBERLLM_API_KEY sia impostato dove il codice viene eseguito (server, non il browser).
  • 402 insufficient_credits: aggiungi credito sulla pagina dei crediti.
  • 404 model_not_found: l'id è sbagliato o manca il suo creatore. Copialo dalla pagina del modello.
  • 400 wrong_endpoint: hai passato un modello di immagine o video a streamText. I modelli di immagine passano attraverso uberllm.imageModel(…) con generateImage; il video è un lavoro, vedi Crea un video o un'immagine.
  • L'utilizzo è vuoto sugli stream: imposta includeUsage: true sul provider, come sopra.

Continua a leggere

Buoni modelli per un'app

Tutti questi supportano le tool calls. Il primo è nel codice qui sotto.

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 →

Domande frequenti

L'AI SDK di Vercel funziona con UberLLM?

Sì. Usa il provider ufficiale @ai-sdk/openai-compatible con baseURL https://api.uberllm.dev/v1 e la tua UberLLM key. generateText, streamText, useChat, tool calls e generateImage funzionano.

Ho bisogno anche di @ai-sdk/openai o @ai-sdk/anthropic?

No. Un singolo provider @ai-sdk/openai-compatible raggiunge ogni modello di chat su UberLLM, inclusi Claude, GPT e Gemini, tramite l'ID del modello.

Posso creare video con l'AI SDK?

Non tramite @ai-sdk/openai-compatible, che non ha un modello video. I video sono jobs su UberLLM: avviane uno con POST /v1/video/generations e controllane lo stato, come mostrato nella documentazione sui media.