ブログに戻る

APIとSDKガイド

カスタムベース URL で Vercel AI SDK を使用する:TypeScript で CheapTokens

createOpenAICompatible で Vercel AI SDK を CheapTokens に向けます:動作する generateText と streamText のスニペット、トークン使用量、一般的なエラーの修正。

投稿者: CheapTokens Team公開日 読了時間 6 分

createOpenAICompatible と CheapTokens のベース URL を含む Vercel AI SDK のコード
このページの内容
  1. インストールとプロバイダーの作成
  2. generateText:1つの回答とそのトークン数
  3. streamText:到着した単語を出力する
  4. 残りを触らずにモデルを切り替える
  5. 動作しない場合

Vercel AI SDK を CheapTokens で実行するには、@ai-sdk/openai-compatible をインストールし、baseURL: 'https://api.cheaptokens.dev/v1' とあなたのキーでプロバイダーを作成し、provider('deepseek-ai/DeepSeek-V4-Flash-0731') を model として渡します。アプリ内の他のすべて、generateText、streamText、プロンプトはそのままです。

つまり、AI SDK 経由でホストされたモデルと通信する Next.js ルートや Node スクリプトが既にある場合、変更するのは3つだけです。ベース URL、キー、モデル ID です。このガイドでは、セットアップを AI SDK の OpenAI 互換プロバイダーのページ(2026年10月29日)と照合して確認します。CheapTokens API の Chat Completions インターフェースを使用します。これはそのプロバイダーが話すインターフェースです。

インストールとプロバイダーの作成#

2つのパッケージ:コアの ai パッケージと OpenAI 互換プロバイダーです。

bash
npm install ai @ai-sdk/openai-compatible
export CHEAPTOKENS_API_KEY=ct_your_key_here

作業の順序は短いです:

順番に並べる

セットアップを整える

  1. 残高をチャージし、API キーを作成する
  2. キーを環境変数に入れる
  3. CheapTokens の baseURL でプロバイダーを作成する
  4. 完全なモデル ID を generateText に渡す

プロバイダー自体は createOpenAICompatible への1回の呼び出しです:

typescript
import { createOpenAICompatible } from '@ai-sdk/openai-compatible';

export const cheaptokens = createOpenAICompatible({
  name: 'cheaptokens',
  apiKey: process.env.CHEAPTOKENS_API_KEY,
  baseURL: 'https://api.cheaptokens.dev/v1',
  includeUsage: true,
});

name は自分のログ用のラベルにすぎません。includeUsage: true はストリーミング応答でもトークン数を要求します。これがないと、デフォルトは false のように動作します。cheaptokens('model-id') を呼び出すとチャットモデルが得られます。cheaptokens.chatModel('model-id') と cheaptokens.languageModel('model-id') も同じことをします。

リクエストの経路:あなたのアプリ、createOpenAICompatible、CheapTokens API
コードは AI SDK を呼び続けます。変わるのは下にあるプロバイダーだけです

モデル ID は完全なものでなければなりません:deepseek-ai/DeepSeek-V4-Flash-0731。deepseek-v4-flash-0731 のような短い名前は価格表に表示されるもので、API は受け付けません。何を入力すればよいかわからない場合は、GET /v1/models でモデルを一覧表示し、そこから ID をコピーしてください。

generateText:1つの回答とそのトークン数#

完全なスクリプトはこちらです。短い回答を要求し、テキストと usage オブジェクトの両方を出力します。

typescript
import { generateText } from 'ai';
import { cheaptokens } from './provider';

const result = await generateText({
  model: cheaptokens('deepseek-ai/DeepSeek-V4-Flash-0731'),
  prompt: 'Explain in two sentences what a base URL is.',
});

console.log(result.text);
console.log(result.usage);

npx tsx index.ts で実行します。回答は result.text に文字列として入り、result.usage にはその呼び出しの入力トークン数と出力トークン数が入ります。オブジェクト全体を出力するので、中身がすべて見えます。streamText の AI SDK リファレンス(2026年10月29日確認)では、usage に inputTokens、outputTokens、totalTokens があります。ダッシュボードに組み込む前に、インストールしたバージョンの型を確認してください。

