Realizado

Automatización N8n para Sincronización de Notas con Rag en Supabase Cliente enterprise

Publicado em 02 de Março de 2026 dias na TI e Programação

Sobre este projeto

Aberto

Necesito desarrollar una automatización atómica en n8n cuya función sea sincronizar un repositorio de notas (Cerebro Digital) con un sistema RAG basado en Supabase (PostgreSQL + pgvector).
La automatización debe detectar cambios en una carpeta (local o en servicio en la nube configurable), identificar nuevos archivos, archivos modificados y archivos eliminados, y actualizar el RAG en consecuencia.
Y aplicar estas reglas de exclusión antes de indexar:
excluir si nombre de fichero empieza por _
Por ejemplo si el fichero se llama _loquesea no se indexa en Nexus, se deja tal cual, ni se lee.


Excluir si contiene etiqueta #privado
El sistema debe permitir sincronización incremental o total.
La solución debe priorizar:
Robustez
Idempotencia
Trazabilidad
Bajo acoplamiento
Capacidad de reindexado forzado
Integración con el resto de automatizaciones previas de Nexus
Valorar si fiarnos del nodo watch puro de n8n o mejor un cron que vigile fecha modificación que es lo más rápido. Si hay cambios, pasamos a comprobar su hash en la subida integral. En la completa no hace falta comprobación, solo cálculo hash

Alcance funcional
1. Vigilancia de carpeta (configurable)
Debe existir un nodo o módulo que:
Vigile una carpeta raíz y todas sus subcarpetas
Detecte:
Archivos nuevos
Archivos modificados
Archivos eliminados
Sea configurable para:
Carpeta local en VPS
Servicio en la nube (ej: carpeta sincronizada)
La ruta raíz debe ser variable configurable por entorno.

2. Tabla de control de ficheros en Supabase
Debe crearse una tabla de control con al menos los siguientes campos:
id (uuid)
ruta (unique)
nombre
extensión
tamaño_bytes
mtime
hash_contenido (SHA256)
estado (active | deleted)
tipo_nota (una de las 7 notas tipo)
carpeta_raiz
actualizado_en
sync_id (para control de barrido)
El hash de integridad será utilizado para:
Detectar modificaciones reales
Evitar duplicados
Evitar reprocesamientos innecesarios
3. Clasificación automática por tipo de nota
Cada nota debe clasificarse automáticamente en una de las 7 notas tipo según la carpeta donde se encuentre.
Ejemplo:
/Diario/ → tipo_nota = Diario
/ModelosMentales/ → tipo_nota = ModelosMentales
etc.
Esta lógica debe ser determinista y configurable si fuera necesario.
4. Sincronización incremental (modo normal)
En modo incremental:
Solo se procesarán:
Archivos nuevos
Archivos cuyo hash haya cambiado
Archivos eliminados
No deben recalcularse embeddings si no hay cambios reales
Debe mantenerse coherencia entre:
control_ficheros
tabla documentos del RAG
5. Sincronización total (modo full)
Debe existir un modo de ejecución forzada que:
Ignore el estado previo
Reprocese todos los archivos
Regenerar fragmentos y embeddings completos
Este modo puede activarse:
Manualmente
Por variable de entorno
Por parámetro de ejecución

6. Inserción en el RAG
Cada documento deberá:
Fragmentarse (chunking configurable)
Insertarse en tabla vectorial con:
Contenido del fragmento
Embedding
Metadatos (JSONB)
Metadatos mínimos requeridos:
ruta
nombre
tipo_nota
carpeta_raiz
fecha_actualizacion
hash_contenido

7. Manejo de borrados
Si un archivo desaparece del sistema:
Debe marcarse como deleted en control_ficheros
Deben eliminarse o marcarse como deleted sus fragmentos en el RAG

8. Registro de sincronizaciones
Debe existir tabla sync_log con:
sync_id
modo (incremental | full)
fecha_inicio
fecha_fin
nuevos
modificados
eliminados
errores
resumen

1) Tabla vectorial: documents
Respecto de la anterior configuración, creo que sería necesario añadir un campo note_type text para marcar como diario, modelosmentales, proyectos… en vez de tener que usar extracción de datos de la ruta por cada nota que saquemos.

Create table if not exists documents (
  id bigserial primary key,          -- Identidad del chunk (idempotencia / reindex)
  vault text not null default 'default',
  source_path text not null,            -- ruta completa dentro del vault
  note_title text,                           -- opcional (del filename o primer heading)
  chunk_index int not null,              -- 0..N estable para esa nota
  content_hash text not null,            -- sha256(content) (útil para detectar cambios)
  embedding_model text not null,        -- ej "text-embedding-3-small"

  -- Datos principales
  content text not null,
  metadata jsonb not null default '{}'::jsonb,
  embedding vector(1536),                -- ajusta dimensión si cambia el modelo

  -- Auditoría
  created_at timestamptz not null default now(),
  updated_at timestamptz not null default now(),
  indexed_at timestamptz not null default now()
);

-- Unicidad: un chunk por nota+índice+modelo (para upsert sin duplicar)
create unique index if not exists documents_unique_chunk
on documents (vault, source_path, chunk_index, embedding_model);

-- Índice para filtros por metadata (tipo_nota, carpeta, tags, etc.)
Create index if not exists documents_metadata_gin
on documents using gin (metadata);

Categoria TI e Programação
Subcategoria Programação
Qual é o alcance do projeto? Criar um novo site personalizado

Prazo de Entrega: Não estabelecido

Habilidades necessárias

Outro projetos publicados por M.