Base URL and SDK Migration2026年7月7日Flatkey

マルチモデルSDK移行:OpenAIクライアントを維持したままClaude、Gemini、DeepSeekを利用する

OpenAIクライアントを維持したまま、Claude、Gemini、DeepSeek、ツール、ストリーミング、課金、ロールバックをテストするマルチモデルSDK移行を計画します。

マルチモデルSDK移行:OpenAIクライアントを維持したままClaude、Gemini、DeepSeekを利用する

マルチモデルSDKの移行は、アプリ内のすべてのクライアントライブラリを置き換えることから始めるべきではありません。本番コードですでにOpenAI PythonまたはNode SDKをチャット補完に使用している場合、より安全な最初のステップは、そのクライアントサーフェスを安定させ、プロバイダーの選択を構成に移動し、トラフィックを拡大する前に互換性のあるルートの背後でClaude、Gemini、DeepSeekの動作を証明することです。

Flatkeyは、1つのキー、OpenAI互換のルーティングレイヤー、プロバイダー間のモデルアクセス、および使用状況と請求のレビューを1か所で必要とするチーム向けに構築されています。これはマルチモデルSDKの移行に役立ちますが、エンドポイントファミリー、モデルエイリアス、ストリーミング、ツールコール、および使用状況レコードをテストする必要がなくなるわけではありません。ここに記載されているすべてのコードサンプルは、ご自身のFlatkeyキーと現在のモデルカタログで検証するまで、テンプレートとして扱ってください。

実践的な目標はシンプルです。アプリがすでに知っているリクエストオブジェクトを維持し、変更が必要ないくつかの値を分離し、切り替え前に証明パケットを構築することです。

マルチモデルSDK移行の意思決定マトリックス

コードを変更する前に、このマトリックスを使用してください。これにより、安定させることができるものと、構成可能にする必要があるものを分離できます。

レイヤー安定させるもの構成可能にするもの保存する証明
SDKクライアント既存のOpenAI SDKのインポートとチャット補完の呼び出しパスAPIキー、ベースURL、タイムアウト、リトライポリシーSDKバージョンと編集済みの起動構成
リクエストの形式サポートされている場合のmessagesmodelstream、基本的なtoolsプロバイダー固有の追加機能とサポートされていないパラメーター最小限のリクエストと生のレスポンス
モデル選択support_chatanalysis_fastなどのアプリレベルのエイリアスゲートウェイモデルのエイリアスとエンドポイントファミリーモデルカタログのスクリーンショットまたはエクスポート
運用既存のログ、リクエストID、エラー処理プロバイダー、ルート、使用状況、クォータ、ロールバックのメタデータダッシュボード/読み戻しの証拠
リリース現在のアプリのデプロイパスパーセンテージでのロールアウトとロールバックの環境変数ロールバックの所有者と以前の構成

これがマルチモデルSDK移行の中核となる規律です。ライブラリの置き換え、プロンプトの移行、プロバイダーの評価、請求の検証、本番環境へのロールアウトを1つのデプロイに混ぜないでください。

互換性に関する公式ドキュメントの見解

OpenAIのSDKは、必要なパターンをすでにサポートしています。現在のOpenAI Python READMEにはOpenAIクライアントとbase_urlオプションが記載されており、Node READMEには標準のOpenAIクライアントとチャット補完が記載されています。OpenAIのAPIリファレンスによると、Chat Completionsは会話に対するモデルの応答を作成し、ストリーミングをサポートし、チャット補完オブジェクトまたはストリームチャンクを返します。

ランタイムごとにロールアウトを分割する場合は、このチェックリストをOpenAI Python SDKカスタムベースURLガイドおよびOpenAI Node SDKベースURLガイドと組み合わせてください。最初の決定がクライアントのセットアップではなくプロバイダーのルーティングである場合は、テストワークロードを選択する前にClaude対GPT APIルーティングガイドを使用してください。

プロバイダーの互換性は異なります。

