ADR-0011: Entrada de formato libre con detección fuera de dominio
- Estado: Accepted
- Fecha: 2026-05-25
- Responsables de la decisión: Waldemar Szemat
Contexto y planteamiento del problema
Sección titulada «Contexto y planteamiento del problema»El clasificador de alcance (ADR-0005) usa un modelo binario de aprobado/rechazado: un mensaje del usuario está o bien dentro del alcance (apoyo de bienestar para la adherencia a la medicación) o bien fuera del alcance (dosificación, diagnóstico, interpretación, extracción de PII, juego de roles). Los mensajes fuera del alcance reciben un rechazo tajante.
Este modelo binario funciona para violaciones claras de los límites, pero no maneja el punto intermedio: mensajes que están fuera del alcance de la adherencia a la medicación pero que no son peligrosos ni violan los límites. Por ejemplo, “¿qué clima hace hoy?” o “cuéntame un chiste” son mensajes benignos fuera de tema que deberían recibir un redireccionamiento amable de vuelta al alcance, no un rechazo escueto que se lee como un error del sistema.
El objetivo de la entrada de formato libre pide que el agente maneje la entrada conversacional de forma más natural. Un usuario que pregunta “¿puedes ayudarme a entender mis números de colesterol?” toca la interpretación de laboratorio; en lugar de un rechazo tajante, la mejor experiencia detecta el dominio (colesterol, adherencia a estatinas) y proporciona una respuesta acotada que redirige hacia aquello en lo que el agente puede ayudar.
¿Cómo extendemos el clasificador de alcance para distinguir entre “fuera de tema pero benigno” y “fuera del alcance y peligroso” sin agregar costos de llamadas al LLM ni romper el comportamiento existente de las barreras de seguridad?
Factores de la decisión
Sección titulada «Factores de la decisión»- Capa determinista de costo cero: la detección fuera de dominio no debe requerir una llamada al LLM. El clasificador basado en reglas debe manejar esto sin aumentar el costo por turno (ADR-0005, ADR-0007).
- Compatibilidad hacia atrás: los mensajes existentes dentro del alcance deben seguir pasando. Los patrones existentes de rechazo fuera del alcance (dosificación, diagnóstico, interpretación) deben seguir disparándose. Sin regresión en la cobertura de las barreras de seguridad.
- Respaldo consciente de la configuración regional: el mensaje de respaldo amable debe estar disponible en las tres configuraciones regionales (en, es-419, pt-BR), consistente con el patrón existente de plantilla de rechazo (ADR-0005).
- Observabilidad: las interacciones fuera de dominio deben ser rastreables mediante atributos de span de OpenTelemetry para el análisis de mejora continua (ADR-0006).
- Patrón de clasificador único: la extensión debe vivir en el clasificador de alcance existente, no en un nuevo módulo separado, para mantener la superficie de auditoría de un único clasificador.
Opciones consideradas
Sección titulada «Opciones consideradas»- Opción A: Extender el clasificador de alcance con clasificación consciente del tema y metadatos fuera de dominio
- Opción B: Un nuevo módulo separado fuera de dominio
- Opción C: Un clasificador fuera de dominio basado en LLM
Resultado de la decisión
Sección titulada «Resultado de la decisión»Opción elegida: Opción A, porque preserva el patrón de clasificador único, no agrega un nuevo módulo, no requiere una llamada al LLM y es consistente con la arquitectura existente del clasificador de alcance.
La extensión agrega patrones de palabras clave de dominio al clasificador de
alcance basado en reglas para diez dominios de adherencia a la
medicación (adherencia-general, estatina, inhalador, antidepresivo, cuidador,
barreras-de-costo, carga-de-pastillas, alfabetización-en-salud, automonitoreo,
privacidad). Cuando un mensaje no coincide con ningún patrón de palabra clave
de dominio y no dispara ningún patrón de rechazo existente, el clasificador
etiqueta la decisión de barrera de seguridad como fuera de dominio mientras la
deja pasar de todos modos (la etiqueta es una señal de cobertura de palabras
clave, no un veredicto de alcance). El mensaje avanza por el grafo y el nodo
guardrail_pre registra el marcador de fuera de dominio como atributos de span
de OpenTelemetry.
Enrutar el marcador a una plantilla de respaldo amable dedicada aún no está
cableado: un slug de rechazo out-of-domain con variantes por configuración
regional está reservado en el registro de rechazos, pero
_refusal_slug_for_failure todavía no enruta hacia él. Por lo tanto, un turno
fuera de dominio no se cortocircuita a la plantilla de respaldo; pasa y continúa
por la ruta estándar (el juez de alcance del LLM sigue corriendo como respaldo
de segunda opinión).
Se agrega un nuevo slug de plantilla de rechazo out-of-domain con variantes
por configuración regional. La plantilla es conversacional, no un rechazo
tajante: nombra aquello en lo que el agente puede ayudar e invita al usuario a
reformular dentro del alcance.
Los spans de OpenTelemetry en el nodo guardrail_pre ganan dos nuevos
atributos: interaction.out_of_domain (booleano) e
interaction.detected_category (cadena, general-wellness para entrada fuera
de tema que no coincidió con ninguna palabra clave de dominio; el grafo recurre
a unknown cuando los metadatos de la categoría están ausentes).
Confirmación
Sección titulada «Confirmación»- El clasificador de alcance se extiende con un mapeo de palabras clave de dominio desde diez nombres de dominio a patrones de regex.
- La decisión de barrera de seguridad lleva un campo booleano
out_of_domain, puesto en verdadero cuando el mensaje no coincide con ninguna palabra clave de dominio ni con ningún patrón de rechazo. - Las plantillas de rechazo ganan un slug
out-of-domainreservado con variantes en, es-419 y pt-BR (redactado y cubierto por pruebas unitarias, pero aún no cableado al enrutamiento de rechazos). - Los spans de OpenTelemetry en
guardrail_preemiten los atributosinteraction.out_of_domaineinteraction.detected_category. - Los patrones de rechazo existentes (dosificación, diagnóstico, interpretación, PII, juego de roles) se disparan sin cambios.
- Las pruebas unitarias cubren la detección fuera de dominio.
- Las pruebas unitarias cubren el slug de plantilla
out-of-domain.
Consecuencias
Sección titulada «Consecuencias»Positivas
Sección titulada «Positivas»- La entrada de formato libre obtiene una respuesta conversacional en lugar de un rechazo tajante, mejorando la experiencia del usuario.
- Sin nuevo módulo, sin nueva llamada al LLM, sin nuevo costo: extiende la capa determinista basada en reglas existente.
- La superficie de auditoría de un único clasificador se preserva; todas las decisiones de alcance fluyen a través de un clasificador.
- Las interacciones fuera de dominio son observables mediante OpenTelemetry para el análisis de mejora continua.
- Las palabras clave de dominio amplían la cobertura de recuperación de RAG al identificar áreas temáticas relevantes.
Negativas
Sección titulada «Negativas»- El clasificador de alcance crece en complejidad con el diccionario de palabras clave de dominio. Los patrones de regex deben ajustarse con cuidado para evitar falsos positivos (p. ej., “costo” no debería coincidir con “a toda costa” en un contexto no médico).
- Todavía no existe un enrutamiento dedicado a una plantilla out-of-domain. La
plantilla
out-of-domainreservada está redactada pero no cableada, por lo que los turnos fuera de tema no se cortocircuitan a una plantilla amable; dependen de la ruta estándar de alcance y del juez de alcance del LLM para decidir si responder o rehusar, en lugar de una respuesta de plantilla dedicada. - La detección de dominio basada en regex es limitada: coincide con palabras clave, no con intención semántica. Un mensaje como “me preocupa el precio de mi medicación” podría no coincidir con el patrón de barreras-de-costo si la formulación se aparta de la regex.
Neutrales
Sección titulada «Neutrales»- La decisión de barrera de seguridad gana una nueva clave de fuera de dominio. Los consumidores posteriores ya leen los metadatos de la decisión como un dict, por lo que esto es compatible hacia atrás.
- Los spans de OpenTelemetry ganan dos nuevos atributos. Los paneles y consultas existentes no se ven afectados (los nuevos atributos son aditivos).
- Las diez categorías de dominio son un conjunto inicial. Se pueden agregar más dominios extendiendo el mapeo de palabras clave de dominio sin cambio arquitectónico.
Ventajas y desventajas de las opciones
Sección titulada «Ventajas y desventajas de las opciones»Opción A: Extender el clasificador de alcance con clasificación consciente del tema (elegida)
Sección titulada «Opción A: Extender el clasificador de alcance con clasificación consciente del tema (elegida)»- Buena, porque preserva el patrón de clasificador único y la superficie de auditoría.
- Buena, porque sin nuevo módulo no hay nuevo grafo de importaciones, ni nuevo archivo de prueba, ni nuevo cableado.
- Buena, porque la detección basada en regex es determinista, comprobable y de costo cero.
- Buena, porque es consistente con cómo ya funciona el clasificador de alcance (patrones de regex para categorías de rechazo).
- Mala, porque el clasificador de alcance crece en tamaño y complejidad de regex.
- Mala, porque los patrones de regex son frágiles para el lenguaje natural; la deriva semántica en la formulación del usuario puede evadir la detección.
Opción B: Un nuevo módulo separado fuera de dominio
Sección titulada «Opción B: Un nuevo módulo separado fuera de dominio»- Buena, porque separación de responsabilidades: la detección fuera de dominio es una responsabilidad distinta.
- Mala, porque introduce un segundo módulo clasificador, fragmentando la superficie de auditoría.
- Mala, porque el grafo necesitaría llamar a dos clasificadores en secuencia, agregando complejidad de cableado.
- Mala, porque duplica la infraestructura de regex ya presente en el clasificador de alcance.
Opción C: Un clasificador fuera de dominio basado en LLM
Sección titulada «Opción C: Un clasificador fuera de dominio basado en LLM»- Buena, porque la comprensión semántica maneja el lenguaje natural mejor que la regex.
- Buena, porque el clasificador de alcance basado en LLM existente ya proporciona una segunda pasada basada en modelo.
- Mala, porque cada turno incurre en un costo de llamada al LLM, incluso para mensajes benignos fuera de tema.
- Mala, porque agrega latencia a la ruta
guardrail_pre(1-3 segundos por turno). - Mala, porque viola el requisito de la capa determinista de costo cero para la ruta basada en reglas.
Más información
Sección titulada «Más información»- ADR de barreras de seguridad: ADR-0005
- ADR de observabilidad: ADR-0006
- Estrategia de expansión del corpus (ADR complementario): ADR-0012
- MADR 4.0.0: https://adr.github.io/madr/
Parte del portafolio de Waldemar Szemat · szemat.pro
GitHub · LinkedIn