신규어떤 에이전트든 UberLLM에 연결하세요. 키 하나로 모든 모델을 공식 가격 이하로 사용할 수 있습니다.
UberLLM

UberLLM과 함께 Vercel AI SDK를 사용하세요 (더 저렴한 모델, 동일한 코드)

@ai-sdk/openai-compatible`를 설치하고, `baseURL https://api.uberllm.dev/v1`와 `UberLLM key`로 `provider`를 생성한 다음, 현재 앱에서 `model`을 전달하는 모든 곳에 `uberllm("<model id>")`를 전달하세요. 앱의 다른 부분은 변경되지 않습니다.

단계

  1. 키 페이지]에서 키를 만들고 약간의 크레딧을 추가하세요 (계정은 $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/…). 그렇게 하면 하나의 키로 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을(를) 설정하세요.

계속 읽어보기

앱에 적합한 `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

마지막 시간별 빌드 기준 가격, 수수료 없음 · 전체 모델 →

FAQ

`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 프로바이더로 Claude, GPT, Gemini를 포함한 UberLLM의 모든 챗 모델에 모델 ID로 접근할 수 있습니다.

`AI SDK`로 동영상을 만들 수 있나요?

@ai-sdk/openai-compatible을 통해서는 불가능합니다. 해당 프로바이더는 비디오 모델을 지원하지 않습니다. UberLLM에서 비디오는 작업(job)으로 처리됩니다. 미디어 문서에 나와 있는 대로 POST /v1/video/generations를 사용하여 작업을 시작하고 진행 상황을 확인하세요.