UberLLM과 함께 Vercel AI SDK를 사용하세요 (더 저렴한 모델, 동일한 코드)
@ai-sdk/openai-compatible`를 설치하고, `baseURL https://api.uberllm.dev/v1`와 `UberLLM key`로 `provider`를 생성한 다음, 현재 앱에서 `model`을 전달하는 모든 곳에 `uberllm("<model id>")`를 전달하세요. 앱의 다른 부분은 변경되지 않습니다.
단계
- 키 페이지]에서 키를 만들고 약간의 크레딧을 추가하세요 (계정은 $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 (백만 토큰당 달러)를 허용합니다. 선택한 공급자 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(…)을(를) 통해 처리됩니다; 비디오는 작업입니다. 비디오 또는 이미지 만들기를 참조하세요. - 스트림에서 사용량이 비어 있습니다: 위와 같이 공급자에
includeUsage: true을(를) 설정하세요.
계속 읽어보기
- 도구 호출 및 이미지를 포함한 전체 참조: Vercel AI SDK 문서
- OpenAI 호환 엔드포인트 설명
- 실시간 LLM 가격