Agentes y herramientas
¿Qué cambia cuando un modelo puede actuar, no solo hablar?
Lección completa
Si quieres:
Le pides a un chatbot: «Compra dos boletos de cine para hoy en la noche, juntos, por menos de trescientos pesos». ¿Puede hacerlo?
Sin voz: la lección avanza sola con subtítulos.
La voz de esta lección está en preparación: por ahora avanza sola con subtítulos.
Modo revisiónComentar este pasoTerminé la lección
Qué lograrás
- Explicar cómo un modelo que solo escribe texto llega a actuar: describe herramientas, escribe llamadas a funciones, un programa las ejecuta y el resultado vuelve a su contexto, en un bucle de pensar, actuar y observar.
- Calcular cómo cae el éxito de una tarea cuando sus pasos se encadenan (0.95 elevado a diez es cerca de 0.60) y cómo la revisión humana lo sube a cambio de atención.
- Decidir qué permisos, límites, registros y aprobaciones darle a un agente según lo reversible que sea cada acción.
Ideas clave
- Un modelo solo escribe texto. Para actuar recibe descripciones de herramientas y escribe llamadas a funciones (nombre y datos); el programa que lo rodea las ejecuta y pega el resultado en su contexto.
- Un agente es un modelo en un bucle: piensa, actúa con una herramienta, observa el resultado y repite hasta cumplir el objetivo. Su contexto es su memoria de trabajo, y cada vuelta lo relee todo.
- Los errores se acumulan: si cada paso sale bien el 95 % de las veces, diez pasos salen bien cerca del 60 % y veinte, cerca del 36 %. La revisión humana por tramos sube el éxito a cambio de atención, y quien revisa también falla.
- Una instrucción en el texto es un ruego; un permiso es una regla en el programa. Antes de lo irreversible o de lo que pasa de un límite, la persona en el bucle aprueba o rechaza, y solo protege si lee de verdad.
- La autonomía se gradúa (sugerir, actuar con aprobación, actuar hasta un límite, actuar solo) y se gana con evidencia: se empieza con acciones reversibles, permisos mínimos y un registro de cada llamada.
Lo que mucha gente cree
Creencia común Un agente es un modelo más inteligente que actúa por su cuenta.
Lo correcto Es el mismo modelo, que solo escribe texto, dentro de un bucle. Las acciones las ejecuta un programa con los permisos que tú defines. No es más inteligente: es más autónomo, y por eso más caro y más arriesgado.
Compruébalo
Cuatro preguntas. Sin nota ni cuenta: sirven para ver si la idea quedó.
Por dentroPara quien quiere las fórmulas y el código. No hace falta para seguir el curso.
El bucle del agente
Un agente es un programa con tres piezas: un modelo que decide, un conjunto de herramientas (funciones) y un bucle que los conecta. En cada vuelta:
- el modelo recibe el contexto completo (instrucciones del sistema, descripción de las herramientas, tarea e historial) y produce o una llamada (nombre y datos) o la respuesta final;
- el programa valida la llamada, aplica los permisos y ejecuta la función;
- el resultado se agrega al historial como un mensaje más y se vuelve al paso 1, hasta que el modelo responde o se agota un límite de pasos.
Es la idea de ReAct (Yao et al., 2022): intercalar razonamiento y acción, de modo que cada observación corrija el razonamiento siguiente. En sus pruebas, con solo uno o dos ejemplos en el prompt, ReAct superó a métodos de imitación y de aprendizaje por refuerzo por 34 y 10 puntos de tasa de éxito en dos entornos interactivos (ALFWorld y WebShop), y en preguntas con una API de Wikipedia redujo las alucinaciones frente a la sola cadena de pensamiento. Desde 2023 las interfaces de los proveedores (por ejemplo, la «llamada a funciones» que OpenAI lanzó el 13 de junio de 2023) hacen que el modelo emita la llamada en un formato estructurado. Antes, Toolformer (Schick et al., 2023) había entrenado a un modelo para decidir por sí mismo cuándo llamar a una API y con qué argumentos.
Una llamada a función, por dentro
Una herramienta se describe con un nombre, una descripción y un esquema de sus datos de entrada (JSON Schema). Los nombres de los campos cambian de un proveedor a otro; la idea es la misma:
// lo que el modelo recibe (como texto) al frente de su contexto
{ "name": "comprar_boletos",
"description": "Compra boletos para una función. Cobra a la tarjeta guardada. No se puede deshacer.",
"input_schema": { "type": "object",
"properties": { "funcion": { "type": "string" }, "cantidad": { "type": "integer", "minimum": 1 } },
"required": ["funcion", "cantidad"] } }
// lo que el modelo escribe: una petición, no una ejecución
{ "name": "comprar_boletos", "input": { "funcion": "21:30", "cantidad": 2 } }
El modelo no ejecuta nada: produce el texto de la llamada. El programa debe tratar esos datos como entrada no confiable: validarlos, limitarlos y registrarlos. La descripción de la herramienta (por ejemplo, «no se puede deshacer») ayuda al modelo a decidir, pero no protege: el límite de gasto vive en el código que ejecuta.
MCP
El Model Context Protocol (Anthropic, 25 de noviembre de 2024) estandariza esa conexión. Una aplicación (el cliente) se conecta a un servidor MCP que ofrece herramientas; los mensajes son JSON-RPC 2.0: tools/list para descubrir las herramientas y tools/call para invocar una, y el resultado vuelve con un indicador isError. La especificación (versión 2025-06-18) dice que, por confianza y seguridad, debería haber siempre una persona en el bucle con la posibilidad de negar una invocación, que el cliente pida confirmación en operaciones sensibles, muestre los datos de entrada antes de llamar al servidor y registre el uso de herramientas para auditoría. El 9 de diciembre de 2025 la Linux Foundation anunció la Agentic AI Foundation, con MCP entre sus proyectos fundadores, aportado por Anthropic.
Fiabilidad de una cadena
Si cada paso sale bien con probabilidad , de forma independiente, y basta un error para arruinar la tarea, una tarea de pasos sale bien con probabilidad
Con : , , , y . El número de pasos en que el éxito cae a la mitad es
Es un modelo simplificado: supone errores independientes y que cualquier error arruina el intento. En la práctica los errores se correlacionan (un mal plan arrastra los pasos que siguen) y a veces el agente se recupera solo, al leer un mensaje de error. Por eso la tasa de éxito de principio a fin se mide, no se calcula. El simulador de la lección hace exactamente esa cuenta con veinte intentos (semilla fija): la muestra da 12 de 20 con diez pasos, 9 con catorce, 7 con veinte y 3 con cuarenta.
Revisión por tramos
Un tramo de pasos sale bien con . Al final del tramo, una persona lo revisa y detecta un error con probabilidad ; si lo detecta, el tramo se repite. Un intento del tramo se acepta con probabilidad , así que
El éxito total es el producto de los de todos los tramos. Con , y (supuestos de la lección): sin revisar, 35.8 %; revisando cada 5 pasos, 89.1 %, con 5.0 revisiones y 25.1 pasos del agente por intento; cada 10, 87.8 % (3.1 revisiones, 31.3 pasos); solo al final, 84.8 % (2.4 revisiones, pero 47.3 pasos: se repite todo). El techo lo fija : aun revisando cada paso, el éxito queda en 90.0 %, porque de cada diez errores se escapa uno.
Medir la constancia
τ-bench (Yao, Shinn, Razavi y Narasimhan, 2024) pone a un agente con herramientas y reglas de negocio frente a un cliente simulado por otro modelo, y compara el estado final de la base de datos con el esperado. Introduce : la probabilidad de que una misma tarea salga bien en los intentos. Con llamadas a funciones, GPT-4o resolvió en el primer intento el 61.2 % de las tareas de la tienda y el 35.2 % de las de la aerolínea (48.2 % en promedio), y en la tienda su bajó a menos del 25 %.
Costo
Si cada consulta relee las instrucciones y las definiciones ( tokens) más todo el historial, y cada paso agrega tokens, lo leído en pasos es
Crece como , como las conversaciones de la lección 30. Con supuestos ilustrativos (, ): 10 pasos son 56 000 tokens; 20, 192 000; 40, 704 000. Y un intento fallido se paga igual: el costo por tarea lograda es el costo por intento dividido entre la probabilidad de éxito. Con quedan cerca de 94 000, 536 000 y 5.5 millones de tokens por tarea lograda.
Niveles de autonomía
Feng, McDonald y Zhang (2025) proponen cinco niveles según el papel de la persona: operadora, colaboradora, consultora, aprobadora y observadora, y sostienen que la autonomía es una decisión de diseño, separada de la capacidad del modelo. La lección usa una escala más corta (sugiere, actúa con aprobación, actúa hasta un límite, actúa sola) con la misma idea: más autonomía es más rapidez y menos control, y se concede acción por acción según su reversibilidad. Anthropic (2024) recomienda empezar por la solución más simple: si los pasos se conocen de antemano, un flujo fijo (workflow) suele bastar; un agente se justifica cuando el camino depende de lo que se observa, y su autonomía implica más costo y errores que se acumulan, así que conviene probarlo en un entorno aislado y con salvaguardas.
En código
CARTELERA = {"20:00": {"lugares": 0, "precio": 95}, "21:30": {"lugares": 14, "precio": 95}}
LIMITE = 300 # permiso: por encima de esto, el programa pide aprobación
def buscar_funciones(fecha):
return {hora: dict(f) for hora, f in CARTELERA.items()}
def comprar_boletos(funcion, cantidad):
f = CARTELERA[funcion]
if cantidad > f["lugares"]:
raise ValueError("no hay lugares suficientes")
f["lugares"] -= cantidad
return {"funcion": funcion, "cantidad": cantidad, "total": cantidad * f["precio"]}
HERRAMIENTAS = {"buscar_funciones": buscar_funciones, "comprar_boletos": comprar_boletos}
def modelo(contexto):
"""Guion en lugar de un LLM: decide con lo último que hay en el contexto."""
ult = contexto[-1]
if ult["rol"] == "usuario":
return {"herramienta": "buscar_funciones", "datos": {"fecha": "hoy"}}
if ult["herramienta"] == "buscar_funciones":
hora = next(h for h, f in ult["resultado"].items() if f["lugares"] >= 2)
return {"herramienta": "comprar_boletos", "datos": {"funcion": hora, "cantidad": 20}} # error: un cero de más
if ult["resultado"] == "rechazado por la persona":
return {"herramienta": "comprar_boletos", "datos": {"funcion": "21:30", "cantidad": 2}}
return {"respuesta": f"Listo: {ult['resultado']}"}
def aprueba(peticion): # la persona en el bucle (aquí, una regla que imita su decisión)
print("¿Aprobar?", peticion["datos"])
return peticion["datos"]["cantidad"] <= 4
def agente(pedido, max_pasos=6):
contexto = [{"rol": "usuario", "texto": pedido}]
for paso in range(1, max_pasos + 1):
decision = modelo(contexto) # 1. pensar
if "respuesta" in decision:
return decision["respuesta"], paso
nombre, datos = decision["herramienta"], decision["datos"]
if nombre == "comprar_boletos": # permiso: una regla del programa
total = datos["cantidad"] * CARTELERA[datos["funcion"]]["precio"]
if total > LIMITE and not aprueba(decision):
contexto.append({"rol": "resultado", "herramienta": nombre, "resultado": "rechazado por la persona"})
continue
try:
resultado = HERRAMIENTAS[nombre](**datos) # 2. actuar: lo ejecuta el programa
except Exception as e:
resultado = f"error: {e}" # un error también es una observación
contexto.append({"rol": "resultado", "herramienta": nombre, "resultado": resultado}) # 3. observar
return "No terminé.", max_pasos
print(agente("Compra dos boletos para hoy en la noche, por menos de 300 pesos."))
# Fiabilidad de una cadena: cada paso sale bien con p = 0.95
for n in (1, 2, 10, 14, 20, 40):
print(n, round(0.95 ** n, 2))
Salida:
¿Aprobar? {'funcion': '21:30', 'cantidad': 20}
("Listo: {'funcion': '21:30', 'cantidad': 2, 'total': 190}", 4)
1 0.95
2 0.9
10 0.6
14 0.49
20 0.36
40 0.13
Cambia modelo por una llamada a un LLM y tendrás el esqueleto de un agente real. Lo que añade un producto serio es lo que aquí apenas se esboza: validación de los datos, permisos por herramienta, límites de pasos y de gasto, registro de cada llamada y manejo de errores.
Lo que viene
Un agente que lee y actúa se equivoca con aplomo: la lección 33 trata las alucinaciones. La 34 enseña a medir un sistema con tus propias tareas, y la 35, los riesgos que abre dar acceso a herramientas (por ejemplo, instrucciones escondidas en lo que el agente lee) y cómo gobernarlos.
Lente de decisión
Qué significa esta idea si tu trabajo es decidir, no programar.
- Autonomía es permiso. Define permisos mínimos por herramienta, límites aplicados en el programa (no en el prompt), un registro de cada llamada y aprobación humana antes de lo irreversible: pagar, borrar, enviar. Pregunta: ¿qué es lo peor que podría hacer con las credenciales que tiene?
- Pide la tasa de éxito de principio a fin en tareas tan largas como las tuyas, medida con tus datos (lección 34), y cuántas veces sale bien si se repite. El éxito por paso engaña: 95 % por paso son 60 % en diez pasos y 36 % en veinte. Y compara el costo por tarea lograda, no por intento.
- Empieza por lo reversible (leer, buscar, redactar borradores) y sube de nivel solo con evidencia. En 2025, Anthropic dejó a un agente con búsqueda web, notas y un canal con clientes al frente de una pequeña tienda de oficina durante un mes, y concluyó que no lo contrataría: cometió demasiados errores.
- ¿De verdad hace falta un agente? Si los pasos se conocen de antemano, un flujo fijo es más barato, más rápido y más fiable; el agente se justifica cuando el camino depende de lo que observa. Y todo lo que el agente lee (páginas, correos, documentos) entra a su contexto: puede traer instrucciones escondidas (lecciones 31 y 35).
Términos de la lección
- Modelo de lenguaje Modelo que, dado un texto (el contexto), da una probabilidad a cada palabra o pieza que puede seguir. Escribe agregando una pieza a la vez.
- Token Pieza de texto (una palabra, un trozo de palabra, un signo o un código básico) tomada del vocabulario. Es la unidad que el modelo lee y genera, y por la que se cobra.
- Peso (w) En un modelo lineal, el número que multiplica a la entrada: la pendiente de la recta. Indica cuánto sube la predicción por cada unidad que aumenta la entrada.
- Ventana de contexto Número máximo de tokens que el modelo puede leer de una vez. Cuentan las instrucciones del sistema, la conversación, los documentos y la respuesta que va escribiendo. Lo que no cabe no existe para el modelo.
- Instrucciones del sistema (system prompt) Instrucciones fijas que quien construye la aplicación pone al frente del contexto: rol, tono y reglas. Quien conversa no las ve, pero viajan y ocupan lugar en cada turno.
- Sin estado (stateless) Que cada llamada al modelo empieza de cero y no recuerda las anteriores. La memoria de una conversación vive en la aplicación, que reenvía todo el historial en cada turno.
- RAG (generación aumentada por recuperación) Técnica que, antes de generar, busca en una colección de documentos los fragmentos que más se parecen a la pregunta y los incluye en el prompt, de modo que el modelo responde con esas fuentes sin reentrenarse.
- Agente Sistema que pone a un modelo de lenguaje en un bucle de pensar, actuar y observar: el modelo pide herramientas, un programa las ejecuta y el resultado vuelve a su contexto, hasta cumplir un objetivo.
- Uso de herramientas Capacidad de un modelo de pedir que se ejecute una función externa (consultar datos, calcular, comprar) y de usar su resultado. El modelo solo escribe la petición; la ejecuta el programa que lo rodea.
- Llamada a funciones (function calling) Mecanismo por el que el modelo, en lugar de texto libre, escribe una petición estructurada: el nombre de una herramienta y sus datos. El programa la valida y la ejecuta.
- MCP (Model Context Protocol) Estándar abierto, publicado por Anthropic en noviembre de 2024, para conectar aplicaciones de IA con herramientas y datos: un servidor las ofrece una sola vez y cualquier aplicación compatible las descubre y las usa.
- Persona en el bucle (human in the loop) Diseño en el que el sistema se detiene antes de ciertas acciones (irreversibles o por encima de un límite) y espera la decisión de una persona: aprobar, corregir o rechazar. Cuesta atención y solo protege si la revisión es real.
Transcripción completa
Fuentes
- Yao, S., Zhao, J., Yu, D., Du, N., Shafran, I., Narasimhan, K., Cao, Y. (2022). ReAct: Synergizing Reasoning and Acting in Language Models
- Anthropic (2024). Introducing the Model Context Protocol (25 de noviembre de 2024)
- Proyecto Model Context Protocol (2025). Model Context Protocol, especificación 2025-06-18: Tools
- The Linux Foundation (2025). Linux Foundation Announces the Formation of the Agentic AI Foundation (9 de diciembre de 2025)
- OpenAI (2023). Function calling and other API updates (13 de junio de 2023)
- Schick, T., Dwivedi-Yu, J., Dessì, R., et al. (2023). Toolformer: Language Models Can Teach Themselves to Use Tools
- Yao, S., Shinn, N., Razavi, P., Narasimhan, K. (2024). τ-bench: A Benchmark for Tool-Agent-User Interaction in Real-World Domains
- Anthropic (2024). Building effective agents (19 de diciembre de 2024)
- Feng, K. J. K., McDonald, D. W., Zhang, A. X. (2025). Levels of Autonomy for AI Agents
- The Register (Sharwood, S.) (2025). Replit makes vibe-y promise to stop its AI agents making vibe coding disasters (22 de julio de 2025; cobertura periodística del caso)
- Anthropic y Andon Labs (2025). Project Vend: Can Claude run a small shop? (27 de junio de 2025)
ComentariosConversación pública de esta lección: dudas, datos por revisar, ideas.
Los comentarios viven en GitHub Discussions, en el repositorio público del curso; para escribir se necesita una cuenta de GitHub. Se cargan desde giscus.app al abrir esta sección. Las personas que revisan el curso los leen, y si un cambio se acepta, se aplica en los dos idiomas. Abrir el hilo en GitHub