
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 base | https://aiprimetech.io/v1 |
| Endpoint de chat | POST https://aiprimetech.io/v1/chat/completions |
| Lista de modelos | GET https://aiprimetech.io/v1/models |
| Autenticación | Authorization: Bearer <key>; x-api-key también se acepta |
| Modelos | ID de Claude como claude-sonnet-5; ID de GPT con una clave del grupo Codex |
Python
pip install openaiimport 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
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 = 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 = [{
"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.
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-5 | Opción predeterminada para programación y trabajo con agentes: rápida, potente y de precio intermedio. |
claude-opus-5-5 | Razonamiento más complejo, refactorizaciones grandes y ejecuciones largas de agentes. |
claude-fable-5-1 | El más capaz y el más caro; resérvalo para las tareas más difíciles. |
claude-haiku-4-5 | Econó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 /v1 | https://aiprimetech.io/v1 |
404 page not found | /v1 dos veces | Exactamente un /v1 |
401 Invalid API key | Clave ausente o incorrecta en el proceso | Comprueba la variable; cada clave pertenece a una pasarela |
| Modelo no compatible | ID de modelo antiguo con fecha o mal escrito | Usa un ID de la tabla anterior |
'none' is not supported | reasoning_effort="none" | Usa low o superior, o no lo incluyas |
429 Concurrency limit exceeded for user | Demasiadas solicitudes en curso | Limita el paralelismo; consulta límites de solicitudes y reintentos |
| Tiempos de espera agotados en respuestas largas | Solicitud larga sin streaming | Usa streaming o aumenta el tiempo de espera del cliente |
Preguntas frecuentes
¿Puedo usar Claude con el SDK de OpenAI?
¿Qué URL base debo usar para Claude en el SDK de OpenAI?
¿Funcionan las llamadas a funciones con Claude mediante el formato de OpenAI?
¿Cuándo debo usar la API nativa de Anthropic?
Obtén una clave de API: no necesitas una cuenta de Anthropic ni estar en una lista de espera.
Obtén tu clave de APIAI 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.