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

Claude mit dem OpenAI-SDK aufrufen — eine Zeile ändern, deinen Code behalten

So rufst du echtes Claude (Opus 4.7, Sonnet 4.6, Haiku 4.5) über das unveränderte OpenAI-SDK auf: nur base_url ändern. Streaming, Tools, Vision und JSON-Mode bleiben identisch.

Anthropics eigenes SDK ist großartig, aber das gesamte KI-Ökosystem hat sich auf die Form des OpenAI-Clients eingependelt — jedes Beispiel, jeder Framework-Adapter, jedes „Hello World"-Tutorial setzt voraus, dass du eine OpenAI(...)-Instanz griffbereit hast. Deinen Code so umzubauen, dass er Anthropics SDK direkt aufruft, ist ein ernst zu nehmendes Refactoring.

Das muss nicht sein. Dieser Beitrag zeigt, wie du Claude Opus 4.7, Sonnet 4.6 und Haiku 4.5 über das unveränderte OpenAI-SDK aufrufst — indem du deine Calls über Brievio routest. Gleiches SDK, gleiche Typen, gleiches Streaming, gleiche Tool-Nutzung und das echte Modell am anderen Ende. Die einzige Zeile, die sich ändert, ist base_url.

Die minimale Änderung

Mit bereits installiertem openai-Paket für Python sieht die komplette Migration so aus.

main.py
from openai import OpenAI

client = OpenAI(
    api_key="sk-brievio-...",
    base_url="https://api.brievio.com/v1",   # die einzige Zeile, die sich ändert
)

resp = client.chat.completions.create(
    model="claude-sonnet-4-6",              # ein Claude-Slug, nicht gpt-4o
    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 wird zu deinem Brievio-Key (erstellt unter /app/keys). base_url zeigt auf unser Gateway. Die Modell-ID wechselt von gpt-4o zu einem Claude-Slug — claude-opus-4-7, claude-sonnet-4-6, claude-haiku-4-5. Der Request-Body, die Form der Antwort und jeder Helper im SDK verhalten sich exakt so wie gegen OpenAI.

Streaming

Streaming funktioniert identisch. Brievio leitet Anthropics SSE-Chunks im chat.completion.chunk-Format von OpenAI weiter, sodass dein bestehendes Muster für die asynchrone Iteration ohne Änderung funktioniert.

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)

Tool-Nutzung / Function Calling

Anthropics Tool-Use-Protokoll ist semantisch dasselbe wie OpenAIs Function Calling — sie unterscheiden sich nur auf der Wire-Ebene. Brievio übersetzt das tools-Array, die tool_calls in der Antwort und die nachfolgenden tool-Nachrichten in beide Richtungen. Nutze tool_choice="auto", "none" oder ein benanntes Tool — sie alle werden abgebildet.

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)

Vision

Claude ist seit 3.5 multimodal; ein Bild übergibst du als das übliche OpenAI- content: [{ type: 'text' }, { type: 'image_url' }]-Array. image_url.url kann eine https-URL oder ein data:-Base64-URI sein.

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"}},
        ],
    }],
)

Wenn du doch das native Anthropic-SDK willst

Manche Anthropic-exklusiven Features lassen sich nicht in der OpenAI-Form ausdrücken — allen voran die cache_control-Direktive für Prompt-Caching und erweiterte thinking-Tokens. Brauchst du eines davon, wechsle das SDK, aber behalte denselben Key: Brievio stellt auch den nativen /v1/messages-Endpunkt bereit, sodass Anthropics SDK ebenfalls mit einer einzigen Änderung an base_url funktioniert.

anthropic_native.py
from anthropic import Anthropic

client = Anthropic(
    api_key="sk-brievio-...",
    base_url="https://api.brievio.com",     # das SDK hängt /v1/messages an
)

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)

In den Docs zur nativen Messages-API findest du die vollständige Liste der durchgereichten Parameter, und /docs/caching erklärt, wie Prompt-Caching bei wiederholten Prompts bis zu 90% der Input-Kosten spart.

Was du aufgibst — und was du gewinnst

Die Route über die OpenAI-Form ist eine Übersetzung, kein natives Protokoll. Zwei Kleinigkeiten überqueren die Grenze nicht:

  • cache_control für Prompt-Caching — dafür nimmst du das native Messages-SDK oder übergibst es über die input-Escape-Hatch.
  • Erweiterte thinking-Tokens — im Usage-Objekt der Antwort zugänglich, aber nicht als direkter Request-Parameter; wechsle zu nativ, wenn du feine Kontrolle brauchst.

Was du gewinnst, ist beträchtlich: ein SDK über den gesamten Katalog aus echtem Claude, Gemini, GPT-Image und Veo; rund 15% unter offiziellem Listenpreis bei jedem Modell, abgerechnet auf echte Token-Zahlen; Stripe-natives Billing; und transparentes Routing — das Dashboard zeigt immer an, welcher Upstream jeden Call tatsächlich bedient hat.

Zwei Minuten zum Prüfen

Registriere dich unter brievio.com/app/signup — das kostenlose Guthaben von $2 deckt ein paar Tausend Claude-Calls ab. Trag deine base_url ein, tausch deine Modell-ID gegen einen Claude-Slug, und lass deine bestehende Test-Suite dagegen laufen. Wenn etwas nicht sauber überquert, schreib an contact@brievio.com — wir lesen jede Nachricht.