Voltar ao blog
Guia·23 de maio de 2026·6 min de leitura

Chamando o Claude com o SDK da OpenAI — mude uma linha e mantenha sua base de código

O SDK da Anthropic é excelente, mas o ecossistema se padronizou nos SDKs da OpenAI. Veja como chamar Claude Opus 4.7, Sonnet 4.6 e Haiku 4.5 com os SDKs Python e Node da OpenAI sem modificações — incluindo streaming, uso de ferramentas e visão.

O SDK da própria Anthropic é excelente, mas todo o ecossistema de IA se padronizou no formato do cliente da OpenAI — todos os exemplos, adaptadores de frameworks e tutoriais de “hello world” pressupõem que você tenha uma instância OpenAI(...) disponível. Migrar seu código para chamar diretamente o SDK da Anthropic é uma refatoração significativa.

Não precisa ser assim. Esta publicação mostra como chamar Claude Opus 4.7, Sonnet 4.6 e Haiku 4.5 pelo SDK da OpenAI sem alterações — roteando suas chamadas pela Kunavo. Mesmo SDK, mesmos tipos, mesmo streaming e mesmo uso de ferramentas. A única linha que muda é base_url.

A mudança mínima

Com o pacote openai do Python já instalado, a migração completa fica assim.

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 passa a ser sua chave da Kunavo (criada em /app/keys). base_url aponta para nosso gateway. O ID do modelo muda de gpt-4o para um slug do Claude — claude-opus-4-7, claude-sonnet-4-6, claude-haiku-4-5. O corpo da solicitação, o formato da resposta e todos os auxiliares do SDK funcionam exatamente como na OpenAI.

Streaming

O streaming funciona de forma idêntica. A Kunavo encaminha os chunks SSE da Anthropic no formato chat.completion.chunk da OpenAI, portanto o padrão existente de iteração assíncrona funciona sem modificações.

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)

Uso de ferramentas / chamadas de função

O protocolo de uso de ferramentas da Anthropic é semanticamente igual às chamadas de função da OpenAI — eles diferem apenas no nível do protocolo de transmissão. A Kunavo traduz o array tools, a resposta tool_calls e as mensagens de acompanhamento tool nos dois sentidos. Use tool_choice="auto", "none" ou uma ferramenta nomeada — todos fazem o mapeamento.

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)

Visão

O Claude é multimodal desde a versão 3.5; passar uma imagem usa o array padrão da OpenAI content: [{ type: 'text' }, { type: 'image_url' }]. image_url.url pode ser uma URL https ou uma 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"}},
        ],
    }],
)

Quando você quiser usar o SDK nativo da Anthropic

Alguns recursos exclusivos da Anthropic não podem ser expressos no formato da OpenAI — principalmente a diretiva cache_control para cache de prompts e os tokens thinking estendidos. Se precisar de algum deles, troque de SDK, mas mantenha a mesma chave: a Kunavo também expõe o endpoint nativo /v1/messages, portanto o SDK da Anthropic funciona com apenas uma alteração de 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)

Consulte a documentação da API Messages nativa para ver a lista completa de parâmetros encaminhados e /docs/caching para saber como o cache de prompts economiza até 90% do custo de entrada em prompts repetidos.

O cache de prompts, por si só, não exige trocar de SDK. Em um prompt longo, a Kunavo define os pontos de interrupção do cache para você na rota no formato da OpenAI: no prompt do sistema, nas definições de ferramentas e na última mensagem de uma conversa que já contém um turno do assistente. Um cache_control que você mesmo colocar em uma mensagem do sistema, em uma mensagem do usuário ou em uma definição de ferramenta é encaminhado ao Claude.

O que você perde — e o que ganha

A rota no formato da OpenAI é uma tradução, não o protocolo nativo. Duas coisas pequenas não atravessam essa fronteira:

  • Controles de raciocínio — thinking e reasoning_effort não são encaminhados ao Claude nesta rota. Para ativar o raciocínio estendido ou ajustá-lo, use a API Messages nativa.
  • Saída de raciocínio — quando o modelo raciocina, a resposta não inclui esse raciocínio, e o objeto de uso não apresenta uma contagem separada para ele: os tokens de raciocínio são contabilizados dentro de completion_tokens.

O ganho é significativo: um SDK para Claude, GPT, GPT-Image, Veo e o restante do catálogo; abaixo dos preços oficiais upstream, dependendo do modelo; cobrança nativa da Stripe na sua moeda local; nenhuma troca silenciosa de modelo — o failover muda o fornecedor, nunca o modelo, e o painel detalha o modelo, os tokens e o custo de cada chamada.

Dois minutos para confirmar

Cadastre-se em kunavo.com/app/signup — uma recarga de $10 cobre vários milhares de chamadas Claude, com pagamento conforme o uso e saldo sem expiração. Insira seu base_url, troque o ID do modelo por um slug do Claude e execute sua suíte de testes existente contra ele. Se algo não funcionar corretamente, envie um e-mail para contact@kunavo.com — lemos todas as mensagens.