Skip to content

17 — chatbot-testing

Las 8 áreas operativas de testing que una batería RAGAS NO cubre. Si tu chatbot pasa las métricas semánticas pero falla en producción, este módulo te dice exactamente dónde mirar.

El problema

Tu suite RAGAS reporta faithfulness=0.92 y answer_relevancy=0.91. El chatbot va a producción y a las dos semanas:

  • El equipo de soporte recibe quejas porque el bot escala a humano demasiadas veces (false refusal).
  • Un cliente reporta que el bot lo trató con "tú" cuando la marca es formal (deriva de tono).
  • Otro cliente ve fragmentos del prompt de su empresa anterior (sesiones contaminadas).
  • En conversaciones de 15+ turnos el bot se contradice.

Ninguna de las métricas RAGAS habría detectado nada de esto. El Capítulo 10 del manual v13 define las 8 áreas operativas que toda batería de chatbot productivo debe cubrir.

Las 8 áreas

#ÁreaMétricaObjetivoPor qué
1Intent detectionintent_accuracy≥ 0.90Si el clasificador falla, todo lo demás está perdido
2Fallbackcorrect_fallback_rate≥ 0.90Queries fuera de dominio sin alucinaciones
3Escalado humanoescalation_precision≥ 0.95El coste de NO escalar un caso crítico es alto
4Tono y personatone_score≥ 0.80La marca tiene una voz; el bot debe respetarla
5Memoriacontext_retention≥ 0.85Recordar lo dicho en turnos anteriores
6Aislamiento de sesionessession_isolation= 1.00No negociable: 0 fugas entre usuarios
7Conversación largalong_context_consistency≥ 0.80 a N=20Degradación tras N turnos
8Recuperación de erroresrecovery_success_rate≥ 0.90Manejo de tool/API/timeout fallido

Cómo se usa

python
# Área 1 — Intent detection
from intent_classifier import predict_intent, evaluate_intent_accuracy

result = evaluate_intent_accuracy([
    ("quiero devolver un pedido", "policy_returns"),
    ("dame mi factura de marzo", "billing"),
    ("hablar con humano", "human_support"),
])
assert result["accuracy"] >= 0.90

# Área 3 — Escalado humano
from escalation_policy import should_escalate

decision = should_escalate("quiero poner una denuncia")
assert decision.should_escalate
assert decision.reason == "critical_keyword_detected"

# Área 6 — Aislamiento de sesiones
from session_manager import SessionManager, verify_isolation

mgr = SessionManager()
s1 = mgr.new_session("user-A")
s2 = mgr.new_session("user-B")
s1.remember("password", "secret-A")
s2.remember("password", "secret-B")

assert verify_isolation(mgr), "Las sesiones comparten contexto: fuga grave"
assert s1.recall("password") == "secret-A"
assert s2.recall("password") == "secret-B"

# Área 8 — Recuperación con backoff exponencial
from error_recovery import ErrorKind, decide_recovery

decision = decide_recovery(ErrorKind.TRANSIENT, retry_count=1)
assert decision.retry
assert decision.backoff_seconds == 2.0  # 2^1

Testing manual vs automatizado (§10.4)

El testing automatizado del módulo cubre las dimensiones objetivas. El testing manual estructurado sigue siendo necesario en tres áreas:

  • Ambigüedad cultural: una respuesta puede ser correcta pero sonar "rara" en el mercado objetivo. Requiere revisión por hablantes nativos.
  • Tono profesional sutil: el bot puede pasar el tone_score y aun así sonar pedante o frío. Requiere panel humano.
  • Métricas de satisfacción reales: CSAT post-conversación, thumbs up/down, tasa de abandono medio de sesión.

El manual recomienda asignar 20 casos por área revisados por experto en cada release.

Diferencia con red teaming y robustness

  • El módulo 17 cubre el happy path operacional del chatbot.
  • Módulo 07/08 (red-team) cubre payloads maliciosos.
  • Módulo 18 (robustness) cubre perturbaciones del input legítimo.

Tres baterías distintas, ningún solapamiento.

Integración con la Tabla 4.2

Los umbrales del manual están centralizados en qa_thresholds.py. El módulo importa los umbrales de las métricas comunes (refusal_rate, false_refusal_rate) y mantiene los específicos de chatbot en AREA_SPECS.

Referencias

  • Manual QA AI v13 — Cap. 10 (pp. 40–41), Tabla 10.1, Tabla 10.2
  • Cap. 16 — Evaluación multi-turno (complementa áreas 5 y 7)
  • Módulo 04 — multi-turn: métricas multi-turno detalladas

MIT License · GitHub