プロバイダー公式の互換性シグナル移行への影響
OpenAI SDKPythonはbase_urlをサポートし、NodeはbaseURLを使用します。Chat Completionsにはmessagesmodelstream、ツール、および使用状況フィールドがあります。最初の移行スライスではOpenAIクライアントラッパーを維持します。
Anthropic / ClaudeAnthropicはOpenAI SDK互換レイヤーを公開していますが、これは主にテストと比較のためであり、ほとんどのユースケースで長期的な本番パスではないと述べています。ネイティブのMessages API/v1/messagesmax_tokensmessages、およびトップレベルのsystemパラメーターを使用します。迅速な評価には互換性を使用しますが、プロバイダー固有の機能に依存する前に、ネイティブのClaudeの要件をテストしてください。
Google GeminiGoogleによると、GeminiモデルはAPIキー、ベースURL、モデルを変更することでOpenAI Python、TypeScript/JavaScriptライブラリ、およびRESTを介してアクセスできますGeminiはOpenAI形式のスモークテストに適した候補であり、推論とモデル固有の動作は別途検証されます。
DeepSeekDeepSeekはそのAPI形式がOpenAIおよびAnthropicと互換性があると述べています。その最初の呼び出しに関するドキュメントには、OpenAIおよびAnthropicのベースURLとOpenAI形式の例が記載されています。DeepSeekはOpenAIクライアントパスに適合できますが、モデル名の非推奨化や思考設定については明示的なチェックが必要です。
FlatkeyFlatkeyの公開モデルページでは、openaianthropicgeminiなどのエンドポイントタイプが公開されています。ホームページにはOpenAI互換のチャット補完ルートが表示されています。モデルはプロバイダー名だけでなく、エンドポイントファミリーで選択してください。

重要な教訓は、「OpenAI互換」とは通常、クライアントがOpenAI形式のリクエストを送信できることを意味するということです。これは、すべてのパラメーター、ツールスキーマ、推論制御、メディア入力、または使用状況フィールドがプロバイダー間で同一に動作することを意味するわけではありません。

ステップ1:クライアントの境界を固定する

マルチモデルSDKへの移行は、OpenAIクライアントを1つのローカルファクトリの背後に置くことから始めます。このファクトリは、キー、ベースURL、タイムアウト、モデルエイリアスを把握する唯一の場所であるべきです。

import os
from openai import OpenAI


def make_llm_client() -> OpenAI:
    return OpenAI(
        api_key=os.environ["FLATKEY_API_KEY"],
        base_url=os.getenv("FLATKEY_BASE_URL", "https://router.flatkey.ai/v1"),
        timeout=float(os.getenv("LLM_TIMEOUT_SECONDS", "60")),
        max_retries=int(os.getenv("LLM_MAX_RETRIES", "2")),
    )


client = make_llm_client()

completion = client.chat.completions.create(
    model=os.environ["FLATKEY_MODEL"],
    messages=[
        {"role": "system", "content": "短い実装メモで回答してください。"},
        {"role": "user", "content": "Reply with exactly: migration probe ok"},
    ],
)

print(completion.choices[0].message.content)

Nodeの場合:

import OpenAI from "openai";

export function makeLlmClient() {
  return new OpenAI({
    apiKey: process.env.FLATKEY_API_KEY,
    baseURL: process.env.FLATKEY_BASE_URL ?? "https://router.flatkey.ai/v1",
    timeout: Number(process.env.LLM_TIMEOUT_MS ?? 60000),
    maxRetries: Number(process.env.LLM_MAX_RETRIES ?? 2),
  });
}

const client = makeLlmClient();

const completion = await client.chat.completions.create({
  model: process.env.FLATKEY_MODEL,
  messages: [
    { role: "system", content: "短い実装メモで回答してください。" },
    { role: "user", content: "Reply with exactly: migration probe ok" },
  ],
});

console.log(completion.choices[0].message.content);

アプリは、コントローラー、ワーカー、スクリプト全体でクライアントを構築するのではなく、make_llm_client() または makeLlmClient() を呼び出す必要があります。この単一の境界こそが、マルチモデルSDKへの移行を可逆的に保つことを可能にします。

ステップ2:モデルとエンドポイントのマップを構築する

すべてのワークロードを1つの新しいモデル名に向けるべきではありません。ワークロード、エンドポイントファミリー、現在のプロバイダー、ターゲットプロバイダー、ロールバック値を指定するマップから始めましょう。

ワークロードエンドポイントファミリー現在のパスターゲットパスロールバック
サポートチャットOpenAI形式のチャット補完現在のOpenAIモデルGPT、Claude、Gemini、またはDeepSeek用のFlatkeyチャットエイリアス以前のキー、ベースURL、モデル
内部分析OpenAI形式のチャット補完現在のOpenAIモデル推論とコストのために選択されたFlatkeyモデルエイリアス以前のモデルエイリアス
ツールワークフローツールを使用したチャット補完現在のツール互換モデルツール動作が検証済みの候補モデルプロバイダールートを無効化
ストリーミングUIチャット補完ストリーム現在のストリームパーサー生ストリームの証明がある候補プロバイダーストリームトラフィックを元に戻す
ネイティブClaude機能Anthropic Messages APIネイティブClaudeクライアント互換性により必須機能が失われる場合はネイティブを維持このパスは移行しない

