Saltar a contenido

← Volver al índice | Arquitectura IA | Modelo de Datos | Bancos de Datos Animales

Gobernanza de Datasets e Innovación IA

Tipo: Investigación — Propuesta Técnica
Audiencia: Equipo de desarrollo, dirección técnica, responsables de departamento
Fecha: 20 de marzo de 2026
Relacionado con: Arquitectura IA | Análisis LLM Departamental | Modelo de Datos | Bancos de Datos Animales


1. Revisión de la Innovación IA — Estado Actualizado

1.1 Stack IA Actualizado (Post-Investigación)

La investigación departamental ha producido una migración significativa del stack genérico inicial a un stack especializado por departamento:

Capa Stack Inicial (doc original) Stack Propuesto (actual) Mejora
VLM General (genérico) Qwen2.5-VL 7B Stack departamental especializado
VLM Premium InternVL2.5 78B (servidor) Nivel GPT-4o
Texto / Oceánico Llama 3.1 8B OceanGPT + Llama 3.1 Conocimiento oceánico nativo
Detección objetos YOLOv11 fine-tuned Tiempo real en vídeo
Segmentación U-Net + Mask R-CNN Otolitos y patologías
Embeddings CLIP ViT-L/14 CLIP ViT-L/14 fine-tuned Especializado fauna marina
Edge AI TFLite genérico YOLOv11 TFLite Detección de especies on-device
Foto-ID Happywhale / MYDAS Cetáceos y tortugas
Geoespacial MariNeXt Contaminación satelital

[!IMPORTANT] El stack ha pasado de 4 modelos genéricos a 9+ modelos especializados organizados por departamento. Esto es el diferenciador clave de la plataforma.

1.2 Innovaciones Clave

  1. CAG+RAG Estratificado: Arquitectura híbrida única que combina caché de atención precalculada (latencia <500ms) con RAG dinámico para datos frescos
  2. Pipeline multi-modelo por departamento: Cada departamento tiene su propio stack de IA optimizado (ej. Pesquerías: YOLOv11 + U-Net + Qwen2.5-VL)
  3. Fine-tuning con datos propietarios del IEO: Otolitos ICES, campañas ECOMED, colecciones históricas desde 1907
  4. Soberanía total (ENS): Todo ejecuta localmente via Ollama — ningún dato sale de la infraestructura CSIC

2. Modelo de Datasets — Fuentes, Tipos y Carga Incremental

2.1 Tipología de Fuentes de Datos por Departamento

Cada departamento del COM genera datos en múltiples formatos y desde múltiples fuentes. Esta es la realidad que el sistema debe soportar:

Departamento Fuentes principales Formatos típicos Volumen estimado
Pesquerías SIRENO (Oracle), SharePoint, GSheets de campaña, fotografías de campo .xlsx, .csv, .jpg, .tiff, Oracle dump ~500 GB/año
Medio Marino Sensores CTD, estaciones de muestreo, laboratorio de plancton .cnv, .csv, .xlsx, GSheets, imágenes microscopía ~200 GB/año
Acuicultura IoT tanques (temp, O₂, pH), registros de alimentación, fotografías JSON streams, .xlsx, .csv, fotos ~100 GB/año
Geociencias Marinas Ecosondas multihaz, perfiles sísmicos, muestreos sedimento .xyz, GeoTIFF, .shp, .xlsx ~1 TB/año
Tortugas y Cetáceos Fotografías de campo (foto-ID), avistamientos, GPS trackers .jpg, .csv, GSheets, GPX ~50 GB/año
Oceanografía CTD, boyas, satélites (Copernicus), series temporales NetCDF, .csv, API REST, HDF5 ~300 GB/año
Servicios Generales Logs de sistema, métricas, configuración JSON, YAML, métricas Prometheus ~10 GB/año

2.2 Modelo de Dataset

Cada dataset es una unidad lógica de datos con identidad, versionado e historial de actividad:

