使用 Vercel AI SDK 搭配 UberLLM (更便宜的模型,相同的代码)
安装 @ai-sdk/openai-compatible,使用 baseURL https://api.uberllm.dev/v1 和您的 UberLLM key 创建一个 provider,然后在您的应用今天传递模型的地方传递 uberllm("<model id>")。应用中的其他部分无需更改。
步骤
- 在您的 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/…)。这就是您如何使用一个密钥运行 GPT、Claude、Gemini 和开源模型,并通过更改一个字符串来比较它们。
一个用于 useChat 的 Next.js 聊天路由
useChat 默认情况下从 @ai-sdk/react 发布到 /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_ 变量中:任何人都可以从页面读取它并花费您的余额。
限制单次调用的成本
聊天请求接受 provider.max_price (每百万 token 的美元价格)。将其传递给在你选择的提供商 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。图像模型通过uberllm.imageModel(…)和generateImage处理;视频是一项任务,请参阅制作视频或图像]。 - 流式传输时使用量为空:在提供商处设置
includeUsage: true,如上所述。
继续阅读
- 包含工具调用和图片的完整参考:Vercel AI SDK doc
- OpenAI 兼容端点说明
- 实时 LLM 价格