Flatkeyのモデルページは、エンドポイントタイプを公開しているため、ここで役立ちます。モデルがネイティブエンドポイントファミリーの下にリストされている場合、アカウントカタログとスモークテストで証明されるまで、OpenAIチャットパスを通じて利用できると想定しないでください。

ステップ3:4つのプロバイダーでのスモークテストを実行する

有用な最小限のマルチモデルSDK移行スモークテストは、4つのプロバイダー行と同一のプロンプトで構成されます。応答スタイルによってトランスポートの失敗が隠されないように、プロンプトは単純なものにしてください。

テストリクエスト合格条件トリアージ対象の失敗
GPTまたは現在のOpenAIモデルFlatkey経由の既存のOpenAI形式のリクエスト応答が返り、使用状況が可視化され、ログが期待されるエイリアスにリンクしている不正なキー、不正なベースURL、/v1の重複、モデルの欠落
Claude選択したFlatkeyエイリアス経由の同じOpenAI形式のリクエスト平易な応答が返る。リクエストにサポートされていない機能が含まれていないシステムメッセージのマッピング、ツールスキーマ、ネイティブClaude専用機能
Gemini選択したFlatkeyエイリアス経由の同じOpenAI形式のリクエスト平易な応答が返る。推論のデフォルト設定が許容範囲内であるモデルエイリアス、推論設定、マルチモーダルの前提
DeepSeek選択したFlatkeyエイリアス経由の同じOpenAI形式のリクエスト平易な応答が返る。非推奨に影響されやすいエイリアスが最新であるモデル名の変更、思考設定、ストリームパーサー

生の要求本文、編集済みのヘッダー、応答本文、HTTPステータス、モデルエイリアス、返された場合はリクエストID、ダッシュボードの使用状況エントリを保存します。プロバイダーが異なるパラメーターを必要とする場合は、アプリ全体に if provider == 分岐を散在させるのではなく、そのパラメーターをプロバイダープロファイルに移動してください。

ステップ4:ストリーミングとツール呼び出しを個別にテストする

単純な補完は、最もリスクの低いパスを証明するにすぎません。ストリーミングとツール呼び出しは、別個の契約です。

ストリーミングについては、以下を保存します:

エビデンス重要である理由
レスポンスヘッダールートがイベントストリームデータを返すかどうかを確認します。
最初のイベントバッファリングやプロキシパーサーの問題を検出します。
最後のイベントストリーム終了の処理と使用状況の動作を確認します。
UIパーサーの出力フロントエンドが特定のプロバイダーのチャンク形状を前提としていないことを証明します。

ツールについては、まず小さなスキーマをテストします。

{
  "type": "function",
  "function": {
    "name": "lookup_order_status",
    "description": "Return a test order status.",
    "parameters": {
      "type": "object",
      "properties": {
        "order_id": { "type": "string" }
      },
      "required": ["order_id"]
    }
  }
}

最初の証明として、本番環境で最大のツールスキーマを使用しないでください。例えば、Anthropicの互換性ドキュメントでは、OpenAIとの互換性に関する制限が指摘されており、Claudeの全機能セットを利用するためにはネイティブのClaude APIの使用が推奨されています。これはまさに、マルチモデルSDK移行チェックリストが展開前に把握すべき詳細です。

ステップ5:プロバイダープロファイルを小さく保つ

プロバイダープロファイルは、ビジネスロジックを所有するのではなく、差異を記述するべきです。

{
  "support_chat": {
    "base_url_env": "FLATKEY_BASE_URL",
    "model_env": "FLATKEY_SUPPORT_CHAT_MODEL",
    "endpoint_family": "openai_chat_completions",
    "stream": true,
    "tools": "basic",
    "fallback_alias": "support_chat_previous"
  },
  "analysis_fast": {
    "base_url_env": "FLATKEY_BASE_URL",
    "model_env": "FLATKEY_ANALYSIS_FAST_MODEL",
    "endpoint_family": "openai_chat_completions",
    "stream": false,
    "tools": "none",
    "fallback_alias": "analysis_fast_previous"
  }
}

すべてのターゲットプロバイダーに対するテストがない限り、ネイティブのプロバイダー機能を共有のOpenAIクライアントパスから除外してください。Claudeの引用、Gemini固有のメディア動作、DeepSeekの思考制御、またはプロバイダーネイティブのバッチエンドポイントが必要な場合は、名前付きのネイティブアダプターを作成し、真に適合するワークロードのためにOpenAI互換パスを維持します。

ステップ6:課金とロールバックを証明する

テキストは返すが課金の証拠を失う移行は完了していません。トラフィックを増やす前に、以下を保存します。

