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

Llamar a Claude con el SDK de OpenAI: cambia una línea y conserva tu código

Llama a Claude Opus 4.7, Sonnet 4.6 y Haiku 4.5 con el SDK de OpenAI sin modificarlo, enrutando por Brievio. Solo cambia base_url: mismo streaming, herramientas, visión y JSON.

El SDK propio de Anthropic es estupendo, pero todo el ecosistema de IA se ha estandarizado en torno a la forma del cliente de OpenAI: cada ejemplo, cada adaptador de framework, cada tutorial de «hola mundo» da por hecho que tienes a mano una instancia de OpenAI(...). Migrar tu código para llamar directamente al SDK de Anthropic es una refactorización nada trivial.

No tiene por qué serlo. Este artículo muestra cómo llamar a Claude Opus 4.7, Sonnet 4.6 y Haiku 4.5 a través del SDK de OpenAI sin modificarlo, enrutando tus llamadas por Brievio. El mismo SDK, los mismos tipos, el mismo streaming, el mismo uso de herramientas y el modelo genuino al otro lado. La única línea que cambia es base_url.

El cambio mínimo

Con el paquete openai de Python ya instalado, la migración completa tiene este aspecto.

main.py
from openai import OpenAI

client = OpenAI(
    api_key="sk-brievio-...",
    base_url="https://api.brievio.com/v1",   # la única línea que cambia
)

resp = client.chat.completions.create(
    model="claude-sonnet-4-6",              # un slug de Claude, no 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 pasa a ser tu clave de Brievio (creada en /app/keys). base_url apunta a nuestro gateway. El id del modelo cambia de gpt-4o a un slug de Claude: claude-opus-4-7, claude-sonnet-4-6, claude-haiku-4-5. El cuerpo de la petición, la forma de la respuesta y cada helper del SDK se comportan exactamente igual que contra OpenAI.

Streaming

El streaming funciona de forma idéntica. Brievio reenvía los fragmentos SSE de Anthropic en el formato chat.completion.chunk de OpenAI, de modo que tu patrón de iteración asíncrona ya existente funciona sin cambios.

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 herramientas / function calling

El protocolo de uso de herramientas de Anthropic es semánticamente igual que el function calling de OpenAI: solo difieren a nivel de protocolo. Brievio traduce el array tools, los tool_calls de la respuesta y los mensajes tool de seguimiento en ambos sentidos. Usa tool_choice="auto", "none" o una herramienta concreta por su nombre: todos se mapean.

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)

Visión

Claude es multimodal desde la versión 3.5; pasar una imagen es el array estándar de OpenAI content: [{ type: 'text' }, { type: 'image_url' }]. image_url.url puede ser una URL https o 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"}},
        ],
    }],
)

Cuándo sí quieres el SDK nativo de Anthropic

Algunas funciones exclusivas de Anthropic no se pueden expresar en la forma de OpenAI; sobre todo la directiva cache_control para el cacheo de prompts y los tokens de thinking extendido. Si necesitas alguna de ellas, cambia de SDK pero conserva la misma clave: Brievio también expone el endpoint nativo /v1/messages, así que el SDK de Anthropic también funciona con un único cambio de base_url.

anthropic_native.py
from anthropic import Anthropic

client = Anthropic(
    api_key="sk-brievio-...",
    base_url="https://api.brievio.com",     # el SDK añade /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)

Consulta la documentación de la Messages API nativa para ver la lista completa de parámetros pass-through, y /docs/caching para saber cómo el cacheo de prompts ahorra hasta un 90% del coste de input en prompts repetidos.

A qué renuncias y qué ganas

La ruta con forma de OpenAI es una traducción, no el protocolo nativo. Dos pequeñas cosas no cruzan la frontera:

  • cache_control para el cacheo de prompts: usa el SDK nativo de Messages para eso, o pásalo mediante el escape hatch input.
  • Tokens de thinking extendido: accesibles en el objeto usage de la respuesta, pero no como parámetro directo de la petición; cambia a nativo si necesitas un control fino.

Lo que ganas es significativo: un único SDK para todo el catálogo de Claude, Gemini, GPT-Image y Veo genuinos; ~15% por debajo de la lista oficial en cada modelo, facturado sobre los conteos reales de tokens; facturación nativa con Stripe; y enrutamiento transparente — el panel siempre muestra qué upstream sirvió realmente cada llamada.

Dos minutos para confirmarlo

Regístrate en brievio.com/app/signup: el crédito gratuito de 2 $ cubre unos cuantos miles de llamadas a Claude. Pon tu base_url, cambia el id del modelo por un slug de Claude y ejecuta tu suite de pruebas actual contra él. Si algo no cruza limpiamente, escribe a contact@brievio.com: leemos todos los mensajes.