PTENES
Saltar al contenido
MÓDULO 4.2

🏢 Grafo organizacional × grafo de trabajo

Dos grafos conviven en el mismo sistema de agentes, y confundirlos es la causa más común de desorden. Uno se mantiene — y el organigrama. El otro pasa — y es el pedido de hoy. Este módulo separa los dos y muestra cómo se conectan: zone defense, fan-out/fan-in y enrutamiento por condición.

6
Temas
40
Minutos
Intermedio
Nivel
Práctica
Tipo
Progreso de este módulo
0%0 de 6
1

🏛️ Separa el organigrama del trabajo

Dos grafos conviven en el mismo sistema de agentes, y no son el mismo grafo. El org graph y es la estructura que permanece: agentes de larga duración con roles definidos —investigador, escritor, validador, publicador—, cada uno a cargo de un dominio, con memoria acumulada y aristas estables que solo cambian cuando tú vuelve a desplegar el sistema.

Piensa en él como el organigrama de la empresa, solo que cada cuadro es un agente que ejecuta su propio loop. El org graph responde «quién existe y qué hace cada uno», no «qué estamos haciendo ahora». Esa segunda pregunta corresponde a otro grafo, que verás en el próximo tema.

🆕 ¿Nuevo aquí? Cuatro palabras antes de seguir

  • Org graph: la estructura estable de agentes de larga duración: el organigrama. Solo cambia cuando vuelves a implementar el sistema.
  • Work graph: el grafo armado para una tarea específica. Se crea, se ejecuta y se descarta.
  • Redeploy: reimplementar — publicar una nueva versión del sistema. Es el único momento en que cambia el org graph.
  • Determinista: mismo input, siempre el mismo output. Lo opuesto a «depende de la suerte del modelo ese día».
ORG GRAPH — el organigrama investigador escritor validador publicador se mantiene — solo cambia al volver a desplegar WORK GRAPH — el pedido de hoy investigador validador fin cambia: cambia con cada pedido

Qué observar: la línea divisoria punteada del medio no separa dos sistemas: separa dos perspectivas del mismo sistema. Fíjate en que «investigador» y «validador» aparecen en ambos lados: son los mismos agentes. A la izquierda, ves todas las relaciones posibles entre ellos (el organigrama). A la derecha, ves solo el recorrido específico que esta tarea de hoy realmente siguió: un subconjunto, armado en el momento.

✓ Es un org graph cuando

  • ✓El agente tiene un nombre y un papel fijos, no cambia de tarea en tarea
  • ✓Acumula memoria: sabe cosas que aprendió en ejecuciones anteriores
  • ✓La arista representa «puede pedirle a» — una relación a largo plazo

✗ No es un grafo organizacional cuando

  • ✗Estás diseñando los pasos de una única tarea: eso es work graph
  • ✗La «estructura» cambia cada vez que llega una solicitud diferente
  • ✗No hay memoria acumulada, solo el contexto de esa ejecución

Conceptos clave

Org graph

El organigrama, estable

Larga vida

Agente con rol definido

Memoria acumulada

Aprende entre ejecuciones

Cambia con el redeploy

No cambia en runtime

2

📋 Construye el work graph del pedido de hoy

O work graph y es efímero: se arma para una tarea específica y se descarta después. Cambia con cada ejecución: hoy pide investigador y validador, mañana solo pide al escritor y después pide a los cuatro en fila. No existe «el» work graph del sistema; existe un work graph nuevo para cada solicitud que llega.

💡 La confusión más común de un sistema desordenado

Confundir los dos grafos es la causa más común de un sistema desordenado. Hay quienes recrean toda la organización en cada solicitud: crean un agente nuevo, redefinen los roles y rediseñan la estructura cada vez que llega un pedido. Y hay quienes hacen lo contrario: encasillan la tarea en el organigrama y tratan cada variación del pedido como si tuviera que convertirse en un agente nuevo y permanente.

  • •Recrear la organización en cada solicitud = caro, lento, y pierdes la memoria acumulada que hacía bueno al agente.
  • •Encorsetar la tarea en el organigrama = el sistema se vuelve rígido, incapaz de atender una solicitud que no siga el guion previsto.
