Para hacer un bot que no alucine en respuestas técnicas la regla es una: separar cálculo de narrativa. El LLM redacta, las funciones en código calculan, RAG provee contexto con citas verificables y validación cruzada cierra el riesgo. En un caso documentado de reportería multi-tenant entregamos 28 KPIs hardcoded en JavaScript con narrativa de IA encima, audit trail inmutable con hash SHA-256 verificable y two-level pattern KPI más párrafo. KPIs en código, no hallucinations.
¿Por qué los LLMs alucinan?
Porque generan texto probabilísticamente sobre patrones aprendidos, no recuperan hechos de una base de datos. Si la pregunta es "¿cuánto le queda de saldo a Mariana?", el modelo no consulta una tabla. Genera la respuesta más plausible dado el contexto. Si el contexto es bueno, acierta. Si no, inventa con confianza.
La alucinación no es bug, es feature del modelo. Lo que cambia entre Claude 3.5 Sonnet y un random walk no es que uno alucine y otro no, es la tasa y la sutileza. Para sistemas de producción la diferencia entre 5% y 1% de alucinaciones es la diferencia entre confiable y suicidio comercial.
Los 6 guardrails imprescindibles
| Guardrail | Qué resuelve |
|---|---|
| KPIs en código, no en LLM | Cero alucinaciones en números críticos |
| RAG con citas obligatorias | El modelo debe apuntar a fuente verificable |
| Validación post-respuesta contra schema | Catch de respuestas mal formadas |
| Escalamiento humano en baja confianza | Auto-escala cuando el modelo no está seguro |
| Audit log inmutable | Reproducibilidad y auditoría legal |
| Testing automatizado de regresión | Detección temprana de degradación |
Sin estos 6, el bot funciona en demo pero falla en producción cuando importa.
Guardrail 1: KPIs en código
El error más común y más caro. Si el bot dice "tu factura asciende a 12,450 pesos con IVA incluido", ese número debe venir de una función TypeScript que lee de tu base de datos y aplica la fórmula. No del LLM.
Patrón correcto:
- Usuario: "¿cuánto pago de la factura 2034?"
- Sistema: invoca
obtenerSaldoFactura(2034)en TypeScript - Función: retorna 12450.00
- LLM recibe: "El saldo de la factura 2034 es 12450 pesos. Redactá respuesta amable."
- LLM responde: "Te confirmo que tu factura 2034 tiene saldo de 12,450 pesos con IVA. ¿Querés link de pago?"
El número no pasa por la creatividad del modelo. Pasa por una función auditable.
Guardrail 2: RAG con citas obligatorias
Para preguntas sobre tu documentación, política o catálogo, el modelo no debe responder sin contexto. El flujo es:
- Usuario pregunta sobre algo
- Sistema busca top-k chunks similares en vector store
- Sistema arma prompt con chunks + pregunta
- Sistema instruye al modelo: "Responde solo con info de los chunks. Cita fuente. Si no hay info, decí 'no encuentro esa información'"
- Validación post: ¿la respuesta cita al menos un chunk?
Si el modelo responde sin citar, el sistema rechaza la respuesta y reintenta. Si reintenta y sigue sin citar, escala a humano.
Guardrail 3: validación contra schema
Después de cada respuesta crítica, el sistema valida estructura. Si el bot dice que la fecha de vencimiento es 30/02/2026, validación contra Date.parse() detecta inválida y reintenta. Si dice que el monto es "doce mil", el parser numérico falla y reintenta con prompt corregido.
Para respuestas estructuradas (JSON, formularios, propuestas), usar function calling o structured output del proveedor. Ahí el modelo respeta schema o falla, no inventa campos.
Guardrail 4: escalamiento por confianza
Los modelos modernos ofrecen logprobs (probabilidad de cada token). Una respuesta con logprob bajo es señal de baja confianza. Si el modelo está dudando, escalá a humano.
Patrón:
if (respuesta.confianza < 0.7 || respuesta.contiene_no_se()) {
escalarAHumano(conversacion, contexto);
responderAlUsuario("Voy a confirmar este detalle con el equipo, te respondo en breve.");
}
Mejor escalar 5 veces de más que dar 1 respuesta incorrecta que cuesta cliente.
Guardrail 5: audit log inmutable
Cada interacción queda registrada con: prompt completo enviado al modelo, respuesta cruda, chunks usados de RAG si aplica, función llamadas en código, respuesta final al usuario, timestamp y hash de la entrada anterior (cadena tipo blockchain).
Esto permite:
- Reconstruir cualquier conversación para auditoría
- Detectar drift del modelo en producción
- Defender legalmente decisiones del sistema
- Reentrenamiento o ajuste basado en fallas reales
Guardrail 6: testing de regresión
El bot debe tener test suite que corre cada deploy con casos conocidos. Si una respuesta crítica cambia, el deploy se bloquea hasta revisión humana.
Patrón típico: 50 a 200 preguntas con respuestas esperadas, ejecución automática en CI/CD, alerta si bajan métricas (precisión, latencia, costo por consulta).
El caso real: 28 KPIs hardcoded con narrativa IA
En un proyecto documentado de reportería multi-tenant la arquitectura entregada fue:
- 5 secciones de reportería (Financials, Sales, Services, Complaints, System Usage)
- 28 KPIs hardcodeados en JavaScript
- AI narrativa solo, nunca calcula KPI
- Two-level pattern: KPI headline más párrafo IA
- Audit trail append-only con hash SHA-256
- Browser-side compute (cero servidor CPU)
Una franquicia consulta su reporte mensual. El número "creciste 12% versus mes anterior" lo calcula JavaScript en el navegador del usuario, leyendo de su base. El párrafo que dice "este crecimiento se explica principalmente por el aumento en servicios premium" lo redacta Claude sobre los datos verificados.
Si Anthropic cambia comportamiento mañana, los números no se mueven. Si OpenAI baja precio, cambiás de proveedor en una función. Construido para LATAM, propiedad total.
Próximos pasos
Si tu empresa está pensando un bot técnico o asistente IA con riesgo de alucinaciones, el primer paso es una llamada de 30 minutos para revisar casos de uso, datos críticos y arquitectura propuesta. Sin pitch deck. Sin compromiso.
Conocé MAGIA Forge por 20,000 USD a 12 semanas con motor IA con guardrails, KPIs en código y audit inmutable, o explorá el manifiesto sobre por qué construimos con guardrails desde el día uno.