ブログに戻る

はじめにガイド

OpenRouter から CheapTokens への切り替え: base_url、キー、モデル id

OpenAI SDK(Python と JavaScript)で base_url、API キー、モデル id を変更し、最初のリクエストを送って動作したか確認します。

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

カバー: base_url、キー、モデル id を変更して OpenAI SDK アプリを OpenRouter から CheapTokens に切り替える
このページの内容
  1. 実際に変わるもの
  2. 切り替え後のコード
  3. 動作したか確認する
  4. どのモデルが何を置き換えるか
  5. 同じトラフィックのコスト
  6. うまくいかない場合
  7. 出荷前に

あなたのアプリはすでに OpenAI SDK 経由で OpenRouter を呼び出していますが、それを CheapTokens の呼び出しに変えたいとします。変更するのは3つの値 — base_url、API キー、そして model の id — だけで、さらに任意のヘッダーを2つ削除します。残りのコードはそのままです。

以下に Python、JavaScript、curl の正確な行、切り替えが成功したかを素早く確認する方法、そしてどのモデルがどの作業に向くかの表を示します。CheapTokens にリクエストを送ったことがない場合は、最初の API リクエストガイドでアカウントとキーについて説明しており、ドキュメントには完全なリファレンスがあります。

実際に変わるもの#

OpenRouter のクイックスタート(2026年10月27日確認)では、OpenAI クライアントをベース URL https://openrouter.ai/api/v1 で設定し、モデルを provider/model-name として指定します。CheapTokens は https://api.cheaptokens.dev/v1 で同じ OpenAI Chat Completions 形式を話します。つまり、クライアントクラス、chat.completions.create、そして回答の読み取り方は変わりません。

ビフォーアフター: OpenRouter から CheapTokens に切り替えるときに変わる3つの値
入れ替える3つの値。キーは環境変数として示し、コードには決して書かない。

行ごとに1か所の入れ替えです:

  • ベース URL — OpenRouter のアドレスの代わりに https://api.cheaptokens.dev/v1。
  • API キー — CheapTokens アカウントのキーを環境変数から読み取る。
  • モデル id — 完全な CheapTokens id、たとえば deepseek-ai/DeepSeek-V4-Flash-0731。id は CheapTokens のドキュメントから取得してください。プロバイダーによって同じモデルの名前が異なり、価格ラベルの短い id は受け付けられません。

そして削除が1つ。OpenRouter の HTTP-Referer と X-OpenRouter-Title ヘッダーは任意で、OpenRouter のリーダーボードに供給するだけです。default_headers / defaultHeaders から削除してください。ここでは必要ありません。

切り替え後のコード#

同じリクエストを3つのランタイムで。アプリが使うものを選んでください。

切り替え後のコード

Python

python
import os
from openai import OpenAI

client = OpenAI(
    base_url='https://api.cheaptokens.dev/v1',
    api_key=os.environ['CHEAPTOKENS_API_KEY'],
)

resp = client.chat.completions.create(
    model='deepseek-ai/DeepSeek-V4-Flash-0731',
    messages=[{'role': 'user', 'content': 'Reply with one word: ready'}],
    max_tokens=20,
)
print(resp.choices[0].message.content)

JavaScript

javascript
import OpenAI from 'openai';

const client = new OpenAI({
  baseURL: 'https://api.cheaptokens.dev/v1',
  apiKey: process.env.CHEAPTOKENS_API_KEY,
});

const resp = await client.chat.completions.create({
  model: 'deepseek-ai/DeepSeek-V4-Flash-0731',
  messages: [{ role: 'user', content: 'Reply with one word: ready' }],
  max_tokens: 20,
});
console.log(resp.choices[0].message.content);

curl

bash
curl https://api.cheaptokens.dev/v1/chat/completions \
  -H "Authorization: Bearer $CHEAPTOKENS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "deepseek-ai/DeepSeek-V4-Flash-0731", "messages": [{"role": "user", "content": "Reply with one word: ready"}], "max_tokens": 20}'

実行する前にもう1つ。リクエストに OpenRouter 専用のフィールド — ルーティングやフォールバックのリスト、プロバイダー設定、~alias モデル id — が含まれている場合、それらは OpenRouter のものです。リクエストは標準の Chat Completions フィールドに留めてください: model、messages、temperature、max_tokens、stream。

