El function calling transforma un LLM de generador de texto en un agente que opera sistemas: el modelo devuelve JSON estructurado describiendo la llamada de herramienta, tu código ejecuta y el resultado vuelve al contexto. La demo es fácil; producción cobra guardrails. Los patrones siguientes separan la demostración que impresiona del agente que sobrevive a tráfico real.

La calidad del schema define la confiabilidad

Un modelo bueno llena un schema malo con basura plausible. La disciplina de schema viene antes de la elección de modelo: tipos estrictos en JSON Schema, enums en lugar de strings libres y descripción detallada por parámetro, con ejemplo de valor. Un campo date descrito como "fecha" recibe "mañana"; descrito como ISO 8601 con rango válido, recibe 2026-05-24. Un catálogo de herramientas demasiado grande en el mismo request confunde al modelo; mantenlo por debajo de 20 por llamada y compón flujos en vez de acumular opciones.

El loop del agente y el budget de pasos

El ciclo clásico: planificar, actuar, observar, repetir hasta cumplir la meta. Sin techo de pasos, una meta imposible se vuelve un loop infinito quemando tokens contra el rate limit. Cap entre 10 y 25 iteraciones, con mensaje de fallo explícito al superarlo: "no completé X tras 15 intentos" es producto; stack trace es bug. Registra el motivo de término; meta alcanzada, budget agotado y error repetido cuentan historias diferentes.

Herramientas que sobreviven al retry

  • Pocas herramientas componibles le ganan a muchas superpuestas: 8 bien diseñadas superan a 40 confusas
  • Las operaciones idempotentes sobreviven al retry; pasa un request_id generado por el agente para deduplicar
  • Errores estructurados que el modelo puede razonar: {"error": "card_declined", "retryable": false} orienta la próxima acción

Niveles de autonomía por radio de daño

La autonomía es un espectro, y el blast radius define el tier. Una consulta de lectura corre autónoma con límites; escritura en base de datos de producción pide aprobación humana; pago ejecuta con confirmación explícita. Tres tiers cubren casi todo: suggest-only, execute-with-approval, autonomous-with-limits. El cambio de tier acompaña el cambio de riesgo: una integración de pago nueva empieza suggest-only por dos semanas.

Observabilidad de cada llamada

Registra cada tool call con input, output, latencia y gasto en tokens; los spans de OpenTelemetry amarran cadenas multi-step en una trace única. Guarda el prompt montado y el resultado crudo en cada trace; el replay de incidentes depende de eso. Sin eso, depurar un agente se vuelve adivinanza; con eso, "por qué eligió el agente esa herramienta" se vuelve query.

Patrones de fallo conocidos

  • Loop de retry infinito ante herramienta caída: circuit breaker en el executor, backoff con techo
  • Nombre de herramienta alucinado: el dispatch valida contra lista cerrada y devuelve error descriptivo al modelo
  • Desborde de context window por resultado verboso: trunca con resumen y pagina resultados grandes