※はじめにお知らせです。私はAPIGOTOチームで働いています。APIGOTOは独立したOpenAI互換APIゲートウェイで、OpenAI・Anthropic・Googleとは関係ありません。この記事ではAPIGOTOを例にしていますが、手順はOpenAI互換のエンドポイント(Ollama、vLLM、LiteLLMなど)ならどれでも同じです。
「Claude系もGPT系もGemini系も試したいけど、SDKを3つ入れて書き分けるのは面倒…」という方向けに、OpenAI互換APIを使って接続先(base_url)だけ変えて複数のモデルを呼ぶ方法をまとめます。
仕組み:base_urlを差し替えるだけ
PythonのOpenAI SDK(openaiパッケージ)には base_url という引数があります。OpenAIと同じ形式の /v1/chat/completions を提供しているサーバーなら、コードはそのままで接続先だけ切り替えられます。
pip install openai
最小のサンプル
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.china-aiapi.com/v1", # Ollamaなら http://localhost:11434/v1
api_key=os.environ["APIGOTO_API_KEY"],
timeout=30.0, # 秒。デフォルトは10分なので短めに
max_retries=2, # 接続エラー・429・5xxなどを自動で再試行(デフォルト2回)
)
resp = client.chat.completions.create(
model="MODEL_ID",
messages=[{"role": "user", "content": "base_urlとは何か、一文で説明して"}],
)
print(resp.choices[0].message.content)
MODEL_ID には、APIGOTOのダッシュボードに表示されているモデルIDをそのまま入れてください(他のサービスなら GET /v1/models の一覧から)。ネットで見かけた名前を推測で入れると400や404になります。
複数モデルを順番に試す(簡易フォールバック)
SDKの再試行は同じモデルへのやり直しです。別のモデルに切り替えたい場合は、ループで書けます。
from openai import APIConnectionError, RateLimitError, InternalServerError
MODELS = ["MODEL_ID_MAIN", "MODEL_ID_BACKUP"] # ダッシュボードのIDを優先順に
def ask(prompt):
last_err = None
for m in MODELS:
try:
r = client.chat.completions.create(
model=m, messages=[{"role": "user", "content": prompt}]
)
return m, r.choices[0].message.content
except (APIConnectionError, RateLimitError, InternalServerError) as e:
last_err = e # タイムアウトもAPIConnectionErrorの一種
raise last_err
model, text = ask("こんにちは")
print(model, text)
つまずきやすいポイント
- 400/401では切り替えない:リクエストの誤りやキーの間違いは、モデルを変えても直りません。一時的なエラーだけフォールバック対象にします。
- 再試行の重ねすぎに注意:ゲートウェイ側でも再試行していると(APIGOTOは自動フェイルオーバーで最大3回まで再試行します)、SDKの再試行やアプリ側のループと重なって待ち時間が長くなります。どの層で再試行するかを決めておくと安心です。
- 機能はモデルによって違う:同じAPI形式でも、ツール呼び出し(function calling)やJSON出力への対応はモデルごとに異なります。使う機能は各モデルで一度テストしましょう。
- どのモデルが答えたかを記録する:ログに残しておかないと、メインのモデルが頻繁に失敗していても気づけません。
まとめ
base_urlを差し替えるだけで、同じコードのまま複数のLLMを呼べるtimeoutは明示的に短めに、max_retriesは他の層の再試行とのバランスで決める- 別モデルへの切り替えは、一時的なエラーのときだけ行う
例に使ったAPIGOTOについて補足すると、Claude・GPT・Gemini系のモデルを1つのOpenAI互換 base_url で使えて、自動フェイルオーバー(最大3回再試行)、リクエストごとのログ、BYOK(自分のキーの持ち込み)、従量課金に対応しています。ドキュメントは英語と中国語です。詳しくは www.china-aiapi.com をご覧ください。
お問い合わせ
運営会社:聚元创新(深圳)科技有限公司(Juyuan Innovation (Shenzhen) Technology Co., Ltd.)
メール:postmaster@apigoto.com