動作したか確認する#

返信だけでは十分な証拠になりません。返信の横に3つのことを出力してください: どのモデルが答えたか、なぜ停止したか、そしてトークンでいくら課金されたか。

python
print(resp.model)
print(resp.choices[0].finish_reason)
print(resp.usage.prompt_tokens, resp.usage.completion_tokens)
ターミナルで環境とチェックスクリプトを実行
キーを一度設定し、チェックを実行し、model、finish_reason、usage を読む。

stop の finish_reason はモデルが自力で終了したことを意味します。length は max_tokens が回答を打ち切ったことを意味します。usage は入力トークンと出力トークンを別々に示し、これらが請求の基になる2つの数値です — OpenRouter で追跡していたのと同じ2つです。

自分で試す試してみてください: max_tokens を 1 に設定すると finish_reason は何と言うでしょうか?答えを表示

length と表示されます — 回答は max_tokens によって打ち切られました。切り詰められた返信をコードが処理できるかの良いテストです。

どのモデルが何を置き換えるか#

モデルは OpenRouter で使っていた名前ではなく、作業内容で選んでください。以下の事実は2026年10月27日確認の CheapTokens 価格表によるものです。1つの残高で3つのモデルすべてをカバーし、価格は時間帯によって変わりません。

モデル model id コンテキスト 最大回答
DeepSeek-V4-Flash deepseek-ai/DeepSeek-V4-Flash-0731 380K 32,768 トークン
GLM-5.3-Flash zai-org/GLM-5.3-Flash 390K 8,192 トークン
MiniMax-M2.7 MiniMaxAI/MiniMax-M2.7 180K 8,192 トークン

どの行が自分に当てはまるかわからない場合は、アプリが何をするかから始めてください:

ケースを選ぶ

あなたのアプリは主に何をしますか?

短く頻繁なリクエスト — 分類、抽出、サポート返信

zai-org/GLM-5.3-Flash を試してください: 390K コンテキスト、最大 8,192 トークンの回答、そして入力と出力を合計すると OpenRouter より安価です。

長い回答、コード、エージェントループ

deepseek-ai/DeepSeek-V4-Flash-0731 を試してください: 最大 32,768 トークンの回答、380K コンテキスト、1日中のどの時間帯でも同一価格。

現在 OpenRouter の高い料金を払っている安定したワークロード

MiniMaxAI/MiniMax-M2.7 を試してください: 180K コンテキスト、最大 8,192 トークンの回答、そして合計で OpenRouter より安くなります。

同じトラフィックのコスト#

ボットが1,000件のリクエストを送り、それぞれ入力約500トークン、出力300トークンだとします。これは仮定です — usage から自分の数値に置き換えてください。以下の表はライブです: 当社の価格と OpenRouter 列は現在の価格表によるもので、入力と出力を合計しています。

モデル リクエストあたり 1,000 リクエスト OpenRouter、1,000 リクエスト
GLM-5.3-Flash $0.000022 $0.022 $0.0434
DeepSeek-V4-Flash $0.000038 $0.0375 $0.0708
MiniMax-M2.7 $0.00007 $0.07 $0.51

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

DeepSeek-V4-Flash では、その1,000件のリクエストは $0.0375 になります。完全な価格は価格ページにあり、何に対して課金されるかの考え方は入力トークンと出力トークンにあります。

うまくいかない場合#

切り替え後、3つのエラーでほとんどの問題をカバーできます。メッセージを原因と照合してください:

ペアを合わせる

各症状を原因と照合する

  • 401 Unauthorizedキーが欠落している、打ち間違えている、またはまだ OpenRouter のもの
  • 404 Not Foundベース URL のパスが間違っている、またはモデル id が完全な CheapTokens id でない
  • 返信が途中で切れるmax_tokens が回答に必要な量より少ない。finish_reason が length と言っている

401 と 404 のトラブルシューティング記事では正確なメッセージとともにそれぞれを説明しており、base_url とは何かではスラッシュ1つの誤りがなぜパスを壊すのかを説明しています。

出荷前に#

チェックリスト

切り替えチェックリスト