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キーページで発行したキー |
| モデルID | cheapaimodel(modelId) | deepseek-v4-1-flash、またはモデルカタログにある任意のID |
設定
npm install ai @ai-sdk/openai-compatibleimport { 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, // ストリーミングのレスポンスでもトークン使用量を返す
});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")を渡します。
ストリーミング
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は文字列のモデル指定を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)を使ってください。