Inicio / Aprende / SDK de Python de Anthropic: instalar, configurar base_url, usar streaming y gestionar errores
Claude en Python. Una elegante curva serpenteante con forma de cinta que rodea una página de código y se conecta a un pequeño conector de API.

SDK de Python de Anthropic: instalación, configuración de base_url, streaming y gestión de errores

El anthropic es el paquete del cliente oficial de Python de Anthropic para la API de Claude. Gestiona la autenticación, los reintentos, el streaming y los errores tipados, y funciona sin modificaciones con cualquier endpoint compatible con Anthropic: configura base_url (o ANTHROPIC_BASE_URL) y el resto de tu código permanece igual.

Instalación

terminal
pip install anthropic

Las versiones 1.x funcionan con httpx2 y requieren Python 3.10 o posterior. Si proporcionas tu propio cliente HTTP, usa DefaultHttpxClient del SDK para conservar sus tiempos de espera y límites de conexión predeterminados.

Crear un cliente

app.py
import anthropic

client = anthropic.Anthropic(
    api_key="your_key",   # default: ANTHROPIC_API_KEY
    base_url="https://aiprimetech.io",    # default: ANTHROPIC_BASE_URL, else https://api.anthropic.com
)

base_url es la raíz del host. El SDK añade /v1/messages automáticamente, por lo que https://aiprimetech.io/v1 produciría /v1/v1/messages y un 404 page not found. Con ambas variables definidas en el entorno, anthropic.Anthropic() no necesita ningún argumento:

terminal
export ANTHROPIC_API_KEY=your_key
export ANTHROPIC_BASE_URL=https://aiprimetech.io

Enviar un mensaje

app.py
message = client.messages.create(
    model="claude-sonnet-5",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Summarise TCP slow start in two sentences."}],
)

for block in message.content:
    if block.type == "text":
        print(block.text)

print(message.usage.input_tokens, message.usage.output_tokens)
print(message._request_id)   # log this with any failure report

content es una lista de bloques (texto, razonamiento, uso de herramientas), así que comprueba block.type en lugar de leer content[0].text a ciegas.

Recibir respuestas en streaming

stream.py
with client.messages.stream(
    model="claude-sonnet-5",
    max_tokens=16000,
    messages=[{"role": "user", "content": "Write a short story about a lighthouse."}],
) as stream:
    for text in stream.text_stream:
        print(text, end="", flush=True)
    final = stream.get_final_message()

Usa streaming para cualquier solicitud con una entrada larga, una salida larga o un valor elevado de max_tokens: una solicitud sin streaming debe completarse dentro del tiempo de espera; una con streaming no. messages.create(..., stream=True) te proporciona el iterador de eventos sin procesar si no necesitas la función auxiliar.

Cliente asíncrono

async_app.py
import asyncio, anthropic

client = anthropic.AsyncAnthropic(base_url="https://aiprimetech.io")
limit = asyncio.Semaphore(3)   # stay within your key's concurrency

async def ask(question: str) -> str:
    async with limit:
        msg = await client.messages.create(
            model="claude-haiku-4-5",
            max_tokens=512,
            messages=[{"role": "user", "content": question}],
        )
        return next(b.text for b in msg.content if b.type == "text")

async def main():
    answers = await asyncio.gather(*(ask(q) for q in ["What is DNS?", "What is BGP?"]))
    print(answers)

asyncio.run(main())

El semáforo es importante. Lanzar cientos de solicitudes a la vez con asyncio.gather es la causa más habitual de los errores Concurrency limit exceeded que observamos en clientes de Python.

Tiempos de espera y reintentos

Valores predeterminados: un tiempo de espera de 10 minutos por solicitud y 2 reintentos automáticos con espera exponencial. El SDK reintenta los errores de conexión, 408, 409, 429 y las respuestas 5xx. Como también se reintentan las solicitudes cuyo tiempo de espera se agota, el tiempo total transcurrido en el peor caso es el tiempo de espera multiplicado por el número de intentos.

app.py
client = anthropic.Anthropic(base_url="https://aiprimetech.io", timeout=60.0, max_retries=4)

