docs(rag): close lifecycle rollout

This commit is contained in:
Paco POR-CORREO 2026-09-13 21:14:40 +02:00
parent 73388cc387
commit 270f693587
6 changed files with 105 additions and 11 deletions

1
.gitignore vendored
View file

@ -7,6 +7,7 @@ dist/
.env.*
!.env.example
llaves
backups/
npm-debug.log*
# Local agent caches and tooling artifacts

View file

@ -2,9 +2,9 @@
**Proyecto:** Workspace de tools IA para empresas
**Modulo:** RAG
**Ultima actualizacion:** 2026-09-11
**Ultima actualizacion:** 2026-09-13
**Ultima modificacion por:** Subagente Implementacion ciclo de vida del conocimiento
**Estado:** Punto 2 desplegado; pendiente de preparar PostgreSQL, migrar el corpus y validar en produccion
**Estado:** Punto 2 desplegado, migrado y validado en produccion
Esta guia explica como descubrir y consumir la API. El contrato tecnico completo y canonico se publica en OpenAPI 3.1.1; este documento prioriza el camino rapido, las decisiones de uso y los ejemplos habituales.

View file

@ -4,7 +4,7 @@
**Modulo:** RAG
**Ultima actualizacion:** 2026-09-08
**Ultima modificacion por:** Agente RAG 2
**Estado:** Implementado y desplegado; pendiente de preparar PostgreSQL y ejecutar la migracion legacy
**Estado:** Punto 2 implementado, migrado y validado en produccion; punto 3 OCR pendiente
## Resultado esperado

View file

@ -2,9 +2,9 @@
**Proyecto:** Workspace de tools IA para empresas
**Modulo:** RAG
**Ultima actualizacion:** 2026-09-11
**Ultima actualizacion:** 2026-09-13
**Ultima modificacion por:** Subagente Implementacion ciclo de vida del conocimiento
**Estado:** V1 desplegada en VPS2; ciclo de vida desplegado, pendiente de configurar PostgreSQL y migrar el corpus
**Estado:** V1 desplegada en VPS2; ciclo de vida configurado, migrado y validado en produccion
---

View file

