Zurück zum Blog
Leitfaden·23. Mai 2026·6 Min. Lesezeit

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

Das SDK von Anthropic ist großartig, aber das Ökosystem hat sich auf OpenAI standardisiert. So rufen Sie Claude Opus 4.7, Sonnet 4.6 und Haiku 4.5 mit den unveränderten OpenAI-Python- und Node-SDKs auf — inklusive Streaming, Tool-Nutzung und Vision.

Anthropics eigenes SDK ist großartig, aber das gesamte KI-Ökosystem hat sich auf die Form des OpenAI-Clients standardisiert — jedes Beispiel, jeder Framework-Adapter und jedes „Hello World“-Tutorial setzt voraus, dass du eine OpenAI(...)-Instanz zur Hand hast. Deinen Code auf direkte Aufrufe von Anthropics SDK zu migrieren, ist ein nicht unerhebliches Refactoring.

Das muss nicht sein. Dieser Beitrag zeigt, wie du Claude Opus 4.7, Sonnet 4.6 und Haiku 4.5 unverändert über das OpenAI SDK aufrufst — indem du deine Aufrufe über Kunavo leitest. Dasselbe SDK, dieselben Typen, dasselbe Streaming, dieselbe Tool-Nutzung. Die einzige geänderte Zeile ist base_url.

Die minimale Änderung

Wenn das Python-Paket openai bereits installiert ist, sieht die vollständige Migration so aus.

main.py
from openai import OpenAI

client = OpenAI(
    api_key="sk-kn-...",
    base_url="https://api.kunavo.com/v1",   # the only line that changes
)

resp = client.chat.completions.create(
    model="claude-sonnet-4-6",              # a Claude slug, not 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 Kunavo-Schlüssel (erstellt unter /app/keys). base_url verweist 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. Request-Body, Antwortstruktur und alle SDK-Hilfsfunktionen verhalten sich exakt wie gegenüber OpenAI.

Streaming

Streaming funktioniert identisch. Kunavo leitet Anthropics SSE-Chunks im OpenAI-Format chat.completion.chunk weiter, sodass das vorhandene Muster für asynchrone Iteration ohne Änderungen 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

Das Tool-Use-Protokoll von Anthropic ist semantisch identisch mit OpenAIs Function Calling — sie unterscheiden sich nur auf Wire-Ebene. Kunavo übersetzt das Array tools, die Antwort tool_calls und die nachfolgenden tool-Nachrichten in beide Richtungen. Verwende tool_choice="auto", "none" oder ein benanntes Tool — alles wird 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)

Bildverständnis

Claude ist seit 3.5 multimodal; zum Übergeben eines Bildes verwendest du das standardmäßige OpenAI-content: [{ type: 'text' }, { type: 'image_url' }]-Array. image_url.url kann eine https-URL oder eine 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"}},
        ],
    }],
)

Wann du das native Anthropic SDK verwenden solltest

Einige ausschließlich bei Anthropic verfügbare Funktionen lassen sich nicht in der OpenAI-Form ausdrücken — vor allem die cache_control-Direktive für Prompt-Caching und erweiterte thinking-Token. Wenn du eines davon benötigst, wechsle das SDK, behalte aber denselben Schlüssel: Kunavo stellt auch den nativen /v1/messages-Endpoint bereit, sodass Anthropics SDK ebenfalls nur eine Änderung von base_url benötigt.

anthropic_native.py
from anthropic import Anthropic

client = Anthropic(
    api_key="sk-kn-...",
    base_url="https://api.kunavo.com",     # SDK appends /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)

Siehe die Dokumentation zur nativen Messages API für die vollständige Liste der durchgereichten Parameter und /docs/caching dafür, wie Prompt-Caching bei wiederholten Prompts bis zu 90 % der Eingabekosten spart.

Prompt-Caching selbst erfordert keinen Wechsel des SDK. Bei einem langen Prompt setzt Kunavo die Cache-Breakpoints für dich auf der Route im OpenAI-Format: am System-Prompt, an den Tool-Definitionen und an der letzten Nachricht einer Unterhaltung, die bereits eine Assistentenantwort enthält. Ein cache_control, das du selbst an einer Systemnachricht, einer Nutzernachricht oder einer Tool-Definition setzt, wird an Claude weitergeleitet.

Was du aufgibst — und was du gewinnst

Die Route im OpenAI-Format ist eine Übersetzung, kein natives Protokoll. Zwei kleine Dinge überschreiten die Grenze nicht:

  • Thinking-Steuerung — thinking und reasoning_effort werden auf dieser Route nicht an Claude weitergeleitet. Um Extended Thinking einzuschalten oder anzupassen, verwende die native Messages API.
  • Thinking-Ausgabe — wenn das Modell denkt, enthält die Antwort dieses Thinking nicht, und das Usage-Objekt weist dafür keinen eigenen Zähler aus: Die Thinking-Token werden in completion_tokens mitgezählt.

Der Gewinn ist beträchtlich: ein SDK für Claude, GPT, GPT-Image, Veo und den restlichen Katalog; unterhalb der offiziellen Upstream-Preise, abhängig vom Modell; Stripe-native Abrechnung in deiner lokalen Währung; keine stillen Modellwechsel — Failover ändert den Anbieter, niemals das Modell, und das Dashboard listet für jeden Aufruf Modell, Token und Kosten einzeln auf.

In zwei Minuten bestätigen

Registriere dich unter kunavo.com/app/signup — eine Aufladung von $10 deckt mehrere tausend Claude-Aufrufe ab, Pay-as-you-go, und dein Guthaben verfällt nie. Trage dein base_url ein, ändere die Modell-ID in einen Claude-Slug und führe deine vorhandene Testsuite damit aus. Wenn etwas nicht sauber funktioniert, schreibe an contact@kunavo.com — wir lesen jede Nachricht.