README · by ansango
← Volver al libro

Agentes

Más allá de RAG: cuando el modelo toma acciones. Visión general de agentes, herramientas, planning, modos de fallo y memoria

~6 min de lectura
Resumen

Esta nota cubre la segunda mitad del capítulo 6: los agentes, la forma más ambiciosa y compleja de aplicación sobre foundation models. Un agente no se limita a responder textos: toma decisiones, ejecuta acciones, observa resultados e itera. Veremos qué define a un agente, qué herramientas usa, cómo planifica, qué memory tiene, los modos de fallo más comunes y cómo evaluarlos. La nota anterior (RAG) cubre la parte de retrieval de contexto.

De RAG a agentes

El libro traza una evolución natural:

  1. Prompt engineering: el modelo responde con su conocimiento.
  2. RAG: el modelo responde con conocimiento externo.
  3. Agentes: el modelo actúa en el mundo real.

Un agente es un sistema donde el modelo controla un loop de acciones: decide qué hacer, lo hace, observa el resultado, y decide qué hacer a continuación. Esto abre posibilidades enormes pero también riesgos nuevos.

“Un chatbot responde. Un agente hace.”

El libro usa esa frase para recordar que la diferencia clave es la capacidad de actuar sobre sistemas externos (mandar emails, mover dinero, ejecutar código).

Qué es un agente

El libro define un agente como un sistema que tiene:

┌────────────────────────────────────────┐
│           Loop del agente              │
│                                        │
│   ┌──────────┐    ┌─────────────┐      │
│   │   LLM    │ -> │  Tool call  │      │
│   │ piensa   │    │  ejecuta    │      │
│   └──────────┘    └─────────────┘      │
│        ▲                  │            │
│        │                  ▼            │
│        │           ┌─────────────┐     │
│        └───────────│  Resultado  │     │
│       observa      │  observable │     │
│                    └─────────────┘     │
│                                        │
│   Repite hasta cumplir el objetivo     │
└────────────────────────────────────────┘

Ejemplo: agente de planificación de viajes

Objetivo: "Planifica un viaje a Tokio de 5 días en noviembre, presupuesto 3000€."

Pensamiento 1: "Necesito buscar vuelos desde España a Tokio en noviembre."
Acción 1: search_flights(origen="MAD", destino="NRT", mes="noviembre")
Observación 1: [3 vuelos, mejor opción 850€]

Pensamiento 2: "Ahora necesito hoteles para 5 noches."
Acción 2: search_hotels(ciudad="Tokio", noches=5, presupuesto=1000)
Observación 2: [5 opciones, mejor 80€/noche]

Pensamiento 3: "Calculo el total: 850€ vuelos + 400€ hotel = 1250€. Sobran 1750€ para actividades."
Acción 3: search_activities(ciudad="Tokio", presupuesto=1750)
...

Final: "Plan completo por 3050€. ¿Lo confirmo?"

Function calling / tool use

Casi todos los frameworks de agentes actuales se construyen sobre function calling (también llamado tool use).

Concepto

  1. Tú defines qué herramientas existen (nombre, descripción, parámetros).
  2. El modelo, en lugar de generar texto, puede pedir llamar a una herramienta con argumentos concretos.
  3. Tu sistema ejecuta la herramienta y devuelve el resultado al modelo.
  4. El modelo continúa con el resultado en su contexto.
# Ejemplo conceptual de tool definition
tools = [
    {
        "name": "search_flights",
        "description": "Busca vuelos entre dos ciudades en una fecha.",
        "parameters": {
            "type": "object",
            "properties": {
                "origin": {"type": "string"},
                "destination": {"type": "string"},
                "date": {"type": "string", "format": "date"},
            },
            "required": ["origin", "destination", "date"]
        }
    }
]

response = client.messages.create(
    model="claude-3-5-sonnet",
    tools=tools,
    messages=[{"role": "user", "content": "Busca vuelos MAD-NRT en noviembre"}]
)

Buenas prácticas en la definición de tools

Demasiadas tools confunden al modelo

Más de 15-20 herramientas empieza a degradar la elección del modelo. Si necesitas muchas, considera grouping o “router” tools.

Estrategias de planning

El libro distingue dos enfoques principales para que el agente razone sobre qué hacer.

ReAct (Reasoning + Acting)

Intercalar textualmente razonamiento y acciones:

Thought: Necesito saber la temperatura actual en Madrid.
Action: get_weather(city="Madrid")
Observation: 23°C, soleado.
Thought: Ahora puedo recomendar ropa.
Action: recommend_clothing(weather="soleado", temp=23)

