移行ガイドOpenAIとAnthropicのSDKの直接利用から
SDKの直接呼び出しから、1つのコントロールプレーンへ
多くのチームは、ベンダー自身のSDKと環境変数のキーでOpenAIやAnthropicを呼び出すところから始めます。サービスが複数になり、キーが複数になり、誰にも内訳を割り当てられない月次の請求書が届くまでは、それで十分です。このページで説明するのは、SDK、プロバイダーアカウント、契約を変えずに、それらの呼び出しの前段にINFROを置く変更です。
お客様のコードが、各プロバイダーのキーで各プロバイダーのSDKを呼び出す
INFROのアカウントはセルフサービスで作成できます。 カタログ、ドキュメント、API仕様は公開済みで、ゲートウェイもデプロイ済みです。v1以降の機能には「今後提供」と表示しています。 プランとトライアル
現状
現在の構成
プロバイダーキーは各サービスの環境変数に置かれ、リトライとタイムアウトはコードベースごとに書かれ、費用はプロバイダーの請求書か利用状況ページでしか見えず、せいぜいキー別かプロジェクト別です。
変わるもの
各クライアントは、INFROのゲートウェイキーでhttps://api.infro.ioを指します。プロバイダーキーは接続としてINFROに移り、暗号化して保持されます。プロバイダーは引き続きお客様の料金でお客様に直接請求します。
変わらないもの
SDK、リクエストとレスポンスの形式、チャット補完でのストリーミング、ツール呼び出し、構造化出力。INFROはOpenAIのChat CompletionsとResponsesの形式、AnthropicのMessagesの形式に対応します。
ゲートウェイは、経由地とベンダーが1つずつ増えることを意味します。構成によってはまだその価値がなく、この一覧はそれを正直に示したものです。
- 1つのサービス、1つのプロバイダー、1つのキー、そして1人が目を通す請求書。ゲートウェイは、必要な何かをもたらす前に、経由地とサブスクリプションを増やします。
- ワークロードの大半がBatch、ファインチューニング、Files、ベクトルストア、Realtime APIである。INFROはいずれも提供しないため、それらの呼び出しはどのみち直接のままになります。
- チャット形式では引き継げないプロバイダーの機能に依存しており、そのプロバイダーしか使っていない。INFROで扱えない呼び出しは、中途半端に変換するより直接のままにしておくほうが適切です。
- すべてのリクエストを1つのクラウドリージョン内にとどめる必要がある。INFROはCloudflareのネットワーク上で動き、リージョンの固定は現在利用できません。
変更点を1行ずつ。ここにないものはそのままです。
| SDKの直接呼び出し | INFRO | |
|---|---|---|
| ベースURL | SDKの既定値:api.openai.com/v1、api.anthropic.com。 | OpenAI SDKにはhttps://api.infro.io/v1、Anthropic SDKにはhttps://api.infro.io(SDKが/v1/messagesを付加します)。 |
| キー | 各サービスのOPENAI_API_KEY、ANTHROPIC_API_KEY。 | INFROのゲートウェイキー(Authorization: Bearer。Anthropic SDKのx-api-keyも受け付けます)。プロバイダーキーは、コンソールで接続として一度だけ入力します。 |
| モデルID | gpt-5.6-terra, claude-sonnet-5-5. | チャット補完ではopenai/gpt-5.6-terra、またはルート名。Anthropic SDKはclaude-sonnet-5-5をそのまま使えます。/v1/messagesはAnthropic自身のIDを読み取ります。 |
| 配分 | 通常はなし、またはプロバイダーのuserフィールド。 | ボディ内のmetadata.user_id、metadata.session_id、metadata.tags、またはX-INFRO-User-Id / X-INFRO-Featureヘッダー。リクエストに記録され、プロバイダーには送られません。 |
変更前 · プロバイダーのSDK
import OpenAI from "openai";
import Anthropic from "@anthropic-ai/sdk";
const openai = new OpenAI(); // reads OPENAI_API_KEY
const anthropic = new Anthropic(); // reads ANTHROPIC_API_KEY
await openai.chat.completions.create({
model: "gpt-5.6-terra",
messages: [{ role: "user", content: "Hello" }],
});
await anthropic.messages.create({
model: "claude-sonnet-5-5",
max_tokens: 1024,
messages: [{ role: "user", content: "Hello" }],
});変更後 · INFRO
import OpenAI from "openai";
import Anthropic from "@anthropic-ai/sdk";
const openai = new OpenAI({
baseURL: "https://api.infro.io/v1",
apiKey: process.env.INFRO_API_KEY,
});
const anthropic = new Anthropic({
baseURL: "https://api.infro.io",
apiKey: process.env.INFRO_API_KEY,
});
await openai.chat.completions.create({
model: "openai/gpt-5.6-terra",
messages: [{ role: "user", content: "Hello" }],
});
await anthropic.messages.create({
model: "claude-sonnet-5-5",
max_tokens: 1024,
messages: [{ role: "user", content: "Hello" }],
});新しいコードなしのフェイルオーバー
Anthropic上とVertex AI上のClaude、または2つのAnthropicキーを接続すると、そのモデルを指定したリクエストはそれらの間でフェイルオーバーします。名前付きのルートで、順序と障害ごとのルール(429、5xx、タイムアウト)を設定として定義できます。
呼び出し前の予算
組織、プロジェクト、メンバー、キーの予算が、プロバイダーを呼び出す前にリクエストの最大費用を確保します。上限に達すると、API自身のエラー形式で402 budget_exceededが返ります。
手を付けないもの
Batch、Files、ファインチューニング、ベクトルストア、モデレーション、Realtimeは、直接のクライアントのままにします。1つのサービスで両方のクライアントを持てます。1つはINFRO経由、もう1つは直接です。埋め込みは移行できますが、インデックスを作ったのとまったく同じモデルを使い続けてください。異なるモデルのベクトルは比較できません。
現在の設定が行っていることをINFROと比べ、ゲートウェイの実装と照合したもの。 INFROにないものは1行あります。
| SDKの直接呼び出し | そこでの役割 | INFROでは |
|---|---|---|
| サービスごとのプロバイダーキー異なる | 各サービスが環境変数にプロバイダーのキーを保持。 | キーはINFROで暗号化して保持される接続になります。サービスはスコープを限定したゲートウェイキーを持ち、プロバイダー、モデル、IP範囲、環境に制限でき、ローテーションやオフにすることもできます。 |
| リトライとタイムアウト異なる | SDK自身のリトライと、各コードベースが追加するもの。 | 接続をまたぐ優先順位付きまたは重み付きのターゲットと、種類ごとの障害ルール(429、5xx、タイムアウト)を備えたルート。SDK自身のリトライもその上で引き続き適用されます。 |
| 費用異なる | プロバイダーの利用状況ページと請求書。キー別またはプロジェクト別。 | 各レスポンスに推定プロバイダー費用(usage.cost、usage.price_source)。プロジェクト、キー、ユーザー、タグ別。追加した管理者キーで、OpenAIとAnthropic自身のコストAPIと日次で突合します。 |
| 支出上限異なる | プロバイダーが提供している場合は、プロバイダー側のプロジェクト上限。 | 上限に達すると402で拒否する予算。すべてのプロバイダーにまとめて、組織、プロジェクト、メンバー、キー、エンドカスタマーの各レベルで適用されます。 |
| Chat CompletionsとResponses同じ形式 | OpenAIの2つのテキストAPI。 | 両方とも、/v1/chat/completionsと/v1/responsesで使えます。previous_response_idとbackgroundは拒否されます。INFROはレスポンスを保存しないため、毎ターン会話全体を送ってください。 |
| Anthropic Messages同じ形式 | thinking、cache_control、サーバーツールに対応した/v1/messages。 | Anthropicの形式の/v1/messages。Anthropic接続またはVertex AI上のClaudeでは、ボディは書かれたとおりにプロバイダーへ届きます。 |
| 画像、音声合成、文字起こし、動画同じ形式 | プロバイダーのメディア用エンドポイント。 | 各モデルを提供するプロバイダーでの、非同期ジョブを使う/v1/images、/v1/audio、/v1/videos。 |
| 埋め込み同じ形式 | /v1/embeddings. | OpenAI、Azure OpenAI、Mistralの接続での、OpenAIの形式の/v1/embeddings。保存済みのベクトルが比較可能なままになるよう、フェイルオーバーは同じモデルにのみ行います。 |
| Batch、Files、ファインチューニング、Realtimeなし | アカウント単位のプロバイダーAPI。 | 提供しておらず、ゲートウェイの機能としての予定もありません。プロバイダー側に残ります。 |
INFROが行わないこと
- Batch、Files、ファインチューニング、ベクトルストア、モデレーション、Assistants、Realtime API。
- 保存されたレスポンス:
/v1/responsesでのprevious_response_id、conversation、background: trueは400で拒否されます。 - リージョンの固定。INFROはCloudflareのネットワーク上で動きます。データの所在の指定はロードマップにあり、現在は利用できません。
- エンタープライズ契約なしのセルフホスト型デプロイ。
引き継がれないもの
- 切り替え前の利用履歴。プロバイダー自身のダッシュボードに残ります。INFROは、処理した最初のリクエストから記録します。
- プロバイダー側のプロジェクト上限。代わりにINFROの予算を設定してください。プロバイダーの上限も引き続きプロバイダー側で適用されます。
質問
- OpenAIとAnthropicには引き続き直接支払うのですか?
- はい。INFROはお客様のキーでお客様自身のプロバイダーアカウントを呼び出すので、プロバイダーはお客様の料金で請求します。INFROはサブスクリプション料金を請求し、モデル支出への上乗せは0%です。
- SDKを変更する必要はありますか?
- いいえ。OpenAI SDKには
baseURLとしてhttps://api.infro.io/v1を、Anthropic SDKにはhttps://api.infro.ioを指定し、どちらもINFROキーをAPIキーとして使います。 - プロバイダーを直接使い続ける必要があるものは?
- Batch、Files、ファインチューニング、ベクトルストア、モデレーション、Realtime。INFROはこれらを提供しません。埋め込みは移行できます。
/v1/embeddingsはOpenAI、Azure OpenAI、Mistralの接続で動作します。
当社と一緒に、またはご自身で移行
移行プログラムでは、通話でOpenAIとAnthropicのSDKの直接利用の設定をINFROの接続、ルート、予算に対応付け、最初のサービスを一緒に移行します。プロバイダーは引き続きお客様に直接請求し、INFROはサブスクリプションで、モデル利用料への上乗せは0%です。
出典
このページのSDKの動作は、2026年10月19日に読んだこれらの資料に基づいています。
- OpenAI — openai-node README (client options)2026年10月19日に確認
- OpenAI — openai-python README (client options)2026年10月19日に確認
- Anthropic — TypeScript SDK2026年10月19日に確認
- Anthropic — Python SDK2026年10月19日に確認