# Vercel AI SDK (/zh-Hant/docs/guides/vercel-ai-sdk)

透過 OpenAI 相容供應商，在 Vercel AI SDK 中使用 cheapaimodel 的模型。



AI SDK 透過 `@ai-sdk/openai-compatible` 供應商連接 OpenAI 相容的服務。為 cheapaimodel 建立一個供應商，再把它的模型傳給 `generateText`、`streamText` 與其他 AI SDK 函式。

|          | AI SDK 設定               | 值                                                               |
| -------- | ----------------------- | --------------------------------------------------------------- |
| Base URL | `baseURL`               | `https://api.cheapaimodel.ai/v1`                                |
| API Key  | `apiKey`                | 在控制台的 [API Key](https://console.cheapaimodel.ai/keys) 頁面建立的 Key |
| 模型 ID    | `cheapaimodel(modelId)` | `deepseek-v4-1-flash`，或[目錄](/zh-Hant/models)中的任一模型 ID           |

## 設定 [#設定]

```bash title="Terminal"
npm install ai @ai-sdk/openai-compatible
```

```ts title="cheapaimodel.ts"
import { createOpenAICompatible } from "@ai-sdk/openai-compatible";

export const cheapaimodel = createOpenAICompatible({
  name: "cheapaimodel",
  baseURL: "https://api.cheapaimodel.ai/v1",
  apiKey: process.env.CHEAPAIMODEL_API_KEY,
  includeUsage: true, // token usage on streamed responses
});
```

```ts title="generate.ts"
import { generateText } from "ai";
import { cheapaimodel } from "./cheapaimodel";

const { text } = await generateText({
  model: cheapaimodel("deepseek-v4-1-flash"),
  prompt: "Explain recursion in one sentence.",
});
console.log(text);
```

這個供應商會把請求送往 `/v1/chat/completions`。在 Next.js 的 route handler 中用法相同：把 `cheapaimodel("deepseek-v4-1-flash")` 傳給 `model`。

## 串流 [#串流]

```ts title="stream.ts"
import { streamText } from "ai";
import { cheapaimodel } from "./cheapaimodel";

const result = streamText({
  model: cheapaimodel("deepseek-v4-1-flash"),
  prompt: "Write a haiku about rivers.",
});

for await (const chunk of result.textStream) {
  process.stdout.write(chunk);
}
console.log("\nTokens:", (await result.usage).totalTokens);
```

## 常見錯誤 [#常見錯誤]

* **`Unauthenticated request to AI Gateway.`** 模型以純字串傳入，例如 `model: "deepseek-v4-1-flash"`。AI SDK 會把純字串的模型送往 Vercel AI Gateway，而不是 cheapaimodel。請改為傳入 `cheapaimodel("deepseek-v4-1-flash")`。
* **`Not Found` 或 `Invalid URL (POST /v1/chat/completions/chat/completions)`。** `baseURL` 漏了 `/v1`，或寫入了端點路徑。請設為 `https://api.cheapaimodel.ai/v1`，供應商會自行加上 `/chat/completions`。
* **串流呼叫的 token 用量是 `undefined`。** OpenAI 相容供應商只有在設定 `includeUsage: true` 時，才會在串流中要求回傳用量。請在供應商設定中保留這一項。
* **透過 `@ai-sdk/openai` 進行多輪對話。** 它的 `createOpenAI` 也接受我們的 Base URL，但預設的 `openai(modelId)` 呼叫的是 Responses API；當你把 SDK 先前的回覆放回 `messages` 時，它會以 `item_reference` ID 而非原文傳送這些回覆，只有伺服器保存了那些回應時才行得通。請使用上方的 OpenAI 相容供應商，或改用 `openai.chat(modelId)`。