運用チェック合格条件
使用状況の可視性リクエストが、期待されるルート/モデルのコンテキストとともにFlatkeyの使用状況またはログに表示されます。
コストレビュー価格設定または使用状況の記録が、財務または運用部門が照合するのに十分なほど可視化されています。
クォータの動作低いテストクォータまたは予算のしきい値が、非本番キーで期待どおりに動作します。
エラー分類4014034044295xx、およびプロバイダーエラーが、明確な所有者のアクションにマッピングされています。
ロールバック1つの環境変更で、トラフィックが以前のキー/ベースURL/モデルに戻ります。

ここでFlatkeyの統合された課金と使用状況レビューが重要になります。目標は、より多くのモデルにアクセスすることだけではありません。マルチモデルSDK移行の目標は、トラフィックが移動した後に、製品、運用、財務部門が検査できるアクセスを確保することです。

マルチモデルSDK移行のためのカットオーバーワークフロー

最初の本番スライスには、この順序を使用します。

  1. 既存のOpenAI SDKクライアントを持つ低リスクのワークロードを1つ選択します。
  2. 現在のプロバイダーを変更せずに、クライアントファクトリと環境変数を追加します。
  3. 新しいファクトリを通じて現在のモデルを証明します。
  4. プレーンな補完で、Claude、Gemini、またはDeepSeekのターゲットを1つ証明します。
  5. そのワークロードがストリーミングとツールを使用している場合にのみ、それらを証明します。
  6. 使用状況、課金、エラー処理、およびロールバックを検証します。
  7. トラフィックのわずかな割合を新しいモデルエイリアスにルーティングします。
  8. 次のワークロードを追加する前に、プロバイダーとエンドポイントファミリーごとに障害を確認します。

最初のワークロードがネイティブのプロバイダー機能を必要とする場合は、最初のマルチモデルSDK移行には別のワークロードを選択してください。最初のスライスは、すべてのモデルの能力ではなく、移行パターンを証明するべきです。

よくある質問

1つのOpenAI SDKクライアントをClaude、Gemini、DeepSeekに使用できますか?

OpenAI互換ルートにはOpenAI SDKクライアントを維持できることが多いですが、それでもプロバイダー固有のテストが必要です。GoogleとDeepSeekはOpenAI互換アクセスを文書化しています。AnthropicはOpenAI SDK互換性レイヤーを文書化していますが、それは主にテストと比較のためであり、ほとんどのユースケースにおける長期的な本番環境の選択肢ではないと述べています。

Responses APIのトラフィックも同じ方法で移行すべきですか?

ターゲットゲートウェイとターゲットモデルが使用しているエンドポイントファミリーを明示的にサポートしている場合に限ります。Chat CompletionsとResponsesは同じ契約ではありません。アプリがすでに使用しているエンドポイントファミリーから始め、次にResponses用に別のテスト計画を作成してください。

マルチモデルSDK移行で最もよくある間違いは何ですか?

最もよくある間違いは、ベースURLの変更を移行全体として扱うことです。実際のマルチモデルSDK移行では、モデル名、エンドポイントファミリー、ストリーミング、ツール、使用状況、クォータ、エラー処理、およびロールバックも検証します。

いつネイティブのプロバイダーSDKを維持すべきですか?

ワークロードが互換性レイヤーでカバーされていないプロバイダー固有の機能に依存している場合は、ネイティブのプロバイダーSDKを維持してください。ネイティブのClaude機能、Gemini固有のメディアパス、またはDeepSeek固有の推論制御は、別のアダプターを正当化する可能性があります。

最終チェックリスト

移行が完了したと見なす前に、以下を確認してください。

項目完了条件
クライアントファクトリすべてのアプリパスが1つのOpenAI SDKラッパーまたは名前付きネイティブアダプターを使用する。
設定の分割APIキー、ベースURL、モデルエイリアス、タイムアウト、リトライ、ルートオーナーが環境によって決定される。
プロバイダーの証明GPT、Claude、Gemini、DeepSeekの候補が、保存された生のエビデンスでテストされた。
機能の証明ストリーミングとツールが、通常のチャットとは別にテストされた。
運用の証明使用状況、請求、クォータ、ログ、エラーが適切なオーナーに表示される。
ロールバックの証明1つの文書化された変更で、ワークロードが以前のルートに戻る。

マルチモデルSDKの移行は、1つの小さなワークロード、1つのクライアント境界、1つのモデルマップ、そして追加するすべてのプロバイダーに対するエビデンスといったように、地道に進めるのが最も効果的です。統合ルートでこれらのテストを実行する準備ができたら、Flatkeyキーを取得し、低リスクのOpenAI互換チャットパスから始めてください。