Saltar al contenido principal

Tu primera llamada a la API en producción (consciente de costes)

Intermedio

Una llamada a la API de juguete ocupa una línea. Una llamada de producción maneja errores, transmite la salida en streaming, vigila el coste y mantiene los secretos a salvo. Construyamos eso, paso a paso.

Paso 1 — Secretos y modelo desde la configuración

export ANTHROPIC_API_KEY="sk-ant-..." # never in source control

Mantén el ID del modelo en la configuración, no como literales dispersos, para que la migración sea trivial (por qué). Elígelo de forma deliberada — Elegir un modelo.

Paso 2 — Una llamada resiliente con streaming

import os, time, random, anthropic
client = anthropic.Anthropic()
MODEL = os.environ.get("CLAUDE_MODEL", "claude-sonnet-4-6")

def ask_stream(prompt, system=None, max_tokens=1024):
for attempt in range(5):
try:
with client.messages.stream(
model=MODEL, max_tokens=max_tokens,
system=system or anthropic.NOT_GIVEN,
messages=[{"role": "user", "content": prompt}],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
final = stream.get_final_message()
print()
usage = final.usage
print(f"\n[tokens in/out: {usage.input_tokens}/{usage.output_tokens}]")
return final
except (anthropic.RateLimitError, anthropic.APIStatusError):
if attempt == 4: raise
time.sleep(min(2 ** attempt + random.random(), 30))

Paso 3 — Atención al coste

  • Registra el uso de tokens (arriba) para que puedas ver lo que cuesta cada llamada.
  • Dimensiona bien max_tokens y el modelo; limita la entrada con prompts enfocados.
  • Para prefijos estables que se repiten, añade caché de prompts.
  • Consulta Tokens y precios y Coste y latencia.

Paso 4 — Maneja los caminos infelices

  • Reintenta los errores transitorios (429/5xx) con backoff (arriba); no reintentes los 400.
  • Maneja los rechazos con elegancia.
  • Establece un timeout y un presupuesto de coste/iteraciones para cualquier cosa de tipo agéntico.

Verifica

Ejecútalo: deberías ver la salida en streaming, una línea de uso de tokens y un comportamiento elegante si fuerzas un error (por ejemplo, una clave incorrecta → mensaje limpio, no un fallo).

Siguiente