1

Llega una solicitud

Un usuario o sistema externo activa una tarea. El work graph todavía no existe.

2

El enrutador elige quién participa

Revisa el org graph disponible y selecciona un subconjunto de agentes para esta tarea específica.

3

Work graph se ejecuta y termina

El camino específico de la tarea se ejecuta de principio a fin, entrega el resultado y se descarta.

4

Org graph permanece intacto

Los agentes que participaron siguen existiendo, listos para el próximo work graph, con la memoria que acumularon.

Conceptos clave

Work graph

Efímero, uno por solicitud

Descartable

Nace, se ejecuta, desaparece

Subconjunto

Usa solo parte del grafo de la organización

Error común

Confundirlo con el organigrama

3

🛡️ Aplica zone defense

Zone defense y es el patrón que hace que el org graph valga la pena: cada agente está a cargo de un dominio, con contexto persistente. El de seguridad se ocupa de la autenticación, los permisos y los registros de auditoría. El de datos se ocupa del esquema, las migraciones y los patrones de consulta. El de API se ocupa de los endpoints, los límites de tasa y los contratos. El de frontend se ocupa de los componentes, el estado y los patrones de interfaz.

Cada uno ejecuta su propio loop dentro de la zona. Una solicitud de una zona a otra pasa por el work graph — nunca directamente. Ningún agente se filtra al contexto del otro. Eso es lo que hace que el agente de larga duración acumule valor de verdad: un agente de seguridad que ya revisó 300 cambios conoce implícitamente el modelo de amenazas de ese código, sin necesidad de volver a explicarlo en cada solicitud.

📊 Las cuatro zonas clásicas

  • Seguridad — autenticación, permisos, registros de auditoría
  • Datos — esquema, migraciones, patrones de consulta
  • API — endpoints, límites de tasa, contratos
  • Frontend — componentes, estado, patrones de interfaz

🆕 ¿Nuevo aquí? Defensa en zona

Zone defense: término tomado del deporte: cada jugador cubre una zona del campo, no a una persona específica del equipo adversario. En graph engineering, cada agente cubre un dominio del sistema, no una tarea específica. Defiende toda la zona, tarea tras tarea.

✓ La defensa por zonas funciona cuando

  • ✓El dominio tiene una frontera clara (datos no es API, API no es frontend)
  • ✓Los pasos entre zonas se convierten en una arista explícita en el work graph
  • ✓Cada agente acumula contexto real (historial de decisiones, no solo instrucciones)

✗ La defensa por zonas falla cuando

  • ✗Un agente lee o escribe directamente en el contexto de otra zona (filtración)
  • ✗Las zonas se superponen: dos agentes «dueños» del mismo dominio
  • ✗Una zona se queda sin dueño y se convierte en tierra de nadie

Conceptos clave

Zone defense

Un responsable por dominio

Contexto persistente

No se reinicia en cada tarea

Sin fugas

Paso = arista explícita

Valor implícito

La experiencia acumulada cuenta

4

🔀 Haz fan-out y fan-in de verdad

Fan-out y abrir una tarea en N ramas que se ejecutan al mismo tiempo. Fan-in y reunir los N resultados en uno solo. Es algo que un loop simplemente no hace, porque su forma es secuencial: un loop procesa una cosa a la vez, siempre.

La unión es donde reside el peligro. Una fusión mal hecha se traga una rama en silencio, y el resultado parece completo aunque le falte una parte. Por eso, toda unión necesita comprobar cardinalidad: ¿recibí los N que despaché?

🆕 ¿Nuevo aquí? Fan-out, fan-in, cardinalidad

  • Fan-out: un nodo envía trabajo a varias ramas paralelas al mismo tiempo.
  • Fan-in: las ramas paralelas convergen de nuevo en un único nodo de unión.
  • Cardinalidad: el conteo: cuántos elementos salieron y cuántos volvieron. Si enviaste 5 y recibiste 4, la cardinalidad no coincide.
origen ✗ unión recibí 4 de 5 fan-out en 5 ramas · 1 rama falla en silencio · fan-in no lo detecta si no verifica la cardinalidad