# override for one call only
client.with_options(timeout=300.0).messages.create(
    model="claude-opus-5-5",
    max_tokens=4000,
    messages=[{"role": "user", "content": "Review this design doc..."}],
)

Gestión de errores

Estado Excepción ¿Reintentar?
400anthropic.BadRequestErrorNo: corrige la solicitud
401anthropic.AuthenticationErrorNo: clave incorrecta o ausente
403anthropic.PermissionDeniedErrorNo
404anthropic.NotFoundErrorNo: ID del modelo o URL
429anthropic.RateLimitErrorSí, tras una pausa
5xx, incluido 529 por sobrecargaanthropic.InternalServerErrorSí
Fallo de redanthropic.APIConnectionErrorSí
Tiempo de espera agotadoanthropic.APITimeoutErrorSí, o usa streaming
errors.py
try:
    message = client.messages.create(model="claude-sonnet-5", max_tokens=1024,
                                      messages=[{"role": "user", "content": "Hi"}])
except anthropic.NotFoundError as e:
    print("Bad model ID or URL:", e.message)
except anthropic.RateLimitError as e:
    print("Rate limited, retry after", e.response.headers.get("retry-after"))
except anthropic.APIStatusError as e:
    print(e.status_code, e.type, e.message)
except anthropic.APIConnectionError:
    print("Network problem")

Captura primero las clases específicas y APIStatusError al final; una captura genérica con except oculta la diferencia entre los errores que conviene reintentar y los que requieren un cambio en el código. e.type proporciona la cadena del tipo de error de la API, como rate_limit_error o overloaded_error.

ID de 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.

client.models.list() devuelve los modelos que ofrece un endpoint, para que puedas comprobar un ID antes de usarlo. Usa los ID exactamente como aparecen: sin sufijos de fecha.

Resolución de problemas en una pasarela

Lo que ves Causa Solución
NotFoundError por 404 page not found/v1 en base_urlUsa la raíz del host
AuthenticationErrorLa clave no está definida en el proceso o se ha pegado con espacios en blancoImprime len(os.environ["ANTHROPIC_API_KEY"])
RateLimitError: Concurrency limit exceeded for userDemasiadas solicitudes en cursoUn asyncio.Semaphore como el anterior
APITimeoutError en tareas largasLa solicitud sin streaming supera el tiempo de esperaUsa streaming o aumenta timeout
InternalServerError: No available accountsLimitación temporal de capacidad del proveedorDeja que el SDK reintente; aumenta max_retries
Insufficient account balanceSaldo agotadoRecargar saldo

Más información sobre los errores del modelo: la guía de errores de la API de Claude.

Preguntas frecuentes

¿Cómo instalo el SDK de Python de Anthropic?
pip install anthropic. La versión 1.x requiere Python 3.10 o posterior.
¿Cómo configuro una URL base personalizada en el SDK de Python de Anthropic?
Pasa base_url a anthropic.Anthropic() o define ANTHROPIC_BASE_URL. Usa la raíz del host; el SDK añade /v1/messages.
¿Cuáles son el tiempo de espera y los reintentos predeterminados?
10 minutos por solicitud y 2 reintentos con espera exponencial, que cubren errores de conexión, 408, 409, 429 y 5xx.
¿Cómo uso streaming con el SDK de Python?
Usa with client.messages.stream(...) as stream: e itera sobre stream.text_stream; stream.get_final_message() devuelve el mensaje completo.
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 AnthropicUsar Claude a través de una API compatible con OpenAILos 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 sin límites con la API de ClaudeClaude ilimitado en VS CodeConfiguración de OpenCode para Claude: ajustes de opencode.json, modelos y errores comunesEjecutar un agente Hermes sin límites con ClaudeEjecutar 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 elegirEjecutar la CLI de Codex con ClaudeConectar Claude a n8nEnrutar LiteLLM a ClaudeUsar Claude en Kilo CodeIntegra Claude en GitHub CopilotConecta Zed a Claude a través de la pasarelaConecta Cherry Studio a ClaudeChatAnthropic en LangChain: importación, base_url, streaming, herramientas y 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»