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

OpenAI互換プロバイダーで、Vercel AI SDKからcheapaimodelのモデルを使います。



AI SDKは、`@ai-sdk/openai-compatible`プロバイダーでOpenAI互換サービスに接続します。cheapaimodel用のプロバイダーを1つ作成し、そのモデルを`generateText`、`streamText`などのAI SDK関数に渡します。

|          | AI SDKの設定項目             | 値                                                             |
| -------- | ----------------------- | ------------------------------------------------------------- |
| Base URL | `baseURL`               | `https://api.cheapaimodel.ai/v1`                              |
| APIキー    | `apiKey`                | コンソールの[APIキー](https://console.cheapaimodel.ai/keys)ページで発行したキー |
| モデルID    | `cheapaimodel(modelId)` | `deepseek-v4-1-flash`、または[モデルカタログ](/ja/models)にある任意のID        |

## 設定 [#set-it-up]

```bash title="ターミナル"
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, // ストリーミングのレスポンスでもトークン使用量を返す
});
```

```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でも使い方は同じで、`model`に`cheapaimodel("deepseek-v4-1-flash")`を渡します。

## ストリーミング [#streaming]

```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);
```

## よくある間違い [#common-mistakes]

* **`Unauthenticated request to AI Gateway.`** `model: "deepseek-v4-1-flash"`のように、モデルを単なる文字列で渡しています。AI SDKは文字列のモデル指定をcheapaimodelではなくVercel AI Gatewayに送ります。`cheapaimodel("deepseek-v4-1-flash")`を渡してください。
* **`Not Found`または`Invalid URL (POST /v1/chat/completions/chat/completions)`。** `baseURL`に`/v1`がないか、エンドポイントのパスまで含めています。`baseURL`は`https://api.cheapaimodel.ai/v1`に設定してください。`/chat/completions`はプロバイダーが自動で付加します。
* **ストリーミングの呼び出しでトークン使用量が`undefined`になる。** OpenAI互換プロバイダーがストリーミングで使用量を要求するのは、`includeUsage: true`を設定した場合だけです。プロバイダーの設定から削除しないでください。
* **`@ai-sdk/openai`でマルチターン会話が動作しない。** `@ai-sdk/openai`の`createOpenAI`にもcheapaimodelのBase URLを設定できますが、デフォルトの`openai(modelId)`はResponses APIを呼び出します。SDKが返した過去の返答を`messages`に入れて渡すと、本文ではなく`item_reference`のIDとして送られるため、サーバー側にそのレスポンスが保存されていないと動作しません。上記のOpenAI互換プロバイダーか、`openai.chat(modelId)`を使ってください。
