各リクエストに対して Auto、TokenLab Verified、または Official を選択でき、価格は事前に表示されます。新機能を見る

5分でOpenAIからTokenLabへ移行する方法

·2026年9月19日·約 6 分で読了·更新日 2026年10月2日·3143 回表示
#チュートリアル#移行#OpenAI#入門
5分でOpenAIからTokenLabへ移行する方法

ベースURLの変更はプロバイダー移行における簡単な部分に過ぎません。移行が失敗するのは、障害発生時の挙動(failure paths)です。OpenAIからTokenLabへ移行するには、OpenAI SDKクライアントのbase_urlとapi_keyという2つの値を変更します。本ガイドの残りの部分では、この変更に伴って確認すべき事項を解説します。具体的には、送信するモデルID、現在の価格、ストリーミング、ツール呼び出し、エラーハンドリング、タイムアウト、および課金についてです。以下の事実はTokenLabのドキュメントおよびライブモデルAPIに基づいており、それぞれ観測日を記載しています。

重要なポイント

  • 変更の核心は、TokenLabのベースURL https://api.tokenlab.sh/v1 とTokenLab APIキー(sk-で始まります)の2つの値です。
  • TokenLabは、Chat CompletionsおよびResponsesに対するOpenAI SDKのサポートを文書化しています。オプションパラメータ、ツールオプション、およびResponses専用フィールドは、引き続き選択したモデルに依存します。
  • 何かを決定する前に、ライブAPIからモデルの価格を確認してください。2026年10月3日時点で、gpt-5.5は100万トークンあたり入力1.50ドル、出力9.00ドルと記載されていました。
  • 本番環境のトラフィックを移行する前に、末尾のチェックリストを実行してください。ほとんどの予期せぬ事態は、正常系ではなく、エラーハンドリング、タイムアウト、課金で発生します。

OpenAIからTokenLabへ移行するための2つの値の変更

まずはキーから始めます。クイックスタート(2026年10月3日観測)に従い、アカウントを作成し、APIキーを作成して、その値をすぐに保存してください。キーは一度しか表示されず、キーリスト内のプレフィックスではリクエストを認証できません。リクエストは選択したモデルの現在の価格で課金されるため、最初の呼び出しの前に残高を確認してください。

次にクライアントを変更します。移行ガイド(2026年10月3日観測)では、手順は以下の通りです:base_url / baseURL を https://api.tokenlab.sh/v1 に設定し、キーを置き換え、GET /v1/models からモデルIDを選択します。

例えば、設定内に gpt-5.5 という文字列を持つサービスを想定します。2つの値を変更した後、その同じ文字列でリクエストが可能になりますが、念のためIDを先に確認することをお勧めします。GET /v1/models および GET /v1/models/{model} は公開されている探索用エンドポイントであり、キーなしで動作します。

Python

import os
from openai import OpenAI

# 変更前: client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
client = OpenAI(
    api_key=os.environ["TOKENLAB_API_KEY"],
    base_url="https://api.tokenlab.sh/v1",
    timeout=30.0,
    max_retries=0,
)

response = client.chat.completions.create(
    model="gpt-5.5",
    messages=[{"role": "user", "content": "Hello, world!"}],
)
print(response.choices[0].message.content)

Node.js

import OpenAI from 'openai';

// 変更前: new OpenAI({ apiKey: process.env.OPENAI_API_KEY })
const client = new OpenAI({
  apiKey: process.env.TOKENLAB_API_KEY,
  baseURL: 'https://api.tokenlab.sh/v1',
  timeout: 30_000,
  maxRetries: 0,
});

const completion = await client.chat.completions.create({
  model: 'gpt-5.5',
  messages: [{ role: 'user', content: 'Hello' }],
});
console.log(completion.choices[0].message.content);

cURL

curl https://api.tokenlab.sh/v1/chat/completions \
  -H "Authorization: Bearer $TOKENLAB_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"gpt-5.5","messages":[{"role":"user","content":"Say hello"}]}'

最初の2つのサンプルにおけるタイムアウトとリトライの設定は、30秒のタイムアウトとSDKリトライ回数ゼロを使用するクイックスタートの例(2026年10月3日観測)を反映しています。テスト中はリトライをゼロに保つことで、失敗したリクエストが隠蔽されず、可視化されるようにしています。

