Nutzen Sie das Vercel AI SDK mit UberLLM (günstigere Modelle, gleicher Code)
Installieren Sie @ai-sdk/openai-compatible, erstellen Sie einen provider mit baseURL https://api.uberllm.dev/v1 und Ihrem UberLLM key, und übergeben Sie uberllm("<model id>"), wo immer Ihre app heute ein model übergibt. Nichts anderes in der app ändert sich.
Schritte
- Erstelle einen Schlüssel auf deiner Schlüsselseite und füge etwas Guthaben hinzu (Konten beginnen bei $0).
- Installiere den Provider:
npm i ai @ai-sdk/openai-compatible
- Lege den Schlüssel in
.env.local(Next.js) oder in die Umgebung deines Servers:
UBERLLM_API_KEY=ull_your_key
- Erstelle den Provider einmalig, zum Beispiel 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
});
- Verwende ihn, wo du zuvor ein Modell verwendet hast:
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.",
});
Eine App migrieren, die bereits @ai-sdk/openai nutzt
Tauschen Sie das Modell-Argument aus und behalten Sie alles andere bei:
// 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");
Modell-IDs sind die IDs auf uberllm.dev/models und haben immer einen Hersteller davor (openai/…, anthropic/…, deepseek/…). So können Sie GPT, Claude, Gemini und offene Modelle mit einem einzigen Schlüssel ausführen und sie vergleichen, indem Sie eine Zeichenkette ändern.
Eine Next.js Chat-Route für useChat
useChat von @ai-sdk/react postet standardmäßig an /api/chat. Diese Route antwortet darauf:
// 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();
}
Bewahren Sie den Schlüssel auf dem Server auf. Legen Sie ihn niemals in eine NEXT_PUBLIC_ Variable: Jeder könnte ihn von der Seite lesen und Ihr Guthaben ausgeben.
Deckeln, was ein Aufruf kosten kann
Chat-Anfragen akzeptieren provider.max_price (Dollar pro Million Tokens). Leiten Sie es über providerOptions unter dem von Ihnen gewählten Anbieter name weiter:
await generateText({
model: uberllm("deepseek/deepseek-v4.1-flash"),
prompt: "Hi",
providerOptions: { uberllm: { provider: { max_price: { prompt: 0.2, completion: 0.4 } } } },
});
Wenn niemand das Modell derzeit unter diesem Preis anbietet, wird der Aufruf mit max_price_exceeded abgelehnt und es wird nichts berechnet.
Fehlerbehebung
- 401
invalid_api_key: Der Schlüssel hat den Server nicht erreicht. Starten Sienext devneu, nachdem Sie.env.localbearbeitet haben, und prüfen Sie, obprocess.env.UBERLLM_API_KEYdort gesetzt ist, wo der Code ausgeführt wird (Server, nicht der Browser). - 402
insufficient_credits: Fügen Sie Guthaben auf der Guthabenseite hinzu. - 404
model_not_found: Die ID ist falsch oder ihr Ersteller fehlt. Kopieren Sie sie von der Modellseite. - 400
wrong_endpoint: Sie haben ein Bild- oder Videomodell anstreamTextübergeben. Bildmodelle laufen überuberllm.imageModel(…)mitgenerateImage; Video ist ein Job, siehe Video oder Bild erstellen. - Die Nutzung ist bei Streams leer: Setzen Sie
includeUsage: truebeim Anbieter, wie oben beschrieben.
Weiterlesen
- Die vollständige Referenz mit Tool-Aufrufen und Bildern: Vercel AI SDK-Dokumentation
- OpenAI-kompatibler Endpunkt erklärt
- Live LLM-Preise