El primer día se había desarmado un chatbot en una pizarra y se habían nombrado sus piezas: interfaz, cerebro, memoria, personalidad, rutas de decisión, herramientas. Seis componentes, para que nadie en la sala pudiera usar la palabra chatbot sin saber qué había dentro.
The bot is the GPS, («El bot es el GPS»), les dijo T. Valerie Onu aquella primera mañana. The human is the driver. («El humano es el conductor»).
Todo lo que vino después se construyó sobre ese marco. Un bot diccionario que emparejaba una pregunta con una respuesta almacenada, y el rápido descubrimiento de lo poco que eso podía sostener. Salvaguardas, para que se negara en lugar de improvisar. El Registro de Oro, para que cada dato llegara con una fuente y una fecha adjuntas. Recuperación, para que la respuesta saliera de un documento propiedad del cliente y no del recuerdo que el modelo tenía de internet.
Al comenzar la cuarta semana, los campistas tenían un buen bot. Pero tenía una sola forma, y esa forma nunca variaba: llega una pregunta, el sistema busca algo, sale una respuesta.
Un turno. Una decisión. Una responsabilidad.
El trabajo real no llega con esa forma.
Antes de la IA, el flujo de trabajo
El siguiente paso no fue técnico en absoluto.
Se les pidió a los campistas que observaran procesos empresariales corrientes y tediosos —de esos en cuya fila todo el mundo ha esperado alguna vez— y los desarmaran como flujos de trabajo. No «solicitar un préstamo» como un solo acontecimiento, sino como una secuencia: quién interviene, en qué orden, qué necesita tener en la mano cada persona antes de poder actuar y qué pasa cuando lo que necesita no está.
Esa última pregunta resultó ser todo el tema.
Practicaron con simulaciones antes de acercarse siquiera al problema de un cliente, y las simulaciones eran lúdicas a propósito: emitir un pase para un festival, recorrer una solicitud de principio a fin, avanzar la secuencia paso a paso y ver qué se acumula en el portapapeles compartido a medida que avanza. El valor de una simulación es que se puede volver a ejecutar, y romper a propósito. Nadie puede hacer eso con un banco.
Romperla a propósito era donde de verdad estaba el aprendizaje. Un flujo de trabajo que siempre funciona sin tropiezos no enseña nada, porque todo proceso real pasa la mayor parte de su vida en las excepciones. Por eso cada simulación venía con sus fallos incorporados: el pase del festival al que le falta la prueba de edad. El pago que falla. El documento de identidad demasiado borroso para leerse.
Solo entonces llegó la automatización, y llegó como una pregunta, no como una herramienta. ¿Cuáles de estos pasos podría asumir un sistema? ¿Cuáles debe conservar una persona? ¿Y qué tiene que pasar en el momento exacto en que un paso no puede completarse?
Tariq es donde esa pregunta encontró su ejemplo resuelto.
Tariq quiere un préstamo
Esa es toda la premisa, y es corriente a propósito. Entra en un banco —o abre una ventana de chat, que en 2026 es lo mismo— y pide dinero para hacer crecer un negocio. Lo que ocurre a continuación no es una pregunta con una respuesta. Es una secuencia, y cada paso le corresponde a alguien distinto.
Alguien tiene que recibirlo y averiguar qué necesita realmente. Alguien tiene que establecer quién es y qué tipo de cliente es. Alguien tiene que consultar qué dicen las propias normas del banco sobre préstamos. Alguien tiene que cotejar esas normas con sus documentos. Si falta algo, alguien tiene que volver y pedírselo, lo que significa que la secuencia tiene que poder dar marcha atrás. Alguien tiene que inspeccionar el resultado antes de que salga. Y alguien tiene que devolvérselo a Tariq en un lenguaje que pueda usar.
Pídale a un solo chatbot que haga todo eso y lo intentará. También, en algún punto intermedio, inventará sin avisar una norma de préstamo.
Por qué lo enseñamos como una tripulación
Este es el momento en que el campamento deja de enseñar chatbots de IA generativa y empieza a enseñar ingeniería de IA agéntica.
Una tripulación no es un chatbot con más prompts. Es el mismo problema dividido en tareas con nombre, cada una con sus propias entradas, sus propias restricciones y su propio derecho a negarse. La tripulación digital de Tariq les puso rostro a esas tareas: Grace recibe, Marcus perfila, Ava recupera lo que dicen las normas, Daniel comprueba el cumplimiento, Maya entrevista cuando falta algo, Theo inspecciona y Zara entrega el resultado.
Siete agentes, un portapapeles compartido y —lo que más importa— una arista que vuelve hacia atrás. Cuando Daniel detecta que falta un documento, el trabajo no falla ni continúa. Vuelve a Maya, que le pide a Tariq lo que falta, y solo entonces sigue adelante.
Primero, contado como una historia
Nada de eso cala como un diagrama de arquitectura un martes por la mañana.
Así que se enseñó como una historia. El campamento creó cómics para los agentes, dándole a cada uno un personaje antes de que fuera una función, y produjo un video que recorre el trayecto de Tariq desde la solicitud hasta la respuesta. Los campistas conocieron a Grace, a Daniel y a Maya como personas con un trabajo antes de conocerlos como nodos de un grafo.
Ese orden era la clave. Alguien de quince años que ha seguido la solicitud de Tariq a través de siete pares de manos ya entiende los traspasos, el estado y el enrutamiento condicional; simplemente todavía no sabe que esas son las palabras. Cuando llega el código, no es una idea nueva. Es su propia idea, escrita en Python.
Luego, la parte difícil
Contar historias lo lleva a uno hasta la idea. No lo lleva hasta un sistema en producción, y el campamento no fingió lo contrario.
El framework al que se llevó a los campistas fue LangGraph, y vale la pena precisar lo que eso significa, porque es fácil suponer que un programa de verano recurre a la herramienta más amable disponible. Hizo lo contrario.
LangGraph es un framework de bajo nivel. En ingeniería de software, bajo nivel significa control granular y código más explícito: no se reciben abstracciones que piensan por uno. Mientras que un framework de alto nivel permite a un desarrollador declarar el rol de un agente en lenguaje natural y confiar en que el modelo resuelva los pasos, LangGraph exige escribir a mano tres cosas:
Nodos: los bloques de código o las llamadas al modelo precisos que ejecutan una acción.
Aristas: la lógica condicional y las rutas de decisión que conectan esas acciones, incluidas las que vuelven hacia atrás.
Estado: un esquema central que registra exactamente lo que sabe la tripulación en cada momento.
Como no oculta nada de eso detrás de abstracciones cómodas, da un control absoluto sobre los bucles, la autocorrección y la intervención humana en el circuito. Ese control es, por sí solo, la razón por la que las empresas lo eligen. Cuando un agente que alucina podría costarle dinero a un banco, uno quiere una máquina de estados con límites estrictos, no un piloto automático que pueda desviarse.
Por qué bajo nivel, precisamente
El campamento podría haber recurrido a un framework de alto nivel. Habría sido más rápido, más amable, y habría producido algo demostrable esa misma tarde. Decidió no hacerlo, y la razón fue la seguridad.
En un framework de alto nivel, el modelo decide qué pasa a continuación. Ese es su gran atractivo: se describe un rol y el sistema resuelve los pasos. Y es también, precisamente, la superficie de ataque.
La inyección de prompts funciona colando en el contexto de un modelo un texto que el modelo trata como una instrucción. Si el modelo solo está redactando una respuesta, una inyección exitosa produce una mala respuesta. Si el modelo además elige la ruta, una inyección exitosa elige la ruta: saltarse la comprobación de cumplimiento, llegar a una herramienta que nunca debía tocar, devolver una cifra que nadie verificó. Una sola instrucción manipulada, y el radio de impacto es todo el flujo de trabajo.
Si el grafo se escribe de forma explícita, ese tipo de ataque no tiene adónde ir. Una inyección todavía puede corromper lo que un nodo dice. No puede inventar una arista que no existe. No puede esquivar a Daniel, porque Daniel no es una sugerencia: es un nodo por el que pasa el tráfico. No puede llamar a una herramienta que el grafo nunca conectó. La autoridad del modelo termina en el límite del nodo dentro del cual se ejecuta.
Eso es lo que significa aquí el endurecimiento. No un filtro atornillado después, sino una arquitectura en la que las rutas peligrosas nunca se construyeron.
Es también lo que hizo que valiera la pena el laboratorio del noveno día. Los campistas pasaron una sesión intentando hacerles jailbreak a sus propios bots, y ese ejercicio solo enseña algo si hay una estructura contra la cual probar. Si se rompe un piloto automático, se ha demostrado que a un modelo se le puede convencer de cosas, algo que todo el mundo ya sabía. Si se rompe un grafo programado, se ha descubierto exactamente qué nodo tuvo la fuga y a qué, precisamente, se le permitía llegar: un hallazgo lo bastante acotado como para corregirlo.
Y por eso CUB-VA pudo enunciar su invariante con la rotundidad con que lo hizo: que nunca pedirá, almacenará ni revelará credenciales bancarias confidenciales; ni números de cuenta, ni contraseñas, ni saldos. Un agente que decide su propio siguiente paso no puede prometer eso con honestidad. Un agente que solo recorre rutas que alguien escribió, sí.
Lo que eso le exige realmente a un aprendiz
LangGraph es una implementación directa de la teoría de grafos y las máquinas de estados aplicadas a la IA generativa. Usarlo bien exige grafos dirigidos y cíclicos, persistencia de datos y programación asíncrona: fundamentos de ciencias de la computación, no trucos de chatbot. Es un clásico de los cursos universitarios avanzados y de los talleres de IA de nivel de producción, y en general se considera demasiado avanzado para alguien que construye su primer prototipo.
Se les enseñó a adolescentes caribeños en la cuarta semana.
En qué punto está realmente la disciplina
Conviene tener claro lo reciente que es todo esto. La recuperación y la orquestación de agentes no son una práctica asentada con una década de manuales detrás. Son el problema vivo de la IA aplicada: se está resolviendo ahora mismo, en producción, por equipos con muchos más recursos que un programa de verano.
La razón es que el modelo nunca fue la parte difícil. Cualquier organización puede llamar a una interfaz de programación de aplicaciones (API). Lo que separa una demostración de algo en lo que un banco pondrá su nombre es todo lo que se dispone alrededor del modelo: de dónde vienen los datos, qué se le permite decir al sistema, qué pasa cuando falla un paso y a quién escala cuando no debería responder en absoluto. Eso es la orquestación, y ahí es donde está hoy la verdadera dificultad.
Esa es la afirmación que vale la pena hacer sobre este programa, y es acotada. A los campistas no se les entregó la tecnología de la década pasada reempaquetada para escuelas. Se los llevó a la parte de la disciplina que todavía se está debatiendo, y se les pidió que entregaran algo en ella.
Un agente, de dos maneras
Daniel comprueba si un solicitante de préstamo tiene los documentos que exigen las normas. Aquí está escrito para un framework de alto nivel, y luego escrito como lo enseñó el campamento.
class State(TypedDict): # what the crew knows, exactly
applicant: str
documents: list[str]
missing_items: list[str]
compliance_status: str
def daniel(state: State) -> State: # the NODE
missing = required_docs() - set(state["documents"])
return {
**state,
"missing_items": sorted(missing),
"compliance_status": "pass" if not missing else "hold",
}
def route(state: State) -> str: # the EDGE
return "maya" if state["compliance_status"] == "hold" else "theo"
graph.add_node("daniel", daniel)
graph.add_conditional_edges("daniel", route) # loops back on a failNodo, arista y estado, escritos de forma explícita. No se infiere nada, ni siquiera la arista condicional que devuelve a Maya una comprobación fallida en lugar de dejarla pasar.
| Alto nivel | LangGraph | |
|---|---|---|
| Abstracción | Alta: se declara el rol y el modelo resuelve los pasos | Baja: cada ruta permitida se escribe de forma explícita |
| Control | Piloto automático. El modelo decide cuándo repetir el ciclo o avanzar | Total. El desarrollador dicta cuándo repetir, reintentar o detenerse |
| Previsibilidad | Menor. Los agentes pueden desviarse o atascarse en un bucle lógico | Mayor. Los límites estrictos mantienen al modelo encarrilado |
| Curva de aprendizaje | Suave. Buena para tener un prototipo mañana por la mañana | Empinada. Requiere una base real de arquitectura de software |
El código está escrito para ilustrar la diferencia, no tomado del repositorio de un campista. La tripulación, los roles y la arista condicional de vuelta a Maya son del propio campamento.
El laboratorio que recorrieron los campistas es público, y lo sigue siendo. Construye un agente de recuperación línea por línea: lo que uno escribe de un lado, lo que aporta LangGraph del otro, y cómo cada paso se corresponde con la organización de agentes que uno dibujó antes de escribir código.
Lo que se llevaron los campistas
Así que quitemos el envoltorio del chatbot y veamos lo que realmente transmitieron los veinte días.
Teoría de grafos, aplicada. Nodos, aristas, flujo dirigido y cíclico; no como abstracción, sino como aquello que decide si la solicitud de Tariq vuelve atrás o sigue adelante.
Diseño del estado. Un esquema de lo que un sistema sabe en cada momento, y la disciplina de razonar sobre qué pasa cuando falta una parte.
Flujo de control en condiciones de incertidumbre. Cuándo reintentar, cuándo detenerse, cuándo parar y pasar a una persona. La mayor parte del software da por hecho que tendrá éxito; los agentes tienen que escribirlos personas que dan por hecho que no.
Recuperación sobre un corpus gobernado. Anclar una respuesta en una fuente que alguien posee, y citarla.
Pruebas adversariales. El noveno día, los campistas atacaron sus propios sistemas según el principio de pensar como un hacker y construir como un defensor.
Validación de salidas. Validadores de esquema, condiciones de negativa y el hábito de no fiarse de la salida de un modelo solo porque se lee bien.
Despliegue. De FastAPI a GitHub y a Render, y un comando de inicio que tiene que estar exactamente bien.
Y Python, con un nivel examinado externamente.
Las siete primeras son las que un responsable de contratación reconocería como de nivel sénior. La última es la que cabe en un certificado. Lo que no aparece en ninguna lista es el criterio que subyace a todo ello —saber cuándo un sistema debe negarse—, y esa es la parte que no se puede consultar.
La transferencia
Un rigor así solo cuenta si sobrevive al contacto con un cliente real, y aquí es donde los veinte días pueden auditarse en lugar de describirse.
W.E.S enruta una emergencia antes de pedir un nombre: una arista condicional, tomada porque un patio inundado no puede esperar detrás de una verificación de identidad. A.I.D.A. escala a una consola del personal en lugar de improvisar un dictamen tributario: un nodo con intervención humana, colocado exactamente donde equivocarse sale más caro. ASPIRE AI incorporó validadores de esquema de salida después de que sus agentes se enredaran en las pruebas de varios turnos, lo que es un problema de estado diagnosticado y reparado por las mismas personas que lo causaron. PILOT pasa cualquier asunto de aduanas a un despachador del puerto: una condición de parada, escrita deliberadamente y no confiada a la esperanza.
No son funciones que a nadie se le ocurriera pedir. Son el aspecto que tiene un grafo cuando quien lo dibuja ha entendido que lo más difícil de un agente es saber cuándo debe detenerse.
En el escenario, viendo cómo su propio sistema hacía un traspaso correcto bajo presión, un equipo lo dijo con más sencillez que todo esto: That is what agentic means in practice! («¡Eso es lo que significa agéntico en la práctica!»)
