Inicio / Aprende / Usa Claude con el SDK de OpenAI: endpoint compatible con OpenAI, streaming, herramientas y límites
SDK de OpenAI + Claude. Dos formas de conectores físicos complementarias unen una ventana de código con otra, como una clara metáfora de la compatibilidad del SDK.

Utiliza Claude con el SDK de OpenAI: endpoint compatible con OpenAI, streaming, herramientas y límites

El código escrito para el SDK de OpenAI puede llamar a Claude sin necesidad de reescribirlo: apunta base_url a la /v1de la pasarela, usa una clave de la pasarela y un ID de modelo Claude. El endpoint acepta solicitudes de Chat Completions, transmite las respuestas en streaming con el mismo formato y admite llamadas a funciones. Algunas funciones de Claude solo existen en el formato nativo de Anthropic; la última sección explica cuándo cambiar.

Datos del endpoint

Elemento Valor
URL basehttps://aiprimetech.io/v1
Endpoint de chatPOST https://aiprimetech.io/v1/chat/completions
Lista de modelosGET https://aiprimetech.io/v1/models
AutenticaciónAuthorization: Bearer <key>; x-api-key también se acepta
ModelosID de Claude como claude-sonnet-5; ID de GPT con una clave del grupo Codex

Python

terminal
pip install openai
app.py
import os
from openai import OpenAI

client = OpenAI(base_url="https://aiprimetech.io/v1", api_key=os.environ["AIPRIME_API_KEY"])

resp = client.chat.completions.create(
    model="claude-sonnet-5",
    max_tokens=1024,
    messages=[
        {"role": "system", "content": "You are a concise assistant."},
        {"role": "user", "content": "Explain idempotency keys in two sentences."},
    ],
)
print(resp.choices[0].message.content)
print(resp.usage)

base_url debe terminar en /v1: el SDK añade /chat/completions al final. Sin /v1 la solicitud llega al sitio web y devuelve HTML; con /v1 dos veces devuelve 404 page not found.

Node.js

app.mjs
import OpenAI from "openai";

const client = new OpenAI({ baseURL: "https://aiprimetech.io/v1", apiKey: process.env.AIPRIME_API_KEY });

const resp = await client.chat.completions.create({
  model: "claude-sonnet-5",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Write a haiku about retries." }],
});
console.log(resp.choices[0].message.content);

Transmisión en tiempo real

stream.py
stream = client.chat.completions.create(
    model="claude-sonnet-5",
    max_tokens=2048,
    stream=True,
    stream_options={"include_usage": True},
    messages=[{"role": "user", "content": "Outline a zero-downtime migration."}],
)
for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)
    if chunk.usage:
        print("\n", chunk.usage)

Usa streaming para las respuestas largas: una solicitud sin streaming debe completarse dentro del tiempo de espera de tu cliente; una con streaming no. include_usage añade un fragmento final con el recuento de tokens. Más información sobre su importancia en respuestas de LLM en streaming.

Llamadas a funciones

tools.py
tools = [{
    "type": "function",
    "function": {
        "name": "get_weather",
        "description": "Current weather for a city",
        "parameters": {
            "type": "object",
            "properties": {"city": {"type": "string"}},
            "required": ["city"],
        },
    },
}]

resp = client.chat.completions.create(
    model="claude-sonnet-5", max_tokens=512, tools=tools,
    messages=[{"role": "user", "content": "What is the weather in Paris?"}],
)
call = resp.choices[0].message.tool_calls[0]
print(call.function.name, call.function.arguments)   # get_weather {"city": "Paris"}

La respuesta llega con finish_reason: "tool_calls" y, en el formato de OpenAI, tool_calls. Ejecuta la función, añade un tool mensaje con el resultado y el correspondiente tool_call_id, y vuelve a llamar, exactamente igual que con los modelos de OpenAI.

Razonamiento y pensamiento

reasoning_effort se corresponde con el ajuste de esfuerzo de Claude y acepta low, medium, high, xhigh o max. El valor none se rechaza. Cuando el modelo piensa, su razonamiento llega en un reasoning_content campo separado junto a content, por lo que el código que lee message.content sigue funcionando sin cambios.

reasoning.py
resp = client.chat.completions.create(
    model="claude-opus-5-5", max_tokens=4096, reasoning_effort="high",
    messages=[{"role": "user", "content": "Find the bug in this function: ..."}],
)

Modelos

ID del modelo Úsalo para
claude-sonnet-5Opción predeterminada para programación y trabajo con agentes: rápida, potente y de precio intermedio.
claude-opus-5-5Razonamiento más complejo, refactorizaciones grandes y ejecuciones largas de agentes.
claude-fable-5-1El más capaz y el más caro; resérvalo para las tareas más difíciles.
claude-haiku-4-5Económico y rápido: títulos, resúmenes, clasificación y pasos pequeños.

Usa estos ID exactamente como aparecen. Los ID antiguos con fecha, como claude-3-5-sonnet-20241022 siguen apareciendo en algunas listas de modelos, pero no están disponibles y devuelven un error de modelo no compatible.

Cuándo usar la API nativa de Anthropic