Qué observar: cuatro ramas pulsantes llegan limpias a la unión; la quinta, marcada con una X roja, nunca llega. Si la unión no cuenta cuántas ramas se enviaron y cuántas se recibieron, aceptará «recibí 4 de 5» como si fuera un resultado completo. Eso es la combinación que se traga una fuente — el resultado parece listo y nadie se da cuenta de que falta una parte.

⚠️ Atención: unión sin verificación de cardinalidad

Cada vez que escribas una convergencia, pregúntate explícitamente «¿cuántos esperaba?» antes de seguir. Si la respuesta no coincide con lo que llegó, detente y resuelve el caso: no dejes que el grafo de trabajo siga como si estuviera completo. Una rama que falla en silencio es peor que una rama que falla haciendo ruido.

Conceptos clave

Fan-out

Un nodo se convierte en N ramas

Fan-in

N ramas se convierten en un nodo

Cardinalidad

¿Recibí los N que envié?

Peligro

Merge que se traga algo en silencio

5

🚦 Enruta según la condición

En el enrutamiento por condición, la arista elige el destino según el resultado del nodo anterior. Es el mecanismo que hace que el work graph «decida» sin que un agente tenga que interpretar todo de nuevo en cada paso. El ejemplo clásico es el soporte al cliente.

La complejidad baja va a la base de respuestas preparadas (FAQ). La complejidad media va al agente de IA. La complejidad alta o arriesgada se escala directamente al humano. También están la arista «no lo resolvió» (devuelve al siguiente nivel) y la arista de aprendizaje (vuelve al clasificador con los comentarios).

Diagrama de soporte al cliente: el cliente envía un mensaje; un nodo de clasificación lo enruta según su complejidad: los casos de baja complejidad van a las FAQ, los de complejidad media al agente de IA y los de alta complejidad o riesgo se escalan directamente a una persona, en rojo. Flechas punteadas de «si no se resuelve» bajan de las FAQ al agente de IA y de este a la persona; todas convergen en una solución. Una flecha verde punteada de aprendizaje vuelve desde los comentarios hasta la clasificación.
Qué observar: la leyenda distingue cuatro tipos de arista — flujo principal (clasificación → FAQ/IA/persona), si no se resuelve (línea discontinua, sube un nivel), escalamiento (roja, directo a la persona) y aprendizaje (verde, vuelve al clasificador). La flecha verde de aprendizaje es la única que cierra un ciclo — es lo que hace que el sistema mejore con el tiempo, en vez de funcionar siempre de la misma manera.

🎯 Por qué la arista de aprendizaje importa más de lo que parece

Las tres primeras aristas (principal, si-no-se-resuelve, escalamiento) hacen que el sistema funcionar hoy. Solo la arista verde hace funcionar el sistema mejor mañana — porque es la única que devuelve información al nodo que decide. Sin ella, el clasificador se equivoca siempre de la misma manera; con ella, cada corrección humana se convierte en una señal para el siguiente enrutamiento.

Conceptos clave

Enrutamiento por condición

La arista elige según el resultado

Escalamiento

El riesgo alto va directamente a una persona

Si-no-se-resuelve

Sube al siguiente nivel

Aprendizaje

Única arista que cierra el ciclo

6

⚙️ Deja que el código decida lo que es previsible

El modelo enruta lo que un if resolverlo es caro, lento y no determinista. La división que funciona: el código controla el enrutamiento predecible; el modelo se encarga de los pasos que requieren interpretación o criterio. Cada arista que puedas convertir en una regla escrita es una arista que deja de costar tokens y de variar entre ejecuciones.

✓ Déjaselo al código

  • ✓"Si complejidad == baja, va a FAQ" — regla explícita, sin ambigüedad
  • ✓"Si la cardinalidad no coincide, detente y alerta" — comprobación mecánica
  • ✓"Si categoría == pago, va al agente financiero" — mapeo fijo

✗ Déjaselo al modelo

  • ✗"¿El tono del mensaje sugiere frustración?" — requiere interpretación, no una regla
  • ✗"¿Esta respuesta realmente responde la pregunta?" — evaluación de calidad
  • ✗"¿Cuál es la intención real detrás de esta frase ambigua?" — interpretación