erDiagram
    DATASET ||--o{ DATASET_VERSION : "tiene versiones"
    DATASET_VERSION ||--o{ CARGA_INCREMENTAL : "recibe cargas"
    CARGA_INCREMENTAL ||--o{ LOG_ACTIVIDAD : "genera logs"
    DATASET }o--|| DEPARTAMENTO : "pertenece a"
    DATASET }o--|| FUENTE_DATOS : "proviene de"
    DATASET ||--o{ DATASET_PERMISO : "controlado por"
    DATASET_PERMISO }o--|| ROL : "asignado a"

    DATASET {
        uuid id PK
        string nombre
        string descripcion
        string departamento_id FK
        string fuente_tipo
        string formato_origen
        string esquema_json
        string periodicidad
        boolean activo
        timestamp created_at
    }

    DATASET_VERSION {
        uuid id PK
        uuid dataset_id FK
        int version_num
        int registros_total
        int registros_nuevos
        int registros_modificados
        int registros_eliminados
        string hash_checksum
        timestamp fecha_carga
        string cargado_por
    }

    CARGA_INCREMENTAL {
        uuid id PK
        uuid version_id FK
        string fuente_uri
        string estado
        int filas_procesadas
        int filas_error
        float duracion_seg
        jsonb errores_detalle
        timestamp inicio
        timestamp fin
    }

    LOG_ACTIVIDAD {
        uuid id PK
        uuid carga_id FK
        string tipo_evento
        string descripcion
        string usuario
        jsonb datos_extra
        timestamp timestamp_evento
    }

2.3 Pipeline de Carga Incremental

flowchart TB
    subgraph Fuentes ["Fuentes de Datos"]
        GS["GSheets"]
        SP["SharePoint"]
        SIR["SIRENO - Oracle"]
        IOT["IoT / Sensores"]
        SAT["Copernicus / Satélite"]
        CAM["Fotografías de campo"]
    end

    subgraph Deteccion ["Detección de Cambios"]
        POLL["Polling periódico"]
        HOOK["Webhooks M365"]
        CDC["Change Data Capture"]
    end

    subgraph ETL ["Pipeline ETL"]
        DIFF["Delta Detection"]
        VAL["Validación de esquema"]
        NORM["Normalización"]
        EMB["Generación embeddings"]
    end

    subgraph Storage ["Almacenamiento"]
        PG["PostgreSQL"]
        CHROMA["ChromaDB"]
        MINIO["MinIO"]
    end

    subgraph Audit ["Auditoría"]
        VER["Versionado"]
        LOG["Log de actividad"]
        ALERT["Alertas"]
    end

    GS --> POLL
    SP --> HOOK
    SIR --> CDC
    IOT --> POLL
    SAT --> POLL
    CAM --> HOOK

    POLL --> DIFF
    HOOK --> DIFF
    CDC --> DIFF

    DIFF --> VAL --> NORM --> EMB

    EMB --> PG
    EMB --> CHROMA
    NORM --> MINIO

    VAL --> VER
    NORM --> LOG
    EMB --> ALERT

    style DIFF fill:#e74c3c,color:#fff
    style EMB fill:#9b59b6,color:#fff
    style VER fill:#2ecc71,color:#fff

2.4 Mecanismos de Detección de Cambios

Fuente Mecanismo Periodicidad Detalle
GSheets API Sheets v4 — modifiedTime Cada 15 min Compara hash SHA-256 del contenido
SharePoint Webhooks Graph API Tiempo real Suscripción a cambios en carpetas monitorizadas
SIRENO (Oracle) CDC via trigger + tabla de cambios Cada hora Inserts/updates/deletes en tablas SIRENO_%
IoT / Sensores Polling MQTT o REST Cada 5 min Buffer local + batch upload
Copernicus API CMEMS — check de nuevos productos Diario Descargas nocturnas programadas
Fotografías FileWatcher en carpeta hot-folder Tiempo real Nuevos archivos en /incoming/{departamento}/

3. Historial de Actividad y Auditoría

3.1 Eventos Registrados

Cada dataset mantiene un log inmutable de todos los eventos:

Tipo de Evento Descripción Quién lo genera
CARGA_INICIAL Primera importación del dataset Sistema / Técnico
CARGA_INCREMENTAL Actualización con datos nuevos/modificados Sistema (automático)
VALIDACION_OK El esquema y las reglas de validación pasaron Sistema
VALIDACION_ERROR Se detectaron errores en los datos entrantes Sistema → alerta a Técnico
ESQUEMA_MODIFICADO Se detectó un cambio en la estructura del archivo origen Sistema → alerta a Responsable
EMBEDDINGS_GENERADOS Los vectores se actualizaron en ChromaDB/pgvector Sistema
REVISION_MANUAL Un investigador revisó y aprobó los datos Investigador / Responsable
CORRECCION Se corrigieron datos erróneos Investigador / Técnico
ELIMINACION Se eliminaron registros (soft delete con motivo) Responsable (requiere justificación)

3.2 Retención y Trazabilidad

Aspecto Política
Retención de logs Indefinida (ENS requiere trazabilidad completa)
Retención de versiones Últimas 12 versiones activas + archivo anual en MinIO
Formato de export JSON Lines (.jsonl) para cada versión
Acceso a logs Director y Administración: completo; Responsable: su departamento; otros: solo sus acciones

4. Matriz de Gobernanza: Rol × Responsabilidad × Dataset

4.1 Modelo RACI por Tipo de Acción

Acción sobre Dataset Director Responsable de Área Científico Titular Técnico Especializado Administración/TI Colaborador Externo
Definir nuevo dataset A R C I I
Configurar fuente/esquema I A R C
Ejecutar carga inicial I A R C
Monitorizar cargas automáticas I C R A
Revisar/aprobar datos cargados R R C
Corregir datos erróneos A R R
Consultar datos (lectura) ✅ (su dpto) ✅ (su dpto) ✅ (públicos)
Exportar datos Limitado
Eliminar registros A R
Ver historial completo ✅ (su dpto)
Configurar alertas
Aprobar cambios de esquema A R C I I

Leyenda RACI: R = Responsable (ejecuta), A = Aprobador, C = Consultado, I = Informado, — = Sin acceso

4.2 Datasets Típicos por Departamento con Roles Asignados

Departamento Dataset ejemplo Fuente Formato Responsable de carga Revisor Monitor
Pesquerías Biometrías ECOMED 2025 GSheet + SharePoint .xlsx → 1 hoja/lance Técnico Responsable Administración
Pesquerías Lecturas de otolitos (SmartDots) ICES SmartDots export .csv Investigador Responsable Administración
Pesquerías Datos SIRENO (desembarcados) Oracle CDC Tablas Oracle Sistema (automático) Responsable Administración
Medio Marino Series CTD trimestrales Instrumentación CTD .cnv.csv Técnico Investigador Administración
Medio Marino Registro de plancton (EPRA) GSheet compartido .xlsx multilhoja Investigador Responsable Administración
Acuicultura Parámetros de tanques (IoT) Sensores MQTT JSON stream Sistema (automático) Técnico Administración
Acuicultura Registros de alimentación GSheet diario .xlsx Técnico Investigador Administración
Geociencias Batimetría multihaz Ecosonda .xyz, GeoTIFF Técnico Investigador Administración
Tortugas y Cetáceos Foto-ID avistamientos Cámara de campo .jpg + GSheet Investigador Responsable Administración
Oceanografía SST Copernicus API CMEMS NetCDF Sistema (automático) Investigador Administración

4.3 El Problema de los Múltiples GSheets

[!WARNING] Cada departamento puede generar entre 5 y 20 GSheets con formatos heterogéneos. Sin gobernanza, esto se convierte en un caos de versiones y formatos imposible de integrar.

Estrategia propuesta:

  1. Registro obligatorio: Todo GSheet que alimente la plataforma debe registrarse como dataset con esquema definido
  2. Validación de esquema: Si un investigador cambia columnas → el sistema detecta el cambio y alerta al Responsable antes de ingestar
  3. Plantillas estandarizadas: Crear plantillas GSheet por tipo de dato (biometrías, avistamientos, parámetros, etc.) con cabeceras fijas
  4. Modo "sandbox": Las cargas de GSheets nuevos o modificados van a una tabla temporal hasta que un Responsable las apruebe
  5. Versionado automático: Cada snapshot del GSheet se archiva como versión en MinIO

5. Consistencia con el Frontend (UI Actual)

5.1 Cambios a Reflejar en Documentación

La UI del frontend ahora implementa un modelo que debe ser consistente con la documentación técnica:

Elemento Documentación anterior Estado actual (UI) Acción
Roles 4 (Admin, Responsable, Investigador, Colaborador) 6 (Director, Responsable, Científico Titular, Técnico, Administración, Colaborador) Actualizar todos los docs
Departamentos 6 genéricos 7 reales del COM (Pesquerías, Medio Marino, Acuicultura, Geociencias, Tortugas y Cetáceos, Oceanografía, Servicios Generales) Actualizar
Modelo IA Qwen2.5-VL 7B como base + stack departamental Qwen2.5-VL 7B como base + stack departamental ✅ Sincronizado
Backend Quarkus 3.20 LTS + Dapr Quarkus 3.20 LTS + Dapr ✅ Sincronizado

5.2 Documentos que Requieren Actualización

Documento Urgencia Cambios necesarios
arquitectura/arquitectura_ia.md ✅ Actualizado Modelos actualizados a Qwen2.5-VL, stack departamental
arquitectura/modelo_datos.md Alta Añadir entidades Dataset, DatasetVersion, CargaIncremental, LogActividad
negocio/catalogo_servicios.md Media Actualizar roles y número de departamentos
negocio/fases_integracion.md Media Actualizar con 7 departamentos reales
especificacion/especificacion_web_spa.md Media Añadir selector de departamento, Dashboard por departamento
proyecto/backlog.md Baja Añadir épicas de gobernanza de datasets

6. Recomendaciones

6.1 Prioridad de Implementación

Fase Componente Esfuerzo
Fase 1 Registro de datasets + validación de esquema GSheets 2 sprints
Fase 1 Log de actividad + versionado básico 1 sprint
Fase 2 CDC para SIRENO (Oracle) + webhooks SharePoint 2 sprints
Fase 2 Dashboard de monitorización de datasets 1 sprint
Fase 3 Alertas inteligentes (cambio de esquema, anomalías) 1 sprint
Fase 3 API de gobernanza para auditores 1 sprint

6.2 Principios de Diseño

  1. Cada dato tiene dueño: Ningún dataset sin departamento y sin responsable asignado
  2. Todo cambio es trazable: Log inmutable con quién, cuándo, qué, desde dónde
  3. Validar antes de ingestar: Las cargas con errores se rechazan con informe, nunca contaminan producción
  4. El Técnico carga, el Responsable aprueba: Separación de responsabilidades entre ejecución y aprobación
  5. Soberanía de datos: Todo procesamiento en infraestructura CSIC, cumplimiento ENS

7. Consultas IA Compartidas — El Diferenciador

[!IMPORTANT] Esta funcionalidad es el plato fuerte de la plataforma. El IEO ya tiene métricas (PowerBI, Excel). Lo que no tiene es un motor de IA que responde preguntas en lenguaje natural con datos reales citados y que permite guardar, compartir y reutilizar esas consultas.

7.1 Modelo de Consulta IA

erDiagram
    CONSULTA_IA ||--o{ EJECUCION : "ha sido ejecutada"
    CONSULTA_IA }o--|| USUARIO : "creada por"
    CONSULTA_IA }o--o| DEPARTAMENTO : "pertenece a"
    EJECUCION ||--|| RESPUESTA_IA : "produce"

    CONSULTA_IA {
        uuid id PK
        string query
        string descripcion
        string visibilidad
        string departamento
        string creador
        jsonb etiquetas
        int ejecutada
        timestamp created_at
    }

    EJECUCION {
        uuid id PK
        uuid consulta_id FK
        string usuario
        float confianza
        string modelo_utilizado
        int tiempo_ms
        int registros
        timestamp ejecutada_en
    }

    RESPUESTA_IA {
        uuid id PK
        uuid ejecucion_id FK
        text resumen
        jsonb fuentes
        jsonb datos_estructurados
    }

