Volver a la wiki

Help Widget · Informante del Estado (MVP s56)

Qué es

El Informante del estado es una capa de enriquecimiento de contexto que se activa en el Help Widget de CreaRack Pro cuando el usuario formula una pregunta operativa (ej. “¿hay alertas?”, “¿cuántos racks tengo?”, “¿qué devices están caídos?”).

Sin ninguna llamada LLM adicional y sin HTTP externo, el sistema detecta la intención de la pregunta mediante regex locales, consulta datos en vivo de la base de datos (filtrados por organización vía RLS), y prepend un bloque [CONTEXTO] al prompt que llega al MCP bib_ask. El modelo recibe datos factuales reales y puede responder con cifras precisas en lugar de declinar o inventar.


Motivación

Antes de s56, el Help Widget en modo help reenviaba la pregunta del usuario al MCP tal cual. Si el usuario preguntaba “¿hay alertas activas?”, el modelo solo podía responder desde su conocimiento estático de la wiki, no desde el estado real del sistema.

El Informante resuelve esto con coste cero cuando no hay match (el bloque if solo se ejecuta si algún regex del catálogo dispara) y ~30-80 tokens extra cuando sí hay match.


Arquitectura

Usuario → /api/help/ask (mode=help)
              │
              ▼
    detect_state_intent(question)     ← help_intent.py
         │ regex, sin DB, sin LLM
         │ → lista de items activados (o [] si ninguno)
         │
    build_state_context(items, user)  ← help_state.py
         │ queries SQL por org (RLS)
         │ → bloque [CONTEXTO: datos en vivo...]
         │
    question = f"{ctx}\n\n{question}"
         │
         ▼
    _mcp_call("bib_ask", {...})       ← MCP Biblioteca

Modo Tutor (mode=tutor) NO recibe inyección de contexto — el Informante solo opera en mode=help.


Catálogo de items (MVP s56)

ItemEjemplos de keywords que disparanBuilder SQL
alertsalerta, alarma, problema, incidenciaAlertEvent (unresolved)
racksrack, armario, sala técnicaRack por org
devicesdevice, switch, router, AP, caído, offlineMonitoringTarget
healthsalud, uptime, sano, DBDB ping + disco + uptime proc
signagepantalla, display, playlist, cartelSignagePlayer
provisionauto-provision, discovery, scanDeviceProfile (24h)
capacityespacio, U libres, lleno, capacidadRack + devices__u_height

Items NO incluidos en MVP (decisión Edu s56): sesiones SSH (agente local, no multi-tenant) y ancho de banda de red (requiere VictoriaMetrics).


Granularidad por rol

El builder recibe is_admin: bool. Se considera admin si el rol es admin, operator, is_superuser o is_staff. Solo readonly recibe vista reducida.

VistaRolesDiferencia
ReducidareadonlyCounts y resumen básico
Extendidaadmin, operator, superuser, staffNombres concretos, top-N, disco, uptime

Decisión Edu s56: operator opera, no es solo lector → vista extendida.


Seguridad y aislamiento multi-tenant


Archivos clave

ArchivoRol
core/api_help.pyPunto de entrada — llama a detect + build y prepend el contexto
core/services/help_intent.pyDetector de intención (regex puro, sin DB)
core/services/help_state.pyBuilders SQL por item — produce el bloque [CONTEXTO]
tests/api/test_help.pyTests unitarios (intent), de integración (DB) y E2E (mock MCP)

Cobertura de tests


Limitaciones conocidas


Véase también

Subir