Claude OpenAI SDK Anthropic Chat Completions 互換 API

OpenAI SDK で Claude を使う:クライアント書き換え不要

評価では OpenAI SDK から Claude を呼び、本番では OpenAI 形式の入口をネイティブ Claude Messages に変換するゲートウェイを使う方法。

AveMujica API 3 分で読めます

公式の OpenAI Python / TypeScript SDK から Claude を呼ぶには、base_url、API キー、モデル ID を変更し、そのまま chat.completions を使えます。Anthropic はこの経路を OpenAI SDK 互換ガイド に記載しています。同じクライアント形式を OpenAI 互換 API ゲートウェイ に向ければ、Anthropic の資格情報をサーバー側に保持し、OpenAI 形式のリクエストを上流のネイティブ Claude Messages に変換することもできます。

この2つの経路は同等ではありません。直接互換は評価向けです。クライアントには OpenAI 形式を提供し、Anthropic には Claude Messages で接続する本番ゲートウェイは、信頼性の設計が別物です。

評価経路と本番経路

Anthropic は、同社の OpenAI 互換レイヤーが主にテストとモデル比較のためのもので、大半のユースケースにおける長期的または本番対応の解決策ではないと明記しています。この文を細かな注意書きではなく、製品方針として扱ってください。

経路クライアント上流最適な用途
Anthropic 直接互換OpenAI SDK → https://api.anthropic.com/v1/Anthropic の OpenAI 形式インターフェースローカル評価、プロンプト比較、短期検証
ゲートウェイの OpenAI 入口OpenAI SDK → ゲートウェイの /v1ゲートウェイがネイティブ Claude Messages に変換共有キー、クォータ、フェイルオーバー、マルチプロバイダー製品
ネイティブ Anthropic SDK / Messages APIAnthropic クライアントClaude の全機能プロンプトキャッシュ、引用、extended thinking の詳細、保証付き構造化出力

1行目は「固定評価セットで Claude が十分か」を調べるために使います。複数サービスがそれぞれ Anthropic キーを持たずに Claude を必要とするなら2行目、互換レイヤーが省略または無視する Claude ネイティブ制御が必要なら3行目を選びます。

このリポジトリの Claude チャネルは、OpenAI Chat Completions を Claude Messages に変換します(RequestOpenAI2ClaudeMessage と関連アダプター)。Anthropic の互換エンドポイントをそのまま代理するのとは異なります。クライアントは引き続き OpenAI JSON を話し、制御面がマッピング、資格情報、使用ログを所有します。

Anthropic の OpenAI 互換レイヤーにある重要な制限

OpenAI SDK から api.anthropic.com を呼ぶ場合、現在の Anthropic ドキュメントは具体的な差異を挙げています。「そのまま完全互換」と宣言する前に、これらを設計へ織り込んでください。

  1. ツールの strict は無視されます。 ツール引数の JSON が指定スキーマに一致する保証はありません。ランタイムで検証するか、サーバー側の保証が必要ならネイティブ Claude 構造化出力を使います。
  2. 音声入力は取り除かれます。 マルチモーダルな音声部分は明確なエラーで拒否されるのではなく、無視されます。
  3. 互換経路はプロンプトキャッシュに対応しません。 キャッシュは Anthropic 独自 SDK とネイティブ API で利用できます。
  4. system と developer メッセージは先頭へ移され、連結されます。 Anthropic は最初の system メッセージを1つだけ扱うため、会話途中の OpenAI 形式 system/developer ターンは改行で統合されます。
  5. 未対応フィールドの多くは黙って無視されます。 上流で消えると製品挙動が変わるフィールドについては、ステージングで失敗を明示させてください。
  6. エラー本文は OpenAI 形式の外枠を保ちますが、詳細テキストは OpenAI と同等ではありません。デバッグ用に記録し、文章を安定した契約として解析しないでください。

PDF 処理、引用、詳細な thought へアクセスできる extended thinking、プロンプトキャッシュなど Claude の全機能は、ネイティブ Claude API、またはそれらのネイティブフィールドへマッピングするゲートウェイ経路で使います。ブランドをまたいで移植可能なエージェントのツールループについては、プロバイダー横断のポータブルなツール呼び出し を参照してください。

Anthropic の直接 base URL(評価)

from openai import OpenAI
import os

client = OpenAI(
    api_key=os.environ["ANTHROPIC_API_KEY"],
    base_url="https://api.anthropic.com/v1/",
)

response = client.chat.completions.create(
    model="claude-sonnet-5",  # or claude-opus-4-8; verify on Anthropic model docs
    messages=[
        {"role": "system", "content": "You are a precise API integration assistant."},
        {"role": "user", "content": "Summarize three risks of hardcoding provider SDKs."},
    ],
    max_tokens=800,
)

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