クライアント設定でベースURLを明示的に渡してください。SDKガイド(2026年10月3日観測)では、古い環境変数のエイリアスに頼るよりも、この方法を推奨しています。キーはサーバー上およびシークレットマネージャー内に保持し、クライアント側のコードには決して含めないでください。

モデルIDの選択と価格の確認

移行にあたっては、モデルIDや価格を決め打ちすべきではありません。どちらもモデルAPIに存在します。2026年10月3日に https://api.tokenlab.sh/v1/models/gpt-5.5 および https://api.tokenlab.sh/v1/models/laguna-s-2.1 を読み取りました。両者の価格は2026年10月2日 16:53:30.068Zに最終更新されています。

項目 gpt-5.5 laguna-s-2.1
ライフサイクルステージ active active
最大入力 / 出力トークン 1,000,000 / 128,000 1,048,576 / 131,072
受け入れ可能なリクエスト形式 openai_chat_completions, openai_responses openai_chat_completions
リストされた機能 coding, json-mode, prompt-cache, reasoning, tool-use, vision tool-use
入力 (USD / 100万トークン) 1.5 0.1
出力 (USD / 100万トークン) 9 0.2
キャッシュ読み取り (USD / 100万トークン) 0.15 0.01

出典: gpt-5.5 および laguna-s-2.1(いずれも2026年10月3日観測)。

これらのレートを具体的な金額に換算するため、計算例を示します。100万入力トークンと10万出力トークンを使用し、キャッシュヒットがないジョブを想定します。

  • gpt-5.5: 1 × $1.50 + 0.1 × $9.00 = $1.50 + $0.90 = $2.40
  • laguna-s-2.1: 1 × $0.10 + 0.1 × $0.20 = $0.10 + $0.02 = $0.12

これらはリストされたトークンあたりのレートに基づく見積もりです。最終的な請求額は「使用量(Usage)」レコードに基づきます。トークン化はモデルによって異なるため、同じテキストでもモデルによってトークン数が異なります。

ここではコスト削減を主張するものではありません。現在支払っている金額と比較するには、切り替え日にTokenLabのレートを自身のOpenAI請求書やOpenAIの価格ページと並べて比較してください。価格は変動するため、課金ガイド(2026年10月3日観測)では、コピーした価格表をハードコードしないよう注意を促しています。最新の値については GET /v1/models/:model/pricing を参照してください。

他のモデルIDも同様のパターンに従います。ドキュメントの例では、Chat Completions用に gpt-5.6-terra および gpt-5.6-luna が、独自のルートで claude-sonnet-5 および gemini-3.5-flash が使用されています。トラフィックを向ける前に、各モデルが受け入れる形式を確認してください。より広範な比較については、モデルディレクトリ、OpenRouterとTokenLabの比較、およびモデルランキングを参照してください。画像および動画チームは、2026年版ベストAI画像モデルAPIおよび2026年版ベストAI動画モデルAPIから開始できます。コーディングタスクについては、コーディング向けベストAIモデルを参照してください。

OpenAIからTokenLabへの移行時に次に確認すべきこと

TokenLabは、OpenAI SDKがChat CompletionsおよびResponsesで動作することを文書化しています。これはリクエストおよびレスポンス形式の互換性を意味するものであり、すべてのモデルが同じ挙動をすることを保証するものではありません。API形式ガイド(2026年10月3日観測)では、オプションパラメータはモデルに依存すると述べられています。また、モデルが必ずしも4つのAPI形式すべてを受け入れるわけではなく、tokenlab.accepted_request_formats で受け入れ可能な形式を確認できるとも記載されています。以下の各項目を、実際のトラフィックでテストすべき対象として扱ってください。

ストリーミング

stream: true は、部分的なメッセージデルタをサーバー送信イベント(SSE)として送信します。Create Chat Completionリファレンス(2026年10月3日観測)に記載されている通り、ストリームチャンク内でトークン使用量を受け取るには、stream_options に include_usage: true を設定してください。

