MÓDULO 5 · LANGGRAPH · LECCIÓN 07 · 45 MIN

Router-Specialist y Supervisor-Workers

Especializar no consiste en añadir nodos, sino en reducir el prompt de cada uno. Un router clasifica con lo mínimo y deriva; cada especialista trabaja con instrucciones cortas y una sola responsabilidad. El grafo crece; la superficie de error de cada pieza, no.
01 — El problema
El agente monolítico

Un solo nodo con cincuenta herramientas y un prompt de tres páginas es lento, caro y fácil de confundir. Cada instrucción compite con las demás por la atención del modelo, y cuando falla no sabes cuál de las cincuenta lo estropeó.

builder.add_conditional_edges(
    "router",
    lambda s: s["intencion"],
    {"MATEMATICAS": "mates", "CHISTE": "chiste", "GENERAL": "general"},
)
router→ mates  / chiste  / general →END

Mecanismo idéntico al de la lección 02. Lo que cambia es quién rellena intencion: ya no un if sobre un entero, sino un modelo.

02 — La pregunta invertida
Los especialistas no tienen por qué ser LLMs

El mejor especialista para «50 + 50» no es un modelo: es Python. Un nodo determinista es más barato, más rápido y no alucina el resultado. El grafo no distingue entre un nodo que llama a un LLM y uno que hace una división — los dos reciben el estado y devuelven un parche.

// no es «qué modelo pongo en cada rama», sino «qué ramas no necesitan modelo».
03 — Cuándo el router no basta
Router-Specialist frente a Supervisor-Workers
Router-SpecialistSupervisor-Workers
Forma de la tareaUna intención → un expertoUna tarea → varias sub-tareas
Quién vuelve a decidirNadie: se ramifica una vezEl supervisor, tras cada worker
TopologíaÁrbol, sin cicloEstrella con ciclo de vuelta
Coste típicoUna llamada de clasificaciónUna llamada de supervisión por ronda
Ejemplosoporte / ventas / facturacióninvestiga X y escribe un informe

El supervisor es, estructuralmente, el ciclo ReAct de la lección 05 con agentes en lugar de herramientas: decide, delega, lee el resultado, vuelve a decidir. Y hereda el mismo riesgo — sin contador de rondas, gira.

04 — El punto frágil
Un router de texto libre atado a las claves del mapa

Pedirle a un modelo que responda «SOLO con la categoría» y meter ese texto directamente en el mapa de aristas es una promesa que el modelo no ha firmado. Devuelve MATH, o Matemáticas, o la categoría con un punto final, y el grafo revienta con ValueError: Edge mapping missing key.

reforzar el promptreduce la frecuencia, no el fallo
normalizar + defectoel grafo no cae nunca
salida estructuradael formato lo garantiza el proveedor

Las tres defensas, ordenadas por cuánto delegan la garantía fuera del prompt. La tercera es with_structured_output sobre un esquema con un campo Literal.

Auditoría

La lección vende el patrón como ahorro de costes — «modelo pequeño para enrutar, grande para ejecutar» — pero en su propio ejemplo el router y el especialista general son el mismo modelo, gpt-4o-mini, y el tercer especialista usa gpt-3.5-turbo. El modelo caro no aparece en ninguna parte.

Comprueba dos cosas: si gpt-3.5-turbo sigue disponible en tu proveedor y a qué precio, y si con esa configuración el ejemplo demuestra realmente el ahorro que anuncia o solo lo describe. Un patrón de optimización cuyo ejemplo no mide nada merece la duda.

05 — Ahora tú
Fuerza al router a salirse del mapa

Pasa por el router una pregunta deliberadamente ambigua: «Cuéntame algo curioso sobre el número 7». Imprime la categoría cruda que devuelve el modelo, sin .strip().upper(), y compárala con las claves del mapa carácter a carácter.

Después fuerza el fallo: cambia una clave del mapa a "MATEMATICA" (sin la S) y ejecuta el caso de mates. Anota si el error aparece al compilar o al invocar, y qué te dice eso sobre qué valida compile().