TypeScript:

import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.ANTHROPIC_API_KEY,
  baseURL: "https://api.anthropic.com/v1/",
});

const response = await client.chat.completions.create({
  model: "claude-sonnet-5",
  messages: [
    { role: "system", content: "You are a precise API integration assistant." },
    { role: "user", content: "Summarize three risks of hardcoding provider SDKs." },
  ],
  max_tokens: 800,
});

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

公式例では claude-opus-4-8 がよく使われます。現在の Anthropic モデルドキュメントには Claude Sonnet 5 と Claude Haiku 4.5 も掲載されています。この文章を含むブログのスナップショットより、最新のモデル表を優先してください。

ゲートウェイ base URL(本番型のマルチサービス)

Claude を複数チャネルの1つとして使う場合は、同じ SDK をゲートウェイへ向け、Anthropic の資格情報をサーバー側だけに保持します。

client = OpenAI(
    api_key="GATEWAY_API_KEY",
    base_url="https://your-gateway.example.com/v1",
)

response = client.chat.completions.create(
    model="claude-sonnet",  # stable gateway alias mapped to a current Claude ID
    messages=[
        {
            "role": "user",
            "content": "Draft a migration checklist for SDK consolidation.",
        }
    ],
    max_tokens=800,
)

運用者は claude-sonnet や claude-opus といったエイリアスを、生の上流 ID(claude-sonnet-5、claude-opus-4-8、必要なら日付付きスナップショット)へマッピングします。アプリ設定はエイリアスに依存させ、上流の改名を複数リポジトリの障害ではなくチャネル編集で済ませてください。これは マルチプロバイダー LLM ゲートウェイ で説明する制御面です。

共通経路で通常そのまま移植できるもの

メッセージ

  • 通常の system / user / assistant 履歴は、評価と大半の製品チャットで機能します。
  • Anthropic の互換レイヤーでは、会話途中の system/developer ターンは独立した OpenAI ロールとして保持されません。統合される挙動を想定してください。
  • ポリシー文は明示します。OpenAI モデルだけに調整された隠れた指示を Claude が継承すると仮定しないでください。

ツール

OpenAI 形式の tools 定義は、初期のエージェント移植でよく機能します。例:

tools = [
    {
        "type": "function",
        "function": {
            "name": "lookup_order",
            "description": "Fetch an order by ID from the shop system",
            "parameters": {
                "type": "object",
                "properties": {"order_id": {"type": "string"}},
                "required": ["order_id"],
            },
        },
    }
]

response = client.chat.completions.create(
    model="claude-sonnet-5",
    messages=[{"role": "user", "content": "Where is order A-100?"}],
    tools=tools,
    tool_choice="auto",
)

message = response.choices[0].message
if message.tool_calls:
    for call in message.tool_calls:
        print(call.function.name, call.function.arguments)

Anthropic の互換インターフェースでは strict が無視されるため、副作用を起こす前に arguments を解析し、スキーマ検証してください。ゲートウェイ経路でもツール実行側で検証を続け、モデルが出した JSON だけを信用してはいけません。

ストリーミング

SSE ストリーミングは、大半の OpenAI チャット UI がすでに扱う形式と一致します。最初のトークンまでの遅延、ストリーム途中のエラー処理、ゲートウェイが Claude のストリームイベントを安定したクライアント形式へ正規化するかを確認してください。部分トークン出力後の自動プロバイダー切り替えは、ストリーム開始前のフェイルオーバーより難しいため、LLM API フェイルオーバー戦略 と組み合わせます。

構造化出力、安全性、可観測性の差異

パイプラインが厳密な JSON Schema 強制に依存するなら、完全互換を主張する前に Claude でそのスキーマ自体をテストしてください。strict モードが不完全な場合は、アプリケーションコードで検証するか、ネイティブ Claude 構造化出力を使います。

JSON のキーが同じに見えても、拒否、レート制限ヘッダー、トークン計上はプロバイダーごとに異なります。クライアントが単一契約を期待するなら、ゲートウェイでエラー分類を正規化してください。恒久的な認証やポリシー違反を、一時的な 5xx と同じように再試行してはいけません。

Anthropic の直接キーとゲートウェイキーでは監査証跡も異なります。チームでは、単一プロバイダーの管理画面だけでなく、チャネルの健全性と並んで使用履歴を確認できる形が通常望まれます。公開の料金ページやモデルカタログは関係者に役立ちますが、認証済みの運用 URL を各段落へ散りばめないでください。