stream = client.chat.completions.create(
    model="gpt-5.5",
    messages=[{"role": "user", "content": "Count to five."}],
    stream=True,
    stream_options={"include_usage": True},
)
for chunk in stream:
    if chunk.choices:
        print(chunk.choices[0].delta.content or "", end="")

計画しておくべき挙動が2つあります。出力が到着した後にストリームが中断された場合、それを完全なレスポンスとして扱わないでください。エラーハンドリングガイド(2026年10月3日観測)では、再試行すると異なる出力が生成されたり、2回目の課金が発生したりする可能性があると警告しています。また、ストリーミングは課金処理よりも先に終了する可能性があるため、課金IDが存在しない場合があります。

ツール呼び出し

Chat Completionsリファレンスには tools、tool_choice、および parallel_tool_calls がリストされています。並列呼び出しは「選択したモデルでサポートされている場合」に機能するとあります。関数呼び出しは「選択したモデルでサポートされている」と文書化されているため、機能リストを確認してください。上記の表では、gpt-5.5 と laguna-s-2.1 の両方が tool-use をリストしていますが、json-mode と vision をリストしているのは gpt-5.5 のみです。玩具のような例ではなく、実際のツールスキーマを送信し、返された引数がパースできることを確認してください。

Claudeモデルを呼び出す予定がある場合は、移行ガイドのルールに注意してください。Claudeのツール呼び出し、思考ブロック、およびAnthropicメッセージフィールドは /v1/messages に属しており、Chat Completionsでは保証されません。

エラー形状

Chat CompletionsおよびResponsesは、OpenAI形式の error オブジェクトを返します。エラーハンドリングガイドによると、常に存在するのは message と type のみです。code、param、retryable、retry_after などのフィールドは、関連する場合にのみ表示されます。メッセージテキストではなく、HTTPステータスと code で分岐し、パーサーが欠落しているフィールドを許容するようにしてください。Anthropic MessagesとGeminiは独自の形式を維持しているため、1つのパーサーですべてのルートをカバーすることはできません。

ステータス コード 意味
401 invalid_api_key キーが欠落している、無効、非アクティブ、または取り消されている
401 expired_api_key キーの有効期限が切れている
402 insufficient_balance アカウント残高がリクエストをカバーできない
402 quota_exceeded キー自体の使用制限に達した
403 model_not_allowed このキーでは要求されたモデルを使用できない
429 rate_limit_exceeded リクエストが多すぎます。Retry-After を待機してください

出典: 認証 および エラーハンドリング(2026年10月3日観測)。

この表は一般的な誤解を正すものです。残高不足は401ではなく402です。現在のコードがすべての4xxを不正なキーとして扱っている場合は、更新してください。

タイムアウトとリトライ

移行ガイドによると、既存のリトライ、タイムアウト、ストリーミングコードは通常そのまま使用できます。文書化されたリトライルールと照らし合わせて確認してください。

  • 400、401、402、403、404、または413のレスポンスをそのまま繰り返さないでください。
  • 429はサーバーが提供する遅延後にリトライしてください。
  • 500〜504は retryable が true の場合のみリトライし、retry_after を尊重してください。
  • 503 all_channels_failed は retryable: false で返されることがあります。その場合、選択した配信ティアに供給がないため、繰り返しても効果はありません。

レスポンスヘッダーからリクエストIDをモデルおよび自身のジョブIDと共に保存してください。調査に必要な情報です。

課金

課金ガイドによると、サブスクリプションや最低利用料金はなく、1つの残高がすべてのモデルで共有されます。完了した各リクエストは、それを生成した配信オプションに対して1回課金されます。オプションには TokenLab Verified、Official、Auto があり、Auto はまず Verified を試行し、次に Official を試行します。強制終了が必要な場合は、各APIキーに支出制限を設定してください。制限に達すると、そのキーを使用したリクエストは402を返します。

ストリーミングではないOpenAI互換レスポンスには、レスポンスが送信される前に課金が完了した場合、billing_transaction_id が含まれます。これは X-Billing-Transaction-ID ヘッダーにも表示される場合があります。これを保存し、独自のトークン計算ではなく「使用量(Usage)」ページと照合してください。

OpenAIからTokenLabへの移行後の検証チェックリスト

