Aprende cómo los LLM interpretan reglas empresariales, rastrean el estado de flujos de trabajo y verifican decisiones usando prompts, herramientas, pruebas y revisión humana —no solo código.

Cuando la gente pregunta si un LLM puede “razonar sobre reglas empresariales”, por lo general se refieren a algo más exigente que “¿puede escribir un if/else?”. El razonamiento sobre reglas empresariales es la capacidad de aplicar políticas de forma consistente, explicar decisiones, manejar excepciones y mantenerse alineado con el paso actual del flujo de trabajo —especialmente cuando las entradas son incompletas, desordenadas o cambian.
La generación de código trata sobre producir sintaxis válida en un lenguaje objetivo. El razonamiento sobre reglas trata sobre preservar la intención.
Un modelo puede generar código perfectamente válido que aun así produzca el resultado empresarial equivocado porque:
En otras palabras, la corrección no es “¿compila?” sino “¿coincide con lo que el negocio decidiría, cada vez, y podemos demostrarlo?”.
Los LLM pueden ayudar a traducir políticas en reglas estructuradas, sugerir rutas de decisión y redactar explicaciones para humanos. Pero no saben automáticamente qué regla es la autorizada, qué fuente de datos es de confianza o en qué paso está el caso. Sin restricciones, pueden elegir con confianza una respuesta plausible en lugar de la gobernada.
Así que la meta no es “dejar que el modelo decida”, sino darle estructura y comprobaciones para que pueda asistir de forma fiable.
Un enfoque práctico se parece a una canalización:
Esa es la diferencia entre un fragmento de código ingenioso y un sistema que puede soportar decisiones empresariales reales.
Antes de hablar de cómo un LLM maneja el “razonamiento”, conviene separar dos cosas que los equipos suelen mezclar: reglas empresariales y flujos de trabajo.
Reglas empresariales son las declaraciones de decisión que tu organización quiere aplicar de forma consistente. Aparecen como políticas y lógica como:
Las reglas suelen formularse como “SI X, ENTONCES Y” (a veces con excepciones), y deberían producir un resultado claro: aprobar/denegar, precio A/precio B, solicitar más información, etc.
Un flujo de trabajo es el proceso que mueve el trabajo del inicio al fin. Se trata menos de decidir qué está permitido y más de qué ocurre después. Los flujos de trabajo suelen incluir:
Imagina una solicitud de reembolso.
Fragmento de regla: “Los reembolsos están permitidos dentro de los 30 días de la compra. Excepción: las descargas digitales no son reembolsables una vez accedidas. Excepción: los contracargos deben escalarse.”
Fragmento de flujo de trabajo:
Las reglas se complican cuando conflictan (“los clientes VIP siempre obtienen reembolso” vs. “las descargas digitales nunca”), dependen de contexto faltante (¿se accedió a la descarga?) o esconden casos límite (paquetes, reembolsos parciales, leyes regionales). Los flujos de trabajo añaden otra capa: las decisiones deben ser consistentes con el estado actual, acciones previas y plazos.
Los LLM no “entienden” las reglas empresariales como lo haría una persona. Generan la siguiente palabra más probable basada en patrones aprendidos de grandes cantidades de texto. Por eso un LLM puede sonar convincente incluso cuando está adivinando —o cuando completa silenciosamente detalles faltantes que no se proporcionaron.
Esa limitación importa para flujos de trabajo y lógica de decisión. Un modelo puede aplicar una regla que suena correcta (“los empleados siempre necesitan aprobación del gerente”) aunque la política real tenga excepciones (“solo por encima de $500” o “solo para contratistas”). Este es un modo de fallo común: aplicación confiada pero incorrecta de la regla.
Incluso sin una verdadera “comprensión”, los LLM son útiles si los tratas como asistentes estructurados:
La clave es colocar al modelo en una posición donde no pueda desviarse fácilmente hacia la improvisación.
Una manera práctica de reducir la ambigüedad es la salida restringida: exigir que el LLM responda en un esquema o plantilla fija (por ejemplo, JSON con campos específicos, o una tabla con columnas obligatorias). Cuando el modelo debe completar rule_id, conditions, exceptions y decision, es más fácil detectar lagunas y validar la salida automáticamente.
Los formatos restringidos también hacen más evidente cuando el modelo no sabe algo. Si falta un campo obligatorio, puedes forzar una pregunta de seguimiento en lugar de aceptar una respuesta dudosa.
La conclusión: el “razonamiento” de los LLM es mejor verlo como generación basada en patrones guiada por estructura —útil para organizar y cotejar reglas, pero arriesgado si lo tratas como un decisor infalible.
Los documentos de política están escritos para humanos: mezclan objetivos, excepciones y “sentido común” en el mismo párrafo. Un LLM puede resumir ese texto, pero seguirá las reglas más confiablemente cuando conviertas la política en entradas explícitas y verificables.
Las buenas representaciones de regla comparten dos rasgos: no son ambiguas y se pueden comprobar.
Escribe reglas como afirmaciones que puedas probar:
Las reglas pueden proporcionarse al modelo en varias formas:
Las políticas reales entran en conflicto. Cuando dos reglas discrepan, el modelo necesita un esquema de prioridad claro. Enfoques comunes:
Explica la regla de resolución de conflictos directamente, o encódala (por ejemplo, priority: 100). De lo contrario, el LLM puede “promediar” las reglas.
Texto de política original:
“Los reembolsos están disponibles dentro de los 30 días para planes anuales. Los planes mensuales no son reembolsables después de 7 días. Si la cuenta muestra fraude o contracargos excesivos, no emita reembolso. Los clientes Enterprise necesitan aprobación de Finanzas para reembolsos superiores a $5,000.”
Reglas estructuradas (YAML):
rules:
- id: R1
statement: "IF plan_type = annual AND days_since_purchase <= 30 THEN refund MAY be issued"
priority: 10
- id: R2
statement: "IF plan_type = monthly AND days_since_purchase > 7 THEN refund MUST NOT be issued"
priority: 20
- id: R3
statement: "IF fraud_flag = true OR chargeback_rate = excessive THEN refund MUST NOT be issued"
priority: 100
- id: R4
statement: "IF customer_tier = enterprise AND refund_amount > 5000 THEN finance_approval MUST be obtained"
priority: 50
conflict_resolution: "Higher priority wins; MUST NOT overrides MAY"
Ahora el modelo no está adivinando qué importa: está aplicando un conjunto de reglas que puedes revisar, probar y versionar.
Un flujo de trabajo no es solo un conjunto de reglas; es una secuencia de eventos donde pasos anteriores cambian lo que debe ocurrir después. Esa “memoria” es el estado: los hechos actuales sobre el caso (quién envió qué, qué está aprobado, qué está pendiente y qué plazos aplican). Si no rastreas el estado explícitamente, los flujos se rompen de maneras previsibles: aprobaciones duplicadas, omisión de verificaciones requeridas, invertir decisiones o aplicar la política equivocada porque el modelo no puede inferir con fiabilidad lo que ya ocurrió.
Piensa en el estado como el marcador del flujo de trabajo. Responde: ¿Dónde estamos ahora? ¿Qué se ha hecho? ¿Qué está permitido a continuación? Para un LLM, tener un resumen claro del estado evita que vuelva a litigar pasos previos o que haga suposiciones.
Cuando llamas al modelo, incluye una carga útil de estado compacta junto con la solicitud del usuario. Los campos útiles son:
manager_review: approved, finance_review: pending)Evita volcar todo el historial de mensajes. En su lugar, proporciona el estado actual más una breve pista de auditoría con las transiciones clave.
Trata el motor de flujo de trabajo (base de datos, sistema de tickets u orquestador) como la fuente única de verdad. El LLM debe leer el estado desde ese sistema y proponer la siguiente acción, pero el sistema debe ser la autoridad que registre las transiciones. Esto reduce la “deriva de estado”, donde la narración del modelo diverge de la realidad.
{
"request_id": "TRV-10482",
"workflow": "travel_reimbursement_v3",
"current_step": "finance_review",
"step_status": {
"submission": "complete",
"manager_review": "approved",
"finance_review": "pending",
"payment": "not_started"
},
"actors": {
"employee_id": "E-2291",
"manager_id": "M-104",
"finance_queue": "FIN-AP"
},
"amount": 842.15,
"currency": "USD",
"submitted_at": "2025-12-12T14:03:22Z",
"last_state_update": "2025-12-13T09:18:05Z",
"flags": {
"receipt_missing": false,
"policy_exception_requested": true,
"needs_escalation": false
}
}
Con una instantánea así, el modelo puede mantenerse consistente: no pedirá la aprobación del gerente otra vez, se enfocará en las comprobaciones de finanzas y podrá explicar decisiones en términos de los flags y el paso actual.
Un buen prompt no solo pide una respuesta: establece expectativas sobre cómo debe aplicar el modelo tus reglas y cómo debe informar el resultado. El objetivo son decisiones repetibles, no prosa ingeniosa.
Da al modelo un rol concreto ligado a tu proceso. Tres roles que funcionan bien juntos:
Puedes ejecutarlos secuencialmente (“analista → validador → agente”) o pedir las tres salidas en una única respuesta estructurada.
En lugar de solicitar “cadena de pensamiento”, especifica pasos y artefactos visibles:
Esto mantiene al modelo organizado y enfocado en entregables: qué reglas se usaron y qué comportamiento sigue.
Las explicaciones libres se desvían. Exige una justificación compacta que apunte a fuentes:
Eso acelera las revisiones y te ayuda a depurar desacuerdos.
Usa una plantilla fija cada vez:
La plantilla reduce la ambigüedad y empuja al modelo a exponer vacíos antes de comprometerse con una acción incorrecta.
Un LLM puede redactar una respuesta convincente incluso cuando le faltan hechos clave. Eso es útil para borradores, pero arriesgado para decisiones empresariales. Si el modelo tiene que adivinar el estado de una cuenta, el nivel del cliente, una tasa fiscal regional o si se alcanzó un límite, obtendrás errores con apariencia confiada.
Las herramientas resuelven eso al convertir el “razonamiento” en un proceso de dos pasos: recuperar evidencia primero, decidir después.
En sistemas centrados en reglas y flujos de trabajo, unas pocas herramientas simples hacen la mayor parte del trabajo:
La clave es que el modelo no está “inventando” hechos operativos: solicita los hechos.
Aunque guardes todas las políticas en un repositorio central, rara vez quieres pegar todo en el prompt. La recuperación ayuda seleccionando solo los fragmentos más relevantes para el caso actual —por ejemplo:
Esto reduce contradicciones y evita que el modelo siga una regla desactualizada solo porque apareció antes en el contexto.
Un patrón fiable es tratar los resultados de herramientas como evidencia que el modelo debe citar en su decisión. Por ejemplo:
get_account(account_id) → status="past_due", plan="Business", usage_this_month=12000retrieve_policies(query="overage fee Business plan") → devuelve la regla: “Overage fee applies above 10,000 units at $0.02/unit.”calculate_overage(usage=12000, threshold=10000, rate=0.02) → $40.00Ahora la decisión no es una conjetura: es una conclusión anclada a entradas específicas (“past_due”, “12,000 units”, “$0.02/unit”). Si más tarde auditas el resultado, puedes ver exactamente qué hechos y qué versión de la regla se usaron —y corregir la parte adecuada cuando algo cambie.
El texto libre es flexible, pero también la forma más fácil de que un flujo de trabajo falle. Un modelo puede dar una respuesta “razonable” que no se puede automatizar (“me parece bien”) o ser inconsistente entre pasos (“approve” vs. “approved”). Las salidas restringidas obligan cada decisión a tener una forma predecible.
Un patrón práctico es exigir que el modelo responda con un único objeto JSON que tu sistema pueda parsear y enrutar:
{
"decision": "needs_review",
"reasons": [
"Applicant provided proof of income, but the document is expired"
],
"next_action": "request_updated_document",
"missing_info": [
"Income statement dated within the last 90 days"
],
"assumptions": [
"Applicant name matches across documents"
]
}
Esta estructura hace que la salida sea útil incluso cuando el modelo no puede decidir del todo. missing_info y assumptions convierten la incertidumbre en seguimientos accionables, en lugar de suposiciones ocultas.
Para reducir la variabilidad, define valores permitidos (enums) para campos clave. Por ejemplo:
decision: approved | denied | needs_reviewnext_action: approve_case | deny_case | request_more_info | escalate_to_humanCon enums, los sistemas posteriores no necesitan interpretar sinónimos, puntuación o tono. Simplemente bifurcan según valores conocidos.
Los esquemas funcionan como barandillas. Ellos:
reasons).decision y next_action.El resultado es menos ambigüedad, menos fallos en casos límite y decisiones que pueden avanzar consistentemente por un flujo de trabajo.
Incluso un modelo bien promptado puede “sonar bien” mientras viola una regla, omite un paso obligatorio o inventa un valor. La validación es la red de seguridad que convierte una respuesta plausible en una decisión confiable.
Empieza verificando que tienes la información mínima necesaria para aplicar las reglas. Los precontroles deben ejecutarse antes de que el modelo tome cualquier decisión.
Los precontroles típicos incluyen campos obligatorios (p. ej., tipo de cliente, total del pedido, región), formatos básicos (fechas, IDs, moneda) y rangos permitidos (montos no negativos, porcentajes hasta 100%). Si algo falla, devuelve un error claro y accionable (“Falta ‘region’; no se puede elegir conjunto de reglas fiscales”) en lugar de permitir que el modelo adivine.
Después de que el modelo produzca un resultado, valida que sea consistente con tu conjunto de reglas.
Concéntrate en:
Añade un “segundo pase” que reevalúe la primera respuesta. Puede ser otra llamada al modelo o el mismo modelo con un prompt de validador que solo compruebe el cumplimiento, no la creatividad.
Un patrón simple: el primer pase produce una decisión + justificación; el segundo pase devuelve valid o una lista estructurada de fallos (campos faltantes, restricciones violadas, interpretación ambigua de la regla).
Para cada decisión, registra las entradas usadas, la versión de la regla/política y los resultados de validación (incluidos los hallazgos del segundo pase). Cuando algo falla, esto te permite reproducir las condiciones exactas, corregir el mapeo de reglas y confirmar la corrección —sin adivinar qué “debió” haber querido decir el modelo.
Probar funciones de LLM centradas en reglas y flujos es menos sobre “¿generó algo?” y más sobre “¿tomó la misma decisión que un humano cuidadoso, por la razón correcta, cada vez?”. La buena noticia: puedes probarlo con la misma disciplina que usarías para la lógica de decisión tradicional.
Trata cada regla como una función: dadas entradas, debe devolver un resultado que puedas afirmar.
Por ejemplo, si tienes una regla de reembolso como “los reembolsos están permitidos dentro de 30 días para artículos sin abrir”, escribe casos enfocados con resultados esperados:
Estas pruebas unitarias atrapan errores de límite, campos faltantes y el comportamiento “útil” del modelo donde intenta rellenar desconocidos.
Los flujos fallan cuando el estado se vuelve inconsistente entre pasos. Las pruebas de escenario simulan trayectorias reales:
El objetivo es verificar que el modelo respete el estado actual y solo tome transiciones permitidas.
Crea un conjunto curado de ejemplos reales anonimados con resultados acordados (y breves racionales). Mantenlo versionado y revísalo cada vez que cambie la política. Un pequeño gold set (incluso 100–500 casos) es poderoso porque refleja la realidad desordenada: datos faltantes, redacción inusual, decisiones en el límite.
Monitorea distribuciones de decisiones y señales de calidad a lo largo del tiempo:
Combina el monitoreo con rollback seguro: conserva un paquete de prompts/reglas anterior, feature-flaggea nuevas versiones y está listo para revertir rápidamente cuando las métricas empeoren. Para guiones operativos y puertas de liberación, ver /blog/validation-strategies.
Si implementas los patrones anteriores, normalmente terminarás construyendo un pequeño sistema alrededor del modelo: almacenamiento de estado, llamadas a herramientas, recuperación, validación de esquemas y un orquestador de flujo. Koder.ai es una forma práctica de prototipar y lanzar ese tipo de asistente respaldado por flujo más rápido: puedes describir el flujo en chat, generar una app web funcional (React) más servicios backend (Go con PostgreSQL) e iterar con seguridad usando snapshots y rollback.
Esto importa para el razonamiento sobre reglas empresariales porque las “barandillas” a menudo viven en la aplicación, no en el prompt:
Los LLM pueden ser sorprendentemente buenos aplicando políticas cotidianas, pero no son lo mismo que un motor de reglas determinista. Trátalos como asistentes de decisión que necesitan barandillas, no como la autoridad final.
Tres modos de fallo aparecen con frecuencia en flujos pesados en reglas:
Añade revisión obligatoria cuando:
En lugar de dejar que el modelo “invente” algo, define pasos claros:
Usa LLM en flujos con reglas cuando puedas responder “sí” a la mayoría de esto:
Si no, mantiene al LLM en un rol de borrador/asistente hasta que existan esos controles.