Plataforma ERP que integra DeepSeek V4 para generar resúmenes ejecutivos automáticos y un asistente conversacional (RAG) que responde preguntas sobre el historial de cada edificio. De 30 minutos de trabajo manual a 10 segundos con un clic.
El sistema va mucho más allá de un simple chatbot. La IA está integrada en el núcleo operativo del ERP.
DeepSeek analiza todas las notas técnicas y reportes de trabajo de los últimos 6 meses y genera un informe estructurado: panorama general, problemas detectados, trabajo realizado y recomendaciones.
Un chat por edificio que responde preguntas en lenguaje natural ("¿se hizo algo con los candados?") citando los registros reales del historial. Combina búsqueda vectorial sobre ChromaDB con generación mediante DeepSeek.
El embedder liviano por sí solo fallaba en coincidencias literales. La recuperación combina similitud semántica con coincidencia de palabras ponderada por IDF, de forma genérica: cualquier término mencionado textualmente sube en el ranking, no una lista fija de palabras.
Cada vez que un técnico crea una nota o reporte, una señal de Django agenda automáticamente la regeneración del resumen mediante Celery. El sistema siempre está actualizado sin intervención humana.
Un mecanismo de debounce por base de datos evita llamadas redundantes a la API cuando se generan múltiples notas en una misma inspección. 5 stickers en 30 segundos = 1 sola llamada.
Modelo Flash para resúmenes rápidos y económicos (90% de los edificios). Modelo Pro con razonamiento profundo para análisis que requieren identificar patrones y problemas recurrentes.
El resumen IA se expone en tres canales: endpoint de la API para integraciones, widget embebido en la ficha del edificio, y página dedicada con renderizado Markdown en tiempo real.
Panel exclusivo para staff que muestra el saldo disponible de DeepSeek en tiempo real, disponibilidad del servicio y permite monitorear el costo operativo de la IA.
El impacto de integrar IA en el flujo de trabajo de mantenimiento de edificios.
| Indicador | Antes | Después | Impacto |
|---|---|---|---|
| Tiempo por informe ejecutivo | 30 minutos (redacción manual) | 10 segundos | −99.4% |
| Cobertura de edificios con informe | Solo edificios prioritarios (~15%) | 91% de edificios abonados | +506% |
| Disponibilidad de informes | Solo cuando un supervisor los preparaba | 24/7, actualizados automáticamente | Permanente |
| Consistencia de formato | Variable según el autor | 100% estandarizado | Garantizada |
| Costo operativo mensual IA | — | ~USD 15 (~400 regeneraciones) | ROI 5:1 |
| Llamadas a API evitadas (debounce) | — | ~80% de reducción | Optimizado |
Indicadores cuantitativos del impacto operativo y económico de la plataforma.
| KPI | Valor | Contexto |
|---|---|---|
| Cobertura de resúmenes IA | 91% | 273 de 300 edificios abonados con resumen generado |
| ROI estimado | 5:1 | Cada USD 1 invertido en API ahorra USD 5 en horas de supervisión |
| Edificios gestionados | 300+ | Entre abonados y no abonados |
| Tickets procesados / año | 1.000+ | Tickets de servicio con tracking de tiempo real |
| Reportes de trabajo / año | 2.500+ | Con facturación integrada y fotos |
| Disponibilidad del servicio IA | 99.7% | Medido sobre ventanas de 30 días |
| Documentos indexados en ChromaDB | 365.000+ | Notas técnicas (con comentarios) + informes de trabajo |
| Recuperación híbrida vs. solo semántica | Puesto 49–86 → top 8 | Registros con coincidencia literal que antes quedaban fuera de contexto |
El corazón de la integración con IA: señales Django, debounce, llamada directa a DeepSeek y recuperación híbrida para el chat RAG.
# ri/stickers/signals.py — Señal que dispara la regeneración automática from django.db.models.signals import post_save from django.dispatch import receiver from .models import Stickers from ri.buildings.models import AISummaryDebounce from ri.buildings.tasks import generate_ai_summary_for_building VENTANA_DEBOUNCE = 30 # segundos @receiver(post_save, sender=Stickers) def agendar_resumen_ia_al_crear_sticker(sender, instance, **kwargs): # Solo si el sticker tiene edificio y no está removido if not instance.building_id or instance.removed: return # Debounce: evita múltiples llamadas en ráfaga if AISummaryDebounce.should_schedule( instance.building_id, VENTANA_DEBOUNCE ): generate_ai_summary_for_building.apply_async( args=[instance.building_id], countdown=VENTANA_DEBOUNCE, )
# ri/core/ai.py — Llamada directa a DeepSeek sin SDK externo def invocar_api_deepseek(prompt, modelo='deepseek-v4-flash', max_palabras=200): config = Configuracion.get_solo() cuerpo = { "model": modelo, "messages": [ {"role": "system", "content": "Sos un asistente experto en mantenimiento de edificios."}, {"role": "user", "content": prompt}, ], "max_tokens": min(int(max_palabras * 3) + 500, 384000), "temperature": 0.3, } if 'pro' in modelo: cuerpo["reasoning_effort"] = "high" respuesta = requests.post( f"{config.deepseek_base_url}/chat/completions", headers={"Authorization": f"Bearer {config.deepseek_api_key}"}, json=cuerpo, timeout=60, ) respuesta.raise_for_status() return _limpiar_salida(respuesta.json()["choices"][0]["message"]["content"])
# ri/core/chroma_client.py — Recuperación híbrida (semántica + léxica) def query_edificio(building_id, embedding, n=8, pregunta=None, lexical_weight=0.5): # Se traen TODOS los docs del edificio (recall exacto, sin HNSW) query_terms = content_terms(pregunta) # sin acentos/stopwords, singular for i, doc in enumerate(docs): sim = coseno(embedding, embs[i]) # similitud semántica matched = query_terms & doc_terms[i] # coincidencias literales # términos raros (IDF alto) pesan más lexical = sum(idf(t) for t in matched) / idf_total if matched else 0.0 combined = sim + lexical_weight * lexical # ranking híbrido # Un doc que menciona textualmente lo buscado sube aunque # el embedder no lo capte. Genérico: sirve para cualquier término. return mejores_n(scored, n)
Cada pieza fue elegida con un propósito específico de escalabilidad, costo y mantenibilidad.
Diagramas e infografías que ilustran la arquitectura y el flujo de la solución.
Flujo completo: señal Django → debounce → Celery → DeepSeek API → PostgreSQL → API REST + HTML.
Panel de control con métricas clave: edificios gestionados, tickets activos, resúmenes IA generados.
Infografía comparativa: 30 minutos de trabajo manual → 10 segundos con un clic.
Este sistema está en producción gestionando el mantenimiento de más de 300 edificios. La integración con IA es solo una de sus capacidades.
Solicitar más información