cd ../返回博客
$Guide//2026年6月4日//6 min read

OpenAI SDK で Claude を呼び出す — 1 行だけ変えて、コードはそのまま

OpenAI SDK の base_url を 1 行変えるだけで、本物の Claude Opus 4.7 / Sonnet 4.6 / Haiku 4.5 を呼び出せます。ストリーミング、ツール使用、ビジョン、JSON モードもそのまま動作。Brievio 経由の最小移行ガイド。

Anthropic 純正の SDK は優れていますが、AI エコシステム全体はすでに OpenAI クライアントの形に標準化しています — あらゆるサンプル、あらゆる フレームワークのアダプター、あらゆる「hello world」チュートリアルが、 手元に OpenAI(...) のインスタンスがある前提で書かれています。 自分のコードを Anthropic の SDK 直叩きに移行するのは、それなりに重い リファクタリングです。

でも、そうする必要はありません。本記事では、Claude Opus 4.7、 Sonnet 4.6、Haiku 4.5 を OpenAI SDK のまま呼び出す方法を示します — Brievio 経由で呼び出しをルーティングするだけです。同じ SDK、同じ型、 同じストリーミング、同じツール使用、そして向こう側にいるのは本物のモデル。 変更するのは base_url の 1 行だけです。

最小限の変更

Python の openai パッケージがすでにインストールされていれば、 移行の全体像はこれだけです。

main.py
from openai import OpenAI

client = OpenAI(
    api_key="sk-brievio-...",
    base_url="https://api.brievio.com/v1",   # 変更するのはこの 1 行だけ
)

resp = client.chat.completions.create(
    model="claude-sonnet-4-6",              # gpt-4o ではなく Claude のスラッグ
    messages=[
        {"role": "system", "content": "You are a senior platform engineer."},
        {"role": "user",   "content": "Critique this SQL migration..."},
    ],
)
print(resp.choices[0].message.content)

api_key は Brievio のキーになります( /app/keys で作成)。base_url は 当社のゲートウェイを指します。モデル ID は gpt-4o から Claude のスラッグ — claude-opus-4-7 claude-sonnet-4-6claude-haiku-4-5 — に 切り替えます。リクエストボディも、レスポンスの形も、SDK のあらゆる ヘルパーも、OpenAI を相手にしたときとまったく同じように振る舞います。

ストリーミング

ストリーミングもまったく同じように動きます。Brievio は Anthropic の SSE チャンクを OpenAI の chat.completion.chunk 形式で転送するため、 既存の非同期イテレーションのパターンが無改造で動作します。

stream.py
for chunk in client.chat.completions.create(
    model="claude-opus-4-7",
    messages=[{"role": "user", "content": "Explain Raft in 200 words."}],
    stream=True,
):
    delta = chunk.choices[0].delta.content
    if delta:
        print(delta, end="", flush=True)

ツール使用 / 関数呼び出し

Anthropic のツール使用プロトコルは、意味的には OpenAI の関数呼び出しと 同じです — 違うのはワイヤーレベルだけです。Brievio は tools 配列、レスポンスの tool_calls、そして後続の tool メッセージを双方向に変換します。tool_choice="auto" "none"、あるいは名前指定のツール — そのすべてが 対応します。

tools.py
tools = [
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "Get current weather in a city",
            "parameters": {
                "type": "object",
                "properties": {
                    "city": {"type": "string"},
                    "unit": {"type": "string", "enum": ["celsius", "fahrenheit"]},
                },
                "required": ["city"],
            },
        },
    }
]

resp = client.chat.completions.create(
    model="claude-sonnet-4-6",
    messages=[{"role": "user", "content": "What's the weather in Tokyo?"}],
    tools=tools,
    tool_choice="auto",
)
print(resp.choices[0].message.tool_calls)

ビジョン

Claude は 3.5 の頃からマルチモーダルです。画像を渡すのは標準的な OpenAI の content: [{ type: 'text' }, { type: 'image_url' }] 配列そのままです。image_url.url には https の URL でも、 data: base64 URI でも指定できます。

vision.py
resp = client.chat.completions.create(
    model="claude-sonnet-4-6",
    messages=[{
        "role": "user",
        "content": [
            {"type": "text", "text": "What's in this image?"},
            {"type": "image_url",
             "image_url": {"url": "https://example.com/cat.jpg"}},
        ],
    }],
)

純正の Anthropic SDK が欲しいとき

Anthropic 固有の機能の中には、OpenAI の形では表現できないものもあります — とりわけプロンプトキャッシュ用の cache_control ディレクティブと、 拡張された thinking トークンです。どちらかが必要なら、SDK は 切り替えつつキーはそのまま使えます。Brievio は純正の /v1/messages エンドポイントも公開しているので、Anthropic の SDK も base_url を 1 か所変えるだけで動きます。

anthropic_native.py
from anthropic import Anthropic

client = Anthropic(
    api_key="sk-brievio-...",
    base_url="https://api.brievio.com",     # SDK が /v1/messages を付与する
)

resp = client.messages.create(
    model="claude-opus-4-7",
    max_tokens=1024,
    system="You are a senior platform engineer.",
    messages=[{"role": "user", "content": "What is a hot standby?"}],
)
print(resp.content[0].text)

パススルーされるパラメーターの一覧は 純正 Messages API のドキュメントを、 プロンプトキャッシュが繰り返しプロンプトで入力コストを最大 90% 削減する 仕組みは /docs/caching をご覧ください。

何を手放し、何を得るのか

OpenAI 形式のルートは翻訳であって、ネイティブのプロトコルではありません。 境界を越えられない小さなものが 2 つあります。

  • cache_control(プロンプトキャッシュ用)— これには純正の Messages SDK を使うか、input のエスケープハッチ経由で渡します。
  • 拡張された思考トークン — レスポンスの usage オブジェクト からは参照できますが、リクエストの直接パラメーターとしては渡せません。 きめ細かく制御したいなら純正に切り替えてください。

得られるものは大きいです。本物の Claude、Gemini、GPT-Image、Veo の カタログ全体を 1 つの SDK で扱え、すべてのモデルで 公式の定価より約 15% 安く、しかも本当のトークン数で課金され、 Stripe ネイティブの請求、そして透明なルーティング — ダッシュボードには、 各呼び出しを実際にどの上流が処理したかが常に表示されます。

2 分で確認する

brievio.com/app/signup でサインアップ してください — 2 ドルの無料クレジットで Claude を数千回呼び出せます。 base_url を差し替え、モデル ID を Claude のスラッグに変え、 既存のテストスイートをそのまま走らせてみてください。うまく越えられない ものがあれば contact@brievio.com までメールを。当社はすべてのメッセージに目を通しています。