Módulo 11: Deep Agents
Introducción: El Nivel Más Alto de Abstracción
Descripción
Has llegado al Módulo 11. A lo largo de esta guía construiste todo manualmente: tools desde cero (M2), agentes con loops ReAct (M3), grafos con nodos y edges (M5-M7), persistencia con checkpointers (M8), interrupts para supervisión humana (M9), y sistemas multi-agente con supervisors, handoffs y subagents (M10). Entiendes las tripas de cada pieza porque las armaste tú.
Ahora vas a ver qué pasa cuando alguien empaqueta todo eso en un framework que lo hace por ti.
Deep Agents es la capa más alta de abstracción en el ecosistema LangChain. Es un harness que incluye planning automático (write_todos), un virtual filesystem para leer y escribir archivos, subagent spawning para delegar tareas on-demand, y long-term memory con backends intercambiables — todo out-of-the-box, sin que tengas que construir la infraestructura.
El valor de este módulo no es aprender "la forma correcta." Deep Agents no es mejor que LangGraph — es más conveniente para ciertos casos de uso y menos configurable para otros. El valor es que ahora tienes criterio para elegir: ya sabes qué hace cada pieza por dentro, así que puedes evaluar cuándo te conviene dejar que el framework lo haga por ti y cuándo necesitas control manual.
¿Dónde estamos en la guía?
Este es el Módulo 11 de la guía LangChain & LangGraph: From Chains to Agents. Es el primer módulo del Bloque 4 (Producción).
Bloque 1: LangChain Core (Módulos 1-4) ✅ Completado
Bloque 2: LangGraph Fundamentals (Módulos 5-7) ✅ Completado
Bloque 3: LangGraph Avanzado (Módulos 8-10) ✅ Completado
Bloque 4: Producción (Módulos 11-12) ← ESTÁS AQUÍ (Módulo 11)
Tu progreso:
Bloque 1 — LangChain Core ✅ Completado
│
│ Módulo 1: Modelos y Proveedores ✅
│ Módulo 2: Tools y Tool Calling ✅
│ Módulo 3: Agents (create_agent) ✅
│ Módulo 4: Middleware y Customización ✅
│
▼
Bloque 2 — LangGraph Fundamentals ✅ Completado
│
│ Módulo 5: Introducción a LangGraph ✅
│ Módulo 6: Functional API ✅
│ Módulo 7: Flujos Avanzados ✅
│
▼
Bloque 3 — LangGraph Avanzado ✅ Completado
│
│ Módulo 8: Memoria y Persistencia ✅
│ Módulo 9: Human-in-the-Loop ✅
│ Módulo 10: Multi-Agent Systems ✅
│
▼
Bloque 4 — Producción
│
│ Módulo 11: Deep Agents ← ESTÁS AQUÍ
│ Módulo 12: LangSmith y Producción 🔒 Siguiente
El Bloque 3 te dio las capacidades avanzadas: persistencia, supervisión humana, y multi-agente. El Bloque 4 te lleva a producción: primero con la capa batteries-included (este módulo), luego con observabilidad y deployment (M12).
Los tres niveles de abstracción
Todo lo que aprendiste en esta guía se organiza en tres niveles. Entender estos niveles es el framework de decisión más importante que te llevas de este módulo.
Nivel 1: create_agent — simple, 80% de los casos
from langchain.agents import create_agent
agent = create_agent(
"openai:gpt-4.1-mini",
tools=[web_search, calculator],
prompt="Eres un asistente de investigación.",
)
result = agent.invoke({"messages": [{"role": "user", "content": "¿Cuánto es 2+2?"}]})
- ✅ Una función, listo
- ✅ Tool calling automático con loop ReAct
- ✅ Suficiente para chatbots, asistentes simples, Q&A
- ❌ Sin control sobre el flujo de decisiones
- ❌ Sin persistencia built-in (necesitas agregar checkpointer)
- ❌ Sin multi-agente
Nivel 2: LangGraph — custom workflows, control total
from langgraph.graph import StateGraph, START, END
builder = StateGraph(ResearchState)
builder.add_node("search", search_node)
builder.add_node("analyze", analyze_node)
builder.add_node("report", report_node)
builder.add_edge(START, "search")
builder.add_conditional_edges("search", route_by_quality)
builder.add_edge("analyze", "report")
builder.add_edge("report", END)
graph = builder.compile(checkpointer=MemorySaver())
- ✅ Control total sobre nodos, edges, y flujo
- ✅ Persistencia, HITL, multi-agente — todo configurable
- ✅ Retry, branching, error handling a tu medida
- ❌ Más código: tú diseñas cada decisión
- ❌ Planning, filesystem, subagent spawning — los construyes manualmente
Nivel 3: Deep Agents — autónomo, batteries-included
from deep_agents import create_deep_agent
agent = create_deep_agent(
"openai:gpt-4.1",
tools=[web_search],
name="Research Assistant",
instructions="Investiga temas complejos. Descompone la tarea en pasos, "
"escribe los resultados en archivos, y delega subtareas "
"a subagentes especializados cuando sea necesario.",
)
result = agent.run("Investiga el estado de AI safety en 2025 y genera un reporte")
- ✅ Planning automático: el agente descompone tareas con
write_todos - ✅ Virtual filesystem: escribe y lee archivos sin llenar el context window
- ✅ Subagent spawning: crea agentes especializados on-demand
- ✅ Long-term memory con backends intercambiables
- ❌ Menos control: el framework decide gran parte del flujo
- ❌ Más opaco: no ves cada decisión del grafo
- ❌ Overhead para tareas simples
La metáfora
Nivel 1 — create_agent: Conducir un auto automático
Simple, rápido, funciona para el 80% de los viajes
Nivel 2 — LangGraph: Conducir un auto manual
Más control, mejor para situaciones específicas,
requiere más habilidad
Nivel 3 — Deep Agents: Subirse a un taxi autónomo
Le dices el destino, él decide la ruta, los desvíos,
y las paradas. Tú llegas. Pero no controlas el volante.
La pregunta no es "¿cuál es mejor?" — es "¿cuál necesito para esta tarea?"
El puente: de manual a batteries-included
Lo que construiste manualmente
En los módulos 6-10, tu Research Assistant creció pieza por pieza:
M6: Research Agent v1 — búsqueda básica con Functional API
M7: Research Agent v2 — retry, branching, error handling
M8: Research Agent v3 — checkpointing, crash recovery, memoria
M9: Research Agent v4 — HITL, approvals antes de acciones costosas
M10: Research Agent v5 — multi-agente con supervisor y subagents
Cada versión agregó una capacidad que tuviste que diseñar e implementar: el retry con backoff lo escribiste tú, la persistencia la configuraste tú, los subagents los orquestaste tú. Aproximadamente 150+ líneas de código para el sistema completo.
Lo que Deep Agents provee out-of-the-box
Deep Agents toma esas mismas capacidades y las empaqueta:
| Capacidad | Lo que construiste | Lo que Deep Agents provee |
|---|---|---|
| Planning | Diseñaste el workflow en M6-M10: qué nodo va después de cuál, qué condiciones evaluar | write_todos: el agente descompone la tarea solo, trackea progreso, re-planifica |
| Persistencia | Configuraste checkpointers en M8: MemorySaver, PostgresSaver, thread_id | Virtual filesystem: el agente escribe outputs a archivos, lee solo lo que necesita |
| Multi-agente | Implementaste supervisor, handoffs, subagents en M10 | Subagent spawning: el agente decide cuándo y qué delegar en runtime |
| Memoria | InMemoryStore, namespaces, cross-session en M8 | Long-term memory con backends pluggable (filesystem, LangGraph Store) |
La conexión es directa:
write_todosabstrae el planning que hiciste en M6-M10 — en lugar de diseñar el flujo de trabajo, el agente lo diseña él mismo- El virtual filesystem abstrae la persistencia de M8 — en lugar de configurar checkpointers, el agente escribe a archivos
- El subagent spawning abstrae el multi-agente de M10 — en lugar de diseñar quién hace qué en build time, el agente decide en runtime
Esa es la razón por la que este módulo viene después de 10 módulos de construcción manual. Sin haber construido cada pieza, no podrías evaluar qué ganas y qué pierdes cuando el framework lo hace por ti.
Cuándo usar Deep Agents
Casos ideales
- ✅ Tareas de larga duración: investigación que toma minutos, generación de reportes multi-fuente, análisis complejos que requieren múltiples pasos
- ✅ Investigación autónoma: el agente necesita planear, buscar, analizar, y sintetizar sin intervención constante
- ✅ Generación de código: proyectos donde el agente escribe múltiples archivos, los prueba, y los corrige
- ✅ Análisis complejos: comparativas, due diligence, market research donde hay múltiples dimensiones que explorar
- ✅ Prototipos rápidos: quieres un agente autónomo funcional sin construir toda la infraestructura
Cuándo NO usar Deep Agents
- ❌ Q&A simple: preguntas-respuestas no necesitan planning ni filesystem — usa
create_agent - ❌ Control fino necesario: si necesitas decidir exactamente qué nodo ejecutar en cada paso — usa LangGraph
- ❌ Workflows custom: flujos con reglas de negocio específicas, approvals en puntos exactos — usa LangGraph
- ❌ Latencia sensible: Deep Agents tiene overhead de planning; si necesitas respuestas en <2s — usa
create_agent - ❌ Presupuesto limitado: planning y subagent spawning implican más llamadas al LLM = más costo
Árbol de decisión
¿Tu tarea es simple (Q&A, búsqueda directa)?
└─ SÍ → create_agent
└─ NO ↓
¿Necesitas control total sobre el flujo de decisiones?
└─ SÍ → LangGraph (StateGraph o Functional API)
└─ NO ↓
¿La tarea es autónoma, de larga duración, multi-paso?
└─ SÍ → Deep Agents
└─ NO → LangGraph (más flexible sin overhead)
Qué incluye Deep Agents
1. Planning con write_todos
El agente recibe una tarea compleja — "Investiga AI safety y genera un reporte" — y la descompone en pasos manejables:
1. [pending] Definir alcance de la investigación
2. [pending] Buscar papers académicos recientes
3. [pending] Buscar reportes de la industria
4. [pending] Analizar y sintetizar hallazgos
5. [pending] Generar reporte final
Conforme avanza, actualiza el progreso. Si descubre algo inesperado, re-planifica: agrega, elimina, o reordena pasos. Cápsula 02 lo cubre en detalle.
2. Virtual Filesystem
En lugar de meter toda la investigación en el context window (caro, limitado a 128K tokens), el agente escribe outputs a archivos:
workspace/
├── research/
│ ├── papers.md ← Resultados de búsqueda académica
│ └── industry_reports.md ← Reportes de la industria
├── analysis/
│ └── synthesis.md ← Análisis cruzado
└── output/
└── report.md ← Reporte final
El context window se mantiene lean: el agente lee solo el archivo que necesita para el paso actual. Cápsula 03 lo cubre en detalle.
3. Subagent Spawning
El agente principal puede crear subagentes especializados on-demand:
Main Agent: "Necesito buscar papers sobre RAG"
└─ spawn: paper_researcher("Find papers about RAG in 2025")
└─ Ejecuta en contexto aislado
└─ Retorna: "Encontré 5 papers relevantes..."
Main Agent: "Ahora necesito analizar estos papers"
└─ spawn: analysis_agent("Compare these 5 papers and rank by relevance")
└─ Ejecuta en contexto aislado
└─ Retorna: "Ranking: 1) Paper X, 2) Paper Y..."
A diferencia del M10 donde tú diseñaste la estructura multi-agente, aquí el agente decide qué subagentes crear en runtime. Cápsula 04 lo cubre en detalle.
4. Long-term Memory
Backends intercambiables para persistir información entre sesiones:
- Filesystem backend: archivos en disco, simple, sin dependencias externas
- LangGraph Store backend: usa el sistema de Store de LangGraph para consistencia con el ecosistema
- Composite backends: combina múltiples backends
Se cubre en cápsulas posteriores del módulo.
Mapa del módulo
| # | Cápsula | Qué aprenderás | Tipo |
|---|---|---|---|
| 01 | Introducción (esta) | Los tres niveles de abstracción, cuándo usar Deep Agents, setup | Intro |
| 02 | Planning con write_todos | Descomponer tareas, trackear progreso, re-planificación dinámica | Técnica |
| 03 | Virtual Filesystem | Context offloading, leer/escribir archivos, organización de outputs | Técnica |
| 04 | Subagent Spawning y Delegación | Crear subagentes on-demand, contexto aislado, límites y controles | Técnica |
| 05 | Long-term Memory | Backends de memoria, filesystem vs LangGraph Store, composite | Técnica |
| 06 | Deep Agents CLI | Agentes autónomos desde la terminal, configuración, uso diario | Técnica |
| 07 | Árbol de decisión: create_agent vs LangGraph vs Deep Agents | Framework de decisión completo, trade-offs, cuándo usar qué | Técnica |
| 08 | Proyecto: Research Assistant como Deep Agent | Reimplementar el Research Assistant, comparación side-by-side | Proyecto |
Flujo de aprendizaje
Empiezas con planning (cápsula 02) — la capacidad más fundamental: cómo el agente descompone tareas complejas. Luego aprendes el virtual filesystem (cápsula 03) — cómo el agente maneja información sin llenar el context window. Agregas subagent spawning (cápsula 04) — delegación autónoma de subtareas. Con esas tres piezas, entiendes el core de Deep Agents. Las cápsulas 05-06 agregan long-term memory y CLI. La cápsula 07 consolida todo en un árbol de decisión completo. Y la cápsula 08 integra todo en el proyecto final del módulo.
La progresión es: planning → filesystem → delegación → memoria → CLI → framework de decisión → proyecto.
Conexión con el proyecto
Research Assistant: de ~150 líneas a ~40 líneas
En el Módulo 10, tu Research Assistant tiene aproximadamente 150 líneas de código: definición de estado, nodos, edges, condicionales, checkpointer, tools, supervisors, subagents. Funciona, es robusto, y tienes control total.
En este módulo, lo reimplementas como Deep Agent:
from dotenv import load_dotenv
load_dotenv()
from deep_agents import create_deep_agent
from langchain_community.tools import TavilySearchResults
web_search = TavilySearchResults(max_results=5)
agent = create_deep_agent(
"openai:gpt-4.1",
tools=[web_search],
name="Research Assistant",
instructions=(
"Eres un asistente de investigación. "
"Para cada tema, descompone la investigación en pasos con write_todos. "
"Escribe los hallazgos de cada fuente en archivos separados. "
"Delega subtareas especializadas a subagentes cuando sea necesario. "
"Genera un reporte final consolidado."
),
)
result = agent.run("Investiga el estado de AI agents en producción en 2025")
print(f"Archivos generados: {list(result.files.keys())}")
print(f"Todos completados: {sum(1 for t in result.todos if t['status'] == 'completed')}/{len(result.todos)}")
print(f"Subagentes usados: {len(result.subagents_spawned)}")
# Output esperado (varía según el modelo):
# Archivos generados: ['research/web_search.md', 'analysis/synthesis.md', 'output/report.md']
# Todos completados: 5/5
# Subagentes usados: 2
~40 líneas. El mismo resultado. Pero con un trade-off claro: perdiste el control sobre cada decisión. El agente decidió cómo descomponer la tarea, qué archivos crear, y cuándo delegar. Si eso está bien para tu caso de uso, Deep Agents ahorra tiempo. Si necesitas control, LangGraph es la opción.
El momento pedagógico más importante de este módulo es esa comparación side-by-side. Llegarás a él en la cápsula 08.
Conexión con el Módulo 12: LangSmith y Producción
Deep Agents genera muchas llamadas al LLM: planning, ejecución de cada paso, subagent spawning, filesystem operations. Sin observabilidad, no tienes visibilidad sobre qué está haciendo el agente, cuánto está costando, o por qué tomó una decisión.
El Módulo 12 agrega LangSmith a cualquiera de tus agentes — ya sea la versión LangGraph o la versión Deep Agents:
M11: Deep Agents (el agente hace más por ti)
↓
M12: LangSmith (ves todo lo que el agente hace)
↓
Resultado: un agente autónomo que puedes observar, evaluar, y deployar
La combinación de Deep Agents + LangSmith es potente: el agente opera autónomamente mientras tú monitoreas costos, calidad, y comportamiento en producción.
Setup técnico
Prerequisitos
- ✅ Módulo 10 completado — tienes un Research Assistant multi-agente funcional
- ✅ Python 3.11+ instalado
- ✅ Al menos una API key de un proveedor (OpenAI recomendado, GPT-4.1 para mejores resultados con planning)
Instalación
pip install deep-agents langchain-openai python-dotenv
Deep Agents instala LangGraph como dependencia transitiva. Si ya tienes LangGraph instalado, no hay conflicto.
Verifica la instalación:
import deep_agents
print(f"deep-agents version: {deep_agents.__version__}")
# Output esperado:
# deep-agents version: 0.2.x
Variables de entorno
Tu .env de módulos anteriores sigue funcionando:
# .env
OPENAI_API_KEY=sk-...
# Opcional: para búsqueda web en los ejercicios
TAVILY_API_KEY=tvly-...
Verificación rápida
from dotenv import load_dotenv
load_dotenv()
from deep_agents import create_deep_agent
agent = create_deep_agent(
"openai:gpt-4.1-mini",
tools=[],
name="test-agent",
instructions="Responde preguntas simples.",
)
result = agent.run("¿Cuál es la capital de Francia?")
print(result.output)
# Output esperado (varía según el modelo):
# La capital de Francia es París.
Si ves una respuesta coherente, el setup está listo.
Qué NO cubre este módulo
- ❌ Construir tu propio framework de agentes — no estás recreando Deep Agents, estás usándolo. Si quieres construir algo similar, los módulos 5-10 te dieron las herramientas
- ❌ RAG y vector stores — el virtual filesystem almacena outputs del agente, no knowledge bases indexadas
- ❌ Fine-tuning de modelos — Deep Agents funciona con modelos de propósito general vía API
- ❌ Deployment en la nube — cómo desplegar tu agente se cubre en el Módulo 12 con LangSmith
Evidencia de éxito
Al terminar este módulo, sabrás que tuviste éxito si:
- ✅ Puedes crear un Deep Agent con planning, filesystem, y subagent spawning habilitados
- ✅ Entiendes qué hace
write_todosinternamente: descomposición, tracking, re-planning - ✅ Puedes explicar por qué el virtual filesystem reduce costos: context offloading
- ✅ Sabes cuándo el subagent spawning es útil y cuándo es overkill
- ✅ Tienes un árbol de decisión claro: create_agent vs LangGraph vs Deep Agents
- ✅ Reimplementaste tu Research Assistant como Deep Agent y puedes articular los trade-offs
- ✅ Puedes usar Deep Agents CLI para ejecutar agentes desde la terminal
Test de autoevaluación
Si puedes responder estas preguntas, vas por buen camino:
- ¿Cuáles son los tres niveles de abstracción en el ecosistema LangChain y cuándo usarías cada uno?
- ¿Qué hace
write_todosque va más allá de una simple lista de tareas? - ¿Por qué el virtual filesystem reduce costos comparado con meter todo en el context window?
- ¿Cuál es la diferencia entre diseñar multi-agente en M10 y subagent spawning en Deep Agents?
- ¿Qué pierdes cuando usas Deep Agents en lugar de LangGraph?
Resumen
- Estás en el Módulo 11, Bloque 4 (Producción). Construiste todo manualmente en los módulos 1-10: tools, grafos, persistencia, HITL, multi-agente. Ahora ves la capa batteries-included
- El ecosistema tiene tres niveles de abstracción:
create_agent(simple, 80% de casos), LangGraph (control total, custom workflows), y Deep Agents (autónomo, batteries-included). No hay "mejor" — hay "adecuado para tu caso" - Deep Agents incluye cuatro capacidades principales: planning con
write_todos, virtual filesystem para context offloading, subagent spawning para delegación autónoma, y long-term memory con backends intercambiables - Las abstracciones de Deep Agents mapean directamente a lo que construiste:
write_todos= planning de M6-M10, filesystem = persistencia de M8, subagent spawning = multi-agente de M10. Ahora que conoces las tripas, puedes apreciar cuánto hace el framework por ti - Cuándo usar Deep Agents: tareas autónomas de larga duración, investigación, generación de código, análisis complejos. Cuándo NO: Q&A simple, control fino necesario, latencia sensible
- El proyecto del módulo es reimplementar el Research Assistant como Deep Agent: ~150 líneas → ~40 líneas, con trade-offs explícitos que podrás articular
Recursos adicionales
- Deep Agents — Documentation — Documentación oficial, API reference, y ejemplos
- LangChain — Agent Architectures — Visión general de las diferentes arquitecturas de agentes en el ecosistema
- LangGraph — Overview — Documentación de LangGraph para comparar con Deep Agents
- Building Autonomous Agents — LangChain Blog — Artículo sobre el diseño de agentes autónomos y cuándo usar cada nivel de abstracción
- Cognitive Architectures for Language Agents — Paper académico sobre arquitecturas cognitivas para agentes (planning, memory, tool use)
- The Landscape of Emerging AI Agent Architectures — LangChain — Panorama de arquitecturas de agentes y dónde encaja cada abstracción
Módulo 11 — LangChain & LangGraph: From Chains to Agents
Siguiente cápsula: Planning con write_todos — aprenderás cómo el agente descompone tareas complejas en pasos, trackea progreso, y re-planifica dinámicamente cuando los resultados cambian.