Agentes — Flujo y Funcionalidad
Guía completa de los agentes que se ejecutan dentro de MatrixAI cuando escribes una descripción en lenguaje natural y el sistema genera un modelo. No hace falta haber leído los contratos técnicos.

1. ¿Qué es un agente en MatrixAI?
En MatrixAI, un agente es un componente pequeño y especializado que hace exactamente una cosa. No hay un agente grande que lo controle todo: hay varios agentes en cadena, cada uno con una responsabilidad concreta y con permisos acotados.
| Tipo | Qué hace | Ejemplos |
|---|---|---|
| **Generadores** | Proponen artefactos (`.semantic`, `.mxai`) | PromptAgent`, `LLMProposalAgent`, `ArchitectAgent |
| **Verificadores** | Validan que los artefactos cumplen las reglas | PlannerVerifier`, `VerifierAgent`, `SafetyAgent |
| **Explicadores** | Interpretan y comunican resultados | AuditorAgent`, `OptimizerAgent |
2. El flujo completo de principio a fin
Cuando escribes un prompt como «clasifica emails como spam, normal o urgente», MatrixAI ejecuta este pipeline:
Prompt humano
|
PromptAgent (determinista) o LLMProposalAgent (con IA externa)
|
.semantic — un borrador estructurado del modelo
|
PromptSupervisor — ¿se puede construir un modelo real con esto?
|
ArchitectAgent — convierte el plan en .mxai
|
MathematicalAgent — traduce reglas if/then a matemáticas
|
PlannerVerifier — valida el plan completo
|
.mxai — el modelo declarativo final
|
Parser — convierte .mxai en IR (representación interna)
|
VerifierAgent — valida la IR
|
SafetyAgent — comprueba que no hay acciones reales sin sandbox
|
PythonBackendCompiler — compila el modelo a Python ejecutable
|
Runtime / Entrenamiento / API / AuditoríaUna analogía sencilla
Imagina que quieres construir un puente. PromptAgent es el arquitecto que interpreta el encargo del cliente. ArchitectAgent dibuja los planos. MathematicalAgent hace los cálculos estructurales. PlannerVerifier y VerifierAgent son los inspectores técnicos. SafetyAgent es la inspección de seguridad. AuditorAgent explica al cliente qué decisiones se tomaron. Ningún arquitecto puede aprobar sus propios planos.
3. PromptAgent — El punto de entrada determinista
Archivo: matrixai/agents/prompt.py
El PromptAgent convierte tu descripción en lenguaje natural en el primer artefacto estructurado: un archivo .semantic. Lo hace sin llamar a ningún LLM externo. Es completamente determinista.
| Paso | Qué ocurre |
|---|---|
| 1. Normalizar prompt | Limpia el texto, detecta el idioma, identifica palabras clave de dominio |
| 2. Elegir plantilla | Selecciona la plantilla más adecuada para el dominio detectado |
| 3. Inferir el modelo | Extrae proyecto, modo, entidad, campos, objetivos y thresholds |
| 4. Extraer reglas | Identifica frases tipo «si X entonces Y» como reglas |
| 5. Emitir `.semantic` | Archivo estructurado con toda la información extraída |
| 6. Registrar la traza | Documenta cada decisión tomada durante la síntesis |
| Plantilla | Modo | Entidad | Cuándo se usa |
|---|---|---|---|
email | Clasificación | Cuando el prompt habla de correos o bandeja de entrada | |
pharmacy | Riesgo | Order | Cuando el prompt habla de dispensación o farmacia |
fall_risk | Riesgo | Patient | Cuando el prompt habla de riesgo clínico o caídas |
generic_risk | Riesgo | Signal | Fallback para cualquier prompt de riesgo no reconocido |
generic_classification | Clasificación | Item | Fallback para cualquier prompt de clasificación no reconocido |
Ejemplo de salida
# Prompt de entrada:
"Un sistema que clasifique emails entrantes como urgentes, normales o spam,
usando el asunto, el remitente y la puntuación de confianza"
# .semantic producido:
PROJECT EmailClassifier
INTENT classify incoming emails
MODE classification
ENTITY Email
FIELDS subject, sender, confidence_score
GOAL classify_incoming_email
ACTION send_response IF urgency > 0.854. LLMProposalAgent — Cuando se conecta una IA externa
Archivo: matrixai/agents/llm_proposal.py
| PromptAgent | LLMProposalAgent | |
|---|---|---|
| **Fuente** | Determinista, local | LLM externo (o simulado) |
| **Velocidad** | Instantáneo | Depende del proveedor |
| **Calidad en dominios abiertos** | Limitada a plantillas | Alta |
| **Reproducibilidad** | 100% determinista | Depende del LLM |
| **Coste** | Sin coste de API | Consume tokens |
| **¿Puede aprobar su propia propuesta?** | No | No |
Proveedores disponibles
| Proveedor | Estado | Para qué sirve |
|---|---|---|
DeterministicLLMProposalProvider | Activo por defecto | Usa el PromptAgent como simulación offline. Sin coste, completamente reproducible. |
ChatCompletionsLLMProposalProvider | Implementado | Llama a cualquier API compatible con el formato HTTP chat-completions. |
Configuración con un LLM externo
MATRIXAI_LLM_API_KEY=tu_clave_de_api
MATRIXAI_LLM_MODEL=gpt-4o
MATRIXAI_LLM_ENDPOINT=https://api.openai.com/v1
MATRIXAI_LLM_PROVIDER_NAME=openai
MATRIXAI_LLM_CANDIDATES=3
MATRIXAI_LLM_TEMPERATURE=0.7
MATRIXAI_LLM_TIMEOUT=30
MATRIXAI_LLM_MAX_RETRIES=2
MATRIXAI_LLM_TOKEN_BUDGET=2000
# O cargados desde un archivo .env:
MATRIXAI_LLM_ENV_FILE=.env.llmTrazabilidad de las llamadas
Cada llamada queda registrada en un LLMCallTrace con: proveedor, modelo, endpoint, hash del prompt, número de intento, latencia, HTTP status, tokens consumidos y error si lo hubo.
5. PromptSupervisor — La puerta de aceptación
Archivo: matrixai/agents/prompt_supervisor.py
El PromptSupervisor es el agente más importante del sistema. Su trabajo es uno solo: decidir si una propuesta puede convertirse en un modelo real de MatrixAI. Es completamente determinista, no importa si la propuesta vino del PromptAgent o de un LLM externo.
Check 1: architect_plan ¿Puede convertirse el .semantic en un plan?
Check 2: planner_verifier ¿El plan cumple reglas estructurales y objetivos?
Check 3: mathematical_rules_resolved ¿Todas las reglas if/then están traducidas?
Check 4: parser ¿El .mxai puede parsearse a IR canónica?
Check 5: verifier_agent ¿La IR cumple checks de grafo, acciones y tipos?
Check 6: safety_agent ¿Las acciones respetan el sandbox simulate_only?
Check 7: python_compiler ¿El backend Python puede compilar el programa?Qué devuelve si todos los checks pasan
{
"accepted": true,
"semantic_text": "...",
"plan": {},
"mxai": "PROGRAM EmailClassifier ...",
"compiled_python": "...",
"checks": [
{ "name": "architect_plan", "passed": true },
{ "name": "planner_verifier", "passed": true }
]
}Qué devuelve si un check falla
{
"accepted": false,
"checks": [
{ "name": "architect_plan", "passed": true },
{ "name": "mathematical_rules_resolved", "passed": false,
"error": "Regla 'if priority > 0.5 or urgency > 0.8' no resuelta" }
]
}6. ArchitectAgent — Del plan al modelo
Archivo: matrixai/agents/architect.py
El ArchitectAgent toma el .semantic aceptado y lo convierte en un SemanticPlan estructurado y en el archivo .mxai final.
Qué lee del .semantic
| Bloque | Qué extrae |
|---|---|
PROJECT | Nombre del proyecto |
INTENT | Intención del modelo en texto |
MODE | classification` o `risk |
ENTITY | Nombre de la entidad de entrada (Email, Patient, Order…) |
FIELDS | Campos del vector de entrada |
GOAL | Objetivos de negocio (se pasan al GoalTranslator) |
RULES | Reglas condicionales (se pasan al MathematicalAgent) |
CONSTRAINT | Restricciones del modelo |
ACTION_THRESHOLD | Umbral para activar acciones |
ACTION | Acciones que el modelo puede ejecutar |
Qué genera según el modo
| Modo | Estructura generada |
|---|---|
classification | Vector de entrada → `softmax_linear` → distribución `Categorical` → acción simulada → bloque de auditoría |
risk | Vector de entrada → `sigmoid_linear` → distribución `Normal` → acción simulada → bloque de auditoría |
7. GoalTranslator — De objetivos humanos a reglas verificables
El GoalTranslator convierte los objetivos de negocio escritos en lenguaje natural (los bloques GOAL del .semantic) en reglas concretas y verificables que el PlannerVerifier puede comprobar.
| Objetivo humano | Regla generada | Parámetro |
|---|---|---|
minimize_false_alerts | action_threshold_min | Umbral mínimo de 0.85 |
minimize_false_replies | action_threshold_min | Umbral mínimo de 0.85 |
maximize_precision | action_threshold_min | Umbral mínimo de 0.85 |
maximize_safety | action_threshold_min | Umbral mínimo de 0.90 |
maximize_recall | action_threshold_max | Umbral máximo de 0.75 |
minimize_latency | graph_nodes_max | Máximo 6 nodos en el grafo |
minimize_fall_incidents | distribution_required | Se exige distribución `Normal` |
classify_incoming_email | distribution_required | Se exige distribución `Categorical` |
Ejemplo práctico
Si en el prompt escribes «quiero minimizar las falsas alarmas», el GoalTranslator genera una regla: «el umbral para activar cualquier acción debe ser igual o superior a 0.85». El PlannerVerifier comprueba que el modelo efectivamente tiene ese umbral. Si no lo tiene, la propuesta es rechazada antes de convertirse en .mxai. Esto es lo que significa que MatrixAI sea declarativo en un sentido fuerte: describes los objetivos, y el sistema comprueba que el modelo los cumple.
8. MathematicalAgent — De reglas a matemáticas
Archivo: matrixai/agents/mathematical.py
El MathematicalAgent convierte las reglas condicionales del tipo «si X entonces Y» en expresiones matemáticas continuas. Este paso es esencial porque las reglas discretas no son diferenciables (no se pueden usar en entrenamiento) y no son auditables de la misma manera.
¿Por qué convertir reglas a matemáticas?
Una regla como si riesgo > 0.8 entonces alertar tiene un salto brusco exactamente en 0.8 — de «no alertar» a «alertar». Esto crea problemas en el entrenamiento (el gradiente es cero en casi todas partes) y en la auditoría. La solución es sigmoid(20 * (riesgo - 0.8)): una función continua que se comporta de manera similar pero con una transición suave alrededor del umbral.
| Regla original | Expresión generada | Tipo |
|---|---|---|
si x > umbral entonces acción | sigmoid(20 * (x - umbral)) | Umbral suave |
si x < umbral entonces acción | sigmoid(20 * (umbral - x)) | Umbral invertido |
si a > x y b > y entonces acción | sigmoid(a - x) * sigmoid(b - y) | AND probabilístico |
si a > x o b > y entonces acción | sigmoid(a-x) + sigmoid(b-y) - sigmoid(a-x)*sigmoid(b-y) | OR probabilístico |
clasificar x en a, b, c | softmax([score_a, score_b, score_c]) | Multiclase |
puntuacion = 0.6 * a + 0.4 * b | Expresión simbólica | Suma ponderada |
agregar a, b usando mean/max/min | mean(a, b)` / `max(a, b)` / `min(a, b) | Agregación |
normalizar x al rango [0, 10] | scale(x, 0, 10) | Normalización |
elegir el mejor de candidatos | argmax(scores) | Selección |
{
"check": "mathematical_rules_resolved",
"passed": false,
"error": "Regla 'if patient.history matches pattern X' no resuelta — patrón de texto no soportado"
}9. PlannerVerifier — Validar antes de construir
| Categoría | Qué comprueba |
|---|---|
| Proyecto | Identificador válido (sin caracteres especiales) |
| Modo | Debe ser `classification` o `risk` |
| Vector de entrada | Nombre válido, al menos 2 campos, sin duplicados |
| Funciones | Cada función tiene nombre, output declarado y expresión |
| Distribuciones | Clasificación → `Categorical`, Riesgo → `Normal` |
| Grafo | Nodos y edges coherentes, sin nodos declarados y no conectados |
| Acciones | En el grafo, política `simulate_only`, umbral en [0, 1] |
| Auditoría | Cadena empieza en vector de entrada y termina en acción |
10. VerifierAgent — Validar el modelo ya construido
El VerifierAgent valida la IR del modelo ya parseado. Trabaja sobre el MatrixAIProgram — la representación interna después de parsear el .mxai.
| Check | Qué comprueba |
|---|---|
| `GRAPH` no vacío | El modelo tiene al menos un nodo |
| Nodos declarados | Cada nodo mencionado en el grafo está definido |
| Acciones en el grafo | Las acciones están conectadas al grafo |
| Operadores de acción | Solo se usan `>`, `>=`, `<`, `<=` |
| Condiciones de acción | La fuente de cada condición está declarada en el vector de entrada |
| Acciones con política | Toda acción tiene una política de ejecución |
| Distribuciones con source | Toda distribución indica de dónde lee su valor |
| `AUDIT EXPLAIN` en el grafo | El bloque de auditoría está conectado |
| Grafo acíclico | No hay dependencias circulares |
| Tipos P2 | Los tipos de campos y expresiones son consistentes |
El check de grafo acíclico
Un grafo con ciclos significaría dependencias circulares (A depende de B, B depende de A), lo que haría la ejecución infinita o indefinida. MatrixAI lo rechaza siempre.
11. SafetyAgent — El guardia de seguridad
| Regla | Qué verifica |
|---|---|
| Sin acciones reales | Ninguna acción puede ejecutar código fuera del sandbox simulado |
| Exige política simulada | Todas las acciones deben tener `POLICY simulate_only` |
| Rechaza llamadas externas | Las llamadas deben ser `simulated.*`, no HTTP, SQL u otras |
Para acciones reales se requiere: archivo .mxact explícito, flag --allow-real-actions, variable MATRIXAI_ALLOW_REAL_ACTIONS=true y clave HMAC de firma.
Mensajes de seguridad
"Acción 'send_email' tiene executor_kind=real pero POLICY no es real_with_approval"
"Acción 'update_db' llama a 'database.write' fuera del espacio simulated.*"12. AuditorAgent — La explicación para humanos
El AuditorAgent no valida ni genera modelos. Su trabajo es convertir el resultado de una ejecución en una explicación que cualquier persona pueda entender.
Qué explica
- Si no se activó ninguna acción: por qué no, qué valores se evaluaron, qué umbral no se alcanzó
- Si una acción quedó activa: qué valor desencadenó la acción, desde qué fuente, con qué umbral
- Si una acción quedó inactiva: qué condición no se cumplió y por cuánto
- Que la ejecución fue simulada: texto explícito de que no ocurrió ningún efecto real
- Qué nodos se evaluaron: la traza completa del recorrido del dato por el grafo
Resultado de la evaluación:
El modelo clasificó este email como "urgent" con una probabilidad de 0.94.
Factores que influyeron en la clasificación:
- El score del remitente (0.95) superó el umbral de confianza (0.85)
- El asunto del email activó señales de urgencia con intensidad 0.91
Acción propuesta: send_priority_response
- Estado: SIMULADA — no se ha enviado ningún email real
- Umbral de activación: 0.85
- Valor observado: 0.94 (umbral superado)
Nodos evaluados: Email → EmailScoring → UrgencyClassifier → Categorical → Action13. OptimizerAgent — Sugerencias de mejora
El OptimizerAgent analiza el modelo y sugiere mejoras. Solo sugiere: no modifica el modelo por su cuenta.
| Tipo | Cuándo se activa | Qué propone |
|---|---|---|
merge_linear_activation | softmax_linear` seguido de `sigmoid_threshold | Fusionar las dos operaciones en una |
cache_embedding | Vector con fan-out a más de dos nodos | Calcular el embedding una vez y reutilizarlo |
prune_isolated_nodes | Nodos declarados fuera del `GRAPH` | Eliminar nodos no conectados |
simplify_graph | Más de 7 nodos | Revisar si hay nodos intermedios innecesarios |
annotate_expression | Función con `kind == "unknown"` | La expresión no fue reconocida; añadir anotación |
review_fan_in | Nodo recibe entradas de 3+ nodos | Revisar si la alta convergencia es intencional |
Ejemplo de informe
Informe OptimizationReport para EmailClassifier:
[SUGERENCIA] merge_linear_activation
Nodo: UrgencyClassifier -> sigmoid_threshold
softmax_linear + sigmoid_threshold puede fusionarse
Impacto esperado: reducción ~15% en tiempo de inferencia
[SUGERENCIA] simplify_graph
Nodos actuales: 9 (umbral recomendado: 7)
Revisar si 'IntermediateScore' y 'NormalizedScore' pueden fusionarse
Sin cambios aplicados. Todas las sugerencias son informativas.14. Qué ocurre después de los agentes
.mxai aceptado
|
Runtime interpretado — ejecuta el modelo sin compilar, para pruebas rápidas
|
PythonBackendCompiler — compila a Python puro para ejecución autónoma
|
DifferentiablePythonCompiler — versión entrenable del modelo
|
BackendContractAnalyzer — analiza la portabilidad a distintos backends
|
Entrenamiento (P4/P5) — ajusta los parámetros con datos reales
|
Servidor HTTP (P6) — sirve el modelo como API REST
|
Studio (P6.5) — interfaz visual para explorar el modelo15. Referencia rápida
| Agente | Tipo | Entrada | Salida | Determinista |
|---|---|---|---|---|
PromptAgent | Generador | Texto libre | `.semantic` + traza | Sí |
LLMProposalAgent | Generador | Texto libre | `.semantic` (propuesta) | Depende del proveedor |
PromptSupervisor | Puerta | Prompt / `.semantic` | SupervisionReport | Siempre sí |
ArchitectAgent | Generador | .semantic | SemanticPlan` + `.mxai | Sí |
GoalTranslator | Traductor | Goals en texto | VerificationRule | Sí |
MathematicalAgent | Traductor | Reglas if/then | Expresiones matemáticas | Sí |
PlannerVerifier | Verificador | SemanticPlan | PlanVerificationResult | Sí |
VerifierAgent | Verificador | `MatrixAIProgram` (IR) | VerificationResult | Sí |
SafetyAgent | Verificador | MatrixAIProgram | Errores/warnings de seguridad | Sí |
AuditorAgent | Explicador | Resultado de runtime | Texto humano | Sí |
OptimizerAgent | Explicador | MatrixAIProgram | OptimizationReport | Sí |
Los 7 checks del PromptSupervisor
| # | Check | Qué bloquea si falla |
|---|---|---|
| 1 | architect_plan | El `.semantic` no puede convertirse en plan |
| 2 | planner_verifier | El plan no cumple reglas estructurales u objetivos |
| 3 | mathematical_rules_resolved | Quedan reglas if/then sin traducir |
| 4 | parser | El `.mxai` tiene errores de sintaxis |
| 5 | verifier_agent | La IR no cumple los contratos de grafo, tipos o acciones |
| 6 | safety_agent | Hay acciones que no respetan el sandbox simulate_only |
| 7 | python_compiler | El modelo no puede compilarse a Python ejecutable |
Variables de entorno para LLM externo
| Variable | Qué controla |
|---|---|
MATRIXAI_LLM_API_KEY | Clave de autenticación del proveedor |
MATRIXAI_LLM_MODEL | Modelo a usar (ej. `gpt-4o`, `claude-3-5-sonnet`) |
MATRIXAI_LLM_ENDPOINT | URL base de la API |
MATRIXAI_LLM_PROVIDER_NAME | Nombre del proveedor (para trazas) |
MATRIXAI_LLM_CANDIDATES | Número de propuestas a generar |
MATRIXAI_LLM_TEMPERATURE | Creatividad (0 = determinista, 1 = creativo) |
MATRIXAI_LLM_TIMEOUT | Segundos de espera máxima por llamada |
MATRIXAI_LLM_MAX_RETRIES | Reintentos ante fallos de red |
MATRIXAI_LLM_TOKEN_BUDGET | Límite de tokens por llamada |
MATRIXAI_LLM_ENV_FILE | Ruta a un archivo `.env` con las variables anteriores |
16. Mapa general: agente → comando → endpoint
| Agente | CLI principal | Endpoint Studio |
|---|---|---|
PromptAgent | matrixai prompt | POST /api/analyze |
LLMProposalAgent | matrixai propose | `POST /api/analyze` (con LLM) |
PromptSupervisor | matrixai supervise-prompt | `POST /api/analyze` (automático) |
ArchitectAgent | matrixai architect | POST /api/analyze |
MathematicalAgent | matrixai mathematize | `POST /api/analyze` (interno) |
PlannerVerifier | matrixai validate-plan | `POST /api/analyze` (interno) |
VerifierAgent | matrixai validate | `POST /api/analyze` (interno) |
SafetyAgent | matrixai permissions | `POST /api/analyze` (interno) |
AuditorAgent | `matrixai run` (salida auditada) | POST /api/studio/run-executive |
OptimizerAgent | matrixai optimize | `POST /api/analyze` (interno) |
17. PromptAgent — CLI y API
CLI
# Forma básica: ver el .mxai en pantalla
matrixai prompt "clasifica emails como spam, normal o urgente"
# Guardar el .mxai generado
matrixai prompt "clasifica emails como spam, normal o urgente" -o email.mxai
# Ver el .semantic intermedio que generó el PromptAgent
matrixai prompt "clasifica emails como spam, normal o urgente" --semantic
# Leer la descripción desde un fichero
cat mi_descripcion.txt | matrixai prompt - -o modelo.mxai
# Resultado completo como JSON (incluye .semantic, .mxai, traza y checks)
matrixai prompt "clasifica emails como spam, normal o urgente" --json
# Si el modelo generado no es lo que esperabas:
matrixai prompt "mi descripción" --semantic -o borrador.semantic
# ... editar borrador.semantic ...
matrixai supervise-prompt "mi descripción" --proposal borrador.semanticAPI REST (Studio — puerto 8080)
curl -X POST http://localhost:8080/api/analyze \
-H "Content-Type: application/json" \
-d '{"prompt": "clasifica emails como spam, normal o urgente"}'
# Respuesta:
# { "ok": true, "semantic_text": "...", "mxai": "PROGRAM EmailClassifier ...",
# "pipeline_stages": [
# { "name": "prompt_agent", "ok": true },
# { "name": "architect", "ok": true },
# { "name": "verifier", "ok": true },
# { "name": "safety", "ok": true },
# { "name": "compiler", "ok": true }
# ],
# "supervision_source": "deterministic" }18. LLMProposalAgent — CLI y API
# Variables de entorno necesarias
export MATRIXAI_LLM_API_KEY=tu_clave_de_api
export MATRIXAI_LLM_MODEL=gpt-4o
export MATRIXAI_LLM_ENDPOINT=https://api.openai.com/v1
export MATRIXAI_LLM_PROVIDER_NAME=openai
export MATRIXAI_LLM_CANDIDATES=3
export MATRIXAI_LLM_TEMPERATURE=0.7
# Con LLM externo (requiere variables de entorno configuradas)
matrixai propose "sistema de evaluación de riesgo hipotecario" \
--provider chat-completions-compatible --max-candidates 3
# Modo determinista (sin LLM, usa PromptAgent como stand-in)
matrixai propose "sistema de evaluación de riesgo hipotecario" \
--provider deterministic --max-candidates 2
# Comprobar qué modo está activo en el servidor:
curl http://localhost:8080/api/studio/status
# { "ok": true, "llm_mode": { "active": true, "provider": "openai", "model": "gpt-4o" } }
# Si "active": false → el servidor usa DeterministicLLMProposalProvider (fallback)19. PromptSupervisor — CLI y API
# Supervisar un .semantic generado previamente o editado a mano
matrixai supervise-prompt "descripción original del modelo" \
--proposal mi_modelo.semantic
# Ver todos los checks en JSON
matrixai supervise-prompt "descripción original del modelo" \
--proposal mi_modelo.semantic --json
# Leer el resultado del PromptSupervisor programáticamente
matrixai prompt "clasifica emails" --json | python3 -c "
import json, sys
data = json.load(sys.stdin)
print('Aceptado:', data.get('accepted', 'N/A'))
for check in data.get('checks', []):
estado = '✓' if check['passed'] else '✗'
print(f' {estado} {check["name"]}')
if not check['passed']:
print(f' ERROR: {check.get("error", "")}')
"# Cuando un check falla, los siguientes aparecen con "skipped": true
# { "ok": false, "pipeline_stages": [
# { "name": "architect_plan", "ok": true },
# { "name": "mathematical_rules_resolved", "ok": false,
# "error": "Regla 'if category matches pattern X' no resuelta" },
# { "name": "parser", "ok": false, "skipped": true }
# ] }20. ArchitectAgent — CLI y API
# Convertir un .semantic existente en .mxai
matrixai architect mi_modelo.semantic -o mi_modelo.mxai
# Flujo típico: generar el .semantic primero, luego arquitectar
matrixai prompt "evalúa el riesgo de caída de pacientes" --semantic -o riesgo.semantic
matrixai architect riesgo.semantic -o riesgo_caida.mxai
# Studio: ejecutar sobre un .mxai ya existente
curl -X POST http://localhost:8080/api/studio/run-executive \
-H "Content-Type: application/json" \
-d '{
"mxai": "PROGRAM RiskAssessment ...",
"input_json": "{"age": 75, "balance_score": 0.3}",
"mxai_name": "RiskAssessment"
}'21. MathematicalAgent — CLI y API
# Traducir desde un fichero de reglas
matrixai mathematize reglas_negocio.txt
# Desde stdin (una regla directa)
echo "si riesgo > 0.8 entonces alertar" | matrixai mathematize -
# Múltiples reglas
cat << 'EOF' | matrixai mathematize -
si historial_impagos > 0.6 entonces rechazar
si ingresos < 15000 y deuda > 0.5 entonces revision
si score_credito > 0.7 o garantia > 100000 entonces aprobar
clasificar solicitud en aprobada, revision, rechazada
EOF
# Salida esperada (ejemplo):
# si riesgo > 0.75 entonces protocolo
# -> sigmoid(20 * (riesgo - 0.75)) [kind: sigmoid_threshold]
#
# si edad > 80 y balance < 0.4 entonces urgente
# -> sigmoid(20*(edad-80)) * sigmoid(20*(0.4-balance)) [kind: sigmoid_and]22. PlannerVerifier — CLI y API
# Validar un .semantic antes de arquitectar
matrixai validate-plan mi_modelo.semantic --json
# Flujo completo de validación pre-generación:
matrixai prompt "mi descripción" --semantic -o borrador.semantic
matrixai validate-plan borrador.semantic
matrixai architect borrador.semantic -o modelo.mxai
matrixai validate modelo.mxai
# Interpretar la salida:
matrixai validate-plan mi_modelo.semantic --json | python3 -c "
import json, sys
result = json.load(sys.stdin)
if result.get('ok'): print('Plan válido')
else:
for e in result.get('errors', []): print(f' ERROR: {e}')
for w in result.get('warnings', []): print(f' WARN: {w}')
"23. VerifierAgent — CLI y API
# Validar el .mxai (ejecuta el VerifierAgent sobre la IR)
matrixai validate email_classifier.mxai
# Lint: errores + advertencias (más detallado que validate)
matrixai lint email_classifier.mxai
# Lint estricto para CI/CD (falla si hay cualquier advertencia)
matrixai lint email_classifier.mxai --strict
# Ver la IR que valida el VerifierAgent
matrixai parse email_classifier.mxai
# Verificar tipos (sistema de tipos P2)
matrixai typecheck email_classifier.mxai
# Ejemplo de error de validate:
# ERROR: Nodo 'EmailScoring' referenciado en GRAPH pero no declarado
# ERROR: Acción 'send_reply' usa operador 'contains' — solo: >, >=, <, <=
# WARN: Nodo 'TempScore' declarado fuera del GRAPH (nodo aislado)
# Integración CI:
# - run: |
# matrixai validate email_classifier.mxai
# matrixai lint email_classifier.mxai --strict
# matrixai typecheck email_classifier.mxai24. SafetyAgent — CLI y API
# Ver qué permisos necesita el modelo y si respeta el sandbox
matrixai permissions email_classifier.mxai
# Salida (modelo simulado correctamente):
# Acciones declaradas:
# - send_reply
# Política: simulate_only ✓
# Llamada: simulated.email.send ✓
# Sandbox: OK — no requiere permisos reales
# Salida (violación de seguridad):
# ERROR: Acción 'update_database'
# Política: real_execution ✗ — requiere sandbox o contrato .mxact
# Llamada: database.write ✗ — fuera del espacio simulated.*
# Para acciones reales (requiere contrato y habilitación explícita):
matrixai validate-actions contrato.mxact email_classifier.mxai
matrixai dry-run-action contrato.mxact email_classifier.mxai \
--contract-name EnviarRespuesta \
--input '{"subject": "URGENTE", "urgency_score": 0.92}'
matrixai execute-action contrato.mxact email_classifier.mxai \
--contract-name EnviarRespuesta --allow-real-actions \
--signing-key $MATRIXAI_ACTION_SIGNING_KEY \
--input '{"subject": "URGENTE", "urgency_score": 0.92}'25. AuditorAgent — CLI y API
CLI
# Ejecutar el modelo — la salida ya incluye la explicación del AuditorAgent
matrixai run email_classifier.mxai \
--params runs/v1/params.best.json \
--input '{"subject": "URGENTE: sistema caído", "sender_score": 0.95, "body_length": 90}'
# Clasificación: urgent (probabilidad: 0.94)
# Factores: sender_score (0.95) superó umbral 0.85
# Acción: send_priority_response — SIMULADA (no se envió ningún email real)
# Nodos: Email → EmailScoring → UrgencyClassifier → Categorical → Action
matrixai run email_classifier.mxai --params runs/v1/params.best.json \
--input entrada.json --json | python3 -c "
import json, sys
result = json.load(sys.stdin)
print('Resultado:', result.get('result'))
for factor in result.get('influential_factors', []):
print(f' - {factor}')
"API REST
# Studio — análisis ejecutivo de un modelo existente
curl -X POST http://localhost:8080/api/studio/run-executive \
-H "Content-Type: application/json" \
-d '{
"mxai": "PROGRAM EmailClassifier ...",
"input_json": "{"subject": "URGENTE: sistema caído", "sender_score": 0.95}",
"mxai_name": "EmailClassifier"
}'
# Studio — simular un caso guiado
curl -X POST http://localhost:8080/api/studio/simulate \
-H "Content-Type: application/json" \
-d '{
"case_id": "fall-risk",
"input_values": { "age": 78, "balance_score": 0.28, "previous_falls": 2 }
}'
# Producción — predicción con trazabilidad
curl -X POST http://localhost:8000/predict \
-H "Authorization: Bearer $MATRIXAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"age": 78, "balance_score": 0.28, "previous_falls": 2}'26. OptimizerAgent — CLI y API
# Ver las sugerencias del OptimizerAgent
matrixai optimize email_classifier.mxai
# [SUGERENCIA] merge_linear_activation
# Nodo: UrgencyClassifier -> sigmoid_threshold
# softmax_linear + sigmoid_threshold puede fusionarse
# Impacto: ~15% reducción en tiempo de inferencia
# Como JSON para procesamiento automático:
matrixai optimize email_classifier.mxai --json | python3 -c "
import json, sys
data = json.load(sys.stdin)
for s in data.get('suggestions', []):
print(f' [{s["kind"]}] {s["description"]}')
"
# Via API Studio (sugerencias en la respuesta de /api/analyze):
curl -X POST http://localhost:8080/api/analyze \
-H "Content-Type: application/json" \
-d '{"mxai_text": "PROGRAM EmailClassifier ..."}'27. Flujo completo trazado con comandos
Descripción en texto
|
|-- CLI: matrixai prompt "descripción"
|-- CLI: matrixai propose "descripción" --provider chat-completions-compatible
|-- API: POST /api/analyze { "prompt": "descripción" }
|
v
PromptAgent / LLMProposalAgent (genera .semantic)
|
|-- Inspeccionar: matrixai prompt "..." --semantic
|-- Editar+supervisar: matrixai supervise-prompt "..." --proposal borrador.semantic
v
PromptSupervisor → ArchitectAgent (genera SemanticPlan + .mxai)
|-- Directo: matrixai architect borrador.semantic -o modelo.mxai
v
MathematicalAgent
|-- Directo: matrixai mathematize reglas.txt
v
PlannerVerifier
|-- Directo: matrixai validate-plan borrador.semantic
v
Parser → VerifierAgent
|-- Validar: matrixai validate modelo.mxai
|-- Detalle: matrixai lint modelo.mxai
|-- Tipos: matrixai typecheck modelo.mxai
v
SafetyAgent
|-- Permisos: matrixai permissions modelo.mxai
v
PythonBackendCompiler
|-- Compilar: matrixai compile modelo.mxai -o compilado.py
|-- Portabilidad: matrixai backend-report modelo.mxai
v
.mxai ACEPTADO
|
+-- Ejecución (AuditorAgent): matrixai run modelo.mxai --input entrada.json --params params.json
| API producción: POST /predict
| API Studio: POST /api/studio/run-executive
|
+-- Optimización (OptimizerAgent): matrixai optimize modelo.mxai
|
+-- Entrenamiento: matrixai train modelo.mxai --training contrato.mxtrain -o runs/v1/
|
+-- Servicio: matrixai serve modelo.mxai --params runs/v1/params.best.json --api-key CLAVE
|
+-- Studio: matrixai studio --open28. Depurar el pipeline por agente
| Check que falla | Qué significa | Cómo investigar |
|---|---|---|
architect_plan | El `.semantic` no puede convertirse en plan | `matrixai prompt "..." --semantic` y revisar el `.semantic` generado |
planner_verifier | El plan tiene errores estructurales | matrixai validate-plan borrador.semantic --json |
mathematical_rules_resolved | Quedan reglas if/then sin traducir | `matrixai mathematize reglas.txt` para ver qué se puede traducir |
parser | El `.mxai` tiene errores de sintaxis | `matrixai parse modelo.mxai` para localizar el error |
verifier_agent | La IR no cumple los contratos | `matrixai lint modelo.mxai --json` para ver todos los errores |
safety_agent | Hay acciones fuera del sandbox | matrixai permissions modelo.mxai --json |
python_compiler | El modelo no compila a Python | `matrixai compile modelo.mxai` para ver el error |
Script de diagnóstico completo
#!/bin/bash
# diagnostico_pipeline.sh <fichero.mxai>
MODELO=$1
echo "=== Diagnóstico del pipeline: $MODELO ==="
echo "1. Validación estructural:"
matrixai validate "$MODELO" && echo " OK" || echo " FALLO"
echo "2. Lint (errores + advertencias):"
matrixai lint "$MODELO" --json | python3 -c "
import json, sys
data = json.load(sys.stdin)
errors = [d for d in data.get('diagnostics', []) if d.get('severity') == 'error']
warnings = [d for d in data.get('diagnostics', []) if d.get('severity') == 'warning']
print(f' Errores: {len(errors)}, Advertencias: {len(warnings)}')
for e in errors: print(f' ERROR: {e.get("message")}')
"
echo "3. Verificación de tipos:"
matrixai typecheck "$MODELO" && echo " OK" || echo " FALLO"
echo "4. Permisos de seguridad:"
matrixai permissions "$MODELO" --json | python3 -c "
import json, sys; data = json.load(sys.stdin)
print(f' Estado: {data.get("safety_status", "desconocido")}')
"
echo "5. Compatibilidad de backend:"
matrixai backend-report "$MODELO" --json | python3 -c "
import json, sys; data = json.load(sys.stdin)
print(f' differentiable_python: {data.get("compatible", "desconocido")}')
for b in data.get('blocking_issues', []): print(f' BLOQUEANTE: {b}')
"
echo "6. Sugerencias de optimización:"
matrixai optimize "$MODELO" --json | python3 -c "
import json, sys; data = json.load(sys.stdin)
for s in data.get('suggestions', []): print(f' -> {s.get("kind")}: {s.get("description")}')
" || echo " Sin sugerencias"
echo "=== Diagnóstico completado ==="
# Uso:
# chmod +x diagnostico_pipeline.sh
# ./diagnostico_pipeline.sh email_classifier.mxai