HopBase への移行
OpenAI・OpenRouter・Anthropic API から HopBase へアプリを移す方法。変更する 3 つの値、SDK ごとの変更前後のコード、1 キー 1 グループのルール、非対応の機能。
既存アプリを HopBase に移すには、Base URL、キー、場合によってはモデル名の 3 つを変えるだけです。リクエストボディ、ストリーミング処理、エラー処理のコードはそのまま使えます。
変更する項目
| OpenAI | OpenRouter | Anthropic | HopBase | |
|---|---|---|---|---|
| Base URL | https://api.openai.com/v1 | https://openrouter.ai/api/v1 | https://api.anthropic.com | OpenAI プロトコル:https://api.hop-base.com/v1Anthropic プロトコル: https://api.hop-base.com(/v1 なし) |
| キー | OpenAI のキー | 1 つの OpenRouter キーで全モデル | Anthropic のキー | 「APIキー」で作成する sk-…。1 つのプラングループに紐づく |
| モデル名 | gpt-5.5 | openai/gpt-5.5、anthropic/claude-sonnet-5 | claude-sonnet-5 | ベンダー接頭辞なし。GET /v1/models が返す ID をそのまま使用:gpt-5.5、claude-sonnet-5 |
モデルファミリーごとのプロトコルは Base URL とプロトコルを参照してください。
1 キー = 1 グループ = 1 モデルファミリー
グループごとにキーを 1 つ作成してください。1 つのキーで全モデルを呼べる OpenRouter とは逆です。HopBase のキーは 1 つのプラングループにだけ紐づき、GET /v1/models はそのグループのモデルだけを返し、グループ外のモデルは 404 model_not_found になります。Claude と GPT の両方を使うアプリには、Claude グループのキーと Codex Plus または Codex Pro グループのキーの 2 つが必要で、モデルに応じてキーを使い分けます。
OpenAI SDK
Base URL を設定し、キーを差し替えます。gpt-5.5 などの OpenAI モデル ID は、キーの GET /v1/models に含まれていればそのままで構いません。
import os
from openai import OpenAI
client = OpenAI(
- api_key=os.environ["OPENAI_API_KEY"],
+ base_url="https://api.hop-base.com/v1",
+ api_key=os.environ["HOPBASE_OPENAI_API_KEY"],
)
resp = client.chat.completions.create(
model="gpt-5.5",
messages=[{"role": "user", "content": "Hello"}],
)コードを変えたくない場合、どちらの SDK も環境変数 OPENAI_BASE_URL と OPENAI_API_KEY を読み込みます。それぞれ https://api.hop-base.com/v1 と HopBase のキーを設定してください。ほかの例は OpenAI SDK にあります。
Anthropic SDK
Claude は Anthropic Messages API のまま使います。Base URL は /v1 を付けず、キーは「Claude Max(公式フル枠)」グループのものを使ってください。「Claude Max(ccmax)」グループのキーは Claude Code クライアント専用で、SDK からの呼び出しは失敗します。
import os
from anthropic import Anthropic
client = Anthropic(
- api_key=os.environ["ANTHROPIC_API_KEY"],
+ base_url="https://api.hop-base.com",
+ api_key=os.environ["HOPBASE_CLAUDE_API_KEY"],
)
msg = client.messages.create(
model="claude-sonnet-5",
max_tokens=1024,
messages=[{"role": "user", "content": "Hello"}],
)こちらも環境変数だけで切り替えられます:ANTHROPIC_BASE_URL=https://api.hop-base.com。詳細は Anthropic SDK を参照してください。
OpenRouter
Base URL とキーを変え、モデル名からベンダー接頭辞を外し、OpenRouter の帰属ヘッダーを削除します。HopBase では不要です。
import os
from openai import OpenAI
client = OpenAI(
- base_url="https://openrouter.ai/api/v1",
- api_key=os.environ["OPENROUTER_API_KEY"],
- default_headers={"HTTP-Referer": "https://your-app.example", "X-Title": "Your App"},
+ base_url="https://api.hop-base.com/v1",
+ api_key=os.environ["HOPBASE_OPENAI_API_KEY"],
)
resp = client.chat.completions.create(
- model="openai/gpt-5.5",
+ model="gpt-5.5",
messages=[{"role": "user", "content": "Hello"}],
)OpenRouter の OpenAI 互換エンドポイント経由で Claude を呼んでいた場合、HopBase には Claude 用のその経路はありません。前節のとおり、Claude グループのキーで Anthropic SDK に切り替えてください。その他のファミリー(Gemini、GLM、Qwen、DeepSeek、Kimi、Grok)は OpenAI SDK のまま、それぞれのグループのキーを使います。
非対応の機能
| 使っている可能性があるもの | HopBase での扱い |
|---|---|
/v1/chat/completions または /v1/responses での Claude | 404。Anthropic Messages を使用:Anthropic SDK |
/v1/responses または Gemini SDK ネイティブパスでの Gemini | Chat Completions のみ:Gemini チャット |
/v1/responses での Kimi K3 | Chat Completions のみ:Kimi K3 |
| Embeddings、音声文字起こし、Files、Batch、Assistants、ファインチューニング、モデレーション | 提供なし。これらのパスは 404 |
| 1 つのキーで全モデル | グループごとに 1 キー(上記参照) |
OpenRouter のモデルフォールバック一覧(models)、provider ルーティング、:online / :free などのモデル接尾辞 | 非対応。削除して単一のモデル ID を送信 |
エンドポイントの一覧は Base URL とプロトコルにあります。
移行後の確認
キーのモデル一覧を取得
新しいキーで GET https://api.hop-base.com/v1/models を呼び、レスポンスに含まれる ID だけを使います。
小さなリクエストを 1 つ送信
「ok とだけ返答して」と依頼し、200 を確認します。404 の多くは、モデルがこのキーのグループに無いか、Base URL のプロトコルが違うことが原因です。エラーコードと再試行を参照してください。
キーの利用可能額を確認
GET https://api.hop-base.com/v1/usage がキーの利用可能残高を返します。項目の説明はアカウント・カタログ APIにあります。