7.2 Niveles de Visibilidad (tipo Jira)

Nivel Quién ve Quién crea Ejemplo
Personal Solo el creador Cualquier rol con acceso a Búsqueda "Mis muestras pendientes de confirmar esta semana"
Departamento Todos los miembros del departamento Investigador, Técnico, Responsable "Biometrías del último lance ECOMED"
Público IEO Todo el centro (cross-departamental) Responsable, Director "Correlación SST vs abundancia de boquerón"

7.3 Ejemplos de Consultas por Departamento

Departamento Consulta ejemplo Modelo utilizado Confianza Fuentes
Pesquerías Otolitos de sardina Mediterráneo 2015-2024 Qwen2.5-VL + CAG 94% ECOMED, SIRENO, Colección Otolitos
Tortugas Especies avistadas Estrecho Gibraltar 2025 Qwen2.5-VL + MYDAS 97% CIRCE-IEO, Happywhale, GSheet campo
Oceanografía Correlación SST vs boquerón OceanGPT + Qwen2.5-VL 88% CTD, SIRENO, Copernicus
Geociencias Cartografía batimétrica sin procesar CAG + listado 92% SharePoint GEMAR, Base campañas
Acuicultura Crecimiento dorada vs lubina Q1 2025 CAG + series temporales 93% IoT, GSheet alimentación

7.4 Funcionalidades de Compartir

  • Guardar consulta: Cualquier búsqueda puede guardarse con descripción y etiquetas
  • Cambiar visibilidad: Personal → Departamento → Público (escalonamiento)
  • Plantillas por departamento: Queries sugeridas según la temática del departamento activo
  • Historial de ejecuciones: Cuántas veces se ha ejecutado, quién, cuándo, resultados
  • Re-ejecutar: El mismo query sobre datos actualizados (los resultados evolucionan con el dataset)

Documentos Relacionados

Nivel Documento Descripción
Investigación Análisis LLM Departamental Modelos IA por departamento, datasets públicos, tests
Investigación Análisis Tecnológico CAG+RAG, M365, ENS, evaluación
Investigación Bancos de Datos Animales Fuentes internacionales, APIs, datasets de imágenes, almacenamiento
Arquitectura Arquitectura IA Pipeline CAG+RAG, modelos, edge AI
Arquitectura Modelo de Datos Schema PostgreSQL, ChromaDB, MinIO
Negocio Catálogo de Servicios Servicios ofrecidos al IEO