Soporte tecnico B2B / equipos de ingenieria de campo

Sistema de Soporte Tecnico con Busqueda Semantica

Plataforma de chat en vivo para soporte tecnico con busqueda semantica (pgvector + embeddings locales), arboles de diagnostico, soluciones guiadas y workflow de escalacion entre 4 roles.

React+TSFlaskPostgreSQL 16pgvectorSocket.IOsentence-transformersDocker
Antes de nosotros

El Reto

Empresas con productos tecnicos complejos (equipos de topografia, drones, GPS, software industrial) reciben tickets repetitivos: 'el GPS no engancha satelites', 'el dron no calibra brujula', 'el software pide una licencia'. El agente de nivel 1 pierde 15-20 minutos buscando manualmente en PDFs, wiki interno y Slack la solucion correcta — y muchas veces escala al experto sin necesidad porque no la encontro.

El reto era construir un workspace de soporte donde el agente, mientras chatea con el cliente, vea sugerencias automaticas de soluciones similares, arboles de diagnostico que ya resolvieron casos parecidos, y secciones especificas de documentacion — todo via busqueda semantica (no keywords) para que 'el GPS no agarra satelite' encuentre la solucion incluso si el documento dice 'el receptor pierde fix'.

Restriccion clave: el cliente queria evitar dependencia de OpenAI/Anthropic para los embeddings — costos imprevisibles, posible bloqueo, datos sensibles saliendo del sistema. La busqueda semantica tenia que correr local con un modelo gratis y suficientemente bueno para el caso de uso.

Lo que construimos

La Solucion

Plataforma fullstack en Docker Compose con 3 servicios: PostgreSQL 16 + pgvector, backend Flask + Flask-SocketIO con eventlet (single worker para preservar estado de WebSockets), frontend React 18 + TypeScript + Vite. Embeddings locales con sentence-transformers (all-MiniLM-L6-v2, dim=384) — modelo singleton cargado una vez al inicio, latencia <50ms por embedding.

Schema PostgreSQL con 26+ tablas, 16 ENUMs, indices HNSW pgvector en 3 tablas semanticas: secciones_documento (chunks de PDFs subidos), soluciones_escenario (soluciones cataloguadas), arboles_diagnostico (workflows de diagnostico paso a paso). Busqueda hibrida: keyword overlap + similitud coseno semantica, con cast obligatorio %s::vector en queries psycopg2.

Workspace del agente con 3 paneles: cola de tickets (250px), chat (flex), panel de busqueda/diagnostico (380px) con 4 tabs: Busqueda semantica, Sondeo (preguntas guiadas via state machine idle→cargando→pregunta→escenario), Pasos (recorrido del arbol), Escalar (al experto, contexto pre-llenado).

Funcionalidades

Features Clave

Busqueda Semantica con pgvector + sentence-transformers

Embeddings dimension 384 con modelo all-MiniLM-L6-v2 corriendo local (singleton). Indices HNSW en 3 tablas. Cast obligatorio %s::vector en queries. Buscar 'GPS no agarra' encuentra docs que dicen 'receptor pierde fix' por similitud coseno.

Arboles de Diagnostico Interactivos

Workflows tipo decision tree: agente sigue preguntas, cliente responde, sistema sugiere siguiente paso. State machine idle→cargando→pregunta→escenario. Cada arbol mejora con feedback de cuantas veces resolvio sin escalar.

4 Roles con Vistas Especializadas

Agente (cola + workspace), Experto (escalaciones + documentacion + creacion de arboles), Gerente (dashboard equipo + reportes), Admin (config + usuarios). ProtectedRoute acepta arrays de roles. JWT en localStorage con rehidratacion automatica.

Chat Publico Sin Login para Clientes

Cliente abre widget, deja email + descripcion del problema, recibe ticket TKT-NNNNNN. El chat publico almacena en localStorage 'sst_chat' la sesion (ticket_id, token, prioridad, tiempo de espera estimado). Sin necesidad de cuenta.

SLA y Reapertura Automatica

sla_scheduler.py daemon vigila tiempos de primera respuesta segun prioridad (config: get_config_sistema(sla_alta_primera_respuesta) → minutos). Reapertura dentro de 7 dias revierte feedback positivo de la solucion para no inflar metricas.

Pipeline de Documentos con Chunking

Subir PDF/DOCX/TXT/MD → daemon extrae texto → divide en chunks → genera embeddings → marca listo. Secciones individuales se pueden revisar, editar (PATCH con re-embedding), dividir, fusionar y confirmar antes de exponerlas a busqueda.

Sugerencia Automatica de Crear Arbol

Despues de cada escalacion, daemon thread mide keyword overlap con escalaciones similares (90 dias). Si pasa de un threshold (default 5 similares), notifica a expertos: 'considera crear un arbol de diagnostico para este patron'.

Screenshots

Como se Ve

Screenshot

Workspace del Agente (3 paneles)

Panel izquierdo (cola), panel central (chat con cliente), panel derecho (4 tabs: Busqueda, Sondeo, Pasos, Escalar). Sugerencias semanticas aparecen mientras el agente teclea.

Screenshot

Pipeline de Documentos

Vista del experto: PDF subido → chunks generados → embeddings → revisar/editar/fusionar. Estado por seccion: pendiente, listo, requiere revision.

Screenshot

Dashboard del Gerente

KPIs del equipo: tiempo promedio de resolucion, tasa de escalacion, NPS implicito (% de feedback positivo), top 5 problemas recurrentes. Bricolage Grotesque para numeros grandes, Syne Mono para codigos de ticket.

Screenshot

Arbol de Diagnostico Interactivo

El agente recorre nodos: pregunta → respuesta del cliente → siguiente nodo. Cada nodo registra cuantas veces se uso y cual respuesta lleva al cierre exitoso.

Stack

Detalles Tecnicos

ComponenteTecnologia
FrontendReact 18 + TypeScript + Vite (alias @/ → frontend/src/)
BackendPython 3 + Flask + Flask-SocketIO
WebSocketeventlet (single worker, no gevent)
Base de datosPostgreSQL 16 + pgvector (HNSW indexes)
Embeddingssentence-transformers all-MiniLM-L6-v2 (dim=384, local, singleton)
ORMSin ORM — psycopg2 raw SQL con ThreadedConnectionPool (min=2, max=10)
AuthJWT 8h + timing-safe comparison + rol-based decorators
TipografiaBricolage Grotesque (display) + Syne (titulos) + DM Sans (body) + Syne Mono (code)
InfraestructuraDocker Compose 3 servicios (db / backend / frontend)
Pipeline docsDaemon: extraer_texto → chunks → embeddings → listo
StorageLocal o S3 (storage.py abstraido)
Metricas reales

Resultados

26+

Tablas en schema

906

Lineas de schema.sql

3 (secciones, soluciones, arboles)

Indices HNSW pgvector

384 (all-MiniLM-L6-v2)

Dimension de embeddings

4 (agente / experto / gerente / admin)

Roles con vista propia

001-015

Migraciones aplicadas

$0 (modelo local)

Costo de inferencia por query

¿Tu equipo de soporte pierde 20 min buscando la solucion en cada ticket?

Construimos sistemas con busqueda semantica, arboles de diagnostico y workflow de escalacion. Sin pagar OpenAI por embeddings.