なぜ usage を読むのでしょうか?それは支払う金額だからです。アプリが1,500トークンのプロンプトを送り、600トークンの回答を得たとします。そのリクエストは現在の価格で $0.000083 かかり、1,000回では次のようになります:

モデル リクエストあたり 1,000 リクエスト OpenRouter、1,000 リクエスト
GLM-5.3-Flash $0.000054 $0.054 $0.107
DeepSeek-V4-Flash $0.000083 $0.0825 $0.165
MiniMax-M2.7 $0.00017 $0.165 $1.17

リクエストあたり 1,500 入力トークンと 600 出力トークン。100万トークンあたりの価格は現行のもので、当社の料金体系に合わせて変動します。OpenRouter 列は同じワークロードの参考価格を示しています。

CheapTokens の列は合計(入力と出力を合わせて)で、表内のすべてのモデルで OpenRouter より安いです。usage を実行中の予算に変えたい場合は、エージェントのトークンコストの追跡で Python のアイデアを示しています。計算は TypeScript でも同じです。

streamText:到着した単語を出力する#

チャット UI では、モデルがまだ書いている間にテキストを表示したいものです。streamText はテキストチャンクの非同期イテラブルを返します。

typescript
import { streamText } from 'ai';
import { cheaptokens } from './provider';

const result = streamText({
  model: cheaptokens('deepseek-ai/DeepSeek-V4-Flash-0731'),
  prompt: 'Write a 100-word product description for a pocket notebook.',
});

for await (const chunk of result.textStream) {
  process.stdout.write(chunk);
}

console.log('\n', await result.usage);

streamText(...) の前に await がないことに注意してください。すぐに返り、ストリームを消費します。usage はストリームが終了したときに解決されるプロミスなので、ループの後に await します。Next.js のルートハンドラーでは、stdout に書き込む代わりにストリームをブラウザに返します。プロバイダー部分は同じです。同じことを素の OpenAI SDK で行いたい場合は、Node.js でのストリーミングチャット応答を参照してください。

長い回答もここでは問題ありません。CheapTokens の DeepSeek-V4-Flash は1回の回答で最大32,768トークンを書き込め、380K のコンテキストウィンドウを持ち、時間帯に関係なく1つの価格です。モデルページは /en/cheap-deepseek/ にあり、現在の価格は価格ページにあります。

残りを触らずにモデルを切り替える#

変わるのはモデル ID だけなので、別のモデルを試すのは1行の編集です。GLM-5.3-Flash は390K のコンテキストウィンドウを持ち、最大8,192トークンまで回答します。現在の価格では、100万入力トークンあたり $0.02、100万出力トークンあたり $0.04 です。

自分で試す試してみましょう:同じスクリプトを GLM-5.3-Flash で実行するには、どの行を変更しますか?答えを表示

モデル ID だけです:cheaptokens('zai-org/GLM-5.3-Flash')。プロバイダー、キー、baseURL、スクリプトの残りは同じままです。

便利なパターンは、ID を環境変数(process.env.MODEL_ID)に保持して、再ビルドなしで同じプロンプトで2つのモデルを比較できるようにすることです。DeepSeek vs GLM vs MiniMax の比較は、どれを試す価値があるかを選ぶのに役立ちます。

動作しない場合#

ほとんどの失敗は3つのうちの1つです:キー、URL、モデル ID。

  • 401 はキーが欠落しているか間違っていることを意味します。スクリプトを実行するシェルで CHEAPTOKENS_API_KEY が設定されていることを確認してください(Next.js サーバーでは .env.local に設定し、再起動が必要です)。
  • 404 は通常、baseURL から /v1 が失われたか、モデル ID が短い名前であることを意味します。https://api.cheaptokens.dev/v1 と完全な ID を使用してください。
  • 回答が途中で止まる。 モデルが出力制限に達しました。finish_reason "length" の修正で説明しています。

最初の2つについてのより長いウォークスルーは、API 401 または 404:間違ったキー、ベース URL、モデル IDにあります。

チェックリスト

スクリプトを実行する前に

他のツールの接続と最初の手動リクエストについては、CheapTokens ドキュメントから始めてください。