🧪 Ejemplo práctico: grafo de enrutamiento de soporte en JSON

Objetivo: escribir el grafo de enrutamiento del soporte con aristas condicionales explícitas, una arista de escalamiento, otra para los casos no resueltos y otra de aprendizaje — y una unión que compruebe la cardinalidad. Ejecútalo en la consola del navegador (F12 → Console) o en Node.

// 1) O grafo de roteamento: cada aresta tem uma condicao explicita
const roteador = {
  "classificacao": [
    { "para": "faq",         "quando": "complexidade == 'baixa'" },
    { "para": "agente_ia",   "quando": "complexidade == 'media'" },
    { "para": "humano",      "quando": "complexidade == 'alta' || risco == 'alto'" }
  ],
  "faq":        [ { "para": "agente_ia", "quando": "resolvido == false" } ],
  "agente_ia":  [ { "para": "humano",    "quando": "resolvido == false" } ],
  "humano":     [ { "para": "classificacao", "quando": "feedback_dado == true", "tipo": "aprendizado" } ]
};

// 2) Juncao com checagem de cardinalidade (fan-in de N tickets em lote)
function fanIn(despachados, recebidos) {
  if (recebidos.length !== despachados.length) {
    throw new Error(`cardinalidade nao bate: recebi ${recebidos.length} de ${despachados.length}`);
  }
  return recebidos;
}

// 3) Rota um ticket de exemplo
function roteia(no, ctx) {
  const arestas = roteador[no] || [];
  for (const a of arestas) {
    // avaliacao simplificada da condicao 'quando' contra o contexto
    if (eval(a.quando.replace(/complexidade/g, `'${ctx.complexidade}'`).replace(/risco/g, `'${ctx.risco}'`).replace(/resolvido/g, ctx.resolvido).replace(/feedback_dado/g, ctx.feedback_dado))) {
      return a.para;
    }
  }
  return null; // nenhuma condicao casou -- pedido some, ver "como verificar"
}

console.log(roteia("classificacao", { complexidade: "media", risco: "baixo" })); // "agente_ia"

Cómo verificar:

  • 1. Toda arista que sale de un nodo de decisión (classificacao) tiene quando — ninguna arista «cambia» sin una condición escrita.
  • 2. Las condiciones cubren todos los casos: prueba roteia("classificacao", <contexto sem match>); si devuelve null, existe una entrada que no coincide con ninguna condición y la solicitud desaparece en silencio.
  • 3. Hay un camino hasta la persona a partir de cualquier nodo: sigue las aristas de faq e agente_ia y confirma que ambas llegan a humano cuando resolvido == false.

Ahora cámbialo por el tuyo: reemplaza los nodos por <etapas do seu suporte> y las condiciones por <campos reais do seu ticket>. Ejecuta la prueba del punto 2 antes de pasar a producción.

Verificación rápida (no bloquea nada): un fan-in recibió 3 respuestas de un fan-out que despachó 5 ramas y siguió como si estuviera completo. ¿Cuál fue el error?

Conceptos clave

El código enruta

Lo que es una regla se convierte en `if`

El modelo juzga

Lo que exige interpretación

Cobertura total

Toda entrada tiene un destino

Menos costo

Una regla escrita no consume tokens

📌 Resumen del módulo

✓
Org graph = organigrama — agentes de larga duración, roles con nombre, solo cambia al volver a desplegar.
✓
Work graph = tarea de hoy — efímero, se crea y se descarta con cada solicitud.
✓
Zone defense — cada agente es responsable de un dominio, con contexto persistente, sin filtrarlo al otro.
✓
Fan-out/fan-in — abrir N ramas paralelas y unirlas; cada unión verifica la cardinalidad.
✓
Enrutamiento por condición — la arista elige según el resultado del nodo; la arista de aprendizaje es la única que cierra un ciclo.
✓
Código vs. modelo — lo que es una regla se convierte en `if`; lo que requiere criterio queda en manos del modelo.

Próximo módulo:

4.3 — Fallas, harness y observabilidad: merge que se traga la fuente, enrutamiento que no converge, monitor de quién ejecutó qué.