Funciones Matemáticas, CLI y API
Guía completa de todas las funciones que MatrixAI puede ejecutar, cómo llamarlas desde la terminal y cómo integrarlas en tu aplicación mediante la API HTTP. No hace falta haber leído los contratos técnicos.

1. ¿Qué son las funciones matemáticas en MatrixAI?
Cuando defines un modelo en MatrixAI (con un archivo .mxai o .mx), describes qué cálculos debe hacer ese modelo usando funciones matemáticas. Es como una hoja de cálculo potente, pero que además puede aprender de datos.
Hay tres capas que vale la pena distinguir:
| Capa | ¿Qué es? | Ejemplo |
|---|---|---|
| Registro `.mx` | Mini-lenguaje para escribir fórmulas personalizadas | score(x) = 0.6 * relevance(x) + 0.4 * coherence(x) |
| Kinds `.mxai` | Cómo clasifica MatrixAI cada expresión internamente | `softmax_linear`, `sigmoid_linear`, `symbolic_expr`… |
| Backend entrenable | Qué funciones pueden ajustar sus parámetros con datos reales | Solo `softmax_linear` y `sigmoid_linear` hoy |
# Ejemplo: score.mx
score(x) = 0.6 * relevance(x) + 0.4 * coherence(x)
utility(x) = score(x) - 0.2 * cost(x)2. Operaciones numéricas básicas
Son las matemáticas de toda la vida: disponibles como funciones en cualquier expresión .mx.
| Función | Qué hace | Ejemplo |
|---|---|---|
add(a, b) | Suma | add(3, 5)` → `8.0 |
sub(a, b) | Resta | sub(10, 4)` → `6.0 |
mul(a, b) | Multiplicación | mul(2.5, 4)` → `10.0 |
div(a, b) | División (rechaza división por cero) | div(9, 3)` → `3.0 |
pow(base, exp) | Potencia | pow(2, 8)` → `256.0 |
sqrt(x) | Raíz cuadrada | sqrt(16)` → `4.0 |
abs(x) | Valor absoluto | abs(-7)` → `7.0 |
min(...) | El mínimo de varios valores | min(3, 1, 7)` → `1.0 |
max(...) | El máximo de varios valores | max(3, 1, 7)` → `7.0 |
mean(...) | La media aritmética | mean(2, 4, 6)` → `4.0 |
sum(...) | La suma de todos | sum(1, 2, 3, 4)` → `10.0 |
# candidatos.mx
puntuacion(c) = 0.5 * c.experiencia + 0.5 * c.prueba_tecnica
diferencia(c1,c2) = sub(puntuacion(c1), puntuacion(c2))
mejor(c1, c2) = max(puntuacion(c1), puntuacion(c2))3. Transformaciones y probabilidad
normalize(x) — Recortar al rango [0, 1]
normalize(1.5) → 1.0 # recortado al máximo
normalize(-0.3) → 0.0 # recortado al mínimo
normalize(0.7) → 0.7 # sin cambiosclip(x, lo, hi) — Recortar a cualquier rango
clip(150, 0, 100) → 100.0
clip(-5, 0, 10) → 0.0
clip(7, 0, 10) → 7.0scale(x, old_min, old_max, new_min, new_max) — Reescalar de un rango a otro
# Convertir nota del 0-10 al 0-100
scale(7.5, 0, 10, 0, 100) → 75.0
# Temperatura Celsius a escala 0-1
scale(37, 35, 42, 0, 1) → 0.285...sigmoid(x) — Convertir cualquier número a una probabilidad
sigmoid(0) → 0.5 # punto de equilibrio: 50% de probabilidad
sigmoid(5) → 0.993 # muy probablemente sí
sigmoid(-5) → 0.007 # muy probablemente no
# riesgo_credito.mxai
riesgo(cliente) = sigmoid(2.5 * cliente.historial_impagos - 1.8 * cliente.ingresos + 0.3)softmax(values) — Convertir puntuaciones en probabilidades que sumen 1
softmax([2.0, 1.0, 0.5]) → [0.626, 0.230, 0.143]
# 62,6% de probabilidad para la primera opción4. Funciones de puntuación semántica
| Función | Clave dict | Por defecto | Uso |
|---|---|---|---|
relevance(x) | "relevance" | 0.0 | ¿Qué tan relevante es este resultado? |
coherence(x) | "coherence" | 0.0 | ¿Tiene sentido interno? ¿Es consistente? |
confidence(x) | "confidence" | 0.0 | ¿Qué tan seguro está el modelo de su respuesta? |
novelty(x) | "novelty" | 0.0 | ¿Es información nueva? |
safety(x) | "safety" | 1.0 | ¿Es seguro? (optimista por defecto: 1.0) |
quality(x) | "quality" | 0.0 | Calidad general del resultado |
# ranking.mx
valor_respuesta(r) = 0.4 * relevance(r) + 0.3 * coherence(r) + 0.2 * confidence(r) + 0.1 * safety(r)5. Funciones de coste
| Función | Clave dict | Uso |
|---|---|---|
cost(x) | "cost" | Coste general (computación, dinero, recursos) |
latency(x) | "latency" | Tiempo de respuesta |
token_cost(x) | "token_cost" | Coste en tokens (útil con LLMs) |
# eficiencia.mx
utilidad(opcion) = quality(opcion) - 0.3 * cost(opcion) - 0.2 * latency(opcion)6. Selección y ranking
| Función | Qué hace |
|---|---|
argmax(items, score_fn) | Devuelve el elemento con el score más alto |
topk(items, score_fn, k) | Devuelve los k mejores elementos en orden descendente |
threshold(items, score_fn, min_score) | Devuelve solo los elementos que superan un score mínimo |
rank(items, score_fn) | Devuelve la lista completa ordenada de mayor a menor score |
# candidatos = ["A", "B", "C"] con scores: A=0.7, B=0.9, C=0.4
argmax(candidatos, mi_score_fn) → "B"
topk(candidatos, mi_score_fn, 2) → ["B", "A"]
threshold(candidatos, mi_score_fn, 0.6) → ["A", "B"]
rank(candidatos, mi_score_fn) → ["B", "A", "C"]7. Arquitecturas entrenables: qué puede aprender MatrixAI
Clasificación multiclase — softmax_linear
# email_classifier.mxai (fragmento)
predict(email) = softmax(W1 * email + b1)
# W1 y b1 se aprenden de ejemplos etiquetados — pérdida: cross_entropyCasos de uso: clasificar emails, categorizar incidencias, reconocer intención de usuario.
Clasificación binaria / riesgo — sigmoid_linear
# riesgo_caida.mxai (fragmento)
riesgo(paciente) = sigmoid(W1 * paciente + b1)
# Entrenado con binary_cross_entropyCasos de uso: riesgo de crédito, detección de fraude, riesgo médico binario, churn.
Lo que aún no es entrenable (pero es ejecutable)
- Sumas ponderadas manuales (
symbolic_weighted_sum) - Normalización y escalado
- Agregaciones (mean, max, min sobre listas)
- Reglas discretas (argmax, vote)
- Atención, embeddings entrenables, transformers, redes profundas
8. Traducción de reglas discretas a matemática continua
mathematize traduce reglas tipo «si X entonces Y» a expresiones matemáticas continuas que los modelos pueden procesar y auditar.
si riesgo > 0.8 entonces alertar
si ingresos < 20000 y deuda > 0.5 entonces rechazar| Regla de entrada | Expresión generada | Tipo |
|---|---|---|
si riesgo > 0.8 entonces alertar | sigmoid(20 * (riesgo - 0.8)) | Umbral suave |
si x < 0.2 entonces accion | sigmoid(20 * (0.2 - x)) | Umbral suave invertido |
si a > 0.5 y b > 0.7 | sigmoid(a - 0.5) * sigmoid(b - 0.7) | AND probabilístico |
clasificar x en a, b, c | softmax([score_a, score_b, score_c]) | Multiclase |
elegir el mejor de candidatos | argmax(scores) | Selección |

