UberLLMでVercel AI SDKを使用(より安価なモデル、同じコード)
@ai-sdk/openai-compatible`をインストールし、`baseURL https://api.uberllm.dev/v1`とあなたの`UberLLM key`でプロバイダーを作成し、現在あなたの`app`が`model`を渡している箇所で`uberllm("<model id>")`を渡してください。`app`の他の部分は何も変更されません。
手順
- keys page]でキーを作成し、少しクレジットを追加します(アカウントは$0から開始します)。
- プロバイダーをインストールします:
npm i ai @ai-sdk/openai-compatible
- キーを
.env.local(Next.js)またはサーバーの環境に配置します:
UBERLLM_API_KEY=ull_your_key
- プロバイダーを一度作成します、例えば
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
});
- 以前モデルを使用していた場所でそれを使用します:
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を設定してください。
もっと読む
- ツール呼び出しと画像を含む完全なリファレンス: Vercel AI SDK ドキュメント
- OpenAI互換エンドポイントの解説
- リアルタイムLLM価格