SDK de Anthropic Claude
El SDK de Python de Anthropic llama a los modelos Claude a través de la API de Mensajes. Admite streaming, uso de herramientas, visión y salidas estructuradas para aplicaciones LLM de producción.
Busca en todas las páginas de la documentación
El SDK de Python de Anthropic llama a los modelos Claude a través de la API de Mensajes. Admite streaming, uso de herramientas, visión y salidas estructuradas para aplicaciones LLM de producción.
Tarjeta de referencia rápida - lista para copiar y pegar.
import anthropic
client = anthropic.Anthropic()
message = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
system="Eres un asistente útil.",
messages=[{"role": "user", "content": "¡Hola!"}],
)
print(message.content[0].text)Cuándo usar esto:
"""anthropic_claude_sdk.py - mensajes, streaming y uso de herramientas."""
from __future__ import annotations
import json
import anthropic
client = anthropic.Anthropic()
# Mensaje básico
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=512,
system="Eres un revisor de código Python. Sé conciso.",
messages=[{"role": "user", "content": "Revisa: def add(a,b): return a+b"}],
)
print(response.content[0].text)
# Streaming
print("--- streaming ---")
with client.messages.stream(
model="claude-sonnet-4-20250514",
max_tokens=256,
messages=[{"role": "user", "content": "Cuenta del 1 al 5."}],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
print()
# Uso de herramientas
tools = [{
"name": "get_weather",
"description": "Obtener el tiempo para una ciudad",
"input_schema": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"],
},
}]
def get_weather(city: str) -> str:
return json.dumps({"city": city, "temp_f": 72, "condition": "soleado"})
msg = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
tools=tools,
messages=[{"role": "user", "content": "¿Qué tiempo hace en Austin?"}],
)
while msg.stop_reason == "tool_use":
tool_results = []
for block in msg.content:
if block.type == "tool_use":
result = get_weather(**block.input)
tool_results.append({
"type": "tool_result",
"tool_use_id": block.id,
"content": result,
})
msg = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
tools=tools,
messages=[
{"role": "user", "content": "¿Qué tiempo hace en Austin?"},
{"role": "assistant", "content": msg.content},
{"role": "user", "content": tool_results},
],
)
print(msg.content[0].text)Lo que esto demuestra:
messages.stream y text_stream.system, messages y tools opcionales.text, tool_use, tool_result, image.end_turn, tool_use, max_tokens.text_stream solo produce deltas de texto.client.messages.count_tokens() antes de enviar.| Modelo | Velocidad | Capacidad | Uso |
|---|---|---|---|
| Haiku | Más rápido | Tareas básicas | Clasificación, extracción |
| Sonnet | Equilibrado | Razonamiento sólido | Aplicaciones generales |
| Opus | Más lento | Mejor calidad | Análisis complejos, codificación |
# Cliente asíncrono
import asyncio
import anthropic
async def main():
client = anthropic.AsyncAnthropic()
msg = await client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=256,
messages=[{"role": "user", "content": "Hola"}],
)
print(msg.content[0].text)
asyncio.run(main())max_tokens - La API requiere max_tokens; las solicitudes fallan sin él. Solución: siempre establezca max_tokens explícitamente.tool_use pero el código no lo maneja. Solución: compruebe stop_reason y envíe bloques tool_result.anthropic.Anthropic() lee ANTHROPIC_API_KEY del entorno.tenacity o configuración de reintento del SDK.block.type antes de acceder a .text.| Alternativa | Usar cuando | No usar cuando |
|---|---|---|
| SDK de Anthropic | Modelos Claude | Necesita el ecosistema de OpenAI |
| SDK de OpenAI | Modelos GPT, herramientas más amplias | Prefiere la seguridad/estilo de Claude |
| LiteLLM | Abstracción multi-proveedor | Simplicidad de proveedor único |
| AWS Bedrock | Claude a través de AWS IAM | La API directa es más simple |
export ANTHROPIC_API_KEY="sk-ant-..."api_key= al constructor.stop_reason == "tool_use", ejecute la herramienta.stop_reason == "end_turn".with client.messages.stream(...) as stream:
for text in stream.text_stream:
print(text, end=""){"role": "user", "content": [
{"type": "image", "source": {"type": "base64", "media_type": "image/png", "data": b64}},
{"type": "text", "text": "¿Qué hay en esta imagen?"},
]}count = client.messages.count_tokens(
model="claude-sonnet-4-20250514",
messages=[{"role": "user", "content": "Hola"}],
)
print(count.input_tokens)import anthropic
try:
client.messages.create(...)
except anthropic.RateLimitError:
time.sleep(5) # retroceso
except anthropic.APIStatusError as e:
print(e.status_code, e.message)system es el prompt del sistema dedicado.AsyncAnthropic en manejadores de rutas asíncronas.StreamingResponse para SSE a los clientes.claude-sonnet-4-20250514).max_tokens apropiado.Versiones de Stack: Esta página se escribió para Python 3.14.0 (estable 3.14, mantenimiento 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+ y uv 0.6+.
Revisado por Chris St. John·Última actualización: 19 jul 2026