Inteligencia Artificial + ERP

Mantenimiento de edificios potenciado con IA

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.

300+
Edificios gestionados
91%
Cobertura IA
5:1
ROI estimado
99.4%
Reducción de tiempo

¿Qué funcionalidades de IA incluye?

El sistema va mucho más allá de un simple chatbot. La IA está integrada en el núcleo operativo del ERP.

Resúmenes ejecutivos automáticos

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.

Asistente conversacional (RAG)

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.

Búsqueda híbrida semántica + léxica

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.

Actualización en tiempo real

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.

Control de ráfagas inteligente

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.

Dos modos de razonamiento

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.

API REST + Widget + Página dedicada

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.

Dashboard de estado IA

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.

Antes vs Después

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

Métricas clave

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

Arquitectura técnica

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)

Stack tecnológico

Cada pieza fue elegida con un propósito específico de escalabilidad, costo y mantenibilidad.

Django 1.9 + DRF 3.3Framework backend robusto con ORM maduro y autenticación integrada
PostgreSQL 9.3Base de datos relacional con soporte geoespacial y SSL
Celery 4.1 + RabbitMQTareas asíncronas para no bloquear requests HTTP con llamadas IA
DeepSeek V4 (Flash + Pro)LLM con 1M tokens de contexto, compatible con API OpenAI
ChromaDB 0.5Base vectorial del chat RAG, filtrable por edificio (REST API v2)
sentence-transformersEmbeddings multilingües (MiniLM) en un microservicio FastAPI aislado
Amazon S3Almacenamiento de fotos de inspecciones y documentos adjuntos
Firebase Cloud MessagingNotificaciones push a la app móvil de los técnicos
Docker + docker-compose7 servicios: db, rabbitmq, django, celery, celery-beat, chromadb, embedder
Sentry (raven)Monitoreo de errores en producción en tiempo real

¿Querés conocer más sobre este proyecto?

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