新着どんなエージェントもUberLLMにつなぐだけ。1つのキーで全モデル、定価以下で。
UberLLM

UberLLMでVercel AI SDKを使用(より安価なモデル、同じコード)

@ai-sdk/openai-compatible`をインストールし、`baseURL https://api.uberllm.dev/v1`とあなたの`UberLLM key`でプロバイダーを作成し、現在あなたの`app`が`model`を渡している箇所で`uberllm("<model id>")`を渡してください。`app`の他の部分は何も変更されません。

手順

  1. keys page]でキーを作成し、少しクレジットを追加します(アカウントは$0から開始します)。
  2. プロバイダーをインストールします:
npm i ai @ai-sdk/openai-compatible
  1. キーを.env.local (Next.js)またはサーバーの環境に配置します:
UBERLLM_API_KEY=ull_your_key
  1. プロバイダーを一度作成します、例えば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. 以前モデルを使用していた場所でそれを使用します:
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.",
});

@ai-sdk/openai をすでに使用しているアプリの移行

モデル引数を入れ替えるだけで、他はすべてそのままです。

// 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");

モデルIDは、uberllm.dev/models に記載されているIDで、常にメーカー名が先頭に付きます (openai/…, anthropic/…, deepseek/…)。こうすることで、1つのキーでGPT、Claude、Gemini、オープンモデルを実行し、1つの文字列を変更するだけでそれらを比較できます。

useChat用のNext.jsチャットルート

@ai-sdk/reactからuseChatがデフォルトで/api/chatに投稿します。このルートがそれに答えます:

// 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();
}

キーはサーバーに保管してください。NEXT_PUBLIC_変数には絶対に入れないでください:誰でもページから読み取って、あなたの残高を使ってしまう可能性があります。

1回の呼び出し費用の上限を設定

チャットリクエストは、provider.max_price (100万トークンあたりのドル) を受け付けます。選択したプロバイダー name に対して、providerOptions で指定してください。

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

もし現在、その価格以下でモデルを提供しているプロバイダーがいない場合、呼び出しは max_price_exceeded で拒否され、料金は一切発生しません。

トラブルシューティング

  • 401 invalid_api_key: キーがサーバーに到達しませんでした。.env.localを編集した後、next devを再起動し、コードが実行される場所(ブラウザではなくサーバー)でprocess.env.UBERLLM_API_KEYが設定されていることを確認してください。
  • 402 insufficient_credits: クレジットページでクレジットを追加してください。
  • 404 model_not_found: IDが間違っているか、作成者が指定されていません。モデルのページからコピーしてください。
  • 400 wrong_endpoint: streamTextに画像または動画モデルを渡しました。画像モデルはgenerateImageを使ってuberllm.imageModel(…)を経由します。動画はジョブです。動画または画像を作成するを参照してください。
  • Usage is empty on streams: 上記のように、プロバイダーでincludeUsage: trueを設定してください。

もっと読む

`app`に適した`model`

これらはすべてtool callsに対応しています。最初のものは以下のコードにあります。

モデルモデルID(これを貼り付け)現在の料金
DeepSeek V4.1 Flashdeepseek/deepseek-v4.1-flash入力 $0.00022 · 出力 $0.0025 / 1M
Gemini 3.5 Flashgoogle/gemini-3.5-flash入力 $0.0150 · 出力 $0.0900 / 1M
Claude Sonnet 5.5anthropic/claude-sonnet-5.5入力 $0.0674 · 出力 $0.3369 / 1M
GPT-5.5openai/gpt-5.5入力 $0.1250 · 出力 $0.7500 / 1M
Kimi K3moonshotai/kimi-k3入力 $0.0017 · 出力 $0.0781 / 1M
GLM 5.3z-ai/glm-5.3入力 $0.00052 · 出力 $0.0234 / 1M
Gemma 3 27Bgoogle/gemma-3-27b-it入力 $0.00079 · 出力 $0.0020 / 1M
Qwen3 VL 235B A22Bqwen/qwen3-vl-235b-a22b-instruct入力 $0.0021 · 出力 $0.0188 / 1M

直近の毎時ビルド時点の料金、手数料なし · すべてのモデル →

よくある質問

`Vercel AI SDK`は`UberLLM`で動作しますか?

はい。公式の@ai-sdk/openai-compatibleプロバイダーをbaseURL https://api.uberllm.dev/v1とUberLLMキーで使用してください。generateText、streamText、useChat、tool calls、generateImageが動作します。

`@ai-sdk/openai`や`@ai-sdk/anthropic`も必要ですか?

いいえ。一つの@ai-sdk/openai-compatibleプロバイダーで、モデルIDを指定することで、Claude、GPT、Geminiを含むUberLLM上のすべてのチャットモデルにアクセスできます。

`AI SDK`で動画を作成できますか?

@ai-sdk/openai-compatible経由ではできません。これにはビデオモデルがありません。UberLLMでは、ビデオはジョブとして扱われます。メディアドキュメントに示されている通り、POST /v1/video/generationsで開始し、その状況を確認してください。