Plan-and-execute

Primero crear un plan completo, luego ejecutar paso a paso:

Plan:
1. Buscar vuelos.
2. Buscar hoteles.
3. Buscar actividades.
4. Calcular presupuesto total.
5. Presentar resumen.

Step 1: search_flights(...)
Step 2: search_hotels(...)
...

Reflexion

Después de ejecutar, el modelo revisa su trabajo y detecta problemas.

"He ejecutado la búsqueda. Pero el hoteles está en una zona cara. 
Voy a buscar alternativas más céntricas."

Tree of Thoughts

Explorar múltiples planes en paralelo, elegir el mejor.

Cual elegir

Empieza con ReAct

El libro recomienda empezar con ReAct (o incluso prompts estructurados sin tools reales) y solo subir de complejidad cuando la tarea lo requiera.

Tool design

El libro dedica una sección entera al diseño de herramientas porque la calidad de las tools es más importante que la del modelo.

Características de buenas tools

Anti-patrones

Diseña tool pensando en cómo la usará el LLM

La tool book_flight(origen, destino, fecha, pasajeros, clase) parece bien. Pero para el modelo, class puede significar “turista”, “business”, “económica” o “premium”. Mejor: cabin_class con valores enumerados.

Memory

Los agentes necesitan memoria para funcionar en tareas que se extienden en el tiempo.

Tipos de memoria

Short-term memory (contexto)

La información en el contexto actual de la conversación. Limitada por la ventana del modelo.

Long-term memory

Información que persiste entre conversaciones:

Implementación

Memory errors son caros

El libro advierte: las memorias persisten y se multiplican. Un error en una memoria contaminará futuras conversaciones. Es importante tener:

Failure modes

El libro identifica los modos de fallo más comunes en agentes. Conocerlos es la mitad de la defensa.

1. Hallucination of tools

El modelo invoca tools que no existen o con argumentos incorrectos.

Action: search_database_for_customer(...)
# Pero esa tool no está definida

2. Hallucination of results

El modelo invoca la tool, pero en lugar de leer la observación, se inventa el resultado.

Action: get_weather("Madrid")
# El modelo ignora lo que devolvió y dice "Hace 25°C en Madrid"

3. Goal drift

El modelo pierde de vista el objetivo y empieza a hacer cosas no relacionadas.

Objetivo: "Encuentra vuelos a Tokio."
Cinco pasos después: "Te recomiendo documentales sobre Japón."

4. Infinite loops

El modelo entra en un ciclo donde las mismas acciones se repiten sin avanzar.

5. Premature termination

El modelo declara éxito antes de que el objetivo esté cumplido.

6. Unsafe actions

El modelo invoca tools que ejecutan acciones destructivas sin confirmación.

7. Context overflow

El loop se extiende tanto que el contexto se desborda y el modelo pierde coherencia.

8. Cost explosion

Un agente que entra en loops puede gastar cientos de dólares en una sola tarea.

Los failure modes son sistémicos

El libro es claro: casi todos los fallos de agentes son sistémicos, no del modelo. Soluciones: validación de tools, guard rails, presupuestos de steps, humanos en el loop para acciones críticas.

Evaluación de agentes

Evaluar agentes es más difícil que evaluar chatbots: hay muchos caminos, muchos resultados posibles.

Métricas de proceso

Métricas de resultado

Evaluación human-in-the-loop

Para acciones críticas, un humano debe aprobar antes de que el agente ejecute. La evaluación se hace con muestras de las aprobaciones.

Frameworks de evaluación

Evalúa el camino, no solo el resultado

Un agente que cumple el objetivo por mal camino (ejecuta acciones innecesarias, gasta 10x más de lo debido) es un agente con problemas. Mide el camino.

Frameworks de agentes

El libro repasa las opciones más usadas:

Empieza sin framework

El libro insiste: los frameworks de agentes cambian muy rápido, tienen muchos quirks y abstraen problemas que necesitas entender. Empieza con código propio y añade framework solo cuando duela de verdad.

Patrones de diseño de agentes

Single agent

Un solo LLM con un conjunto de tools. Funciona para la mayoría de tareas.

Multi-agent

Varios agentes especializados colaboran:

Human-in-the-loop

En puntos clave, un humano aprueba antes de continuar.

Background agents

Agentes que corren sin intervención del usuario (ej: monitorización, tareas programadas).

Resumen en tres frases

Próximos pasos