Retour au blog
Guide·23 mai 2026·6 min de lecture

Appeler Claude avec le SDK OpenAI — changez une ligne, conservez votre base de code

Le SDK d’Anthropic est excellent, mais l’écosystème s’est standardisé autour de celui d’OpenAI. Voici comment appeler Claude Opus 4.7, Sonnet 4.6 et Haiku 4.5 avec les SDK Python et Node OpenAI non modifiés — streaming, utilisation d’outils et vision inclus.

Le SDK d’Anthropic est excellent, mais tout l’écosystème de l’IA s’est standardisé sur la structure du client OpenAI — chaque exemple, chaque adaptateur de framework et chaque tutoriel « hello world » suppose que vous disposez d’une instance OpenAI(...). Migrer votre code pour appeler directement le SDK d’Anthropic constitue une refactorisation importante.

Ce n’est pas nécessaire. Cet article montre comment appeler Claude Opus 4.7, Sonnet 4.6 et Haiku 4.5 via le SDK OpenAI sans modification — en faisant passer vos appels par Kunavo. Même SDK, mêmes types, même streaming, même utilisation des outils. La seule ligne qui change est base_url.

La modification minimale

Avec le package Python openai déjà installé, la migration complète ressemble à ceci.

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 devient votre clé Kunavo (créée dans /app/keys). base_url pointe vers notre passerelle. L’identifiant du modèle passe de gpt-4o à un slug Claude — claude-opus-4-7, claude-sonnet-4-6, claude-haiku-4-5. Le corps de la requête, la forme de la réponse et tous les assistants du SDK se comportent exactement comme avec OpenAI.

Diffusion en continu

Le streaming fonctionne de manière identique. Kunavo transmet les fragments SSE d’Anthropic au format chat.completion.chunk d’OpenAI ; le schéma d’itération asynchrone existant fonctionne donc sans modification.

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)

Utilisation des outils / appels de fonctions

Le protocole d’utilisation des outils d’Anthropic est sémantiquement identique aux appels de fonctions d’OpenAI — seule la couche filaire diffère. Kunavo traduit le tableau tools, la réponse tool_calls et les messages de suivi tool dans les deux sens. Utilisez tool_choice="auto", "none" ou un outil nommé : ils sont tous pris en charge.

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 est multimodal depuis la version 3.5 ; transmettre une image se fait avec le tableau OpenAI standard content: [{ type: 'text' }, { type: 'image_url' }]. image_url.url peut être une URL https ou un URI base64 data:.

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

Quand utiliser le SDK Anthropic natif

Certaines fonctions propres à Anthropic ne peuvent pas être exprimées dans la structure OpenAI — notamment la directive cache_control pour la mise en cache des prompts et les tokens thinking étendus. Si vous avez besoin de l’une ou l’autre, changez de SDK tout en conservant la même clé : Kunavo expose également l’endpoint natif /v1/messages, de sorte que le SDK d’Anthropic ne nécessite lui aussi qu’une seule modification base_url.

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)

Consultez la documentation de l’API Messages native pour la liste complète des paramètres transmis tels quels, et /docs/caching pour découvrir comment la mise en cache des prompts permet d’économiser jusqu’à 90 % du coût des entrées sur les prompts répétés.

La mise en cache des prompts ne nécessite pas en elle-même de changer de SDK. Pour un prompt long, Kunavo définit les points de rupture du cache pour vous sur la route au format OpenAI : sur le prompt système, sur les définitions d’outils et sur le dernier message d’une conversation qui contient déjà un tour de l’assistant. Un cache_control que vous placez vous-même sur un message système, un message utilisateur ou une définition d’outil est transmis à Claude.

Ce que vous abandonnez — et ce que vous gagnez

La route au format OpenAI est une traduction, et non un protocole natif. Deux petits éléments ne franchissent pas la frontière :

  • Paramètres de réflexion — thinking et reasoning_effort ne sont pas transmis à Claude sur cette route. Pour activer la réflexion étendue ou la régler, utilisez l’API Messages native.
  • Sortie de la réflexion — lorsque le modèle réfléchit, la réponse n’inclut pas cette réflexion, et l’objet d’utilisation n’en fournit aucun décompte distinct : les tokens de réflexion sont comptabilisés dans completion_tokens.

Le gain est important : un seul SDK pour Claude, GPT, GPT-Image, Veo et le reste du catalogue ; à des tarifs officiels amont ou inférieurs selon le modèle ; une facturation native Stripe dans votre devise locale ; aucun changement silencieux de modèle — le basculement modifie le fournisseur, jamais le modèle, et le tableau de bord détaille le modèle, les tokens et le coût de chaque appel.

Deux minutes pour vérifier

Inscrivez-vous sur kunavo.com/app/signup — un rechargement de 10 $ couvre plusieurs milliers d’appels Claude, avec paiement à l’usage et un solde qui n’expire jamais. Ajoutez votre base_url, remplacez l’identifiant de modèle par un slug Claude et exécutez votre suite de tests existante. Si quelque chose ne fonctionne pas correctement, écrivez à contact@kunavo.com — nous lisons chaque message.