9. Cómo usar las funciones desde la CLI
matrixai eval score.mx --input datos.json
matrixai eval score.mx --input datos.json --trace
matrixai eval score.mx --input datos.json --call score
matrixai mathematize mis_reglas.txt
echo "si riesgo > 0.8 entonces alertar" | matrixai mathematize -
matrixai validate mi_modelo.mxai
matrixai lint mi_modelo.mxai
matrixai backend-report mi_modelo.mxai --target torch
matrixai graph mi_modelo.mxai --format mermaid
matrixai train-supervised "un modelo que clasifica emails como spam, normal o urgente" \
--train-data emails_train.csv \
--eval-data emails_eval.csv \
-o runs/email_v1/
matrixai serve email.mxai \
--params runs/email_v1/params.best.json \
--api-key mi_clave_secreta \
--port 8000
matrixai studio --port 8765 --open10. Cómo usar las funciones desde la API REST
| Servidor | Puerto por defecto | Para qué |
|---|---|---|
| Producción | 8000 | Servir modelos entrenados. Requiere API key. |
| Studio | 8080 | Desarrollar, entrenar y explorar. Sin autenticación. |
# Autenticación
curl -H "Authorization: Bearer mi_clave" http://localhost:8000/predict ...
curl -H "X-API-Key: mi_clave" http://localhost:8000/predict ...
# Predicción individual
curl -X POST http://localhost:8000/predict \
-H "Authorization: Bearer mi_clave" \
-H "Content-Type: application/json" \
-d '{"age": 35, "income": 52000, "credit_history": "good"}'
# Entrenamiento asíncrono
curl -X POST http://localhost:8080/api/train-start \
-d '{ "mxai_text": "...", "training_text": "...", "csv_text": "..." }'
# → { "ok": true, "job_id": "job-20260603-xyz789" }
curl http://localhost:8080/api/train-status/job-20260603-xyz789
# status: running | done | error | cancelled | timeout11. Flujos completos de ejemplo
Ejemplo 1: clasificador de emails desde cero
matrixai prompt "clasifica emails como spam, normal o urgente" -o email.mxai
matrixai lint email.mxai
matrixai generate-training email.mxai "clasificar emails" -o email.mxtrain
matrixai generate-dataset email.mxai --training email.mxtrain --rows 500 --mode coherent -o datos/
matrixai train email.mxai --training email.mxtrain -o runs/email_v1/
matrixai evaluate email.mxai --params runs/email_v1/params.best.json --training email.mxtrain
matrixai run email.mxai --params runs/email_v1/params.best.json \
--input '{"subject": "Oferta exclusiva", "sender_score": 0.15}'
matrixai serve email.mxai --params runs/email_v1/params.best.json --api-key mi_clave --port 8000Ejemplo 2: traducir reglas de negocio a expresiones matemáticas
# reglas_credito.txt
# si historial_impagos > 0.6 entonces rechazar_automatico
# si ingresos < 15000 y deuda > 0.5 entonces alto_riesgo
# clasificar solicitud en aprobada, revision_manual, rechazada
matrixai mathematize reglas_credito.txt12. Referencia rápida
| Función | Tipo | Entrenable |
|---|---|---|
add`, `sub`, `mul`, `div | Aritmética | No |
pow`, `sqrt`, `abs | Aritmética | No |
min`, `max`, `mean`, `sum | Agregación | No |
normalize`, `clip`, `scale | Transformación | No |
sigmoid(x) | Probabilidad | Sí (en `sigmoid_linear`) |
softmax(values) | Probabilidad | Sí (en `softmax_linear`) |
relevance`, `coherence`, `confidence | Semántica | No |
novelty`, `safety`, `quality | Semántica | No |
cost`, `latency`, `token_cost | Coste | No |
argmax`, `topk`, `threshold`, `rank | Selección | No |
| Qué quiero hacer | Comando |
|---|---|
| Evaluar una fórmula `.mx` | matrixai eval archivo.mx --input datos.json |
| Traducir reglas a matemáticas | matrixai mathematize reglas.txt |
| Validar un modelo | matrixai validate modelo.mxai |
| Ver el grafo de un modelo | matrixai graph modelo.mxai |
| Generar modelo desde texto | matrixai prompt "descripción" -o modelo.mxai |
| Entrenar un modelo | matrixai train modelo.mxai --training contrato.mxtrain -o runs/ |
| Predecir con un modelo | matrixai run modelo.mxai --input entrada.json --params params.json |
| Servir como API | matrixai serve modelo.mxai --params params.json --api-key clave |
| Abrir Studio | matrixai studio --open |
| Código | Significado |
|---|---|
200 | Todo correcto |
400 | JSON malformado en la petición |
401 | API key ausente o incorrecta |
422 | Validación fallida |
429 | Demasiadas peticiones (> 60/min) |
500 | Error interno del servidor |