@ -10,6 +10,41 @@
## Registro de sesion
### 2026-09-13 - Agente RAG 2 - Propuesta de backups y persistencia
**Modelo:** gpt-5.6-luna
**Session ID OpenCode:** `ses_29bdbd003ffeLrLjUlFgnp08Y7`
**Directorio:** `/home/pancho/Documentos/Empresa/Desarrollo/IA/RAG`
**Trabajo realizado:**
- Auditado el almacenamiento actual de documentos, Qdrant, PostgreSQL y uploads.
- Confirmado que los uploads del endpoint `/ingest/upload` son temporales y se eliminan despues del procesamiento.
- Guardada en `PENDIENTES_RAG.md` la propuesta de persistencia de originales y backups de PostgreSQL/Qdrant.
- Definido un backup operativo inmediato antes de ejecutar la migracion del lifecycle.
**Estado final:**
- Propuesta completa diferida para implementacion posterior.
- Backup rapido de `db_rag` completado como TAR portable y verificado con PostgreSQL 17.10.
- Snapshots de `rag_chunks` y `rag_eval_logs` descargados y verificados localmente.
- `npm run migrate:lifecycle` ejecutado correctamente en produccion.
- Esquema verificado: registro de migracion, ocho tablas, indices y triggers presentes.
- `/health` sigue operativo con enforcement desactivado.
- Dry-run legacy ejecutado: 22.605 puntos, 7 fuentes y `blockedReasons: []`.
- Pendiente ejecutar la migracion controlada del corpus legacy.
**Archivos modificados:**
- `RAG/docs/PENDIENTES_RAG.md`
- `RAG/.gitignore`
- `RAG/backups/20260913-184344/postgres/db_rag.tar`
- `RAG/backups/20260913-184344/qdrant/rag_chunks.snapshot`
- `RAG/backups/20260913-184344/qdrant/rag_eval_logs.snapshot`
- `RAG/backups/20260913-184344/checksums.sha256`
- `RAG/docs/HISTORIAL_SESIONES.md`
---
## Registro de sesion
### 2026-09-11 - Agente RAG 2 - Preparacion PostgreSQL
**Modelo:** gpt-5.6-luna
@ -282,3 +317,38 @@ Completar los 4 bloqueos del sdd-verify y cerrar la validacion local del punto 2
- Implementacion local del punto 2 verificada de forma independiente: PASS local.
- No se hizo commit, push, deploy ni lectura de `.env`.
- Pendiente: commit/push, deploy con enforcement desactivado, migracion legacy y validacion en produccion antes de cerrar el punto 2.
---
### 2026-09-13 - Agente RAG 2
**Modelo:** openai/gpt-5.6-luna
**Session ID OpenCode:** `ses_29bdbd003ffeLrLjUlFgnp08Y7`
**Directorio:** `/home/pancho/Documentos/Empresa/Desarrollo/IA`
**Rol asumido:**
Continuidad operativa y evolutiva del modulo RAG.
**Trabajo realizado:**
- Creado y conservado un snapshot Qdrant remoto de `rag_chunks` antes de la migracion, con checksum `a55b13d3b6b791e9b148f87491b9b2788ce5797ee997a9f6be2a6d424eb92302`.
- Ejecutada la ventana de mantenimiento con escrituras desactivadas y `maintenance=true`.
- Aplicada la migracion legacy con lote `17f05cae-c5a7-49a5-b3ad-729958e1a342`.
- Catalogadas 7 fuentes y 22.605 puntos; las siete versiones quedaron activas y los recuentos esperados/verificados coinciden.
- Activado `KNOWLEDGE_LIFECYCLE_ENFORCED=true`, validado retrieval con catalogo y reactivadas las escrituras.
**Validacion en produccion:**
- `/health`: HTTP 200, PostgreSQL, Qdrant y reconciliador operativos.
- Reconciliador: `inconsistentSources=[]`, `invariantViolations=[]` y cero versiones huerfanas recuperadas/fallidas.
- Retrieval FacturaTech y GStreamer: HTTP 200, resultados limitados a sus fuentes.
- Estado final: `maintenance=false`, `INGEST_WRITES_ENABLED=true`, enforcement activo.
**Estado final:**
- Punto 2 del ciclo de vida cerrado y validado en produccion.
- Punto 3 OCR queda habilitado para la siguiente fase.
**Archivos modificados:**
- `docs/PENDIENTES_RAG.md`
- `docs/API_RAG.md`
- `docs/DESPLIEGUE_EASYPANEL.md`
- `docs/CONTRATO_CICLO_VIDA_Y_OCR.md`
- `docs/HISTORIAL_SESIONES.md`

View file