本番環境のトラフィックを移行する前に、ステージングキーに対して以下の手順を順番に実行してください。各行は上記の文書化された挙動に対応しています。

ステップ 実行内容 期待される結果
1. モデル探索 GET /v1/models/gpt-5.5 (キー不要) ライフサイクルが active であり、使用予定の形式が含まれていること
2. 認証リクエスト 上記のPythonまたはcURLサンプル 空ではない回答。リクエストがモデル、ステータス、使用量と共にRequestsビューに表示されること
3. 使用量フィールド 非ストリーミングレスポンスの usage を読み取る prompt_tokens, completion_tokens, total_tokens が含まれること
4. ストリーミング stream: true と include_usage: true SSEチャンクの後に使用量が表示されること。中断されたストリームが不完全として処理されること
5. ツール呼び出し 実際の tools と tool_choice 引数がパースされ、スキーマと一致すること
6. VisionまたはJSONモード モデルが vision または json-mode をリストしている場合のみ 期待通りの出力。機能がリストされていない場合はテストをスキップ
7. 不正なキー 削除済みまたは誤ったキーでリクエスト 401 invalid_api_key
8. 残高不足またはキー制限 制限の低いキーまたは空のワークスペースを使用 402 insufficient_balance または quota_exceeded
9. モデル制限 キーのモデルリストを制限し、別のモデルをリクエスト 403 model_not_allowed
10. タイムアウトとリトライ ステージングでタイムアウトを強制 コードが retryable および retry_after に従ってのみリトライすること
11. 課金 billing_transaction_id と使用量を自身の見積もりと比較 請求額がモデルの現在の価格および記録されたトークンと一致すること

表の項目がすべてパスしたら、本番環境の設定を変更してデプロイしてください。新しいパスが安定していることが使用量で確認できるまで、古いOpenAIキーはアクティブのままにしておいてください。

よくある質問

OpenAIから切り替える際、モデル名を変更する必要がありますか?

必ずしもそうではありませんが、それぞれ確認してください。TokenLabのモデルIDは正確な文字列であるため、GET /v1/models または GET /v1/models/{model} で確認してください。2026年10月3日時点で、ライブAPIは gpt-5.5 をアクティブとしてリストしていました。リクエストが model_not_found を返す場合、そのIDは不明か利用できません。モデルリストを読み取り、現在のIDを使用してください。

ストリーミングとツール呼び出しはOpenAIのAPIと全く同じように動作しますか?

TokenLabは、SSEを通じたストリーミングと、OpenAI互換リクエスト形式を通じた関数呼び出しを文書化しています。ドキュメントには、サポートされるオプションは選択したモデルに依存するとも記載されています。したがって、結果は「同一」ではなく「互換性がある」ものとして扱ってください。ストリーミング、tools、tool_choice、および使用する response_format を、実行予定の特定のモデルでテストしてください。

残高がなくなった場合、どのステータスコードが返されますか?

コード insufficient_balance を伴うHTTP 402が返されます。独自の支出制限に達したキーも、quota_exceeded を伴う402を返します。欠落、無効、または取り消されたキーは401を返します。これらに対しては、何も変更せずにリトライしないでください。残高を補充するか、キー制限を引き上げるか、キーを置き換えてください。

同じOpenAIクライアントからClaudeやGeminiモデルを呼び出せますか?

モデルカタログには、リクエスト形式の中に openai_chat_completions を持つ claude-sonnet-5 や gemini-3.5-flash がリストされています。したがって、基本的なチャットは同じクライアントを通じて行えます。思考ブロックやClaudeのツール使用など、Claude固有のフィールドは /v1/messages に属します。Geminiネイティブのフィールドは /v1beta ルートに留まります。1つの会話につき1つのAPI形式を維持してください。

TokenLabで構築を始める

TokenLabでキーを作成し、ベースURLを https://api.tokenlab.sh/v1 に設定し、本番環境に触れる前にクイックスタートのリクエストを実行してください。

出典

価格確認日 2026-10-03

関連モデル

最近公開されたモデル

この記事のモデルで構築を開始

価格を比較し、ルートを試し、調査内容を実際の API 呼び出しへ進めます。