Agentes
Un agente es un bucle: un modelo que decide, unas tools que ejecutan, una condición de parada. Aquí revisas cada agente y creas perfiles nombrados y personalizados (modelo, esfuerzo, iteraciones, recuperación y una persona). Desde la S13 conviven tres estilos: el agente hecho a mano (S12), la orquestación Actor-Critic-Boss (S4/S5) y el nuevo flujo multi-agente por grafo (S13).
Agente hecho a mano (S12)
Bucle manual sobre la Responses API: reason → act → observe.
Tools: search_budgets,
derive_task_hours,
validate_estimate. Para cuando deja de pedir tools o al
alcanzar max_iterations. Conduce las dos fases del wizard
(/v1/estimate/agent/structure y
/hours).
| Nombre | Modelo | Effort | Iter. | Persona | Acciones |
|---|---|---|---|---|---|
|
E
Estándar
default
|
gpt-5 | medium | — | Sé claro y conservador; explica cada supuesto en una frase. | Editar · Probar |
| gpt-5 | high | 15 | Ante ambigüedad, sobreestima y justifícalo; busca análogo... | Editar · Probar | |
| gpt-5-mini | low | 6 | Ve al grano; una búsqueda por componente y consolida. | Editar · Probar |
Agentes del grafo (S13)
El pipeline de estimación reexpresado como un grafo LangGraph:
agentes especializados encadenados con dos handovers
(Command(goto)) y dos gates humanos
(interrupt()). Solo lectura — sus modelos se fijan por
.env en el servicio IA.
-
🕶 Morpheus agenteClassifier · «Te mostraré hasta dónde llega la madriguera»gpt-4o-miniGRAPH_CLASSIFIER_MODEL
Clasifica la complejidad y reformula el brief.
Lee la transcripción cruda y produce una ComplexityClassification: una etiqueta de complejidad (low / medium / high) y un brief reformulado y limpio. La complejidad decide luego el reasoning effort del agente de estructura. Es el nodo de entrada y hace el primer handover (Command(goto) → structure), sin arista estática.
-
🥋 Neo agenteStructure · «Yo sé kung-fu — veo la estructura»gpt-5AGENT_MODEL
Descompone el brief en módulos → tareas (sin horas).
Reutiliza el agente hecho a mano de la S12 (bucle Responses API) para convertir el brief en un árbol de módulos y tareas, todavía sin horas. El esfuerzo de razonamiento se elige según la complejidad del classifier (GRAPH_STRUCTURE_EFFORT_BY_COMPLEXITY).
-
🧑 El Operador gate humano🧑 Gate 1 · revisión de estructura · «Tú tomas la decisión»sin modelo
Pausa para revisión humana de los módulos y tareas.
Human-in-the-loop: interrupt() detiene el grafo y expone la estructura para que una persona la edite o apruebe. Al reanudar (Command(resume=…)) devuelve los módulos aprobados. Disciplina interrupt-first: no escribe en el estado antes de pausar, porque el resume re-ejecuta el nodo entero.
-
🎛 Tank fan-outHours ×N · «Cargo los programas que hagan falta, en paralelo»sin modeloTASK_HOURS_TOP_K / TASK_HOURS_DISTANCE_THRESHOLD
Horas por tarea vía búsqueda vectorial determinista.
No usa LLM: es un fan-out con la Send API (una rama en paralelo por cada tarea aprobada). Cada rama busca las tareas históricas más cercanas y deriva las horas por consenso ponderado por distancia (reutiliza la lógica de la S10). Sin análogo por debajo del umbral → tarea marcada en rojo.
-
🏍 Trinity joinRecover & handover · «Rescato lo que se dio por perdido»gpt-5AGENT_MODEL
Junta las ramas, recupera tareas dudosas y construye la estimación.
Nodo de join del fan-out. Detecta tareas dudosas (sin match, rango contradictorio o fiabilidad baja) y, si las hay, lanza un bucle agéntico de recuperación (S12). Fusiona las horas y construye el Estimate consolidado. Termina con el segundo handover (Command(goto) → analysis).
-
🔮 El Oráculo agenteAnalysis · «Te diré la verdad, aunque no guste»gpt-4oGRAPH_ANALYSIS_MODEL
Redacta el informe de fiabilidad (no toca los números).
Lee la estimación y escribe un ReliabilityReport: confianza global, ratio de tareas fundamentadas (calculado de forma determinista, sobrescribe el del LLM), puntos débiles y un resumen. No modifica ninguna cifra; solo evalúa.
-
🧑 El Operador gate humano🧑 Gate 2 · validación final · «Tú tomas la decisión»sin modelo
Pausa para la validación humana del informe y la estimación.
Segundo human-in-the-loop: interrupt() expone la estimación y el informe de fiabilidad. Al reanudar, aplica los overrides, fija el status (validated / needs_review) y registra si se pidió una propuesta comercial (want_proposal).
-
📐 El Arquitecto agenteProposal · «Compongo el constructo final»gpt-4oGRAPH_PROPOSAL_MODEL
Bonus: redacta la propuesta comercial.
Nodo condicional: solo se ejecuta si GRAPH_PROPOSAL_ENABLED está activo Y el humano pidió propuesta en el gate 2. Redacta una CommercialProposal en markdown, anclada estrictamente a la estimación validada. En caso contrario, el grafo termina en END.
Actor-Critic-Boss (S4/S5)
Orquestación, no tool-calling — solo lectura aquí.
Una máquina de estados: el actor propone, el
critic audita, el boss
decide accept / iterate /
synthesize hasta BOSS_MAX_ITERATIONS.
El LLM no elige tools: el control de flujo es determinista.
Su configuración vive en Ajustes (modelos actor/crítico) y se prueba desde el chat en modo ACB.