@ -1,6 +1,6 @@
# Pendientes priorizados del RAG
**Ultima actualizacion:** 2026-09-11
**Ultima actualizacion:** 2026-09-13
**Responsable de la priorizacion:** Usuario
**Estado:** Activo
@ -17,7 +17,7 @@ Este documento es la fuente canonica del orden de trabajo pendiente del modulo R
## 2. Ciclo de vida del conocimiento
**Estado:** Implementado y desplegado; bloqueado por la preparacion operativa de PostgreSQL y la migracion controlada del corpus.
**Estado:** Completado y validado en produccion el 2026-09-13.
El contrato de implementacion esta cerrado en [`CONTRATO_CICLO_VIDA_Y_OCR.md`](./CONTRATO_CICLO_VIDA_Y_OCR.md). Antes de ejecutar las pruebas de migracion o activar el ciclo de vida hay que completar este prerrequisito:
@ -26,11 +26,21 @@ El contrato de implementacion esta cerrado en [`CONTRATO_CICLO_VIDA_Y_OCR.md`](.
- Confirmar que existe la instancia y la base de datos que usara RAG en EasyPanel.
- Obtener el hostname interno, puerto, nombre de base de datos, usuario y requisitos SSL.
- Configurar `POSTGRES_URL`, `POSTGRES_SSL` y `LIFECYCLE_ADMIN_TOKEN` en el servicio RAG.
- Arrancar las migraciones del esquema y verificar las tablas, permisos y `SELECT 1` desde RAG.
- Revisar que no falten variables, red interna, credenciales, almacenamiento persistente o permisos de migracion. La configuracion de backups queda diferida al paquete del punto 7.
- Ejecutar las migraciones del esquema y verificar las tablas, permisos y `SELECT 1` desde RAG. Completado el 2026-09-13.
- Revisar que no falten variables, red interna, credenciales, almacenamiento persistente o permisos de migracion. Completado el 2026-09-13; la configuracion completa de backups queda diferida al paquete del punto 7.
- Inventariar las fuentes actuales de Qdrant y preparar su carga en el catalogo PostgreSQL.
No ejecutar la migracion legacy, activar enforcement ni iniciar OCR hasta cerrar este prerrequisito.
### Resultado del dry-run legacy
- Ejecutado el 2026-09-13 sin `--apply`.
- Detectados 22.605 puntos en 7 fuentes de `rag_chunks`.
- `ok: true`; no se encontraron `blockedReasons`.
- Ventana de mantenimiento ejecutada con `INGEST_WRITES_ENABLED=false` y `rag_system_state.maintenance=true`.
- Migracion aplicada con el lote `17f05cae-c5a7-49a5-b3ad-729958e1a342` usando snapshot Qdrant remoto con checksum `a55b13d3b6b791e9b148f87491b9b2788ce5797ee997a9f6be2a6d424eb92302`.
- Catalogadas 7 fuentes y 22.605 puntos; todas las versiones quedaron `active` y sus recuentos PostgreSQL/Qdrant coinciden.
- `KNOWLEDGE_LIFECYCLE_ENFORCED=true`, `INGEST_WRITES_ENABLED=true`, `maintenance=false` y retrieval validado en produccion.
El punto 2 queda cerrado. El punto 3, OCR integrado en la ingesta, puede comenzar respetando el contrato secuencial.
- Crear un catalogo de fuentes y versiones ingeridas.
- Saber que documento esta vigente, obsoleto, reemplazado o pendiente de reingesta.
@ -50,7 +60,7 @@ No ejecutar la migracion legacy, activar enforcement ni iniciar OCR hasta cerrar
## 3. OCR integrado en la ingesta
**Diseño:** Contrato de implementacion cerrado en [`CONTRATO_CICLO_VIDA_Y_OCR.md`](./CONTRATO_CICLO_VIDA_Y_OCR.md). Su ejecucion queda bloqueada hasta completar el punto 2.
**Diseño:** Contrato de implementacion cerrado en [`CONTRATO_CICLO_VIDA_Y_OCR.md`](./CONTRATO_CICLO_VIDA_Y_OCR.md). El punto 2 ya fue validado en produccion; su ejecucion queda habilitada.
- Detectar PDFs con capturas, imagenes o una capa textual insuficiente.
- Ejecutar OCR automaticamente o bloquear la ingesta para revision cuando no pueda garantizarse la cobertura.
@ -95,12 +105,25 @@ No ejecutar la migracion legacy, activar enforcement ni iniciar OCR hasta cerrar
**Prioridad:** Diferida, sin urgencia; no bloquea la preparacion actual de PostgreSQL. Sin programacion automatica.
**Estado de la propuesta:** Diseno guardado para completar e implementar mas adelante.
- Configurar el destino de backups y diagnosticar el error observado al crearlo en EasyPanel.
- Preparar copias manuales de la nueva base del RAG y snapshots de Qdrant; `db_gestion_flujos_n8n` es ajena a este alcance.
- Definir una ventana sin escrituras para obtener copias coherentes de ambos almacenes.
- Documentar y comprobar la restauracion, incluyendo la recuperacion de los permisos necesarios.
- Este paquete difiere la solucion habitual de backups; el snapshot previo exigido por la migracion legacy sigue formando parte de esa operacion.
#### Diseno propuesto
- Mantener los datos primarios separados: PostgreSQL conserva el catalogo, Qdrant conserva chunks y embeddings, y un volumen privado del RAG conserva originales y artefactos.
- Montar un volumen `rag-ingestions` en `/data/ingestions` para conservar originales, manifiestos y futuros artefactos OCR por version.
- Cambiar la ingesta para guardar el original antes de procesarlo; el flujo actual usa `/tmp` y elimina los uploads al terminar.
- Respaldar PostgreSQL con un dump portable de `db_rag` y, cuando quede configurado, con Database Backups de EasyPanel hacia un destino S3-compatible.
- Respaldar Qdrant con snapshot de la coleccion o del almacenamiento completo, preferentemente hacia el mismo destino externo.
- Incluir los artefactos del volumen en el plan de backup y probar una restauracion completa antes de considerar portable el servicio.
- No tratar un volumen Docker del mismo VPS como backup externo: protege frente a reinicios, no frente a perdida del servidor.
- Mantener fuera de este alcance `db_gestion_flujos_n8n`.
## 8. Sistema de evaluacion
- Revisar periodicamente los logs de evaluacion almacenados en Qdrant.