制御された切り替え手順

  1. OpenAI SDK または生の /v1/chat/completions に依存するサービスを棚卸しします。
  2. 1つの Claude モデル ID で Anthropic の互換エンドポイントに固定評価セットを実行します。
  3. Anthropic の資格情報をゲートウェイのチャネルとして登録し、安定したエイリアスを公開します。
  4. まず低リスクの社内ジョブをゲートウェイエイリアスへ向け、顧客チャットを最初に切り替えないでください。
  5. スキーマ妥当性、拒否率、遅延、成功タスク当たりコストを比較します。
  6. 平文チャットが安定してから、ツールとストリーミングを追加します。
  7. ロールバックを文書化し、以前のモデルエイリアスを生かしておきます。

HTTP スモークテスト

curl https://your-gateway.example.com/v1/chat/completions \
  -H "Authorization: Bearer $GATEWAY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-sonnet",
    "messages": [
      {"role": "user", "content": "Reply with the single word ready."}
    ],
    "max_tokens": 32
  }'

choices[0].message.content を持つ Chat Completions 形 JSON を期待します。形がずれているなら、製品コードより先にゲートウェイのマッピングを直します。

本番チェックリスト(ゲートウェイ経路)

  • 固定評価セットで品質を証明済みで、本番トラフィックは Anthropic の互換レイヤーを長期的な接続先としていない。
  • モデルエイリアスは Anthropic ドキュメントまたは管理されたカタログの現行 Claude ID へマッピングされている。
  • 秘密はゲートウェイまたはシークレットマネージャにあり、ブラウザやモバイルアプリには置かれていない。
  • max_tokens を明示している。暗黙のデフォルトは長い回答を切り詰める可能性がある。
  • ツール引数をサーバー側でスキーマ検証し、無視される strict に依存していない。
  • ストリーミングクライアントは不完全な終端とストリーム途中のエラーを処理する。
  • コストとエラーのダッシュボードは Claude を他プロバイダーから分離する。
  • フェイルオーバー方針に Claude が primary、backup、固定のどれかを明記している。

直接 Anthropic よりゲートウェイが良いとき

トリガーゲートウェイの利点
1つの製品で複数プロバイダー1つのクライアント設定で複数チャネル
チーム全体の資格情報共有 Anthropic キーではなくスコープ付きゲートウェイキー
支出レビュー統合された使用履歴と料金コンテキスト
信頼性目標各サービスを書き換えずに再試行とフェイルオーバー
エージェント群ツールとモデルルーティングの中央ポリシー

AveMujica API は、その制御面として構築されています。OpenAI 互換の入口、プロバイダーチャネル、モデルカタログ、運用履歴を提供します。Anthropic の互換性に関する注意事項を読む必要はなくなりませんが、その注意事項から5つの異なるクライアント分岐が生まれるのを防ぎます。

公式情報源

最終確認:2026-07-15。本番構成を固定する前に、Anthropic のドキュメントでモデル ID と互換性の制限を再確認してください。

よくある質問

Anthropic の OpenAI SDK 経路は本番対応ですか?

Anthropic は、主にテストと比較のための経路であり、大半のユースケースにおける長期的な本番解決策ではないと説明しています。本番フリートでは、OpenAI 入口をネイティブ Claude Messages に変換するゲートウェイ、または Claude 専用機能が必要な箇所で Anthropic のネイティブ API を使ってください。

OpenAI Chat Completions の全フィールドを Claude でそのまま使えますか?

いいえ。strict は無視され、音声は取り除かれ、互換レイヤーではプロンプトキャッシュを利用できず、system/developer ターンは統合されます。実際に出荷するリクエスト形式をテストしてください。

アプリケーション設定にはどのモデル文字列を置くべきですか?

運用者が claude-sonnet-5 や claude-opus-4-8 のような現行 ID へマッピングするゲートウェイエイリアス(claude-sonnet)を優先してください。昨日のスナップショットをすべてのサービスへハードコードしないでください。

Anthropic SDK はまだ必要ですか?

プロンプトキャッシュのマーカー、extended thinking の完全な情報、ネイティブ構造化出力など、意図的に Claude 専用制御が必要な場合は必要です。OpenAI 形式の機能で十分で、ゲートウェイがプロバイダー差異を担う場合は OpenAI SDK を維持します。

最初の Claude 切り替えを実施する

すでに OpenAI SDK を使うサービスを1つ選びます。Anthropic の互換エンドポイントで品質を証明し、その後、そのサービスを Claude Messages へルーティングするゲートウェイエイリアスに移します。平文チャットが正常になってからツールとストリーミングを広げ、初日のトラフィックを以前の OpenAI ベースラインと比較してください。