El formato de OpenAI admite chat, streaming, herramientas e imágenes. Usa el formato Messages de Anthropic, en la misma pasarela, cuando necesites puntos de corte explícitos para la caché de prompts, bloques de pensamiento que se envían de vuelta entre turnos, documentos PDF o citas. La guía del SDK de Python de Anthropic y el guía de Vercel AI SDK explican esa vía.

Resolución de problemas

Lo que ves Causa Solución
Un error de análisis de JSON, con una respuesta que empieza por <base_url sin /v1https://aiprimetech.io/v1
404 page not found/v1 dos vecesExactamente un /v1
401 Invalid API keyClave ausente o incorrecta en el procesoComprueba la variable; cada clave pertenece a una pasarela
Modelo no compatibleID de modelo antiguo con fecha o mal escritoUsa un ID de la tabla anterior
'none' is not supportedreasoning_effort="none"Usa low o superior, o no lo incluyas
429 Concurrency limit exceeded for userDemasiadas solicitudes en cursoLimita el paralelismo; consulta límites de solicitudes y reintentos
Tiempos de espera agotados en respuestas largasSolicitud larga sin streamingUsa streaming o aumenta el tiempo de espera del cliente

Preguntas frecuentes

¿Puedo usar Claude con el SDK de OpenAI?
Sí, mediante un endpoint compatible con OpenAI: configura base_url con la URL de la pasarela terminada en /v1, usa una clave API de la pasarela y un ID de modelo de Claude como claude-sonnet-5. El streaming y las llamadas a funciones funcionan en el formato de OpenAI.
¿Qué URL base debo usar para Claude en el SDK de OpenAI?
La URL de la pasarela terminada en /v1, por ejemplo, https://aiprimetech.io/v1. El SDK añade /chat/completions.
¿Funcionan las llamadas a funciones con Claude mediante el formato de OpenAI?
Sí. Envía tools en el formato de OpenAI; Claude devuelve tool_calls con finish_reason tool_calls, y respondes con mensajes de herramienta como de costumbre.
¿Cuándo debo usar la API nativa de Anthropic?
Cuando necesites caché explícita de prompts, bloques de pensamiento entre turnos, entrada de PDF o citas. Estas funciones forman parte del formato Messages de Anthropic.
Empieza a usar Claude en minutos

Obtén una clave de API: no necesitas una cuenta de Anthropic ni estar en una lista de espera.

Obtén tu clave de API

AI Prime Tech es una pasarela de API independiente. No está afiliada a Anthropic, no cuenta con su respaldo ni es un distribuidor de Anthropic. Claude y los nombres de los modelos relacionados son marcas comerciales de sus respectivos propietarios.

Más guías de la API de Claude

Cómo obtener una clave de API de ClaudePrecios de la API de Claude, explicadosLa forma más económica de usar la API de ClaudeCursor ilimitado con la API de ClaudeAcceso ilimitado a Claude CodeGateway de la API de Claude frente al acceso directo a AnthropicLos modelos de Claude explicados: una comparación de Claude Opus, Sonnet, Haiku y Fable; todos los modelos de la API de Claude, nombres de modelos de Anthropic y precios (2026)Pagar la API de Claude con criptomonedasAcceso a la API de Claude sin lista de esperaCómo reducir el uso de tokens de ClaudeCline ilimitado con la API de ClaudeRoo Code ilimitado con la API de ClaudeClaude ilimitado en los IDE de JetBrainsAider con Claude a través de una pasarela: ANTHROPIC_API_BASE, archivos de configuración, modo arquitecto y solucionesClaude ilimitado en VS CodeConfiguración de OpenCode para Claude: ajustes de opencode.json, modelos y errores comunesHermes Agent con Claude a través de una pasarela: configuración de un proveedor personalizado, controles de costes y solucionesEjecutar OpenClaw sin límites con ClaudeQué significa una API compatible con AnthropicClave API de Claude Code — ANTHROPIC_API_KEY: cómo obtenerla, configurarla y cuándo usar claude setup-token en su lugarCostes de la API de Claude Code: precios y cómo reducirlosExplicación de los errores de la API de Claude: error del servidor 500, sobrecarga 529, límite de solicitudes 429, solicitud incorrecta 400 y la solución para cada unoCómo comprar créditos para la API de Claude y por qué un crédito de Claude es mejor que cualquier oferta de «comprar una cuenta de Claude»API gratuita de Claude: ¿existe una clave API de Claude gratuita y qué es realmente gratis en 2026?API de Claude frente a la suscripción Claude Pro/Max: cuál elegirCodex CLI con un proveedor personalizado: config.toml, modelos GPT y Claude, extensión para IDE y solucionesConectar Claude a n8nEnrutar LiteLLM a ClaudeUsar Claude en Kilo CodeGitHub Copilot Chat con Claude a través de una pasarela: configuración de Custom Endpoint, modo agente y solucionesConecta Zed a Claude a través de la pasarelaConecta Cherry Studio a ClaudeChatAnthropic en LangChain: importación, base_url, streaming, herramientas y erroresSDK de Python de Anthropic: instalación, configuración de base_url, streaming y gestión de erroresClaude con Vercel AI SDK: baseURL de createAnthropic, streaming y solucionesEjecuta Factory Droid con ClaudeLa API de Claude Code, explicadaIntegración de la API de Claude en tu aplicaciónCómo usar Claude sin límites y por qué no existe un «Claude Code crackeado»